mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-03-05 16:22:53 +00:00
make get new messages work with deferred pop3 accounts, sr=mscott 30057
This commit is contained in:
parent
cb32b404e8
commit
7415f84b02
@ -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;
|
||||
|
||||
|
@ -45,7 +45,7 @@
|
||||
#define X_MOZILLA_STATUS_FORMAT X_MOZILLA_STATUS ": %04.4x"
|
||||
#define X_MOZILLA_STATUS_LEN /*1234567890123456*/ 16
|
||||
|
||||
#define X_MOZILLA_STATUS2 "X-Mozilla-Status2"
|
||||
#define X_MOZILLA_STATUS2 "X-Mozilla-Status2"
|
||||
#define X_MOZILLA_STATUS2_FORMAT X_MOZILLA_STATUS2 ": %08.8x"
|
||||
#define X_MOZILLA_STATUS2_LEN /*12345678901234567*/ 17
|
||||
|
||||
|
@ -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))
|
||||
{
|
||||
|
@ -131,8 +131,8 @@ nsMsgIncomingServer::SetKey(const char * serverKey)
|
||||
NS_IMETHODIMP
|
||||
nsMsgIncomingServer::SetRootFolder(nsIMsgFolder * aRootFolder)
|
||||
{
|
||||
m_rootFolder = aRootFolder;
|
||||
return NS_OK;
|
||||
m_rootFolder = aRootFolder;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
@ -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,10 +364,25 @@ 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()
|
||||
{
|
||||
nsresult rv;
|
||||
nsresult rv;
|
||||
// get the URI from the incoming server
|
||||
nsXPIDLCString serverUri;
|
||||
rv = GetServerURI(getter_Copies(serverUri));
|
||||
@ -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,68 +162,72 @@ 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
|
||||
rv = path->AppendRelativeUnixPath("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");
|
||||
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;
|
||||
}
|
||||
|
||||
// copy the default templates into the Templates folder
|
||||
nsCOMPtr<nsIFileSpec> parentDir;
|
||||
rv = path->GetParent(getter_AddRefs(parentDir));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
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");
|
||||
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;
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
nsresult rv;
|
||||
if (!path)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
// 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 = CreateLocalFolder(path, "Sent");
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
rv = CreateLocalFolder(path, "Drafts");
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
// copy the default templates into the Templates folder
|
||||
nsCOMPtr<nsIFileSpec> parentDir;
|
||||
rv = path->GetParent(getter_AddRefs(parentDir));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
rv = CopyDefaultMessages("Templates",parentDir);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
rv = CreateLocalFolder(path, "Drafts");
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
(void ) CreateLocalFolder(path, "Unsent Messages");
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsNoIncomingServer::GetNewMail(nsIMsgWindow *aMsgWindow, nsIUrlListener *aUrlListener, nsIMsgFolder *aInbox, nsIURI **aResult)
|
||||
|
@ -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();
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
}
|
||||
|
||||
rv = path->SetLeafName("Trash");
|
||||
rv = CreateLocalFolder(path, "Trash");
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
rv = path->Exists(&exists);
|
||||
rv = CreateLocalFolder(path, "Sent");
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
if (!exists)
|
||||
{
|
||||
rv = path->Touch();
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
}
|
||||
|
||||
rv = path->SetLeafName("Sent");
|
||||
rv = CreateLocalFolder(path, "Drafts");
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user