зеркало из https://github.com/mozilla/pjs.git
fix for big #192043.
can't delete more than one message in the "Unsent Messages" folder. argument to FindSubFolder() needs to be an escaped folder name. r/sr=bienvenu
This commit is contained in:
Родитель
63ffaa111b
Коммит
79251dc089
|
@ -56,7 +56,7 @@ interface nsIFolder : nsICollection {
|
|||
|
||||
void AddFolderListener(in nsIFolderListener listener);
|
||||
void RemoveFolderListener(in nsIFolderListener listener);
|
||||
nsIFolder FindSubFolder(in string subFolderName);
|
||||
nsIFolder FindSubFolder(in string escapedSubFolderName);
|
||||
|
||||
void NotifyPropertyChanged(in nsIAtom property,
|
||||
in string oldValue,
|
||||
|
|
|
@ -564,7 +564,7 @@ nsresult nsMsgFilter::ConvertMoveToFolderValue(nsIMsgRuleAction *filterAction, n
|
|||
nsAutoString unicodeStr;
|
||||
impSvc->SystemStringToUnicode(moveValue.get(), unicodeStr);
|
||||
nsXPIDLCString escapedName;
|
||||
rv =NS_MsgEscapeEncodeURLPath(unicodeStr.get(), getter_Copies(escapedName));
|
||||
rv = NS_MsgEscapeEncodeURLPath(unicodeStr.get(), getter_Copies(escapedName));
|
||||
if (NS_SUCCEEDED(rv) && escapedName)
|
||||
moveValue.Assign(escapedName.get());
|
||||
}
|
||||
|
|
|
@ -411,7 +411,7 @@ nsMsgFolder::GetSubFolders(nsIEnumerator* *result)
|
|||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsMsgFolder::FindSubFolder(const char *subFolderName, nsIFolder **aFolder)
|
||||
nsMsgFolder::FindSubFolder(const char *aEscapedSubFolderName, nsIFolder **aFolder)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
nsCOMPtr<nsIRDFService> rdf(do_GetService(kRDFServiceCID, &rv));
|
||||
|
@ -419,12 +419,11 @@ nsMsgFolder::FindSubFolder(const char *subFolderName, nsIFolder **aFolder)
|
|||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
// XXX use necko here
|
||||
// XXX use necko here
|
||||
nsCAutoString uri;
|
||||
uri.Append(mURI);
|
||||
uri.Append('/');
|
||||
|
||||
uri.Append(subFolderName);
|
||||
uri.Append(aEscapedSubFolderName);
|
||||
|
||||
nsCOMPtr<nsIRDFResource> res;
|
||||
rv = rdf->GetResource(uri, getter_AddRefs(res));
|
||||
|
|
|
@ -1920,7 +1920,7 @@ nsMsgLocalMailFolder::CopyFolderAcrossServer(nsIMsgFolder* srcFolder, nsIMsgWind
|
|||
nsXPIDLString folderName;
|
||||
srcFolder->GetName(getter_Copies(folderName));
|
||||
|
||||
rv = CreateSubfolder(folderName,msgWindow);
|
||||
rv = CreateSubfolder(folderName, msgWindow);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
nsXPIDLCString escapedFolderName;
|
||||
|
@ -3285,54 +3285,54 @@ NS_IMETHODIMP
|
|||
nsMsgLocalMailFolder::SetFlagsOnDefaultMailboxes(PRUint32 flags)
|
||||
{
|
||||
if (flags & MSG_FOLDER_FLAG_INBOX)
|
||||
setSubfolderFlag("Inbox", MSG_FOLDER_FLAG_INBOX);
|
||||
setSubfolderFlag(NS_LITERAL_STRING("Inbox").get(), MSG_FOLDER_FLAG_INBOX);
|
||||
|
||||
if (flags & MSG_FOLDER_FLAG_SENTMAIL)
|
||||
setSubfolderFlag("Sent", MSG_FOLDER_FLAG_SENTMAIL);
|
||||
setSubfolderFlag(NS_LITERAL_STRING("Sent").get(), MSG_FOLDER_FLAG_SENTMAIL);
|
||||
|
||||
if (flags & MSG_FOLDER_FLAG_DRAFTS)
|
||||
setSubfolderFlag("Drafts", MSG_FOLDER_FLAG_DRAFTS);
|
||||
setSubfolderFlag(NS_LITERAL_STRING("Drafts").get(), MSG_FOLDER_FLAG_DRAFTS);
|
||||
|
||||
if (flags & MSG_FOLDER_FLAG_TEMPLATES)
|
||||
setSubfolderFlag("Templates", MSG_FOLDER_FLAG_TEMPLATES);
|
||||
setSubfolderFlag(NS_LITERAL_STRING("Templates").get(), MSG_FOLDER_FLAG_TEMPLATES);
|
||||
|
||||
if (flags & MSG_FOLDER_FLAG_TRASH)
|
||||
setSubfolderFlag("Trash", MSG_FOLDER_FLAG_TRASH);
|
||||
setSubfolderFlag(NS_LITERAL_STRING("Trash").get(), MSG_FOLDER_FLAG_TRASH);
|
||||
|
||||
if (flags & MSG_FOLDER_FLAG_QUEUE)
|
||||
setSubfolderFlag("Unsent Messages", MSG_FOLDER_FLAG_QUEUE);
|
||||
setSubfolderFlag(NS_LITERAL_STRING("Unsent Messages").get(), MSG_FOLDER_FLAG_QUEUE);
|
||||
|
||||
// what about the Junk folder?
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsMsgLocalMailFolder::setSubfolderFlag(const char *aFolderName,
|
||||
nsMsgLocalMailFolder::setSubfolderFlag(const PRUnichar *aFolderName,
|
||||
PRUint32 flags)
|
||||
{
|
||||
|
||||
nsresult rv;
|
||||
|
||||
// FindSubFolder() expects the folder name to be escaped
|
||||
// see bug #192043
|
||||
nsXPIDLCString escapedFolderName;
|
||||
nsresult rv = NS_MsgEscapeEncodeURLPath(aFolderName, getter_Copies(escapedFolderName));
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
nsCOMPtr<nsIFolder> folder;
|
||||
rv = FindSubFolder(aFolderName, getter_AddRefs(folder));
|
||||
rv = FindSubFolder(escapedFolderName, getter_AddRefs(folder));
|
||||
|
||||
if (NS_FAILED(rv))
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
if (!folder)
|
||||
if (!folder)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsCOMPtr<nsIMsgFolder> msgFolder = do_QueryInterface(folder);
|
||||
if (!msgFolder)
|
||||
if (!msgFolder)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
rv = msgFolder->SetFlag(flags);
|
||||
if (NS_FAILED(rv))
|
||||
|
||||
rv = msgFolder->SetFlag(flags);
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
nsAutoString unicodeFolderName;
|
||||
unicodeFolderName.AssignWithConversion(aFolderName);
|
||||
msgFolder->SetPrettyName(unicodeFolderName.get());
|
||||
|
||||
|
||||
msgFolder->SetPrettyName(aFolderName);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -232,7 +232,7 @@ protected:
|
|||
PRInt32 mNumFilterClassifyRequests;
|
||||
nsMsgKeyArray mSpamKeysToMove;
|
||||
nsCString mSpamFolderURI;
|
||||
nsresult setSubfolderFlag(const char *aFolderName, PRUint32 flags);
|
||||
nsresult setSubfolderFlag(const PRUnichar *aFolderName, PRUint32 flags);
|
||||
};
|
||||
|
||||
#endif // nsMsgLocalMailFolder_h__
|
||||
|
|
|
@ -63,12 +63,7 @@ public:
|
|||
NS_IMETHOD GetCanBeDefaultServer(PRBool *canBeDefaultServer);
|
||||
NS_IMETHOD GetCanSearchMessages(PRBool *canSearchMessages);
|
||||
NS_IMETHOD GetOfflineSupportLevel(PRInt32 *aSupportLevel);
|
||||
private:
|
||||
|
||||
static nsresult setSubFolderFlag(nsIFolder *aRootFolder,
|
||||
PRUnichar *folderName,
|
||||
PRUint32 flag);
|
||||
|
||||
private:
|
||||
PRUint32 m_capabilityFlags;
|
||||
};
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче