Revision control

Copy as Markdown

Other Tools

/* -*- Mode: IDL; tab-width: 4; 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 */
#include "nsISupports.idl"
#include "nsIMsgAccount.idl"
#include "nsIMsgIdentity.idl"
#include "nsIMsgIncomingServer.idl"
#include "nsIIncomingServerListener.idl"
#include "nsIMsgFolder.idl"
interface nsIMsgFolderCache;
interface nsIFolderListener;
[scriptable, uuid(d5ab0eea-49c5-42f2-b2e6-8ad306606d8b)]
interface nsIMsgAccountManager : nsISupports {
ACString getUniqueAccountKey();
nsIMsgAccount createAccount();
* Return the account with the provided key, or null if none found.
nsIMsgAccount getAccount(in ACString key);
* Removes the account from the list of accounts.
* @param aAccount the account to remove
* @param aRemoveFiles remove data directory (local directory) of this account
void removeAccount(in nsIMsgAccount aAccount, [optional] in boolean aRemoveFiles);
* creates a new identity and assigns it a new, unique "key"
nsIMsgIdentity createIdentity();
* Scan the preferences to find a unique server key.
ACString getUniqueServerKey();
* creates a new server and assigns it a new, unique "key"
* the given type will be used to construct a ContractID
* @param type "imap", "pop3", "nntp", "none", "rss", "generic"
* (suffix of contract ID;1?type= )
nsIMsgIncomingServer createIncomingServer(in ACString username,
in ACString hostname,
in ACString type);
* Removes the server from the list of servers
* @param aServer server to remove
* @param aRemoveFiles remove directory from profile
* @throws NS_ERROR_FAILURE if server not found
void removeIncomingServer(in nsIMsgIncomingServer aServer,
in boolean aRemoveFiles);
* get the identity with the given key
* if the identity does not exist, it will be created
nsIMsgIdentity getIdentity(in ACString key);
* Gets the existing incoming server with the given key
* if the server's type does not exist in the preference,
* an error is returned/thrown
nsIMsgIncomingServer getIncomingServer(in ACString key);
/* account list stuff */
* Returns the account that was marked as the default one.
* Only some server types can serve as default account.
* If there is no such account, null is returned.
* You can only set the defaultAccount to an
* account already in the account manager.
attribute nsIMsgAccount defaultAccount;
* Ordered list of all accounts, by the order they are in the prefs.
* Accounts with hidden servers are not returned.
* array of nsIMsgAccount
readonly attribute Array<nsIMsgAccount> accounts;
/* list of all identities in all accounts
* array of nsIMsgIdentity
readonly attribute Array<nsIMsgIdentity> allIdentities;
/* list of all servers in all accounts, except for hidden and IM servers
* array of nsIMsgIncomingServer
readonly attribute Array<nsIMsgIncomingServer> allServers;
/* summary of summary files folder cache */
readonly attribute nsIMsgFolderCache folderCache;
/* are we shutting down */
readonly attribute boolean shutdownInProgress;
* for preventing unauthenticated users from seeing header information
attribute boolean userNeedsToAuthenticate;
* search for the server with the given username, hostname, and type
* the type is the same as is specified in the preferences,
* i.e. "imap", "pop3", "none", or "nntp"
nsIMsgIncomingServer findServer(in ACString userName,
in ACString hostname,
in ACString type,
[optional] in long port);
* search for the server with the given uri
* an analog to FindServer()
nsIMsgIncomingServer findServerByURI(in nsIURI aURI);
* find the index of this server in the (ordered) list of accounts
long FindServerIndex(in nsIMsgIncomingServer server);
* Finds an account for the given incoming server.
* @param server An incoming server to find the account for.
* @return If found, the nsIMsgAccount representing the account found.
* Otherwise returns null.
nsIMsgAccount FindAccountForServer(in nsIMsgIncomingServer server);
/* given a server, return all identities in accounts that have this server
* returns an array of nsIMsgIdentity
Array<nsIMsgIdentity> getIdentitiesForServer(in nsIMsgIncomingServer server);
* given a server, return the first identity in accounts that have this server
nsIMsgIdentity getFirstIdentityForServer(in nsIMsgIncomingServer server);
/* given an identity, return all servers in accounts that have
* this identity
* returns an array of nsIMsgIncomingServer
Array<nsIMsgIncomingServer> getServersForIdentity(in nsIMsgIdentity identity);
/* there is a special server "Local Folders" that is guaranteed to exist.
* this will allow you to get */
attribute nsIMsgIncomingServer localFoldersServer;
// Create the account for that special server.
void createLocalMailAccount();
/* load accounts kicks off the creation of all accounts. You do not need
* to call this and all accounts should be loaded lazily if you use any
* of the above.
void LoadAccounts();
* When the server for an account could not be loaded, typically because the
* extension providing it could not be loaded, it is deactivated for a period
* of time as documented in nsIMsgAccount.idl. The server is normally only
* rechecked at startup but this function can be used to recheck all servers
* at any time to avoid having to restart to reactivate an account.
void ReactivateAccounts();
void setSpecialFolders();
void loadVirtualFolders();
/* unload accounts frees all the account manager data structures */
void UnloadAccounts();
void WriteToFolderCache(in nsIMsgFolderCache folderCache);
void saveVirtualFolders();
void closeCachedConnections();
void shutdownServers();
void CleanupOnExit();
void SetFolderDoingEmptyTrash(in nsIMsgFolder folder);
boolean GetEmptyTrashInProgress();
void SetFolderDoingCleanupInbox(in nsIMsgFolder folder);
boolean GetCleanupInboxInProgress();
void addRootFolderListener(in nsIFolderListener listener);
void removeRootFolderListener(in nsIFolderListener listener);
// these are going away in favor of add/removeRootFolderListener
void addIncomingServerListener(in nsIIncomingServerListener serverListener);
void removeIncomingServerListener(in nsIIncomingServerListener serverListener);
// these are going away in favor of nsIMsgFolder::NotifyEvent(in ACString event);
// XXX what does this mean? There is no such function yet.
void notifyServerLoaded(in nsIMsgIncomingServer server);
void notifyServerUnloaded(in nsIMsgIncomingServer server);
void notifyServerChanged(in nsIMsgIncomingServer server);
// force account info out to prefs file
void saveAccountInfo();
ACString getChromePackageName(in ACString aExtensionName);
/// Enumerate all incoming servers and their folders and return in an array.
readonly attribute Array<nsIMsgFolder> allFolders;
* Iterates over all folders looking for one with the passed in path,
* and returns the uri for the matching folder. In the future,
* the folder lookup service will provide this functionality.
* @param aLocalPath path of the folder whose uri we want.
* @return the URI of the folder that corresponds to aLocalPath
AUTF8String folderUriForPath(in nsIFile aLocalPath);
// Used to sort servers (accounts) for e.g. the folder pane
long getSortOrder(in nsIMsgIncomingServer server);
* Sets new order of accounts.
* @param accountKeys - Account keys in the new preferred order.
void reorderAccounts(in Array<ACString> accountKeys);
#define MAILNEWS_ACCOUNTMANAGER_EXTENSIONS "mailnews-accountmanager-extensions"
[scriptable, uuid(70032DE0-CD59-41ba-839D-FC1B65367EE7)]
interface nsIMsgAccountManagerExtension : nsISupports
readonly attribute ACString name; // examples: mdn
boolean showPanel(in nsIMsgIncomingServer server);
readonly attribute ACString chromePackageName; // example: messenger, chrome://messenger/content/am-mdn.xhtml and chrome://messenger/locale/