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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide 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 joko 1.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