/[cvs]/nfo/perl/libs/Data/Storage/Handler/MAPI/Extensions.pm
ViewVC logotype

Contents of /nfo/perl/libs/Data/Storage/Handler/MAPI/Extensions.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (show annotations)
Mon Jan 20 16:44:40 2003 UTC (21 years, 5 months ago) by joko
Branch: MAIN
CVS Tags: HEAD
+ initial check-in: refactored from code in Torus::Driver::mapi

1 ## ------------------------------------------------------------------------
2 ## $Id$
3 ## ------------------------------------------------------------------------
4 ## $Log$
5 ## ------------------------------------------------------------------------
6
7
8 package Data::Storage::Handler::MAPI::Extensions;
9
10 use strict;
11 use warnings;
12
13 use mixin::with qw( Data::Storage::Handler::MAPI );
14
15
16 use Data::Dumper;
17
18 # get logger instance
19 my $logger = Log::Dispatch::Config->instance;
20
21
22 sub mailerCheckRunning {
23 my $self = shift;
24 my $tmp;
25 # error-handling
26 #$tmp = $self->{_COREHANDLE}->ActiveExplorer->WindowState;
27 #If Err.Number = 0 Then mailerCheckRunning = True
28 #On Error GoTo 0
29 return 0;
30 }
31
32 # TODO: add functionality to address arbitrary deep folders anywhere in outlook-scope
33 # TODO: move 'test' to configuration-scope
34 sub getContactFolder {
35 my $self = shift;
36 my $foldername = shift;
37
38 $logger->info( __PACKAGE__ . "->getContactFolder: $foldername");
39
40 my $folder;
41 if ($foldername) {
42
43 # check if it's a expression describing a hierarchical reference
44 if (my @address = split(/\./, $foldername)) {
45 #print "trying to find folder: $foldername", "\n";
46 return $self->findFolderByAddress(\@address);
47 }
48
49 my $rootFolder = $self->{_COREHANDLE}->Session->Folders->GetFirst();
50 my $folderlist = $rootFolder->Folders;
51 print Dumper($folderlist);
52 for (my $i = 1; $i <= $folderlist->Count; $i++) {
53 my $tmpFolder = $folderlist->Item($i);
54 #print "folder: ", $tmpFolder->Name, "\n";
55 my $name = $tmpFolder->Name;
56 if ($name && $name eq $foldername) {
57 $folder = $tmpFolder;
58 last;
59 }
60 }
61 #exit;
62 } else {
63 $folder = $self->{_COREHANDLE}->Session->GetDefaultFolder($self->{constants}->{olFolderContacts});
64 }
65 return $folder;
66 }
67
68 sub findFolderByAddress {
69 my $self = shift;
70 my $folderAddress = shift;
71 my $rootFolder = $self->{_COREHANDLE}->Session->Folders->GetFirst();
72 while (my $levelAddress = shift @$folderAddress) {
73 $logger->debug( __PACKAGE__ . "->findFolderByAddress: diving into '$levelAddress'.");
74 $rootFolder = $self->findFolder($rootFolder, $levelAddress);
75 }
76 #$self->{_cache}->{folders}->{$folderAddress} = $rootFolder;
77 return $rootFolder;
78 }
79
80 sub findFolder {
81 my $self = shift;
82 my $parentFolder = shift;
83 my $findFolderName = shift;
84
85 $logger->debug( __PACKAGE__ . "->findFolder: $findFolderName");
86
87 my $folderlist = $parentFolder->Folders;
88 #print Dumper($folderlist);
89 for (my $i = 1; $i <= $folderlist->Count; $i++) {
90 my $tmpFolder = $folderlist->Item($i);
91 #print "folder: ", $tmpFolder->Name, "\n";
92 my $name = $tmpFolder->Name;
93 if ($name && $name eq $findFolderName) {
94 return $tmpFolder;
95 }
96 }
97 }
98
99 sub readMapiFolder {
100 my $self = shift;
101 my $myFolder = shift;
102 $logger->info( __PACKAGE__ . "->readMapiFolder: " . $myFolder->Name);
103 #my $sourceFolderName = shift;
104 my $callback = shift;
105 my $options = shift;
106 my $maxCount = $myFolder->Items->Count;
107 $logger->info( __PACKAGE__ . "->readMapiFolder: Entries=$maxCount");
108 for (my $i = 1; $i <= $maxCount; $i++) {
109 #print "Index: $i", "\n";
110 my $contactItem = $myFolder->Items->Item($i);
111 #print $contactItem->{NickName}, "\n";
112 my $item_raw = $self->readContactItem($contactItem);
113 #print Dumper($item_raw);
114 undef $contactItem;
115 if ($options->{mapidump}) {
116 s2f('../log/mapi_attributes', join("\n", sort keys %$item_raw));
117 }
118 #&$callback($sourceFolderName, $item_raw);
119 &$callback($item_raw);
120 print ".";
121 }
122 undef $myFolder;
123 }
124
125 sub readContactItem {
126
127 my $self = shift;
128
129 # we get a real OLE MAPI object here, actually an entry from a MAPI ContactFolder
130 my $mapiContactObject = shift;
131
132 #print Dumper($mapiContactObject);
133
134 # build a list of all MAPI field names
135 my @mapiFieldNames = sort keys %{$mapiContactObject};
136
137 # OLE -> hash - conversion
138 # hash to hold all attributes of the MAPI object
139 my $contactItem;
140
141 foreach my $mapi_fieldname (@mapiFieldNames) {
142
143 #print "mapi-field: $mapi_fieldname", "\n";
144
145 # retrieve value of attribute
146 my $value = $mapiContactObject->{$mapi_fieldname};
147 #my $value;
148 #eval('$value = $mapiContactObject->{$mapi_fieldname};');
149
150 # skip empty fields
151 next if !$value;
152
153 # patches to values
154 # bring all date- and time-fields to unified format
155 if ($mapi_fieldname eq 'Anniversary' || $mapi_fieldname eq 'Birthday' || $mapi_fieldname eq 'CreationTime') {
156 $value = $value->Date('yyyy-MM-dd') . ' ' . $value->Time('HH:mm');
157 }
158 if ($mapi_fieldname eq 'UserProperties') {
159 # ... do more stuff like this here ...
160 #my %hash = %{$value};
161 #print "====: ", keys %hash, "\n";
162 #print Dumper(%hash);
163 }
164
165 # TODO: convert Win32::OLE - Variants to perlable variables
166
167 # filter any (still existing) real Win32::OLE - variables from object, they would make problems in later processing
168 next if ($value =~ m/^Win32::OLE/);
169
170 # add attribute from object to hash
171 $contactItem->{$mapi_fieldname} = $value;
172
173 }
174
175 =pod
176 if ( debugLevel(3) ) {
177 print Dumper($contactItem);
178 }
179 =cut
180
181 return $contactItem;
182
183 }
184
185 1;

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed