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:
sspitzer%netscape.com 2003-02-26 05:49:10 +00:00
Родитель 63ffaa111b
Коммит 79251dc089
6 изменённых файлов: 30 добавлений и 36 удалений

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

@ -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;
};