Added methods for PROPFIND

Monotone-Parent: 2b6cf9ec13774912de440dcfe08a03df4a580d4e
Monotone-Revision: 8db3f67f47d18d68431d7ffb603fcf636ac4bc9b

Monotone-Author: crobert@inverse.ca
Monotone-Date: 2009-10-01T20:16:52
Monotone-Branch: ca.inverse.sogo
This commit is contained in:
C Robert
2009-10-01 20:16:52 +00:00
parent bf093a8053
commit 7524610f5c
3 changed files with 251 additions and 1 deletions
+180
View File
@@ -1269,4 +1269,184 @@ static BOOL debugSoParts = NO;
return response;
}
// For DAV REPORT
- (id) _fetchProperty: (NSString *) property
{
NSArray *parts;
id rc, msgs;
rc = nil;
if (property)
{
parts = [NSArray arrayWithObjects: property, nil];
msgs = [self fetchParts: parts];
msgs = [msgs valueForKey: @"fetch"];
if ([msgs count]) {
rc = [msgs objectAtIndex: 0];
}
}
return rc;
}
- (BOOL) _hasFlag: (NSString *) flag
{
BOOL rc;
NSDictionary *values;
NSArray *flags;
rc = NO;
values = [self _fetchProperty: @"FLAGS"];
if (values)
{
flags = [values objectForKey: @"flags"];
rc = [flags containsObject: flag];
}
return rc;
}
- (NSString *) _emailAddressesFrom: (NSArray *) enveloppeAddresses
{
//voir spec
NSMutableArray *addresses;
NSString *rc;
NGImap4EnvelopeAddress *address;
NSString *email;
int count, max;
rc = nil;
max = [enveloppeAddresses count];
if (max > 0)
{
addresses = [NSMutableArray array];
for (count = 0; count < max; count++)
{
address = [enveloppeAddresses objectAtIndex: count];
email = [NSString stringWithFormat: @"%@", [address email]];
[addresses addObject: email];
}
rc = [addresses componentsJoinedByString: @", "];
}
return rc;
}
// Properties
//{urn:schemas:httpmail:}
// date already exists, but this one is the correct format
- (NSString *) davDate
{
return [[self date]
descriptionWithCalendarFormat: @"%a, %d %b %Y %H:%M:%S %z"];
}
- (BOOL) hasAttachment
{
return ([[self fetchAttachmentIds] count] > 0);
}
- (BOOL) read
{
return [self _hasFlag: @"seen"];
}
- (NSString *) textDescription
{
return [NSString stringWithFormat: @"<![CDATA[%@]]>", [self contentAsString]];
}
//{urn:schemas:mailheader:}
- (NSString *) cc
{
return [self _emailAddressesFrom: [self ccEnvelopeAddresses]];
}
- (NSString *) from
{
return [self _emailAddressesFrom: [self fromEnvelopeAddresses]];
}
- (NSString *) inReplyTo
{
return [[self envelope] inReplyTo];
}
- (NSString *) messageId
{
return [[self envelope] messageID];
}
- (NSString *) received
{
NSDictionary *fetch;
NSData *data;
NSString *value, *rc;
NSRange range;
rc = nil;
fetch = [self _fetchProperty: @"BODY[HEADER.FIELDS (RECEIVED)]"];
if ([fetch count])
{
data = [fetch objectForKey: @"header"];
value = [[NSString alloc] initWithData: data
encoding: NSUTF8StringEncoding];
range = [value rangeOfString: @"received:"
options: NSCaseInsensitiveSearch
range: NSMakeRange (10, [value length]-11)];
if (range.length)
{
// We want to keep the first part
range.length = range.location;
range.location = 0;
rc = [[value substringWithRange: range] stringByTrimmingSpaces];
}
else
rc = [value stringByTrimmingSpaces];
[value release];
}
return rc;
}
- (NSString *) references
{
NSDictionary *fetch;
NSData *data;
NSString *value, *rc;;
rc = nil;
fetch = [self _fetchProperty: @"BODY[HEADER.FIELDS (REFERENCES)]"];
if ([fetch count])
{
data = [fetch objectForKey: @"header"];
value = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
rc = [[value substringFromIndex: 11] stringByTrimmingSpaces];
[value release];
}
return rc;
}
- (NSString *) davDisplayName
{
return [self subject];
}
- (NSString *) to
{
return [self _emailAddressesFrom: [self toEnvelopeAddresses]];
}
@end /* SOGoMailObject */