зеркало из https://github.com/mozilla/gecko-dev.git
fix for prompting about deleting folders when emtpying trash; previous fix didn't prevent folders from getting deleted on server sr=mscott 232557
This commit is contained in:
Родитель
3b5cc1eeb2
Коммит
bbe45d054e
|
@ -1256,23 +1256,6 @@ NS_IMETHODIMP nsImapMailFolder::EmptyTrash(nsIMsgWindow *aMsgWindow,
|
||||||
do_GetService(NS_IMAPSERVICE_CONTRACTID, &rv);
|
do_GetService(NS_IMAPSERVICE_CONTRACTID, &rv);
|
||||||
if (NS_SUCCEEDED(rv))
|
if (NS_SUCCEEDED(rv))
|
||||||
{
|
{
|
||||||
if (aListener)
|
|
||||||
{
|
|
||||||
rv = imapService->DeleteAllMessages(m_eventQueue, trashFolder,
|
|
||||||
aListener, nsnull);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
nsCOMPtr<nsIUrlListener> urlListener =
|
|
||||||
do_QueryInterface(trashFolder);
|
|
||||||
rv = imapService->DeleteAllMessages(m_eventQueue, trashFolder,
|
|
||||||
urlListener, nsnull);
|
|
||||||
}
|
|
||||||
// return an error if this failed. We want the empty trash on exit code
|
|
||||||
// to know if this fails so that it doesn't block waiting for empty trash to finish.
|
|
||||||
if (NS_FAILED(rv))
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
PRBool hasSubfolders = PR_FALSE;
|
PRBool hasSubfolders = PR_FALSE;
|
||||||
rv = trashFolder->GetHasSubFolders(&hasSubfolders);
|
rv = trashFolder->GetHasSubFolders(&hasSubfolders);
|
||||||
if (hasSubfolders)
|
if (hasSubfolders)
|
||||||
|
@ -1302,7 +1285,6 @@ NS_IMETHODIMP nsImapMailFolder::EmptyTrash(nsIMsgWindow *aMsgWindow,
|
||||||
parentWindow = do_QueryInterface(docShell);
|
parentWindow = do_QueryInterface(docShell);
|
||||||
rv = IMAPGetStringBundle(getter_AddRefs(bundle));
|
rv = IMAPGetStringBundle(getter_AddRefs(bundle));
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
}
|
|
||||||
rv = aEnumerator->First();
|
rv = aEnumerator->First();
|
||||||
while(NS_SUCCEEDED(rv))
|
while(NS_SUCCEEDED(rv))
|
||||||
{
|
{
|
||||||
|
@ -1322,20 +1304,51 @@ NS_IMETHODIMP nsImapMailFolder::EmptyTrash(nsIMsgWindow *aMsgWindow,
|
||||||
getter_Copies(confirmText));
|
getter_Copies(confirmText));
|
||||||
// Got the text, now show dialog.
|
// Got the text, now show dialog.
|
||||||
rv = promptService->ConfirmEx(parentWindow, nsnull, confirmText,
|
rv = promptService->ConfirmEx(parentWindow, nsnull, confirmText,
|
||||||
(nsIPromptService::BUTTON_TITLE_YES * nsIPromptService::BUTTON_POS_0) +
|
(nsIPromptService::BUTTON_TITLE_OK * nsIPromptService::BUTTON_POS_0) +
|
||||||
(nsIPromptService::BUTTON_TITLE_NO * nsIPromptService::BUTTON_POS_1) +
|
(nsIPromptService::BUTTON_TITLE_CANCEL * nsIPromptService::BUTTON_POS_1),
|
||||||
(nsIPromptService::BUTTON_TITLE_CANCEL * nsIPromptService::BUTTON_POS_2),
|
|
||||||
nsnull, nsnull, nsnull, nsnull, nsnull, &dlgResult);
|
nsnull, nsnull, nsnull, nsnull, nsnull, &dlgResult);
|
||||||
}
|
}
|
||||||
if ( NS_SUCCEEDED( rv ) )
|
if ( NS_SUCCEEDED( rv ) )
|
||||||
{
|
{
|
||||||
if (dlgResult == 1)
|
if (dlgResult == 1)
|
||||||
confirmed = PR_FALSE;
|
return NS_BINDING_ABORTED;
|
||||||
else if (dlgResult == 2)
|
rv = aEnumerator->Next();
|
||||||
rv = NS_BINDING_ABORTED;
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (aListener)
|
||||||
|
{
|
||||||
|
rv = imapService->DeleteAllMessages(m_eventQueue, trashFolder,
|
||||||
|
aListener, nsnull);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nsCOMPtr<nsIUrlListener> urlListener =
|
||||||
|
do_QueryInterface(trashFolder);
|
||||||
|
rv = imapService->DeleteAllMessages(m_eventQueue, trashFolder,
|
||||||
|
urlListener, nsnull);
|
||||||
|
}
|
||||||
|
// return an error if this failed. We want the empty trash on exit code
|
||||||
|
// to know if this fails so that it doesn't block waiting for empty trash to finish.
|
||||||
if (NS_FAILED(rv))
|
if (NS_FAILED(rv))
|
||||||
break;
|
return rv;
|
||||||
if (confirmed)
|
}
|
||||||
|
if (hasSubfolders)
|
||||||
|
{
|
||||||
|
nsCOMPtr<nsIEnumerator> aEnumerator;
|
||||||
|
nsCOMPtr<nsISupports> aSupport;
|
||||||
|
nsCOMPtr<nsIMsgFolder> aFolder;
|
||||||
|
nsCOMPtr<nsISupportsArray> aSupportsArray;
|
||||||
|
rv = NS_NewISupportsArray(getter_AddRefs(aSupportsArray));
|
||||||
|
if (NS_FAILED(rv)) return rv;
|
||||||
|
rv = trashFolder->GetSubFolders(getter_AddRefs(aEnumerator));
|
||||||
|
|
||||||
|
rv = aEnumerator->First();
|
||||||
|
while(NS_SUCCEEDED(rv))
|
||||||
|
{
|
||||||
|
PRBool confirmed = PR_TRUE;
|
||||||
|
PRInt32 dlgResult = -1;
|
||||||
|
rv = aEnumerator->CurrentItem(getter_AddRefs(aSupport));
|
||||||
aSupportsArray->AppendElement(aSupport);
|
aSupportsArray->AppendElement(aSupport);
|
||||||
rv = aEnumerator->Next();
|
rv = aEnumerator->Next();
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче