From df1ac857e3900fb9cb70785880bf2143d71275e1 Mon Sep 17 00:00:00 2001 From: "bienvenu%netscape.com" Date: Thu, 28 Jun 2001 01:24:59 +0000 Subject: [PATCH] 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 --- .../mailnews/imap/src/nsImapMailFolder.cpp | 46 +++++++++++++------ mozilla/mailnews/news/src/nsNewsFolder.cpp | 3 ++ 2 files changed, 35 insertions(+), 14 deletions(-) diff --git a/mozilla/mailnews/imap/src/nsImapMailFolder.cpp b/mozilla/mailnews/imap/src/nsImapMailFolder.cpp index 949715a8997..d6b5d000dcc 100644 --- a/mozilla/mailnews/imap/src/nsImapMailFolder.cpp +++ b/mozilla/mailnews/imap/src/nsImapMailFolder.cpp @@ -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 trashFolder; rv = GetTrashFolder(getter_AddRefs(trashFolder)); @@ -1074,6 +1066,22 @@ NS_IMETHODIMP nsImapMailFolder::EmptyTrash(nsIMsgWindow *msgWindow, nsCOMPtr trashDB; + if (WeAreOffline()) + { + nsCOMPtr trashDB; + rv = trashFolder->GetMsgDatabase(nsnull, getter_AddRefs(trashDB)); + if (NS_SUCCEEDED(rv) && trashDB) + { + nsMsgKey fakeKey; + trashDB->GetNextFakeOfflineMsgKey(&fakeKey); + + nsCOMPtr 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 srcSupport; nsCOMPtr messages; + mCopyListener = listener; if (!fileSpec) return rv; srcSupport = do_QueryInterface(fileSpec, &rv); diff --git a/mozilla/mailnews/news/src/nsNewsFolder.cpp b/mozilla/mailnews/news/src/nsNewsFolder.cpp index db5919181c1..95adbee8558 100644 --- a/mozilla/mailnews/news/src/nsNewsFolder.cpp +++ b/mozilla/mailnews/news/src/nsNewsFolder.cpp @@ -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);