diff --git a/mozilla/mailnews/local/public/nsIMsgLocalMailFolder.idl b/mozilla/mailnews/local/public/nsIMsgLocalMailFolder.idl index 345db84eec0..71bbeee8e11 100644 --- a/mozilla/mailnews/local/public/nsIMsgLocalMailFolder.idl +++ b/mozilla/mailnews/local/public/nsIMsgLocalMailFolder.idl @@ -56,6 +56,5 @@ interface nsIMsgLocalMailFolder : nsISupports { void parseFolder(in nsIMsgWindow aMsgWindow, in nsIUrlListener listener); void copyFolderLocal(in nsIMsgFolder srcFolder, in boolean isMove, in nsIMsgWindow msgWindow, in nsIMsgCopyServiceListener listener ); void doNextSubFolder(in nsIMsgFolder srcFolder, in nsIMsgWindow msgWindow, in nsIMsgCopyServiceListener listener ); - readonly attribute boolean parsingInbox; attribute boolean checkForNewMessagesAfterParsing; }; diff --git a/mozilla/mailnews/local/src/nsLocalMailFolder.cpp b/mozilla/mailnews/local/src/nsLocalMailFolder.cpp index 2da00f38786..7fa9ebdf65e 100644 --- a/mozilla/mailnews/local/src/nsLocalMailFolder.cpp +++ b/mozilla/mailnews/local/src/nsLocalMailFolder.cpp @@ -98,7 +98,6 @@ #include "nsEscape.h" #include "nsLocalStringBundle.h" - static NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID); static NS_DEFINE_CID(kMailboxServiceCID, NS_MAILBOXSERVICE_CID); static NS_DEFINE_CID(kCMailDB, NS_MAILDB_CID); @@ -149,7 +148,7 @@ nsLocalMailCopyState::~nsLocalMailCopyState() nsMsgLocalMailFolder::nsMsgLocalMailFolder(void) : mHaveReadNameFromDB(PR_FALSE), mGettingMail(PR_FALSE), mInitialized(PR_FALSE), mCopyState(nsnull), mType(nsnull), - mCheckForNewMessagesAfterParsing(PR_FALSE), mParsingInbox(PR_FALSE) + mCheckForNewMessagesAfterParsing(PR_FALSE) { // NS_INIT_REFCNT(); done by superclass @@ -572,8 +571,6 @@ nsresult nsMsgLocalMailFolder::GetDatabase(nsIMsgWindow *aMsgWindow) if(folderOpen == NS_MSG_ERROR_FOLDER_SUMMARY_MISSING || folderOpen == NS_MSG_ERROR_FOLDER_SUMMARY_OUT_OF_DATE) { - if(mFlags & MSG_FOLDER_FLAG_INBOX) - mParsingInbox = PR_TRUE; if(NS_FAILED(rv = ParseFolder(aMsgWindow, this))) return rv; else @@ -611,7 +608,6 @@ nsMsgLocalMailFolder::UpdateFolder(nsIMsgWindow *aWindow) NS_ENSURE_SUCCESS(rv,rv); } } - return rv; } @@ -1455,7 +1451,7 @@ NS_IMETHODIMP nsMsgLocalMailFolder::GetDeletable(PRBool *deletable) return NS_OK; } - + NS_IMETHODIMP nsMsgLocalMailFolder::GetRequiresCleanup(PRBool *requiresCleanup) { #ifdef HAVE_PORT @@ -1470,6 +1466,7 @@ NS_IMETHODIMP nsMsgLocalMailFolder::GetRequiresCleanup(PRBool *requiresCleanup) return NS_OK; } + NS_IMETHODIMP nsMsgLocalMailFolder::GetSizeOnDisk(PRUint32* size) { #ifdef HAVE_PORT @@ -2191,13 +2188,15 @@ NS_IMETHODIMP nsMsgLocalMailFolder::GetNewMessages(nsIMsgWindow *aWindow, nsIUrl PRUint32 numFolders; rv = rootFolder->GetFoldersWithFlag(MSG_FOLDER_FLAG_INBOX, 1, &numFolders, getter_AddRefs(inbox)); } - PRBool parsingInbox; nsCOMPtr localInbox = do_QueryInterface(inbox, &rv); if (NS_SUCCEEDED(rv) && localInbox) { - rv = localInbox->GetParsingInbox(&parsingInbox); - NS_ENSURE_SUCCESS(rv,rv); - if (!parsingInbox) + PRBool valid = PR_FALSE; + nsCOMPtr db; + rv = inbox->GetMsgDatabase(aWindow, getter_AddRefs(db)); + if (NS_SUCCEEDED(rv) && db) + rv = db->GetSummaryValid(&valid); + if (valid) rv = localMailServer->GetNewMail(aWindow, aListener, inbox, nsnull); else rv = localInbox->SetCheckForNewMessagesAfterParsing(PR_TRUE); @@ -3130,10 +3129,11 @@ nsMsgLocalMailFolder::OnStopRunningUrl(nsIURI * aUrl, nsresult aExitCode) } } } - if (mParsingInbox) + if (mDatabase && (mFlags & MSG_FOLDER_FLAG_INBOX)) { - mParsingInbox = PR_FALSE; - if (mCheckForNewMessagesAfterParsing) + PRBool valid; + mDatabase->GetSummaryValid(&valid); + if (valid && mCheckForNewMessagesAfterParsing) { if (msgWindow) rv = GetNewMessages(msgWindow, nsnull); @@ -3141,7 +3141,6 @@ nsMsgLocalMailFolder::OnStopRunningUrl(nsIURI * aUrl, nsresult aExitCode) } } } - mParsingInbox = PR_FALSE; //make sure we turn off this flag even if parsing fails or else it will be a deadlock return nsMsgDBFolder::OnStopRunningUrl(aUrl, aExitCode); } @@ -3274,14 +3273,6 @@ nsMsgLocalMailFolder::SetCheckForNewMessagesAfterParsing(PRBool aCheckForNewMess return NS_OK; } -NS_IMETHODIMP -nsMsgLocalMailFolder::GetParsingInbox(PRBool *aParsingInbox) -{ - NS_ENSURE_ARG(aParsingInbox); - *aParsingInbox = mParsingInbox; - return NS_OK; -} - NS_IMETHODIMP nsMsgLocalMailFolder::NotifyCompactCompleted() { diff --git a/mozilla/mailnews/local/src/nsLocalMailFolder.h b/mozilla/mailnews/local/src/nsLocalMailFolder.h index 6d28390a39a..5f8f90216a1 100644 --- a/mozilla/mailnews/local/src/nsLocalMailFolder.h +++ b/mozilla/mailnews/local/src/nsLocalMailFolder.h @@ -142,8 +142,7 @@ public: NS_IMETHOD UpdateSummaryTotals(PRBool force) ; NS_IMETHOD GetDeletable (PRBool *deletable); - NS_IMETHOD GetRequiresCleanup(PRBool *requiresCleanup); - + NS_IMETHOD GetRequiresCleanup(PRBool *requiresCleanup); NS_IMETHOD GetSizeOnDisk(PRUint32* size); NS_IMETHOD UserNeedsToAuthenticateForFolder(PRBool displayOnly, PRBool *authenticate); @@ -215,7 +214,6 @@ protected: //time const char *mType; PRBool mCheckForNewMessagesAfterParsing; - PRBool mParsingInbox; nsCOMPtr mMsgStringService; nsresult setSubfolderFlag(PRUnichar *aFolderName, PRUint32 flags); diff --git a/mozilla/mailnews/local/src/nsPop3IncomingServer.cpp b/mozilla/mailnews/local/src/nsPop3IncomingServer.cpp index 9bc99b87c83..174dc0888ad 100644 --- a/mozilla/mailnews/local/src/nsPop3IncomingServer.cpp +++ b/mozilla/mailnews/local/src/nsPop3IncomingServer.cpp @@ -177,59 +177,57 @@ nsPop3IncomingServer::GetLocalStoreType(char **type) NS_IMETHODIMP nsPop3IncomingServer::PerformBiff() { nsresult rv; - nsCOMPtr pop3Service(do_GetService(kCPop3ServiceCID, &rv)); - if (NS_FAILED(rv)) return rv; - - nsCOMPtr inbox; - nsCOMPtr rootFolder; - rv = GetRootFolder(getter_AddRefs(rootFolder)); - if(NS_SUCCEEDED(rv)) + if (NS_FAILED(rv)) return rv; + + nsCOMPtr inbox; + nsCOMPtr rootFolder; + rv = GetRootFolder(getter_AddRefs(rootFolder)); + if(NS_SUCCEEDED(rv)) { - nsCOMPtr rootMsgFolder = do_QueryInterface(rootFolder); - if(rootMsgFolder) + nsCOMPtr rootMsgFolder = do_QueryInterface(rootFolder); + if(rootMsgFolder) { - PRUint32 numFolders; - rv = rootMsgFolder->GetFoldersWithFlag(MSG_FOLDER_FLAG_INBOX, 1, - &numFolders, - getter_AddRefs(inbox)); - if (NS_FAILED(rv) || numFolders != 1) return rv; - } - } + PRUint32 numFolders; + rv = rootMsgFolder->GetFoldersWithFlag(MSG_FOLDER_FLAG_INBOX, 1, + &numFolders, + getter_AddRefs(inbox)); + if (NS_FAILED(rv) || numFolders != 1) return rv; + } + } //Biff just needs to give status in one of the windows. so do it in topmost window. - nsCOMPtr mailSession = - do_GetService(kCMsgMailSessionCID, &rv); - if (NS_FAILED(rv)) return rv; - - - nsCOMPtr msgWindow; + nsCOMPtr mailSession = do_GetService(kCMsgMailSessionCID, &rv); + if (NS_FAILED(rv)) return rv; + + nsCOMPtr msgWindow; rv = mailSession->GetTopmostMsgWindow(getter_AddRefs(msgWindow)); - if(NS_SUCCEEDED(rv)) + if(NS_SUCCEEDED(rv)) + { + PRBool downloadOnBiff = PR_FALSE; + rv = GetDownloadOnBiff(&downloadOnBiff); + if (downloadOnBiff) { - PRBool downloadOnBiff = PR_FALSE; - rv = GetDownloadOnBiff(&downloadOnBiff); - if (downloadOnBiff) - { - nsCOMPtr localInbox = do_QueryInterface(inbox, &rv); - PRBool parsingInbox; - if (localInbox && NS_SUCCEEDED(rv)) - { - rv = localInbox->GetParsingInbox(&parsingInbox); - NS_ENSURE_SUCCESS(rv,rv); - if (!parsingInbox) - rv = pop3Service->GetNewMail(msgWindow, nsnull, inbox, this, nsnull); - else - rv = localInbox->SetCheckForNewMessagesAfterParsing(PR_TRUE); - } - } + nsCOMPtr localInbox = do_QueryInterface(inbox, &rv); + if (localInbox && NS_SUCCEEDED(rv)) + { + PRBool valid =PR_FALSE; + nsCOMPtr db; + rv = inbox->GetMsgDatabase(msgWindow, getter_AddRefs(db)); + if (NS_SUCCEEDED(rv) && db) + rv = db->GetSummaryValid(&valid); + if (NS_SUCCEEDED(rv) && valid) + rv = pop3Service->GetNewMail(msgWindow, nsnull, inbox, this, nsnull); else - rv = pop3Service->CheckForNewMail(msgWindow, nsnull, inbox, this, - nsnull); + rv = localInbox->SetCheckForNewMessagesAfterParsing(PR_TRUE); + } } - - return NS_OK; + else + rv = pop3Service->CheckForNewMail(msgWindow, nsnull, inbox, this, + nsnull); + } + return NS_OK; } NS_IMETHODIMP