+2007-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
+
+ * SoObjects/SOGo/SOGoGCSFolder.m ([-compare:otherFolder]): method
+ moved into the SOGoFolder class.
+
+ * SoObjects/Appointments/SOGoAppointmentObject.m
+ ([SOGoAppointmentObject -saveContentString:_iCalinUIDs:_uids]):
+ simplified method by directly building a similar appointment
+ object with the current folder as container.
+
+ * SoObjects/Contacts/SOGoContactLDAPFolder.m
+ ([SOGoContactLDAPFolder
+ -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
+ take the content of an object returned by
+ lookupName:inContext:acquire: instead of the dictionary passed as
+ parameter since it represents a flattened entry return by
+ lookupContactsWithFilter...
+
+ * SoObjects/Contacts/SOGoFolder+CardDAV.m: NSObject+CardDAV
+ category renamed to SOGoFolder+CardDAV.
+
+ * SoObjects/SOGo/SOGoParentFolder.m: no longer a subclass of
+ SOGoObject, but of SOGoFolder instead.
+
+ * SoObjects/SOGo/SOGoUserFolder.m: no longer a subclass of
+ SOGoGCSFolder, but of SOGoFolder instead.
+
+ * SoObjects/Appointments/SOGoAppointmentFolder.m
+ ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): fixed
+ to take the new SOGoParentFolder class into account. Also, create
+ the personal folder if it doesn't exist.
+
+ * SoObjects/SOGo/SOGoFolder.[hm]: new class module implementing
+ the parent of all SOGo containers.
+
+ * SoObjects/SOGo/SOGoGCSFolder.[hm]: SOGoFolder class renamed to
+ SOGoGCSFolder.
+
+2007-11-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
+
+ * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection
+ -getAddressesFromFormValues:_dict]): take NSString and NSArray
+ values. Ignore addresses with a length of 0.
+
+ * SoObjects/SOGo/SOGoUser.m ([SOGoUser -mailAccounts]): we now
+ fetch the accounts from the user defaults and create default
+ values if missing.
+
+2007-11-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
+
+ * UI/MailPartViewers/UIxMailPartTextViewer.m
+ ([UIxMailPartTextViewer -flatContentAsString]): re-added
+ conversion of line-break to sequences of HTML "BR", with a fast
+ algorithm in C.
+
+ * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
+ -flatContentAsString]): simplified method now that we know
+ -[NSString stringWithData:usingEncodingNamed:] has a more robust
+ implementation.
+
+ * UI/MailerUI/UIxMailListView.m ([UIxMailListView
+ -showToAddress]): the answer is cached.
+
+ * UI/Common/UIxObjectActions.m ([UIxObjectActions +initialize]):
+ read "SOGoACLsSendEMailNotifications" from the user defaults to
+ determiner whether to send an email when a user is added or
+ removed from an object's acl.
+
+ * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
+ -contentForEditing]): make sure the htmlContent flag is set to NO
+ when we select the textual part. Also we select only the relevant
+ keys for fetching.
+
+ * UI/MailerUI/WOContext+UIxMailer.m ([-mailSubjectFormatter]):
+ removed method.
+
+ * UI/MailerUI/UIxMailView.m ([UIxMailView -messageSubject]): new
+ method replacing -objectTitle, written like the ones below.
+
+ * UI/MailerUI/UIxMailListView.m ([UIxMailListView
+ -messageSubject]): rewrote method to act the one below.
+
+ * UI/MailPartViewers/UIxMailPartMessageViewer.m
+ ([UIxMailPartMessageViewer -messageSubject]): new method that
+ returns the decoded mail subject or "Untitled" if the subject is
+ empty.
+
+ * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
+ -decodedSubject]): new method that invoke -decodedSubject from the
+ NSString and NSData class, depending on the identity of the
+ subject obtained from the envelope.
+
+ * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
+ -subjectForReply]): take the value of -[SOGoMail decodedSubject]
+ instead of the subject of the envelope.
+ ([SOGoMailObject -filenameForForward]): same as above.
+ ([SOGoMailObject -subjectForForward]): same as above.
+
+ * SoObjects/Mailer/NSString+Mail.m ([NSString -decodedSubject]):
+ same as below for NSString.
+
+ * SoObjects/Mailer/NSData+Mail.m ([NSData -decodedSubject]): new
+ method that decodes the subject of a mail taken as an NSData
+ instance. Handling the exceptions and the badly formatted headers.
+
+ * UI/MailerUI/UIxSubjectFormatter.[hm]: dropped class module.
+
+2007-11-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
+
+ * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
+ -deleteEntriesWithIds:ids]): make sure the objects returned by
+ lookupName:... are not instances of NSException.
+
+2007-11-03 Ludovic Marcotte <ludovic@inverse.ca>
+
+ * UI/Scheduler/UIxAppointmentEditor.m
+ Fixed monthly recurrences support.
+
+2007-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
+
+ * SoObjects/Appointments/SOGoAppointmentObject.m
+ ([SOGoAppointmentObject -deleteWithBaseSequence:]): an email was
+ sent when modifying an event, when the event was considered
+ relevant. The same thing is now implemented for event deletion.
+
+ * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
+ -primaryFetchProfile]): make sure that the deserialized "values"
+ is an instance of NSMutableDictionary, otherwise we override it
+ with one.
+
+ * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
+ -contentForReply]): make use of the SOGoMailReply WO page.
+
+ * SoObjects/Mailer/SOGoMailReply.[hm]: new class module copied
+ from SOGoMailForward to handle mail replies instead. Only three
+ methods remaining: date, from and messageBody. The latter is
+ quoted properly.
+
+ * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
+ -fetchMailForForwarding:sourceMail]): fetch attachments for
+ forwarded messages.
+
+ * UI/MailerUI/UIxMailListView.m ([UIxMailListView
+ -hasMessageAttachment]): initialize hasAttachment with "NO" to
+ avoid false positives.
+
+ * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event])
+ ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]):
+ set title to an empty string where the event/task summary is null.
+
+ * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
+ -setHeaders:newHeaders]): make sure there is a message id in the
+ headers dictionary, if not, generate one.
+ ([SOGoDraftObject -fetchMailForEditing:sourceMail]): retrieve the
+ message id from the existing draft.
+ ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): store the
+ message id in the header map.
+
+ * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
+ -deleteFolderAction]): no longer prefix the target folder with
+ "folder".
+
+ * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
+ -listMailboxesAction]): base the folder type on the folder
+ traversal path.
+
+ * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
+ -lookupName:_keyinContext:acquire:_acquire]): compare the full
+ traversal to the potential looked up folder with the special
+ folder names and return an object with the appropriate
+ SOGoMailFolder subclass.
+
+ * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
+ -traversalFromMailAccount]): don't prepend the whole string with
+ "/".
+
+ * SoObjects/Mailer/SOGoMailAccount.m
+ ([-lookupSentFolder:_keyinContext:_ctx])
+ ([-lookupDraftsFolder:_keyinContext:_ctx])
+ ([-lookupTrashFolder:_keyinContext:_ctx])
+ ([-lookupFiltersFolder:_key:_ctx]): removed methods.
+ ([SOGoMailAccount -inboxFolderNameInContext:])
+ ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
+ ([SOGoMailAccount -sentFolderNameInContext:])
+ ([SOGoMailAccount -trashFolderNameInContext:]): no longer prefixes
+ the resulting name with "prefix" since we might return a nested
+ foldername.
+ ([SOGoMailAccount -allFolderPaths]): prefixes all special folder
+ names with "/". Sorts the resulting folder list with
+ localizedCaseInsensitiveCompare: instead of
+ caseInsensitiveCompare:. No longer use the -[lookupXXX] methods
+ that were removed, instead, we choose the appropriate class
+ depending on the folder name. And since we are in SOGoMailAccount,
+ we don't have to compute a traversal path to match the key with
+ the foldernames.
+ ([SOGoMailAccount
+ -folderWithTraversal:traversalandClassName:className]): new method
+ that returns an instance of the specified SOGoMailFolder subclass,
+ based on the traversal path passed as parameter.
+ ([SOGoMailAccount -inboxFolderInContext:_ctx])
+ ([SOGoMailAccount -draftsFolderInContext:_ctx])
+ ([-sentFolderInContext:_ctx])
+ ([SOGoMailAccount -trashFolderInContext:_ctx]): invoke the new
+ -folderWithTraversal:andClassName: method described above.
+
+ * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
+ -primaryFetchProfile]): make use of -[NSPropertyListSerialization
+ propertyListFromData:mutabilityOption:format:errorDescription:] to
+ deserialize the plist. Removed variant for libFoundation since it
+ should support the above.
+ ([AgenorUserDefaults -generateSQLForInsert])
+ ([AgenorUserDefaults -generateSQLForUpdate]): make use of
+ -[NSPropertyListSerialization
+ dataFromPropertyList:format:errorDescription:] to serialize the
+ plist. Removed variant for libFoundation since it should support
+ the above. Escape the backslashes from the resulting string.
+
+2007-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
+
+ * SoObjects/Mailer/SOGoMailFolder.[hm]: added a new subclass of
+ SOGoMailFolder: SOGoMailSpecialFolder.
+
+ * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
+ -traversalFromMailAccount]): overridden method that returns the
+ initialized mutable string.
+ ([SOGoMailAccount -allFolderPaths]): take the special folder paths
+ with -traversalFromMailAccount and reposition them at the
+ beginning of the list. By creating the special folders during that
+ request, we also make sure that the folder exists thanks to the
+ new initialisation method of the new "SOGoSpecialMailFolder"
+ class.
+ ([SOGoMailAccount -lookupSentFolder:_keyinContext:_ctx]): new
+ method.
+ ([SOGoMailAccount -lookupTrashFolder:_keyinContext:_ctx]): new
+ method.
+ ([SOGoMailAccount -lookupName:_keyinContext:acquire:_flag]): no
+ longer use lookupImap4Folder.
+ ([SOGoMailAccount -lookupImap4Folder:_keyinContext:_ctx]): removed
+ method.
+
+ * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
+ -traversalFromMailAccount]): new method that returns the full
+ IMAP4 path to the object.
+
+ * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): retain
+ "superUsernames" after fetching it from the ud.
+
+2007-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
+
+ * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
+ -eventsListAction]): substitude the start and end date with their
+ UTC counterpart, taking into account the offset from UTC related
+ to those dates instead of the current one. This renders
+ -[UIxCalMainView -userUTCOffset] obsolete because the computings
+ that occured in javascript are now done server-side.
+
+ * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView -userUTCOffset]):
+ removed obsolete method.
+
+ * SoObjects/Mailer/NSString+Mail.m ([NSString -htmlToText]): new
+ method converting html content to plain text.
+
+ * SoObjects/Mailer/NSString+Mail.[hm]: new category module
+ enhancing NSString with utility methods pertaining to mail handling.
+
+ * SoObjects/Mailer/SOGoMailObject.m
+ ([-shouldFetchPartOfType:_typesubtype:_subtype]): removed obsolete method.
+ ([SOGoMailObject
+ -addRequiredKeysOfStructure:infopath:ptoArray:keysacceptedTypes:types]):
+ modified method to be always recursive and to take an array of the
+ accepted mime-types as parameter. The returned array now contains
+ the mime-type as well as the part keys.
+
+ * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
+ -contentForEditingOnParts:_prtskeys:_k]): removed obsolete method.
+ ([SOGoMailObject -contentForEditing]): rewrote method to take into
+ account the first text/plain part or the first text/html part
+ converted to text/plain with our new -[NSString htmlToText]
+ category method.
+
+ * UI/MailerUI/UIxMailActions.m ([-replyToAllAction]): invoke
+ "replyToAll:" with YES as parameter instead of NO.
+
+2007-10-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
+
+ * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
+ -davContentType]): ignore any possible parameter taken from the
+ mime-info of the body part.
+
+ * UI/MailerUI/UIxMailListView.m ([UIxMailListView
+ -lastFirstMessageNumber]): new accessor that returns the first
+ message number of the last series of messages.
+ ([UIxMailListView -fetchKeys]): request the bodystructure for each
+ listed message.
+ ([UIxMailListView -hasMessageAttachment]): extract the attachment
+ information from the message bodystructure.
+
+2007-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
+
+ * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
+ -GETAction:]): use the "application/octet-stream" mime type for
+ elements of type "application/x-xpinstall" to avoid confusing
+ Firefox.
+
+ * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -messageCheckList])
+ ([UIxPreferences -itemMessageCheckText])
+ ([UIxPreferences -userMessageCheck])
+ ([UIxPreferences -setUserMessageCheck:newMessageCheck]): new
+ methods for handling the retrieval of new messages automatically.
+
+ * SoObjects/SOGo/SOGoUser.m ([SOGoUser -messageCheck]): new method
+ that returns the interval of time between automatic message
+ retrievals.
+
+ * UI/MailerUI/UIxMailListView.m ([UIxMailListView
+ -defaultAction]): now expunges the last folder marked for expunge.
+
+ * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
+ -trashInContext:_ctx]): now marks the container folder for
+ expunge.
+
+ * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
+ -markForExpunge]): new method that marks the folder for the next
+ automatic expunge operation in the user settings.
+ ([SOGoMailFolder -expungeLastMarkedFolder]): new methods that
+ takes the last folder marked for expunge, expunges it and removes
+ it from the user settings, if it exists.
+
+2007-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
+
+ * UI/MailerUI/UIxMailListView.m ([UIxMailListView
+ -messageSubjectCellStyleClass]): added support for replied,
+ forwarded, forwarded and replied mails.
+
+ * SoObjects/Mailer/NSData+Mail.m ([NSData
+ -bodyDataFromEncoding:encoding]): new utility method that decodes
+ the NSData instance properly depending on the encoding string
+ passed as parameter.
+
+ * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
+ -fetchFileAttachmentKeys]): fetch the attachment encoding as well.
+
+ * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
+ -stringForData:_datapartInfo:_info]): simplified by invoking
+ -bodyDataFromEncoding: from our new NSData category methods.
+
+ * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
+ -fetchMailForEditing:sourceMail]): work-around a bug in SOPE-mime
+ where only the body part of the first of the keys fetched was
+ returned. Also decodes the body parts properly following their
+ encoding.
+
+ * SoObjects/Mailer/NSData+Mail.[hm]: new extension module that
+ extends the NSData class with utility methods useful for handling
+ mail.
+
2007-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* SoObjects/SOGo/NSArray+Utilities.m