emailservices/emailframework/commonlib/inc/CFSMailCommon.h
changeset 0 8466d47a6819
child 1 12c456ceeff2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailframework/commonlib/inc/CFSMailCommon.h	Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,550 @@
+/*
+* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  email framework common definitions
+*
+*/
+
+
+#ifndef __CFSMAILCOMMON_H
+#define __CFSMAILCOMMON_H
+
+/** folder type definitions */  
+enum TFSFolderType
+    {
+    EFSInbox = 1,
+    EFSOutbox,
+    EFSDraftsFolder,
+    EFSSentFolder,
+    EFSDeleted,
+    EFSOther
+    };
+    
+/** email flags */  
+enum TFSMsgFlag
+    {
+    EFSMsgFlag_Read = 1,                 // Message is read (or "seen") on the server
+    EFSMsgFlag_Read_Locally = 2,         // Message is read on the client
+    EFSMsgFlag_Low = 4,                  // Message has low priority
+    EFSMsgFlag_Important = 8,            // Message has high priority
+    EFSMsgFlag_FollowUpComplete = 16,    // The message follow-up is complete
+    EFSMsgFlag_FollowUp = 32,            // Message is flagged (a flag is showing next to msg in Outlook)
+    EFSMsgFlag_Attachments = 64,         // Message has attachments
+    EFSMsgFlag_Multiple = 128,           // Message has more than one recipient
+    EFSMsgFlag_CalendarMsg = 256,        // Message is a calendar message
+    EFSMsgFlag_Answered = 512,           // The message was replied to
+    EFSMsgFlag_Forwarded = 1024,         // The message was forwarded
+    EFSMsgFlag_OnlyToMe = 2048,          // The message was sent only to this user
+    EFSMsgFlag_RemoteDeleted = 4096,     // The message has been deleted on the server
+    EFSMsgFlag_HasMsgSender = 8192,      // The message has one or more senders 
+    };
+
+/** email list sorting options */  
+enum TFSMailSortField
+    {
+    EFSMailDontCare,            // user accepts any sort order
+    EFSMailSortByDate,          // sorting is done by date
+    EFSMailSortBySender,        // sorting is done by sender
+    EFSMailSortByRecipient,     // sorting is done by recipients
+    EFSMailSortBySubject,       // sorting is done by subject
+    EFSMailSortByPriority,      // sorting is done by priority
+    EFSMailSortByFlagStatus,    // follow up and completed   
+    EFSMailSortByUnread,        // sorting is based on unread
+    EFSMailSortBySize,          // sorting is done by size
+    EFSMailSortByAttachment     // sorting is based on if message has attachments
+    };
+
+/** email list sort order */  
+enum TFSMailSortOrder
+    {
+    EFSMailDescending,
+    EFSMailAscending    
+    };
+
+/** email list sort criteria definition */  
+class TFSMailSortCriteria
+    {
+    public:
+        TFSMailSortField iField;
+        TFSMailSortOrder iOrder;
+    };
+
+/** mailbox status */
+enum TFSMailBoxStatus
+    {
+    EFSMailBoxOffline = 1,
+    EFSMailBoxOnline
+    };
+
+/** mailbox capabilities */
+enum TFSMailBoxCapabilities
+    {
+    // Mailbox supports creating subfolders.
+    // Not supported by UI in 1.0 release.
+    EFSMBoxCapaCreateSubfolder = 1,
+    
+    // Mailbox supports responding to meeting requests.
+    EFSMBoxCapaMeetingRequestRespond,
+    
+    // Mailbox supports meeting request creation.
+    EFSMBoxCapaMeetingRequestCreate,
+    
+    // Mailbox supports meeting request update.
+    EFSMBoxCapaCanUpdateMeetingRequest,     
+    
+    // Mailbox supports user folder manipulation (rename and delete).
+    // Not supported by UI in 1.0 release.
+    EFSMBoxCapaManipulateUserFolders,
+    
+    // Mailbox supports moving messages to and from user folders.
+    // Not supported in 1.0 release. 
+    // (NOT USED. To be defined in the future.)
+    EFSMBoxCapaMoveMessageToUserFolder,
+    
+    // Mailbox can move messages in offline or handle go online itself
+    EFSMBoxCapaMoveMessageNoConnectNeeded,
+    
+    // Mailbox supports moving messages between folders.
+    EFSMBoxCapaMoveToFolder,
+    
+    // Mailbox supports copying messages between folders.
+    // Not supported by UI in 1.0 release.
+    EFSMBoxCapaCopyToFolder,
+    
+    // Mailbox supports smart reply feature.
+    // Returned by Intellisync and ActiveSync. UI will fetch rest of message if not supported.
+    EFSMBoxCapaSmartReply,
+    
+    // Mailbox supports smart forward feature.
+    // Returned by Intellisync and ActiveSync. UI will fetch rest of message if not supported.
+    EFSMBoxCapaSmartForward,
+    
+    // Mailbox handles itself integration to Symbian Messaging.
+    // Not supported by any protocol in 1.0 release.
+    //
+    // (Should be returned for mailboxes that handle possible Symbian Messaging 
+    // integration themselves. I.e. FW must not ask FS Integration MTM to replicate 
+    // these mailboxes to Symbian Messaging. It is intended to prevent duplicate 
+    // accounts in Symbian Messaging in the case when protocol plugin actually 
+    // already has visible accounts in Symbian Messaging.)
+    EFSMBoxCapaSymbianMsgIntegration,
+    
+    // Mailbox implements new email notifications itself.
+    // Not supported by any protocol in 1.0 release.
+    //
+    // (EFSMBoxCapaNewEmailNotifications is intended to be defined for mailboxes that 
+    // handle new email notifications some other way than relying to FW 
+    // displaying them (e.g. via NCNList). If this is defined for a mailbox then 
+    // FW will not monitor and display new email notifications for the mailbox.
+    // The aim is to prevent possible duplicate notifications to user.)
+    EFSMBoxCapaNewEmailNotifications,
+    
+    // Mailbox supports MRU feature.
+    // Framework can check this before updating the list for optimization. Intellisync and ActiveSync need to set.
+    // Capability is not checked in UI. Plugin just returns a null if there’s no MRU list and the UI doesn’t show anything.
+    EFSMBoxCapaSupportsMRU,
+     
+    // Mailbox can be deleted.
+    // Set by Intellisync and ActiveSync only if the server supports.
+    EFSMBoxCapaCanBeDeleted,
+        
+    // Mailbox supports out of office feature.
+    // Set by Intellisync and ActiveSync. Not used by UI -> can be deprecated?
+    // EFSMBoxCapaSupportsOutOfOffice,
+    
+    // Mailbox supports setting OoO on/off.
+    // Set by Intellisync and ActiveSync. Not used by UI -> can be deprecated?
+    // EFSMBoxCapaOutOfOfficeSet,
+    
+    // Mailbox supports editing out of office.
+    // Set by Intellisync and ActiveSync. Not used by UI -> can be deprecated?
+    // EFSMBoxCapaOutOfOfficeEdit,
+    
+    // Mailbox supports saving to drafts automically when "create message to send" and 
+    // "save message" (in framework api) are used.
+    EFSMBoxCapaSupportsSaveToDrafts,
+    
+    // Remote Contact Lookup is supported via this mailbox.
+    // Set by Intellisync and ActiveSync.
+    EFSMBoxCapaSupportsRCL,
+    
+    // Mailbox supports followup. Email UI hides Follow Up flagging if mailbox does not support it.
+    EFSMBoxCapaSupportsFollowUp,
+    
+    // Mailbox supports for "do you want to delete"prompt.
+    EFSMBoxCapaSupportsDeletedItemsFolder,
+
+    // Mailbox does not support editing original message with smart reply or forward
+    EFSMBoxCapaReadOnlySmartQuote,
+
+    // Mailbox supports sync
+    EFSMBoxCapaSupportsSync,
+
+    // Mailbox supports email reply-to feature
+    EFSMBoxCapaSupportsReplyTo,
+
+    // Mailbox supports tracking meeting request attendee status
+    // only supported by IntelliSync
+    EFSMBoxCapaMeetingRequestAttendeeStatus,
+
+    EFSMBoxCapaMRRequiresReplyEmail,
+    
+    // Mailbox supports embedded reply / forward message feature.
+    EFSMBoxCapaEmbeddedReplyForwardMessage,
+    
+    // Mailbox supports removing entry from calendar
+    EFSMBoxCapaRemoveFromCalendar,
+
+    // Mailbox supports attachments in meeting requests
+    EFSMboxCapaSupportsAttahmentsInMR,
+    
+    // Mailbox supports saving of embedded messages
+    EFSMboxCapaSupportsSavingOfEmbeddedMessages
+    
+    };
+
+/** email details included in plugin responses */
+enum TFSMailDetails 
+    {
+    EFSMsgDataIdOnly = 1,       // Doesn't get any data. The object just contains the ID.
+    EFSMsgDataDate = 2,         // Get received date only. To be used when showing messages sorted by date.
+                                // The rest would be retreived when needed but date is needed to build the list.
+    EFSMsgDataSubject = 4,      // Like above but when sorting by subject
+    EFSMsgDataSender = 8,       // Likewise for sender address.
+    EFSMsgDataEnvelope = 16,    // Date, subject, Sender, To, Cc at least.
+    EFSMsgDataStructure = 32    // the part structure including mime type, size and name headers.
+    };
+
+    enum TFSPartFetchState
+    {
+    EFSDefault,
+    EFSNone,
+    EFSPartial,
+    EFSFull,
+    EFSEmailStructureUnknown
+    };
+
+/** class for message part / message / folder / mailbox id */
+class TFSMailMsgId
+    {
+    public:
+
+    inline TFSMailMsgId( ) // constructs NULL id
+    { iPluginId.iUid = 0; iId = 0; iNullId = ETrue; };
+    inline TFSMailMsgId(TUid aPluginId, TUint aId)
+    { iPluginId = aPluginId; iId = aId; iNullId = EFalse; };
+    inline TFSMailMsgId(TUint aPluginId, TUint aId)
+    { iPluginId.iUid = aPluginId; iId = aId; iNullId = EFalse; };
+    inline TBool operator==(TFSMailMsgId aId) const
+    { if(iNullId != aId.IsNullId()) return EFalse;
+      if(iPluginId.iUid != aId.PluginId().iUid) return EFalse;
+      if(iId != aId.Id()) return EFalse; return ETrue; };
+    inline TBool operator!=(TFSMailMsgId aId) const
+    { if(iNullId != aId.IsNullId()) return ETrue;
+      if(iPluginId.iUid != aId.PluginId().iUid) return ETrue;
+      if(iId != aId.Id()) return ETrue; return EFalse; }
+    inline TBool IsNullId() const { return iNullId; };
+    inline void  SetNullId() { iPluginId.iUid = 0; iId = 0; iNullId = ETrue; } ;
+    inline TUid PluginId() const { return iPluginId; };
+    inline TUint Id() const { return iId; };
+    inline void  SetPluginId(TUid aPluginId) { iPluginId = aPluginId; iNullId = EFalse; };
+    inline void  SetId(TUint aId) { iId = aId; iNullId = EFalse; };
+
+    protected:
+
+    TBool   iNullId;
+    TUid    iPluginId;      // ecom implementation id
+    TUint   iId;            // message, folder, mailbox id
+    };
+
+/* Predefined constants for ContentTypes and parameters for ContentType and ContentDisposition */
+_LIT(KFSMailContentTypeMultipartMixed, "multipart/mixed");
+_LIT(KFSMailContentTypeMultipartAlternative, "multipart/alternative");
+_LIT(KFSMailContentTypeMultipartDigest, "multipart/digest");
+_LIT(KFSMailContentTypeMultipartParallel, "multipart/parallel");
+_LIT(KFSMailContentTypeMultipartRelated,  "multipart/related");
+_LIT(KFSMailContentTypeTextPlain, "text/plain");
+_LIT(KFSMailContentTypeTextHtml, "text/html");
+_LIT(KFSMailContentTypeMessage, "message/rfc822");
+_LIT(KFSMailContentTypeParamName, " name=");
+_LIT(KFSMailContentTypeParamCharset, " charset=");
+_LIT(KFSMailContentTypeTextCalendar, "text/calendar");
+
+
+_LIT(KFSMailContentDispAttachment, " attachment");
+_LIT(KFSMailContentDispParamFilename, " filename=");
+
+/** mailbox synchronization states */
+enum TSSMailSyncState // Are all of these sensible as mailbox sync states (e.g. PasswordVerified)
+    {
+    Idle,
+    StartingSync, // establishing connection to server
+    DataSyncStarting,
+    EmailSyncing, // For any email folder not explicitly listed.
+    InboxSyncing, // System folders the plugin may report. Can use just EmailSyncing instead.
+    OutboxSyncing,
+    SentItemsSyncing,
+    DraftsSyncing,
+    CalendarSyncing,
+    ContactsSyncing,
+    TasksSyncing,
+    NotesSyncing,
+    FilesSyncing,
+    FinishedSuccessfully,
+    SyncError,
+    SyncCancelled,
+    PasswordExpiredError,
+    PasswordVerified,
+    PasswordNotVerified,
+    PushChannelOff,
+    PushChannelEstablished,
+    PushChannelOffBecauseBatteryIsLow,
+    OutOfDiskSpace
+    };
+
+/**
+ *  email framework exception event response callback
+ *
+ *  @since S60 v3.1
+ */
+class MFSMailExceptionEventCallback
+    {
+    public:
+
+    /**
+     * Exception event resonse to plugin from FSMailServer after it has
+     * processed the event (shown the corresponding dialog to user).
+     * There can be several messages on the screen, but only one
+     * of each message type per mailbox. So mailbox-message type
+     * pairs should be enough to identify the responded event.
+     *
+     * @param aMailboxId Mailbox that sent the exception event
+     * @param aEventType Event type of the responded event
+     *                   (as TFsEmailNotifierSystemMessageType)
+     * @param aResponse ETrue if user selected OK, Continue, etc. (LSK)
+     *                  EFalse if user selected Cancel (RSK)
+     */
+     virtual void ExceptionEventCallbackL( TFSMailMsgId aMailboxId, TInt aEventType, TBool aResponse ) = 0;
+
+     };
+
+
+/** plugin / message store events definitions
+
+Note! Store related events (backup/restore, store locked,
+wiped, authenticated/unauthenticated) would benefit from
+having a concept of plugin/service or store available in client API.
+These have been simplified behind only two events:
+TFSMailboxUnavailable and TFSMailboxAvailable.
+*/
+    enum TFSMailEvent
+        {
+        // Mailbox is unavailable
+        // aParam1: NULL
+        // aParam2: NULL
+        // aParam3: NULL
+        TFSMailboxUnavailable,
+
+        // Mailbox is available
+        // aParam1: NULL
+        // aParam2: NULL
+        // aParam3: NULL
+        TFSMailboxAvailable,
+
+        // New mailbox created
+        // aParam1: NULL
+        // aParam2: NULL
+        // aParam3: NULL
+        TFSEventNewMailbox, 
+
+        // New mailbox creation failure
+        // aParam1: NULL
+        // aParam2: NULL
+        // aParam3: NULL
+        TFSEventMailboxCreationFailure, 
+
+        // Mailbox renamed
+        // aParam1: NULL
+        // aParam2: NULL
+        // aParam3: NULL
+        TFSEventMailboxRenamed,
+        
+        // Mailbox deleted
+        // aParam1: NULL
+        // aParam2: NULL
+        // aParam3: NULL
+        TFSEventMailboxDeleted,
+
+        //
+        // Following events need to be subscribed per mailbox
+        //
+
+        // Mailbox capability changed
+        // aParam1: NULL
+        // aParam2: NULL
+        // aParam3: NULL
+        TFSEventMailboxCapabilityChanged,
+
+        // Mailbox settings changed (OPEN: can this replace TFSEventMailboxCapabilityChanged?)
+        // aParam1: NULL
+        // aParam2: NULL
+        // aParam3: NULL
+        TFSEventMailboxSettingsChanged,
+
+        // Mailbox went online
+        // aParam1: NULL
+        // aParam2: NULL
+        // aParam3: NULL
+        TFSEventMailboxOnline,
+
+        // Mailbox went offline
+        // aParam1: NULL
+        // aParam2: NULL
+        // aParam3: NULL
+        TFSEventMailboxOffline,
+
+        // Mailbox sync state changed
+        // aParam1: TSSMailSyncState* newState
+        // aParam2: NULL
+        // aParam3: NULL
+        TFSEventMailboxSyncStateChanged,
+
+        // New mails created
+        // aParam1: RArray<TFSMailId>* aNewEntries
+        // aParam2: TFSMailId* aParentFolder
+        // aParam3: NULL
+        TFSEventNewMail, 
+
+        // Mails changed
+        // aParam1: RArray<TFSMailId>* aEntries
+        // aParam2: TFSMailId* aParentFolder
+        // aParam3: NULL
+        TFSEventMailChanged,
+        
+        // Mails deleted
+        // aParam1: RArray<TFSMailId>* aEntries
+        // aParam2: TFSMailId* aParentFolder
+        // aParam3: NULL
+        TFSEventMailDeleted,
+
+        // Mails moved
+        // aParam1: RArray<TFSMailId>* aEntries
+        // aParam2: TFSMailId* aNewParentFolder
+        // aParam3: TFSMailId* aOldParentFolder
+        TFSEventMailMoved,
+
+        // Mails copied
+        // aParam1: RArray<TFSMailId>* aNewEntries
+        // aParam2: TFSMailId* aNewParentFolder
+        // aParam3: TFSMailId* aOldParentFolder
+        TFSEventMailCopied,
+
+        // New folders created
+        // aParam1: RArray<TFSMailId>* aNewEntries
+        // aParam2: TFSMailId* aParentFolder
+        // aParam3: NULL
+        TFSEventNewFolder, 
+
+        // Folders changed
+        // aParam1: RArray<TFSMailId>* aEntries
+        // aParam2: TFSMailId* aParentFolder
+        // aParam3: NULL
+        TFSEventFolderChanged,
+        
+        // Folders deleted
+        // aParam1: RArray<TFSMailId>* aEntries
+        // aParam2: TFSMailId* aParentFolder
+        // aParam3: NULL
+        TFSEventFoldersDeleted,
+
+        // Folders moved
+        // aParam1: RArray<TFSMailId>* aEntries
+        // aParam2: TFSMailId* aNewParentFolder
+        // aParam3: TFSMailId* aOldParentFolder
+        TFSEventFoldersMoved,
+
+        // exception / error happened 
+        // aParam1: TInt (TFsEmailNotifierSystemMessageType) aEventType
+        // aParam2: TDesC* aCustomMessage or NULL (optional)
+        // aParam3: MFSMailExceptionEventCallback* aCallback or NULL (optional)
+        TFSEventException,
+        };
+        
+/**
+ * Progress data structure to indicate different kind of progress
+ * information coming from plugins to user. Usually user uses
+ * progress events to update progress bar in user interface.
+ *
+ * Download progress indication : 
+ *   - first event iProgressStatus = EFSStatus_Started
+ *   - next event iProgressStatus = EFSStatus_Status
+ *   - last event iProgressStatus = EFSStatus_RequestComplete
+ *   - iMaxCount downloadable object total size
+ *   - iCounter currently downloaded object size
+ *   - iError KErrNone
+ *
+ * Download request cancelled by user or by plugin :
+ *
+ *   - iProgressStatus = EFSStatus_RequestCancelled
+ *   - iMaxCount & iCounter optional, latest values or ignore/unknown = -1
+ *   - iError = symbian error code KErrCancel
+ *
+ * Download error :
+ *
+ *   - iProgressStatus = EFSStatus_RequestCancelled
+ *   - iMaxCount & iCounter optional, latest values or ignore/unknown = -1
+ *   - iError symbian error code
+ * 
+ * Connection establisment progress :
+ *
+ *   - iProgressStatus ; EFSStatus_Waiting, EFSStatus_Connecting,
+ *     EFSStatus_Connected, EFSStatus_Authenticating, EFSStatus_Authenticated
+ *     depending how plugin implements this
+ *   - iMaxCount & iCounter optional, latest values or ignore/unknown = -1
+ *   - iError symbian error code, KErrNone default
+ */
+class TFSProgress
+    {
+
+public:
+
+    /** possible progress indication states  */
+    enum TFSProgressStatus
+    {
+        EFSStatus_Waiting = 1,
+        EFSStatus_Started,
+        EFSStatus_Connecting,
+        EFSStatus_Connected,
+        EFSStatus_Authenticating,
+        EFSStatus_Authenticated,
+        EFSStatus_Status,
+        EFSStatus_RequestComplete,
+        EFSStatus_RequestCancelled,
+    };
+
+public: // data
+                
+    /** event progress / completion status*/
+    TFSProgressStatus   iProgressStatus;
+                    
+    /** max value in progress countingc   */
+    TInt                iMaxCount;
+
+    /** progress counter                  */
+    TInt                iCounter;
+
+    /** error code (Symbian error codes)  */
+    TInt                iError;
+    };
+    
+#endif // __CFSMAILCOMMON