emailservices/emailcommon/inc/CFSMailCommon.h
changeset 18 578830873419
child 20 ecc8def7944a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailcommon/inc/CFSMailCommon.h	Fri Apr 16 14:51:52 2010 +0300
@@ -0,0 +1,565 @@
+/*
+* 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
+
+// <qmail>
+#include <e32std.h>
+// </qmail>
+#include "nmcommon.h" //NmId
+
+/** 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 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
+
+    };
+
+/** 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 TFSMailMsgId(NmId aId)
+	{ iPluginId.iUid = aId.pluginId32();
+	  iId = aId.id32();
+	  (aId.id() == 0) ? iNullId = ETrue : 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; };
+  inline NmId GetNmId()
+  {
+    NmId nmid;
+    if( !iNullId ){
+      nmid.setId32(iId);
+      nmid.setPluginId32(iPluginId.iUid);
+    }
+    return nmid;
+  };
+
+  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(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<TFSMailMsgId>* aNewEntries
+        // aParam2: TFSMailMsgId* aParentFolder
+        // aParam3: NULL
+        TFSEventNewMail,
+
+        // Mails changed
+        // aParam1: RArray<TFSMailMsgId>* aEntries
+        // aParam2: TFSMailMsgId* aParentFolder
+        // aParam3: NULL
+        TFSEventMailChanged,
+
+        // Mails deleted
+        // aParam1: RArray<TFSMailMsgId>* aEntries
+        // aParam2: TFSMailMsgId* aParentFolder
+        // aParam3: NULL
+        TFSEventMailDeleted,
+
+        // Mails moved
+        // aParam1: RArray<TFSMailMsgId>* aEntries
+        // aParam2: TFSMailMsgId* aNewParentFolder
+        // aParam3: TFSMailMsgId* aOldParentFolder
+        TFSEventMailMoved,
+
+        // Mails copied
+        // aParam1: RArray<TFSMailMsgId>* aNewEntries
+        // aParam2: TFSMailMsgId* aNewParentFolder
+        // aParam3: TFSMailMsgId* aOldParentFolder
+        TFSEventMailCopied,
+
+        // New folders created
+        // aParam1: RArray<TFSMailMsgId>* aNewEntries
+        // aParam2: TFSMailMsgId* aParentFolder
+        // aParam3: NULL
+        TFSEventNewFolder,
+
+        // Folders changed
+        // aParam1: RArray<TFSMailMsgId>* aEntries
+        // aParam2: TFSMailMsgId* aParentFolder
+        // aParam3: NULL
+        TFSEventFolderChanged,
+
+        // Folders deleted
+        // aParam1: RArray<TFSMailMsgId>* aEntries
+        // aParam2: TFSMailMsgId* aParentFolder
+        // aParam3: NULL
+        TFSEventFoldersDeleted,
+
+        // Folders moved
+        // aParam1: RArray<TFSMailMsgId>* aEntries
+        // aParam2: TFSMailMsgId* aNewParentFolder
+        // aParam3: TFSMailMsgId* 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;
+
+// <qmail>	
+	/** Related data parameter (used for async message creation) **/	
+    TAny* iParam;
+// </qmail>
+    };
+
+// <qmail> Protocol plugins leave with this if API is not implemented
+const TInt KErrFSMailPluginNotSupported = KErrNotSupported - 1000;
+// </qmail>
+
+#endif // __CFSMAILCOMMON