/* -*- 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 http://mozilla.org/MPL/2.0/. */
#include "nsISupports.idl"
#include "MailNewsTypes2.idl"
interface nsIMsgFolder;
interface nsIMsgFolderCache;
interface nsIMsgWindow;
interface nsIMsgProtocolInfo;
interface nsIMsgFilterList;
interface nsIMsgRetentionSettings;
interface nsIMsgDownloadSettings;
interface nsISpamSettings;
interface nsIMsgFilterPlugin;
interface nsIUrlListener;
interface nsIMsgDBHdr;
interface nsIFile;
interface nsIURI;
interface nsIMsgPluggableStore;
/*
* Interface for incoming mail/news host
* this is the base interface for all mail server types (imap, pop, nntp, etc)
* often you will want to add extra interfaces that give you server-specific
* attributes and methods.
*/
[scriptable, uuid(aa9a3389-9dac-41f1-9ec5-18287cfaa47c)]
interface nsIMsgIncomingServer : nsISupports {
/**
* internal pref key - guaranteed to be unique across all servers
*/
attribute ACString key;
/**
* pretty name - should be "userid on hostname"
* if the pref is not set
*/
attribute AString prettyName;
/**
* helper function to construct the pretty name in a server type
* specific way - e.g., mail for foo@test.com, news on news.mozilla.org
*/
readonly attribute AString constructedPrettyName;
/**
* hostname of the server
*/
attribute ACString hostName;
/**
* real hostname of the server (if server name is changed it's stored here)
*/
attribute ACString realHostName;
/* port of the server */
attribute long port;
/**
* userid to log into the server
*/
attribute ACString username;
/**
* real username of the server (if username is changed it's stored here)
*/
attribute ACString realUsername;
/**
* protocol type, i.e. "pop3", "imap", "nntp", "none", etc
* used to construct URLs
*/
attribute ACString type;
/**
* The proper instance of nsIMsgProtocolInfo corresponding to this server type.
*/
readonly attribute nsIMsgProtocolInfo protocolInfo;
readonly attribute AString accountManagerChrome;
/**
* The schema for the local mail store, such as "mailbox", "imap", or "news"
* used to construct URIs. The contractID for the nsIMsgMessageService
* implementation that will manage access to messages associated with this
* server is constructed using this type.
*/
readonly attribute ACString localStoreType;
/**
* The schema for the nsIMsgDatabase implementation, such as "mailbox" or
* "imap", that will be used to construct the database instance used by
* message folders associated with this server.
*/
readonly attribute ACString localDatabaseType;
// Perform specific tasks (reset flags, remove files, etc) for account user/server name changes.
void onUserOrHostNameChanged(in ACString oldName, in ACString newName,
in bool hostnameChanged);
/* cleartext version of the password */
attribute ACString password;
/**
* Attempts to get the password first from the password manager, if that
* fails it will attempt to get it from the user if aMsgWindow is supplied.
*
* @param aPromptString The text of the prompt if the user is prompted for
* password.
* @param aPromptTitle The title of the prompt if the user is prompted.
* @param aMsgWindow A message window to associate the prompt with.
* @return The obtained password. Could be an empty password.
*
* @exception NS_ERROR_FAILURE The password could not be obtained.
*
* @note NS_MSG_PASSWORD_PROMPT_CANCELLED is a success code that is returned
* if the prompt was presented to the user but the user cancelled the
* prompt.
*/
ACString getPasswordWithUI(in AString aPromptString, in AString aPromptTitle,
in nsIMsgWindow aMsgWindow);
/* forget the password in memory and in single signon database */
void forgetPassword();
/* forget the password in memory which is cached for the session */
void forgetSessionPassword();
/* should we download whole messages when biff goes off? */
attribute boolean downloadOnBiff;
/* should we biff the server? */
attribute boolean doBiff;
/* how often to biff */
attribute long biffMinutes;
/* current biff state */
attribute unsigned long biffState;
/* are we running a url as a result of biff going off? (different from user clicking get msg) */
attribute boolean performingBiff;
/* the on-disk path to message storage for this server */
attribute nsIFile localPath;
/// message store to use for the folders under this server.
readonly attribute nsIMsgPluggableStore msgStore;
/* the RDF URI for the root mail folder */
readonly attribute ACString serverURI;
/* the root folder for this server, even if server is deferred */
attribute nsIMsgFolder rootFolder;
/* root folder for this account
- if account is deferred, root folder of deferred-to account */
readonly attribute nsIMsgFolder rootMsgFolder;
/* are we already getting new Messages on the current server..
This is used to help us prevent multiple get new msg commands from
going off at the same time. */
attribute boolean serverBusy;
/**
* Is the server using a secure channel (SSL or STARTTLS).
*/
readonly attribute boolean isSecure;
/**
* Authentication mechanism.
*
* @see nsMsgAuthMethod (in MailNewsTypes2.idl)
* Same as "mail.server...authMethod" pref
*/
attribute nsMsgAuthMethodValue authMethod;
/**
* Whether to SSL or STARTTLS or not
*
* @see nsMsgSocketType (in MailNewsTypes2.idl)
* Same as "mail.server...socketType" pref
*/
attribute nsMsgSocketTypeValue socketType;
/* empty trash on exit */
attribute boolean emptyTrashOnExit;
/**
* Get the server's list of filters.
*
* This SHOULD be the same filter list as the root folder's, if the server
* supports per-folder filters. Furthermore, this list SHOULD be used for all
* incoming messages.
*
* Since the returned nsIMsgFilterList is mutable, it is not necessary to call
* setFilterList after the filters have been changed.
*
* @param aMsgWindow @ref msgwindow "The standard message window"
* @return The list of filters.
*/
nsIMsgFilterList getFilterList(in nsIMsgWindow aMsgWindow);
/**
* Set the server's list of filters.
*
* Note that this does not persist the filter list. To change the contents
* of the existing filters, use getFilterList and mutate the values as
* appopriate.
*
* @param aFilterList The new list of filters.
*/
void setFilterList(in nsIMsgFilterList aFilterList);
/**
* Get user editable filter list. This does not have to be the same as
* the filterlist above, typically depending on the users preferences.
* The filters in this list are not processed, but only to be edited by
* the user.
* @see getFilterList
*
* @param aMsgWindow @ref msgwindow "The standard message window"
* @return The list of filters.
*/
nsIMsgFilterList getEditableFilterList(in nsIMsgWindow aMsgWindow);
/**
* Set user editable filter list.
* This does not persist the filterlist, @see setFilterList
* @see getEditableFilterList
* @see setFilterList
*
* @param aFilterList The new list of filters.
*/
void setEditableFilterList(in nsIMsgFilterList aFilterList);
/* we use this to set the default local path. we use this when migrating prefs */
void setDefaultLocalPath(in nsIFile aDefaultLocalPath);
/**
* Verify that we can logon
*
* @param aUrlListener - gets called back with success or failure.
* @param aMsgWindow nsIMsgWindow to use for notification callbacks.
* @return - the url that we run.
*/
nsIURI verifyLogon(in nsIUrlListener aUrlListener, in nsIMsgWindow aMsgWindow);
/* do a biff */
void performBiff(in nsIMsgWindow aMsgWindow);
/* get new messages */
void getNewMessages(in nsIMsgFolder aFolder, in nsIMsgWindow aMsgWindow,
in nsIUrlListener aUrlListener);
/* this checks if a server needs a password to do biff */
readonly attribute boolean serverRequiresPasswordForBiff;
/* this gets called when the server is expanded in the folder pane */
void performExpand(in nsIMsgWindow aMsgWindow);
/* Write out all known folder data to panacea.dat */
void writeToFolderCache(in nsIMsgFolderCache folderCache);
/* close any server connections */
void closeCachedConnections();
/* ... */
void shutdown();
/**
* Get or set the value as determined by the preference tree.
*
* These methods MUST NOT fail if the preference is not set, and therefore
* they MUST have a default value. This default value is provided in practice
* by use of a default preference tree. The standard format for the pref
* branches are mail.server.key. for per-server preferences,
* such that the preference is mail.server.key.attr.
*
* The attributes are passed in as strings for ease of access by the C++
* consumers of this method.
*
* @param attr The value for which the preference should be accessed.
* @param value The value of the preference to set.
* @return The value of the preference.
* @{
*/
boolean getBoolValue(in string attr);
void setBoolValue(in string attr, in boolean value);
ACString getCharValue(in string attr);
void setCharValue(in string attr, in ACString value);
AString getUnicharValue(in string attr);
void setUnicharValue(in string attr, in AString value);
long getIntValue(in string attr);
void setIntValue(in string attr, in long value);
/** @} */
/**
* Get or set the value as determined by the preference tree.
*
* These methods MUST NOT fail if the preference is not set, and therefore
* they MUST have a default value. This default value is provided in practice
* by use of a default preference tree. The standard format for the pref
* branches are mail.server.key. for per-server preferences,
* such that the preference is mail.server.key.attr.
*
* The attributes are passed in as strings for ease of access by the C++
* consumers of this method.
*
* There are two preference names on here for legacy reasons, where the first
* is the name which will be using a (preferred) relative preference and the
* second a deprecated absolute preference. Implementations that do not have
* to worry about supporting legacy preferences can safely ignore this second
* parameter. Callers must still provide a valid value, though.
*
* @param relpref The name of the relative file preference.
* @param absref The name of the absolute file preference.
* @param aValue The value of the preference to set.
* @return The value of the preference.
* @{
*/
nsIFile getFileValue(in string relpref, in string abspref);
void setFileValue(in string relpref, in string abspref, in nsIFile aValue);
/** @} */
/**
* this is really dangerous. this destroys all pref values
* do not call this unless you know what you're doing!
*/
void clearAllValues();
/**
* This is also very dangerous. This will low-level remove the files
* associated with this server on disk. It does not notify any listeners.
*/
void removeFiles();
attribute boolean valid;
AString toString();
void displayOfflineMsg(in nsIMsgWindow aWindow);
/* used for comparing nsIMsgIncomingServers */
boolean equals(in nsIMsgIncomingServer server);
/* Get Messages at startup */
readonly attribute boolean downloadMessagesAtStartup;
/* check to this if the server supports filters */
attribute boolean canHaveFilters;
/**
* can this server be removed from the account manager? for
* instance, local mail is not removable, but an imported folder is
*/
attribute boolean canDelete;
attribute boolean loginAtStartUp;
attribute boolean limitOfflineMessageSize;
attribute long maxMessageSize;
attribute nsIMsgRetentionSettings retentionSettings;
/* check if this server can be a default server */
readonly attribute boolean canBeDefaultServer;
/* check if this server allows search operations */
readonly attribute boolean canSearchMessages;
/* check if this server allows canEmptyTrashOnExit operations */
readonly attribute boolean canEmptyTrashOnExit;
/* display startup page once per account per session */
attribute boolean displayStartupPage;
attribute nsIMsgDownloadSettings downloadSettings;
/*
* Offline support level. Support level can vary based on abilities
* and features each server can offer wrt to offline service.
* Here is the legend to determine the each support level details
*
* supportLevel == 0 --> no offline support (default)
* supportLevel == 10 --> regular offline feature support
* supportLevel == 20 --> extended offline feature support
*
* Each server can initialize itself to the support level if needed
* to override the default choice i.e., no offline support.
*
* POP3, None and Movemail will default to 0.
* IMAP level 10 and NEWS with level 20.
*
*/
attribute long offlineSupportLevel;
/* create pretty name for migrated accounts */
AString generatePrettyNameForMigration();
/* does this server have disk space settings? */
readonly attribute boolean supportsDiskSpace;
/**
* Hide this server/account from the UI - used for smart mailboxes.
* The server can be retrieved from the account manager by name using the
* various Find methods, but nsIMsgAccountManager's GetAccounts and
* GetAllServers methods won't return the server/account.
*/
attribute boolean hidden;
/**
* If the server supports Fcc/Sent/etc, default prefs can point to
* the server. Otherwise, copies and folders prefs should point to
* Local Folders.
*
* By default this value is set to true via global pref 'allows_specialfolders_usage'
* (mailnews.js). For Nntp, the value is overridden to be false.
* If ISPs want to modify this value, they should do that in their rdf file
* by using this attribute. Please look at mozilla/mailnews/base/ispdata/aol.rdf for
* usage example.
*/
attribute boolean defaultCopiesAndFoldersPrefsToServer;
/* can this server allows sub folder creation */
attribute boolean canCreateFoldersOnServer;
/* can this server allows message filing ? */
attribute boolean canFileMessagesOnServer;
/* can this server allow compacting folders ? */
readonly attribute boolean canCompactFoldersOnServer;
/* can this server allow undo delete ? */
readonly attribute boolean canUndoDeleteOnServer;
/* used for setting up the filter UI */
readonly attribute nsMsgSearchScopeValue filterScope;
/* used for setting up the search UI */
readonly attribute nsMsgSearchScopeValue searchScope;
/**
* If the password for the server is available either via authentication
* in the current session or from password manager stored entries, return
* false. Otherwise, return true. If password is obtained from password
* manager, set the password member variable.
*/
readonly attribute boolean passwordPromptRequired;
/**
* for mail, this configures both the MDN filter, and the server-side
* spam filter filters, if needed.
*
* If we have set up to filter return receipts into
* our Sent folder, this utility method creates
* a filter to do that, and adds it to our filterList
* if it doesn't exist. If it does, it will enable it.
*
* this is not used by news filters (yet).
*/
void configureTemporaryFilters(in nsIMsgFilterList filterList);
/**
* If Sent folder pref is changed we need to clear the temporary
* return receipt filter so that the new return receipt filter can
* be recreated (by ConfigureTemporaryReturnReceiptsFilter()).
*/
void clearTemporaryReturnReceiptsFilter();
/**
* spam settings
*/
readonly attribute nsISpamSettings spamSettings;
readonly attribute nsIMsgFilterPlugin spamFilterPlugin;
nsIMsgFolder getMsgFolderFromURI(in nsIMsgFolder aFolderResource, in ACString aURI);
/// Indicates if any other server has deferred storage to this account.
readonly attribute boolean isDeferredTo;
const long keepDups = 0;
const long deleteDups = 1;
const long moveDupsToTrash = 2;
const long markDupsRead = 3;
attribute long incomingDuplicateAction;
// check if new hdr is a duplicate of a recently arrived header
boolean isNewHdrDuplicate(in nsIMsgDBHdr aNewHdr);
/**
* Set a boolean to force an inherited propertyName to return empty instead
* of inheriting from a parent folder, server, or the global
*
* @param propertyName The name of the property
* @param aForcePropertyEmpty true if an empty inherited property should be returned
*/
void setForcePropertyEmpty(in string propertyName, in boolean aForcePropertyEmpty);
/**
* Get a boolean to force an inherited propertyName to return empty instead
* of inheriting from a parent folder, server, or the global
*
* @param propertyName The name of the property
*
* @return true if an empty inherited property should be returned
*/
boolean getForcePropertyEmpty(in string propertyName);
/**
* Return the order in which this server type should appear in the folder pane.
* This sort order is a number between 100000000 and 900000000 so that RDF can
* use it as a string.
* The current return values are these:
* 0 = default account, 100000000 = mail accounts (POP3/IMAP4),
* 200000000 = Local Folders, 300000000 = IM accounts,
* 400000000 = RSS, 500000000 = News
* If a new server type is created a TB UI reviewer must decide its sort order.
*/
readonly attribute long sortOrder;
};
%{C++
/*
* Following values for offline support have been used by
* various files. If you are modifying any of the values
* below, please do take care of the following files.
* - mozilla/mailnews/base/src/nsMsgAccountManagerDS.cpp
* - mozilla/mailnews/base/util/nsMsgIncomingServer.cpp
* - mozilla/mailnews/imap/src/nsImapIncomingServer.cpp
* - mozilla/mailnews/local/src/nsPop3IncomingServer.cpp
* - mozilla/mailnews/news/src/nsNntpIncomingServer.cpp
* - mozilla/mailnews/base/content/msgAccountCentral.js
* - mozilla/modules/libpref/src/init/mailnews.js
* - ns/modules/libpref/src/init/mailnews-ns.js
* - ns/mailnews/base/ispdata/aol.rdf
* - ns/mailnews/base/ispdata/nswebmail.rdf
*/
#define OFFLINE_SUPPORT_LEVEL_NONE 0
#define OFFLINE_SUPPORT_LEVEL_REGULAR 10
#define OFFLINE_SUPPORT_LEVEL_EXTENDED 20
#define OFFLINE_SUPPORT_LEVEL_UNDEFINED -1
// Value when no port setting is found
#define PORT_NOT_SET -1
/* some useful macros to implement nsIMsgIncomingServer accessors */
#define NS_IMPL_SERVERPREF_STR(_class, _postfix, _prefname) \
NS_IMETHODIMP \
_class::Get##_postfix(nsACString& retval) \
{ \
return GetCharValue(_prefname, retval); \
} \
NS_IMETHODIMP \
_class::Set##_postfix(const nsACString& chvalue) \
{ \
return SetCharValue(_prefname, chvalue); \
}
#define NS_IMPL_SERVERPREF_BOOL(_class, _postfix, _prefname)\
NS_IMETHODIMP \
_class::Get##_postfix(bool *retval) \
{ \
return GetBoolValue(_prefname, retval); \
} \
NS_IMETHODIMP \
_class::Set##_postfix(bool bvalue) \
{ \
return SetBoolValue(_prefname, bvalue); \
}
#define NS_IMPL_SERVERPREF_INT(_class, _postfix, _prefname)\
NS_IMETHODIMP \
_class::Get##_postfix(int32_t *retval) \
{ \
return GetIntValue(_prefname, retval); \
} \
NS_IMETHODIMP \
_class::Set##_postfix(int32_t ivalue) \
{ \
return SetIntValue(_prefname, ivalue); \
}
%}