/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "nsISupports.idl" interface nsIImapMailFolderSink; interface nsIImapMessageSink; interface nsIImapServerSink; interface nsIImapMockChannel; interface nsIFile; typedef long nsImapAction; typedef long nsImapState; typedef unsigned short imapMessageFlagsType; typedef long nsImapContentModifiedType; [scriptable, uuid(2e91901e-ff6c-11d3-b9fa-00108335942a)] interface nsImapContentModifiedTypes { const long IMAP_CONTENT_NOT_MODIFIED = 0; const long IMAP_CONTENT_MODIFIED_VIEW_INLINE = 1; const long IMAP_CONTENT_MODIFIED_VIEW_AS_LINKS = 2; const long IMAP_CONTENT_FORCE_CONTENT_NOT_MODIFIED = 3; } ; [scriptable, uuid(fe2a8f9e-2886-4146-9896-27fff660c69f)] interface nsIImapUrl : nsISupports { /////////////////////////////////////////////////////////////////////////////// // Getters and Setters for the imap specific event sinks to bind to to the url /////////////////////////////////////////////////////////////////////////////// attribute nsIImapMailFolderSink imapMailFolderSink; attribute nsIImapMessageSink imapMessageSink; attribute nsIImapServerSink imapServerSink; /////////////////////////////////////////////////////////////////////////////// // Getters and Setters for the imap url state /////////////////////////////////////////////////////////////////////////////// attribute nsImapAction imapAction; readonly attribute nsImapState requiredImapState; readonly attribute string imapPartToFetch; readonly attribute ACString customAttributeToFetch; attribute ACString customAttributeResult; readonly attribute ACString command; attribute ACString customCommandResult; readonly attribute ACString customAddFlags; readonly attribute ACString customSubtractFlags; void allocateCanonicalPath(in string aServerPath, in char aOnlineDelimiter, out string aAllocatedPath); void allocateServerPath(in string aCanonicalPath, in char aOnlineDelimiter, out string aAllocatedPath); string createServerSourceFolderPathString(); string createCanonicalSourceFolderPathString(); string createServerDestinationFolderPathString(); string addOnlineDirectoryIfNecessary(in string onlineMailboxName); void createSearchCriteriaString (out string aResult); readonly attribute ACString listOfMessageIds; boolean messageIdsAreUids(); readonly attribute imapMessageFlagsType msgFlags; // kAddMsgFlags or kSubtractMsgFlags only readonly attribute long numBytesToFetch; attribute char onlineSubDirSeparator; attribute boolean allowContentChange; attribute boolean mimePartSelectorDetected; attribute nsImapContentModifiedType contentModified; attribute boolean fetchPartsOnDemand; // set to true if we're fetching a msg for display and want to not download parts attribute boolean msgLoadingFromCache; // true if this msg load is coming from a cache, so we can know to mark it read attribute boolean externalLinkUrl; // true if we ran this url because the user clicked on a link. attribute boolean validUrl; // false if we couldn't parse url for whatever reason. attribute nsISupports copyState; attribute nsIFile msgFile; attribute nsIImapMockChannel mockChannel; /** * Set to true if we should store the msg(s) for offline use if we can, * e.g., we're fetching a message and the folder is configured for offline * use and we're not doing mime parts on demand. */ attribute boolean storeResultsOffline; /** * If we fallback from fetching by parts to fetching the whole message, * because all the parts were inline, this tells us we should store * the message offline. */ attribute boolean storeOfflineOnFallback; /** * This attribute defaults to false, but if we only want to use the offline * cache (disk, memory, or offline store) to fetch the message, then we set * this to true. Currently, nsIMsgMessageService.streamMessage does this. */ attribute boolean localFetchOnly; /// Server disconnected first time so we're retrying. attribute boolean rerunningUrl; /** * Do we have more headers to download? This is set when we decide to * download newest headers first, followed by older headers in a subsequent * run of the url, which allows other urls to run against the folder in the * meantime. */ attribute boolean moreHeadersToDownload; /** * @{ * This is used to tell the runner of the url more about the status of * the command, beyond whether it was successful or not. For example, * subtracting flags from a UID that doesn't exist isn't an error * (the server returns OK), but the backend code may want to know about it. */ attribute long extraStatus; /** * Current possible extra status values */ const long ImapStatusNone = 0; const long ImapStatusFlagChangeFailed = 1; const long ImapStatusFlagsNotSettable = 2; /** @} */ /////////////////////////////////////////////////////////////////////////////// // Enumerated types specific to imap urls... /////////////////////////////////////////////////////////////////////////////// // the following are nsImapState enums. // we have a basic set of imap url actions. These actions are nsImapActions. // Certain actions require us to be in the authenticated state and others require us to // be in the selected state. nsImapState is used to store the state the url needs to // be in. You'll later see us refer to the imap url state in the imap protocol when we // are processing the current url. Don't confuse nsImapState with the generic url state // used to keep track of whether the url is running or not... const long nsImapAuthenticatedState = 0; const long nsImapSelectedState = 1; const long nsImapActionSendText = 0; // a state used for testing purposes to send raw url text straight to the server.... // nsImapAuthenticatedStateUrl urls // since the following url actions require us to be in the authenticated // state, the high bit is left blank.... const long nsImapTest = 0x00000001; const long nsImapCreateFolder = 0x00000005; const long nsImapDeleteFolder = 0x00000006; const long nsImapRenameFolder = 0x00000007; const long nsImapMoveFolderHierarchy = 0x00000008; const long nsImapLsubFolders = 0x00000009; const long nsImapGetMailAccountUrl = 0x0000000A; const long nsImapDiscoverChildrenUrl = 0x0000000B; const long nsImapDiscoverAllBoxesUrl = 0x0000000D; const long nsImapDiscoverAllAndSubscribedBoxesUrl = 0x0000000E; const long nsImapAppendMsgFromFile = 0x0000000F; const long nsImapSubscribe = 0x00000010; const long nsImapUnsubscribe = 0x00000011; const long nsImapRefreshACL = 0x00000012; const long nsImapRefreshAllACLs = 0x00000013; const long nsImapListFolder = 0x00000014; const long nsImapUpgradeToSubscription = 0x00000015; const long nsImapFolderStatus = 0x00000016; const long nsImapRefreshFolderUrls = 0x00000017; const long nsImapEnsureExistsFolder = 0x00000018; const long nsImapOfflineToOnlineCopy = 0x00000019; const long nsImapOfflineToOnlineMove = 0x0000001A; const long nsImapVerifylogon = 0x0000001B; // it's okay to add more imap actions that require us to // be in the authenticated state here without renumbering // the imap selected state url actions. just make sure you don't // set the high bit... // nsImapSelectedState urls. Note, the high bit is always set for // imap actions which require us to be in the selected state const long nsImapSelectFolder = 0x10000002; const long nsImapLiteSelectFolder = 0x10000003; const long nsImapExpungeFolder = 0x10000004; const long nsImapMsgFetch = 0x10000018; const long nsImapMsgHeader = 0x10000019; const long nsImapSearch = 0x1000001A; const long nsImapDeleteMsg = 0x1000001B; const long nsImapDeleteAllMsgs = 0x1000001C; const long nsImapAddMsgFlags = 0x1000001D; const long nsImapSubtractMsgFlags = 0x1000001E; const long nsImapSetMsgFlags = 0x1000001F; const long nsImapOnlineCopy = 0x10000020; const long nsImapOnlineMove = 0x10000021; const long nsImapOnlineToOfflineCopy = 0x10000022; const long nsImapOnlineToOfflineMove = 0x10000023; const long nsImapMsgPreview = 0x10000024; const long nsImapBiff = 0x10000026; const long nsImapSelectNoopFolder = 0x10000027; const long nsImapAppendDraftFromFile = 0x10000028; const long nsImapUidExpunge = 0x10000029; const long nsImapSaveMessageToDisk = 0x10000030; const long nsImapOpenMimePart = 0x10000031; const long nsImapMsgDownloadForOffline = 0x10000032; const long nsImapDeleteFolderAndMsgs = 0x10000033; const long nsImapUserDefinedMsgCommand = 0x10000034; const long nsImapUserDefinedFetchAttribute = 0x10000035; const long nsImapMsgFetchPeek = 0x10000036; const long nsImapMsgStoreCustomKeywords = 0x10000037; /// Constant for the default IMAP port number const int32_t DEFAULT_IMAP_PORT = 143; /// Constant for the default IMAP over ssl port number const int32_t DEFAULT_IMAPS_PORT = 993; };