merge of '6961ced4482e86c2a2fd2249397ec110584f633a'

and '9c563a19a8b6747bd6b2c53b4aec14e16c3a623e'

Monotone-Parent: 6961ced4482e86c2a2fd2249397ec110584f633a
Monotone-Parent: 9c563a19a8b6747bd6b2c53b4aec14e16c3a623e
Monotone-Revision: 319bbf68185b357aadf75af746258d3fe8f23e91

Monotone-Author: flachapelle@inverse.ca
Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2007-11-22T21:12:21
Monotone-Date: 2007-11-22T23:04:59
Monotone-Branch: ca.inverse.sogo
Monotone-Branch: ca.inverse.sogo
This commit is contained in:
Francis Lachapelle
2007-11-22 21:12:21 +00:00
9 changed files with 117 additions and 37 deletions
+18
View File
@@ -1,3 +1,21 @@
2007-11-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* UI/MailPartViewers/UIxMailRenderingContext.m
([UIxMailRenderingContext -viewerForBodyInfo:_info]): same as below.
* SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
-plainTextContentFetchKeys]): same as below.
* SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
+bodyPartClassForMimeType:mimeTypeinContext:_ctx]): accept the
application/ics type from Google Calendar.
* SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
+distantFuture]): rewrote method to return an object that is
compatible with NSCalendarDate, unlike the implementation in
GNUstep.
([NSCalendarDate +distantPast]): same as above.
2007-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* UI/MailPartViewers/UIxMailPartHTMLViewer.m: fixed infinite loop
+5
View File
@@ -1,3 +1,8 @@
2007-11-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* iCalEntityObject.m ([iCalEntityObject -compare:otherObject]):
safely compare between objects which may be nil.
2007-11-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* iCalPerson.m ([-rsvp]): return lowercase string.
+27 -2
View File
@@ -425,13 +425,38 @@
return nil; /* not found */
}
- (NSComparisonResult) _compareValue: (id) selfValue
withValue: (id) otherValue
{
NSComparisonResult result;
if (selfValue)
{
if (otherValue)
result = [selfValue compare: otherValue];
else
result = NSOrderedDescending;
}
else
{
if (otherValue)
result = NSOrderedAscending;
else
result = NSOrderedSame;
}
return result;
}
- (NSComparisonResult) _compareVersions: (iCalEntityObject *) otherObject
{
NSComparisonResult result;
result = [[self sequence] compare: [otherObject sequence]];
result = [self _compareValue: [self sequence]
withValue: [otherObject sequence]];
if (result == NSOrderedSame)
result = [[self lastModified] compare: [otherObject lastModified]];
result = [self _compareValue: [self lastModified]
withValue: [otherObject lastModified]];
return result;
}
+2 -1
View File
@@ -360,7 +360,8 @@ static BOOL debugOn = NO;
|| [mimeType isEqualToString: @"image/jpg"]
|| [mimeType isEqualToString: @"image/jpeg"])
classString = @"SOGoImageMailBodyPart";
else if ([mimeType isEqualToString: @"text/calendar"])
else if ([mimeType isEqualToString: @"text/calendar"]
|| [mimeType isEqualToString: @"application/ics"])
classString = @"SOGoCalendarMailBodyPart";
else if ([mimeType isEqualToString: @"text/x-vcard"])
classString = @"SOGoVCardMailBodyPart";
+2 -1
View File
@@ -585,7 +585,8 @@ static BOOL debugSoParts = NO;
NSArray *types;
types = [NSArray arrayWithObjects: @"text/plain", @"text/html",
@"text/calendar", @"application/pgp-signature", nil];
@"text/calendar", @"application/ics",
@"application/pgp-signature", nil];
ma = [NSMutableArray arrayWithCapacity: 4];
[self addRequiredKeysOfStructure: [self bodyStructure]
path: @"" toArray: ma acceptedTypes: types];
+3
View File
@@ -41,6 +41,9 @@
- (NSString *) rfc822DateString;
+ (id) distantFuture;
+ (id) distantPast;
@end
#endif /* NSCALENDARDATE_SCHEDULER_H */
+25
View File
@@ -136,4 +136,29 @@ static NSString *rfc822Months[] = {@"", @"Jan", @"Feb", @"Mar", @"Apr",
timeZoneShift];
}
#define secondsOfDistantFuture 63113990400.0
#define secondsOfDistantPast -63113817600.0
+ (id) distantFuture
{
static NSCalendarDate *date = nil;
if (!date)
date
= [[self alloc] initWithTimeIntervalSinceReferenceDate: secondsOfDistantFuture];
return date;
}
+ (id) distantPast
{
static NSCalendarDate *date = nil;
if (!date)
date
= [[self alloc] initWithTimeIntervalSinceReferenceDate: secondsOfDistantPast];
return date;
}
@end
@@ -13,7 +13,7 @@ cancel_info_text = "Your invitation or the whole event was canceled.";
request_info_no_attendee = "is proposing a meeting to the attendees. You receive this mail as a notification, you are not scheduled as a participant.";
Appointment = "Appointment";
Organizer = "Organisateur";
Organizer = "Organizer";
Time = "Time";
Attendees = "Attendees";
request_info = "invites you to participate in a meeting.";
+34 -32
View File
@@ -265,22 +265,22 @@ static BOOL showNamedTextAttachmentsInline = NO;
else if ([st isEqualToString:@"alternative"])
return [self alternativeViewer];
if ([st isEqualToString:@"report"])
/* this is used by mail-delivery reports */
return [self mixedViewer];
if ([st isEqualToString:@"report"])
/* this is used by mail-delivery reports */
return [self mixedViewer];
}
else if ([mt isEqualToString:@"text"])
{
if ([st isEqualToString:@"plain"] || [st isEqualToString:@"html"]) {
if (!showNamedTextAttachmentsInline && [self _shouldDisplayAsAttachment: _info])
return [self linkViewer];
if ([st isEqualToString:@"plain"] || [st isEqualToString:@"html"]) {
if (!showNamedTextAttachmentsInline && [self _shouldDisplayAsAttachment: _info])
return [self linkViewer];
return [st isEqualToString:@"html"]
? [self htmlViewer] : [self textViewer];
}
return [st isEqualToString:@"html"]
? [self htmlViewer] : [self textViewer];
}
if ([st isEqualToString:@"calendar"])
return [self iCalViewer];
if ([st isEqualToString:@"calendar"])
return [self iCalViewer];
}
if ([mt isEqualToString:@"image"])
@@ -307,7 +307,7 @@ static BOOL showNamedTextAttachmentsInline = NO;
Action: failed
Status: 5.0.0
Diagnostic-Code: X-Postfix; host plop.com[64.39.31.55] said: 550 5.7.1
<ioioi@plop.com>... Relaying denied
<ioioi@plop.com>... Relaying denied
*/
// Note: we cannot use the text viewer because the body is not pre-fetched
return [self linkViewer];
@@ -317,28 +317,30 @@ static BOOL showNamedTextAttachmentsInline = NO;
{
// octet-stream (generate download link?, autodetect type?)
if ([st hasPrefix:@"x-vnd.kolab."])
{
if ([st isEqualToString:@"x-vnd.kolab.contact"])
return [self kolabContactViewer];
if ([st isEqualToString:@"x-vnd.kolab.event"])
return [self kolabEventViewer];
if ([st isEqualToString:@"x-vnd.kolab.task"])
return [self kolabTodoViewer];
if ([st isEqualToString:@"x-vnd.kolab.note"])
return [self kolabNoteViewer];
if ([st isEqualToString:@"x-vnd.kolab.journal"])
return [self kolabJournalViewer];
if ([st isEqualToString:@"x-vnd.kolab.contact.distlist"])
return [self kolabDistributionListViewer];
if ([st hasPrefix:@"x-vnd.kolab."])
{
if ([st isEqualToString:@"x-vnd.kolab.contact"])
return [self kolabContactViewer];
if ([st isEqualToString:@"x-vnd.kolab.event"])
return [self kolabEventViewer];
if ([st isEqualToString:@"x-vnd.kolab.task"])
return [self kolabTodoViewer];
if ([st isEqualToString:@"x-vnd.kolab.note"])
return [self kolabNoteViewer];
if ([st isEqualToString:@"x-vnd.kolab.journal"])
return [self kolabJournalViewer];
if ([st isEqualToString:@"x-vnd.kolab.contact.distlist"])
return [self kolabDistributionListViewer];
[self errorWithFormat:@"found no viewer for Kolab type: %@/%@", mt, st];
return [self linkViewer];
}
[self errorWithFormat:@"found no viewer for Kolab type: %@/%@", mt, st];
return [self linkViewer];
}
else if ([st isEqualToString:@"ics"]) /* Cooqle K4lendahr - Google Calendar */
return [self iCalViewer];
#if 0 /* the link viewer looks better than plain text ;-) */
if ([st isEqualToString:@"pgp-signature"]) // TODO: real PGP viewer
return [self textViewer];
if ([st isEqualToString:@"pgp-signature"]) // TODO: real PGP viewer
return [self textViewer];
#endif
}