From c153462eef70a4bf436555107f7d6e4aea127cc9 Mon Sep 17 00:00:00 2001 From: "bienvenu%netscape.com" Date: Wed, 9 May 2001 13:43:32 +0000 Subject: [PATCH] fix problem detecting if special folders, like the sent folder, exist r=racham, sr=sspitzer 78791 --- mailnews/imap/public/nsIImapServerSink.idl | 36 +++++++++++----------- mailnews/imap/src/nsImapIncomingServer.cpp | 20 ++++++++++++ mailnews/imap/src/nsImapProtocol.cpp | 23 ++++++++++++-- 3 files changed, 59 insertions(+), 20 deletions(-) diff --git a/mailnews/imap/public/nsIImapServerSink.idl b/mailnews/imap/public/nsIImapServerSink.idl index 3b02ebce408..4c5f4ceb7d4 100644 --- a/mailnews/imap/public/nsIImapServerSink.idl +++ b/mailnews/imap/public/nsIImapServerSink.idl @@ -28,26 +28,26 @@ interface nsIMsgMailNewsUrl; [scriptable, uuid(8ec49a08-5cb0-11d3-a52c-0060b0fc04b7)] interface nsIImapServerSink : nsISupports { - void PossibleImapMailbox(in string folderPath, in wchar hierarchyDelim, in long boxFlags); - void DiscoveryDone(); - void OnlineFolderDelete(in string aFolderName); - void OnlineFolderCreateFailed(in string aFolderName); - void OnlineFolderRename(in string oldName, in string newName); - void FolderIsNoSelect(in string aFolderName, out boolean aResult); - void SetFolderAdminURL(in string aFolderName, in string adminUrl); + void possibleImapMailbox(in string folderPath, in wchar hierarchyDelim, in long boxFlags); + void discoveryDone(); + void onlineFolderDelete(in string aFolderName); + void onlineFolderCreateFailed(in string aFolderName); + void onlineFolderRename(in string oldName, in string newName); + void folderIsNoSelect(in string aFolderName, out boolean aResult); + void setFolderAdminURL(in string aFolderName, in string adminUrl); + boolean folderVerifiedOnline(in string aFolderName); + void subscribeUpgradeFinished(in boolean bringUpSubscribeUI); - void SubscribeUpgradeFinished(in boolean bringUpSubscribeUI); + void setCapability(in unsigned long capability); + void loadNextQueuedUrl(out boolean urlRun); - void SetCapability(in unsigned long capability); - void LoadNextQueuedUrl(out boolean urlRun); - - void GetImapStringByID(in long aMsgId, out wstring aString); - void FEAlert(in wstring aString, in nsIMsgWindow aMsgWindow); - void FEAlertFromServer(in string aString, in nsIMsgWindow aMsgWindow); - void CommitNamespaces(); - void PromptForPassword(out string aString, in nsIMsgWindow aMsgWindow); - void SetUserAuthenticated(in boolean authenticated); - void SetMailServerUrls(in string manageMailAccount, in string manageLists, in string manageFilters); + void getImapStringByID(in long aMsgId, out wstring aString); + void fEAlert(in wstring aString, in nsIMsgWindow aMsgWindow); + void fEAlertFromServer(in string aString, in nsIMsgWindow aMsgWindow); + void commitNamespaces(); + void promptForPassword(out string aString, in nsIMsgWindow aMsgWindow); + void setUserAuthenticated(in boolean authenticated); + void setMailServerUrls(in string manageMailAccount, in string manageLists, in string manageFilters); /* this is a bogus method on this interface but i need it until misc. sink is scriptable.. */ void RemoveChannelFromUrl(in nsIMsgMailNewsUrl aUrl, in unsigned long statusCode); diff --git a/mailnews/imap/src/nsImapIncomingServer.cpp b/mailnews/imap/src/nsImapIncomingServer.cpp index 455c39cd633..32ee47ed808 100644 --- a/mailnews/imap/src/nsImapIncomingServer.cpp +++ b/mailnews/imap/src/nsImapIncomingServer.cpp @@ -1284,6 +1284,26 @@ NS_IMETHODIMP nsImapIncomingServer::SubscribeUpgradeFinished(PRBool bringUpSubs return NS_OK; } +NS_IMETHODIMP nsImapIncomingServer::FolderVerifiedOnline(const char *folderName, PRBool *aResult) +{ + NS_ENSURE_ARG_POINTER(aResult); + *aResult = PR_FALSE; + nsCOMPtr rootFolder; + nsresult rv = GetRootFolder(getter_AddRefs(rootFolder)); + if (NS_SUCCEEDED(rv) && rootFolder) + { + nsCOMPtr aFolder; + rv = rootFolder->FindSubFolder(folderName, getter_AddRefs(aFolder)); + if (NS_SUCCEEDED(rv) && aFolder) + { + nsCOMPtr imapFolder = do_QueryInterface(aFolder); + if (imapFolder) + imapFolder->GetFolderVerifiedOnline(aResult); + } + } + return rv; +} + NS_IMETHODIMP nsImapIncomingServer::DiscoveryDone() { nsresult rv = NS_ERROR_FAILURE; diff --git a/mailnews/imap/src/nsImapProtocol.cpp b/mailnews/imap/src/nsImapProtocol.cpp index de15c530cf7..5ceeac42fc8 100644 --- a/mailnews/imap/src/nsImapProtocol.cpp +++ b/mailnews/imap/src/nsImapProtocol.cpp @@ -4898,8 +4898,27 @@ void nsImapProtocol::OnEnsureExistsFolder(const char * aSourceMailbox) List(aSourceMailbox, PR_FALSE); // how to tell if that succeeded? PRBool exists = PR_FALSE; - if (m_imapMailFolderSink) - m_imapMailFolderSink->GetFolderVerifiedOnline(&exists); + + // try converting aSourceMailbox to canonical format + + nsIMAPNamespace *nsForMailbox = nsnull; + m_hostSessionList->GetNamespaceForMailboxForHost(GetImapServerKey(), + aSourceMailbox, nsForMailbox); + // NS_ASSERTION (nsForMailbox, "Oops .. null nsForMailbox\n"); + + nsXPIDLCString name; + + if (nsForMailbox) + m_runningUrl->AllocateCanonicalPath(aSourceMailbox, + nsForMailbox->GetDelimiter(), + getter_Copies(name)); + else + m_runningUrl->AllocateCanonicalPath(aSourceMailbox, + kOnlineHierarchySeparatorUnknown, + getter_Copies(name)); + + if (m_imapServerSink) + m_imapServerSink->FolderVerifiedOnline(name, &exists); if (exists) {