fix handling of errors opening dbs r=naving, sr=sspitzer 84438
git-svn-id: svn://10.0.0.236/trunk@98117 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
@@ -552,23 +552,15 @@ nsresult nsImapMailFolder::GetDatabase(nsIMsgWindow *aMsgWindow)
|
||||
if (NS_SUCCEEDED(rv) && mailDBFactory)
|
||||
folderOpen = mailDBFactory->OpenFolderDB(this, PR_TRUE, PR_TRUE, getter_AddRefs(mDatabase));
|
||||
|
||||
if(folderOpen == NS_MSG_ERROR_FOLDER_SUMMARY_MISSING || folderOpen == NS_MSG_ERROR_FOLDER_SUMMARY_OUT_OF_DATE)
|
||||
folderOpen = mailDBFactory->OpenFolderDB(this, PR_TRUE, PR_TRUE, getter_AddRefs(mDatabase));
|
||||
|
||||
if(mDatabase)
|
||||
{
|
||||
if(mAddListener)
|
||||
mDatabase->AddListener(this);
|
||||
|
||||
// if we have to regenerate the folder, run the parser url.
|
||||
if(folderOpen == NS_MSG_ERROR_FOLDER_SUMMARY_MISSING || folderOpen == NS_MSG_ERROR_FOLDER_SUMMARY_OUT_OF_DATE)
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
//Otherwise we have a valid database so lets extract necessary info.
|
||||
UpdateSummaryTotals(PR_TRUE);
|
||||
}
|
||||
UpdateSummaryTotals(PR_TRUE);
|
||||
}
|
||||
else
|
||||
folderOpen = rv;
|
||||
}
|
||||
return folderOpen;
|
||||
}
|
||||
@@ -1042,7 +1034,7 @@ NS_IMETHODIMP nsImapMailFolder::CompactAll(nsIUrlListener *aListener, nsIMsgWin
|
||||
|
||||
NS_IMETHODIMP nsImapMailFolder::EmptyTrash(nsIMsgWindow *msgWindow,
|
||||
nsIUrlListener *aListener)
|
||||
{
|
||||
{
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsIMsgFolder> trashFolder;
|
||||
rv = GetTrashFolder(getter_AddRefs(trashFolder));
|
||||
@@ -1074,6 +1066,22 @@ NS_IMETHODIMP nsImapMailFolder::EmptyTrash(nsIMsgWindow *msgWindow,
|
||||
|
||||
nsCOMPtr<nsIMsgDatabase> trashDB;
|
||||
|
||||
if (WeAreOffline())
|
||||
{
|
||||
nsCOMPtr <nsIMsgDatabase> trashDB;
|
||||
rv = trashFolder->GetMsgDatabase(nsnull, getter_AddRefs(trashDB));
|
||||
if (NS_SUCCEEDED(rv) && trashDB)
|
||||
{
|
||||
nsMsgKey fakeKey;
|
||||
trashDB->GetNextFakeOfflineMsgKey(&fakeKey);
|
||||
|
||||
nsCOMPtr <nsIMsgOfflineImapOperation> op;
|
||||
rv = trashDB->GetOfflineOpForKey(fakeKey, PR_TRUE, getter_AddRefs(op));
|
||||
trashFolder->SetFlag(MSG_FOLDER_FLAG_OFFLINEEVENTS);
|
||||
op->SetOperation(nsIMsgOfflineImapOperation::kDeleteAllMsgs);
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
rv = trashFolder->Delete(); // delete summary spec
|
||||
rv = trashFolder->GetMsgDatabase(msgWindow, getter_AddRefs(trashDB));
|
||||
|
||||
@@ -4714,6 +4722,10 @@ nsresult nsImapMailFolder::GetOriginalOp(nsIMsgOfflineImapOperation *op, nsIMsgO
|
||||
*originalOp = returnOp;
|
||||
return rv;
|
||||
}
|
||||
|
||||
//nsresult nsImapMailFolder::CopyOfflineMsgBody(nsIMsgFolder *srcFolder, nsMsgKey originalKey)
|
||||
//{
|
||||
//}
|
||||
|
||||
// this imap folder is the destination of an offline move/copy.
|
||||
// We are either offline, or doing a pseudo-offline delete (where we do an offline
|
||||
@@ -4854,7 +4866,12 @@ nsresult nsImapMailFolder::CopyMessagesOffline(nsIMsgFolder* srcFolder,
|
||||
undoManager->AddUndoAction(undoAction);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
PRBool hasMsgOffline = PR_FALSE;
|
||||
srcFolder->HasMsgOffline(originalKey, &hasMsgOffline);
|
||||
// if (hasMsgOffline)
|
||||
// CopyOfflineMsgBody(srcFolder, originalKey);
|
||||
|
||||
}
|
||||
else
|
||||
stopit = NS_ERROR_FAILURE;
|
||||
@@ -5131,6 +5148,7 @@ nsImapMailFolder::CopyFileMessage(nsIFileSpec* fileSpec,
|
||||
nsCOMPtr<nsISupports> srcSupport;
|
||||
nsCOMPtr<nsISupportsArray> messages;
|
||||
|
||||
mCopyListener = listener;
|
||||
if (!fileSpec) return rv;
|
||||
|
||||
srcSupport = do_QueryInterface(fileSpec, &rv);
|
||||
|
||||
@@ -388,6 +388,9 @@ nsresult nsMsgNewsFolder::GetDatabase(nsIMsgWindow *aMsgWindow)
|
||||
folderOpen = newsDBFactory->OpenFolderDB(this, PR_TRUE, PR_FALSE, getter_AddRefs(mDatabase));
|
||||
}
|
||||
|
||||
if(folderOpen == NS_MSG_ERROR_FOLDER_SUMMARY_MISSING || folderOpen == NS_MSG_ERROR_FOLDER_SUMMARY_OUT_OF_DATE)
|
||||
folderOpen = newsDBFactory->OpenFolderDB(this, PR_TRUE, PR_TRUE, getter_AddRefs(mDatabase));
|
||||
|
||||
if (mDatabase) {
|
||||
if(mAddListener)
|
||||
rv = mDatabase->AddListener(this);
|
||||
|
||||
Reference in New Issue
Block a user