make get new messages work with deferred pop3 accounts, sr=mscott 30057

This commit is contained in:
bienvenu%nventure.com 2004-05-13 13:45:40 +00:00
Родитель cb32b404e8
Коммит 7415f84b02
13 изменённых файлов: 136 добавлений и 117 удалений

Просмотреть файл

@ -33,7 +33,7 @@ function DoRDFCommand(dataSource, command, srcArray, argumentArray)
}
}
function GetNewMessages(selectedFolders, compositeDataSource)
function GetNewMessages(selectedFolders, server, compositeDataSource)
{
var numFolders = selectedFolders.length;
if(numFolders > 0)
@ -55,8 +55,10 @@ function GetNewMessages(selectedFolders, compositeDataSource)
var folderResource = msgFolder.QueryInterface(Components.interfaces.nsIRDFResource);
var folderArray = Components.classes["@mozilla.org/supports-array;1"].createInstance(Components.interfaces.nsISupportsArray);
folderArray.AppendElement(folderResource);
var serverArray = Components.classes["@mozilla.org/supports-array;1"].createInstance(Components.interfaces.nsISupportsArray);
serverArray.AppendElement(server);
DoRDFCommand(compositeDataSource, "http://home.netscape.com/NC-rdf#GetNewMessages", folderArray, null);
DoRDFCommand(compositeDataSource, "http://home.netscape.com/NC-rdf#GetNewMessages", folderArray, server);
}
}
else {

Просмотреть файл

@ -733,7 +733,7 @@ function GetMessagesForInboxOnServer(server)
folders[0] = inboxFolder;
var compositeDataSource = GetCompositeDataSource("GetNewMessages");
GetNewMessages(folders, compositeDataSource);
GetNewMessages(folders, server, compositeDataSource);
}
function MsgGetMessage()
@ -1881,7 +1881,7 @@ function GetFolderMessages()
folders[0] = folder;
var compositeDataSource = GetCompositeDataSource("GetNewMessages");
GetNewMessages(folders, compositeDataSource);
GetNewMessages(folders, folder.server, compositeDataSource);
}
function SendUnsentMessages()

Просмотреть файл

@ -48,6 +48,7 @@ interface nsIMsgRetentionSettings;
interface nsIMsgDownloadSettings;
interface nsISpamSettings;
interface nsIMsgFilterPlugin;
interface nsIUrlListener;
/*
* Interface for incoming mail/news host
@ -195,6 +196,9 @@ interface nsIMsgIncomingServer : nsISupports {
/* 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;

Просмотреть файл

@ -53,7 +53,7 @@ function DoRDFCommand(dataSource, command, srcArray, argumentArray)
}
}
function GetNewMessages(selectedFolders, compositeDataSource)
function GetNewMessages(selectedFolders, server, compositeDataSource)
{
var numFolders = selectedFolders.length;
if(numFolders > 0)
@ -75,8 +75,9 @@ function GetNewMessages(selectedFolders, compositeDataSource)
var folderResource = msgFolder.QueryInterface(Components.interfaces.nsIRDFResource);
var folderArray = Components.classes["@mozilla.org/supports-array;1"].createInstance(Components.interfaces.nsISupportsArray);
folderArray.AppendElement(folderResource);
DoRDFCommand(compositeDataSource, "http://home.netscape.com/NC-rdf#GetNewMessages", folderArray, null);
var serverArray = Components.classes["@mozilla.org/supports-array;1"].createInstance(Components.interfaces.nsISupportsArray);
serverArray.AppendElement(server);
DoRDFCommand(compositeDataSource, "http://home.netscape.com/NC-rdf#GetNewMessages", folderArray, serverArray);
}
}
else {

Просмотреть файл

@ -744,7 +744,7 @@ function GetMessagesForInboxOnServer(server)
folders[0] = inboxFolder;
var compositeDataSource = GetCompositeDataSource("GetNewMessages");
GetNewMessages(folders, compositeDataSource);
GetNewMessages(folders, server, compositeDataSource);
}
function MsgGetMessage()
@ -1900,7 +1900,7 @@ function GetFolderMessages()
folders[0] = folder;
var compositeDataSource = GetCompositeDataSource("GetNewMessages");
GetNewMessages(folders, compositeDataSource);
GetNewMessages(folders, folder.server, compositeDataSource);
}
function SendUnsentMessages()

Просмотреть файл

@ -772,7 +772,9 @@ nsMsgFolderDataSource::DoCommand(nsISupportsArray/*<nsIRDFResource>*/* aSources,
}
else if((aCommand == kNC_GetNewMessages))
{
rv = folder->GetNewMessages(mWindow, nsnull);
nsCOMPtr<nsIMsgIncomingServer> server = do_QueryElementAt(aArguments, i, &rv);
NS_ENSURE_SUCCESS(rv, rv);
rv = server->GetNewMessages(folder, mWindow, nsnull);
}
else if((aCommand == kNC_Copy))
{

Просмотреть файл

@ -187,6 +187,12 @@ nsMsgIncomingServer::PerformBiff(nsIMsgWindow* aMsgWindow)
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsMsgIncomingServer::GetNewMessages(nsIMsgFolder *aFolder, nsIMsgWindow *aMsgWindow,
nsIUrlListener *aUrlListener)
{
return aFolder->GetNewMessages(aMsgWindow, aUrlListener);
}
NS_IMETHODIMP nsMsgIncomingServer::GetPerformingBiff(PRBool *aPerformingBiff)
{
@ -358,6 +364,21 @@ nsMsgIncomingServer::GetServerURI(char* *aResult)
return NS_OK;
}
// helper routine to create local folder on disk, if it doesn't exist.
// Path must already have a LeafName for this to work...
nsresult
nsMsgIncomingServer::CreateLocalFolder(nsIFileSpec *path, const char *folderName)
{
(void) path->SetLeafName(folderName); // never fails
PRBool exists;
nsresult rv = path->Exists(&exists);
NS_ENSURE_SUCCESS(rv, rv);
if (!exists)
rv = path->Touch();
return rv;
}
nsresult
nsMsgIncomingServer::CreateRootFolder()
{
@ -420,6 +441,7 @@ nsMsgIncomingServer::GetBoolValue(const char *prefname,
return rv;
}
nsresult
nsMsgIncomingServer::getDefaultBoolPref(const char *prefname,
PRBool *val) {
@ -435,6 +457,7 @@ nsMsgIncomingServer::getDefaultBoolPref(const char *prefname,
return rv;
}
nsresult
nsMsgIncomingServer::SetBoolValue(const char *prefname,
PRBool val)

Просмотреть файл

@ -96,6 +96,8 @@ protected:
nsresult getDefaultBoolPref(const char *pref, PRBool *);
nsresult getDefaultIntPref(const char *pref, PRInt32 *);
nsresult CreateLocalFolder(nsIFileSpec *path, const char *folderName);
nsresult CreateRootFolder();
nsresult InternalSetHostName(const char *aHostname, const char *prefName);

Просмотреть файл

@ -51,6 +51,7 @@
#include "nsIMsgLocalMailFolder.h"
#include "nsIMsgMailSession.h"
#include "nsMsgBaseCID.h"
#include "nsIMsgAccountManager.h"
NS_IMPL_ISUPPORTS_INHERITED2(nsNoIncomingServer,
nsMsgIncomingServer,
@ -161,39 +162,59 @@ NS_IMETHODIMP nsNoIncomingServer::CopyDefaultMessages(const char *folderNameOnDi
return NS_OK;
}
PRBool nsNoIncomingServer::IsDeferredTo()
{
nsCOMPtr<nsIMsgAccountManager> accountManager
= do_GetService(NS_MSGACCOUNTMANAGER_CONTRACTID);
if (accountManager)
{
nsCOMPtr <nsIMsgAccount> thisAccount;
accountManager->FindAccountForServer(this, getter_AddRefs(thisAccount));
if (thisAccount)
{
nsCOMPtr <nsISupportsArray> allServers;
nsXPIDLCString accountKey;
thisAccount->GetKey(getter_Copies(accountKey));
accountManager->GetAllServers(getter_AddRefs(allServers));
if (allServers)
{
PRUint32 serverCount;
allServers->Count(&serverCount);
for (PRUint32 i = 0; i < serverCount; i++)
{
nsCOMPtr <nsIMsgIncomingServer> server (do_QueryElementAt(allServers, i));
if (server)
{
nsXPIDLCString deferredToAccount;
server->GetCharValue("deferred_to_account", getter_Copies(deferredToAccount));
if (deferredToAccount.Equals(accountKey))
return PR_TRUE;
}
}
}
}
}
return PR_FALSE;
}
NS_IMETHODIMP nsNoIncomingServer::CreateDefaultMailboxes(nsIFileSpec *path)
{
nsresult rv;
PRBool exists;
if (!path)
return NS_ERROR_NULL_POINTER;
// notice, no Inbox
// notice, no Inbox, unless we're deferred to...
// need to have a leaf to start with
rv = path->AppendRelativeUnixPath("Trash");
if (IsDeferredTo())
CreateLocalFolder(path, "Inbox");
CreateLocalFolder(path, "Trash");
if (NS_FAILED(rv)) return rv;
rv = path->Exists(&exists);
if (!exists) {
rv = path->Touch();
if (NS_FAILED(rv)) return rv;
}
rv = path->SetLeafName("Sent");
rv = CreateLocalFolder(path, "Sent");
if (NS_FAILED(rv)) return rv;
rv = path->Exists(&exists);
rv = CreateLocalFolder(path, "Drafts");
if (NS_FAILED(rv)) return rv;
if (!exists) {
rv = path->Touch();
if (NS_FAILED(rv)) return rv;
}
rv = path->SetLeafName("Drafts");
if (NS_FAILED(rv)) return rv;
rv = path->Exists(&exists);
if (NS_FAILED(rv)) return rv;
if (!exists) {
rv = path->Touch();
if (NS_FAILED(rv)) return rv;
}
// copy the default templates into the Templates folder
nsCOMPtr<nsIFileSpec> parentDir;
@ -202,26 +223,10 @@ NS_IMETHODIMP nsNoIncomingServer::CreateDefaultMailboxes(nsIFileSpec *path)
rv = CopyDefaultMessages("Templates",parentDir);
if (NS_FAILED(rv)) return rv;
// we may not have had any default templates. if so
// we still want to create the Templates folder
rv = path->SetLeafName("Templates");
rv = CreateLocalFolder(path, "Drafts");
if (NS_FAILED(rv)) return rv;
rv = path->Exists(&exists);
if (NS_FAILED(rv)) return rv;
if (!exists) {
rv = path->Touch();
if (NS_FAILED(rv)) return rv;
}
rv = path->SetLeafName("Unsent Messages");
if (NS_FAILED(rv)) return rv;
rv = path->Exists(&exists);
if (NS_FAILED(rv)) return rv;
if (!exists) {
rv = path->Touch();
if (NS_FAILED(rv)) return rv;
}
(void ) CreateLocalFolder(path, "Unsent Messages");
return NS_OK;
}

Просмотреть файл

@ -62,6 +62,8 @@ public:
NS_IMETHOD GetFilterList(nsIMsgWindow *aMsgWindow, nsIMsgFilterList **aResult);
NS_IMETHOD GetCanSearchMessages(PRBool *canSearchMessages);
NS_IMETHOD GetServerRequiresPasswordForBiff(PRBool *aServerRequiresPasswordForBiff);
PRBool IsDeferredTo();
};

Просмотреть файл

@ -266,56 +266,20 @@ nsPop3IncomingServer::SetFlagsOnDefaultMailboxes()
NS_IMETHODIMP nsPop3IncomingServer::CreateDefaultMailboxes(nsIFileSpec *path)
{
nsresult rv;
PRBool exists;
if (!path) return NS_ERROR_NULL_POINTER;
rv = path->AppendRelativeUnixPath("Inbox");
(void) path->AppendRelativeUnixPath("Inbox");
nsresult rv = CreateLocalFolder(path, "Inbox");
if (NS_FAILED(rv)) return rv;
rv = path->Exists(&exists);
if (!exists) {
rv = path->Touch();
rv = CreateLocalFolder(path, "Trash");
if (NS_FAILED(rv)) return rv;
}
rv = path->SetLeafName("Trash");
rv = CreateLocalFolder(path, "Sent");
if (NS_FAILED(rv)) return rv;
rv = path->Exists(&exists);
rv = CreateLocalFolder(path, "Drafts");
if (NS_FAILED(rv)) return rv;
if (!exists)
{
rv = path->Touch();
rv = CreateLocalFolder(path, "Drafts");
if (NS_FAILED(rv)) return rv;
}
rv = path->SetLeafName("Sent");
if (NS_FAILED(rv)) return rv;
rv = path->Exists(&exists);
if (NS_FAILED(rv)) return rv;
if (!exists)
{
rv = path->Touch();
if (NS_FAILED(rv)) return rv;
}
rv = path->SetLeafName("Drafts");
if (NS_FAILED(rv)) return rv;
rv = path->Exists(&exists);
if (NS_FAILED(rv)) return rv;
if (!exists)
{
rv = path->Touch();
if (NS_FAILED(rv)) return rv;
}
rv = path->SetLeafName("Templates");
if (NS_FAILED(rv)) return rv;
rv = path->Exists(&exists);
if (NS_FAILED(rv)) return rv;
if (!exists) {
rv = path->Touch();
if (NS_FAILED(rv)) return rv;
}
rv = CreateLocalFolder(path, "Templates");
return NS_OK;
}
@ -345,6 +309,18 @@ NS_IMETHODIMP nsPop3IncomingServer::GetNewMail(nsIMsgWindow *aMsgWindow, nsIUrlL
return pop3Service->GetNewMail(aMsgWindow, aUrlListener, inbox, this, aResult);
}
NS_IMETHODIMP
nsPop3IncomingServer::GetNewMessages(nsIMsgFolder *aFolder, nsIMsgWindow *aMsgWindow,
nsIUrlListener *aUrlListener)
{
nsresult rv;
nsCOMPtr<nsIPop3Service> pop3Service = do_GetService(kCPop3ServiceCID, &rv);
NS_ENSURE_SUCCESS(rv,rv);
return pop3Service->GetNewMail(aMsgWindow, aUrlListener, aFolder, this, nsnull);
}
NS_IMETHODIMP
nsPop3IncomingServer::GetDownloadMessagesAtStartup(PRBool *getMessagesAtStartup)
{

Просмотреть файл

@ -66,6 +66,8 @@ public:
NS_IMETHOD GetOfflineSupportLevel(PRInt32 *aSupportLevel);
NS_IMETHOD GetRootMsgFolder(nsIMsgFolder **aRootMsgFolder);
NS_IMETHOD GetCanFileMessagesOnServer(PRBool *aCanFileMessagesOnServer);
NS_IMETHOD GetNewMessages(nsIMsgFolder *aFolder, nsIMsgWindow *aMsgWindow,
nsIUrlListener *aUrlListener);
private:
PRUint32 m_capabilityFlags;
PRBool m_authenticated;