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:
bienvenu%netscape.com
2001-06-28 01:24:59 +00:00
parent 9c261d9f98
commit df1ac857e3
2 changed files with 35 additions and 14 deletions

View File

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

View File

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