/* -*- Mode: IDL; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is mozilla.org code. * * The Initial Developer of the Original Code is * Netscape Communications Corporation. * Portions created by the Initial Developer are Copyright (C) 1998 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Seth Spitzer * * Alternatively, the contents of this file may be used under the terms of * either of the GNU General Public License Version 2 or later (the "GPL"), * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #include "nsISupports.idl" #include "MailNewsTypes2.idl" interface nsIFileSpec; interface nsIMsgFolder; interface nsIMsgFolderCache; interface nsIMsgWindow; interface nsIMsgFilterList; interface nsIMsgRetentionSettings; interface nsIMsgDownloadSettings; interface nsISpamSettings; interface nsIMsgFilterPlugin; interface nsIUrlListener; interface nsIMsgDBHdr; /* * 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(DBA43E06-A4B2-4c9e-B4D5-002504F63212)] interface nsIMsgIncomingServer : nsISupports { /** * internal pref key - guaranteed to be unique across all servers */ attribute string key; /** * pretty name - should be "userid on hostname" * if the pref is not set */ attribute wstring 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 wstring constructedPrettyName; /** * hostname of the server */ attribute string hostName; /** * real hostname of the server (if server name is changed it's stored here) */ attribute string realHostName; /* port of the server */ attribute long port; /** * userid to log into the server */ attribute string username; /** * real username of the server (if username is changed it's stored here) */ attribute string realUsername; /** * protocol type, i.e. "pop3", "imap", "nntp", "none", etc * used to construct URLs */ attribute string type; readonly attribute AString accountManagerChrome; /** * the schema for the local mail store, such * as "mailbox", "imap", or "news" * used to construct URIs */ readonly attribute string localStoreType; // Perform specific tasks (reset flags, remove files, etc) for account user/server name changes. void OnUserOrHostNameChanged(in string oldName, in string newName); /* should we remember the password? */ attribute boolean rememberPassword; /* cleartext version of the password */ attribute string password; /* prompt the user for a password */ string getPasswordWithUI(in wstring aPromptString, in wstring aPromptTitle, in nsIMsgWindow aMsgWindow, out boolean okayValue); /* forget the password in memory and in single signon database */ void forgetPassword(); /** * logon succeeded - persist password, if user chooses. */ void storePassword(); /* forget the password in memory which is cached for the session */ void forgetSessionPassword(); /* should we download whole messages when biff goes off? */ /* in 4.x, this was "mail.pop3_gets_new_mail" for pop */ /* "mail.imap.new_mail_get_headers" for imap, and it was global. in 5.x, it is per server */ 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 nsIFileSpec localPath; /* the RDF URI for the root mail folder */ readonly attribute string 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; /* should we use a secure channel? */ attribute boolean isSecure; /* should we use secure authentication? */ attribute boolean useSecAuth; const long defaultSocket = 0; const long tryTLS = 1; const long alwaysUseTLS = 2; const long useSSL = 3; /* use above values */ attribute long socketType; /* if a logon mechanism fails, should we fallback to a different mechanism? */ attribute boolean logonFallback; /* can server support a secure channel? */ readonly attribute boolean isSecureServer; /* what kind of logon redirector to use for this server, if any */ attribute string redirectorType; /* empty trash on exit */ attribute boolean emptyTrashOnExit; /* get filter list */ nsIMsgFilterList getFilterList(in nsIMsgWindow aMsgWindow); /* set filter list */ void setFilterList(in nsIMsgFilterList aFilterList); /* we use this to set the default local path. we use this when migrating prefs */ void SetDefaultLocalPath(in nsIFileSpec aDefaultLocalPath); /* 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(); /* access to generic attributes */ boolean getBoolValue(in string attr); void setBoolValue(in string attr, in boolean value); string getCharValue(in string attr); void setCharValue(in string attr, in string value); wstring getUnicharValue(in string attr); void setUnicharValue(in string attr, in wstring value); long getIntValue(in string attr); void setIntValue(in string attr, in long value); nsIFileSpec getFileValue(in string attr); void setFileValue(in string attr, in nsIFileSpec value); /** * 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 remove the files * associated with this server on disk. */ void removeFiles(); attribute boolean valid; wstring 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 */ readonly 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 */ wstring generatePrettyNameForMigration(); /* does this server have disk space settings? */ readonly attribute boolean supportsDiskSpace; /** * 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; /** * these generic getter / setters, useful for extending mailnews * note, these attributes persist across sessions */ wstring getUnicharAttribute(in string name); void setUnicharAttribute(in string name, in wstring value); string getCharAttribute(in string name); void setCharAttribute(in string name, in string value); boolean getBoolAttribute(in string name); void setBoolAttribute(in string name, in boolean value); long getIntAttribute(in string name); void setIntAttribute(in string name, in long value); /** * 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 string aURI); 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); }; %{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/resources/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(char **retval) \ { \ return GetCharValue(_prefname, retval); \ } \ NS_IMETHODIMP \ _class::Set##_postfix(const char *chvalue) \ { \ return SetCharValue(_prefname, chvalue); \ } #define NS_IMPL_SERVERPREF_BOOL(_class, _postfix, _prefname)\ NS_IMETHODIMP \ _class::Get##_postfix(PRBool *retval) \ { \ return GetBoolValue(_prefname, retval); \ } \ NS_IMETHODIMP \ _class::Set##_postfix(PRBool bvalue) \ { \ return SetBoolValue(_prefname, bvalue); \ } #define NS_IMPL_SERVERPREF_INT(_class, _postfix, _prefname)\ NS_IMETHODIMP \ _class::Get##_postfix(PRInt32 *retval) \ { \ return GetIntValue(_prefname, retval); \ } \ NS_IMETHODIMP \ _class::Set##_postfix(PRInt32 ivalue) \ { \ return SetIntValue(_prefname, ivalue); \ } #define NS_IMPL_SERVERPREF_FILE(_class, _postfix, _prefname)\ NS_IMETHODIMP \ _class::Get##_postfix(nsIFileSpec **retval) \ { \ return GetFileValue(_prefname, retval); \ } \ NS_IMETHODIMP \ _class::Set##_postfix(nsIFileSpec* ivalue) \ { \ return SetFileValue(_prefname, ivalue); \ } %}