nsresult nsPop3IncomingServer::GetInbox(nsIMsgWindow *msgWindow, nsIMsgFolder **inbox) { NS_ENSURE_ARG_POINTER(inbox); nsCOMPtr<nsIMsgFolder> rootFolder; nsresult rv = GetRootMsgFolder(getter_AddRefs(rootFolder)); if(NS_SUCCEEDED(rv) && rootFolder) { rootFolder->GetFolderWithFlags(nsMsgFolderFlags::Inbox, inbox); } nsCOMPtr<nsIMsgLocalMailFolder> localInbox = do_QueryInterface(*inbox, &rv); if (NS_SUCCEEDED(rv) && localInbox) { nsCOMPtr <nsIMsgDatabase> db; rv = (*inbox)->GetMsgDatabase(getter_AddRefs(db)); if (NS_FAILED(rv)) { (*inbox)->SetMsgDatabase(nullptr); (void) localInbox->SetCheckForNewMessagesAfterParsing(true); // this will cause a reparse of the mail folder. localInbox->GetDatabaseWithReparse(nullptr, msgWindow, getter_AddRefs(db)); rv = NS_MSG_ERROR_FOLDER_SUMMARY_OUT_OF_DATE; } } return rv; }
NS_IMETHODIMP nsRssIncomingServer::PerformBiff(nsIMsgWindow *aMsgWindow) { // Get the account root (server) folder and pass it on. nsCOMPtr<nsIMsgFolder> rootRSSFolder; GetRootMsgFolder(getter_AddRefs(rootRSSFolder)); nsCOMPtr<nsIUrlListener> urlListener = do_QueryInterface(rootRSSFolder); GetNewMail(aMsgWindow, urlListener, rootRSSFolder, nsnull); return NS_OK; }
NS_IMETHODIMP nsPop3IncomingServer::PerformBiff(nsIMsgWindow *aMsgWindow) { nsresult rv; nsCOMPtr<nsIPop3Service> pop3Service(do_GetService(kCPop3ServiceCID, &rv)); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIMsgFolder> inbox; nsCOMPtr<nsIMsgFolder> rootMsgFolder; nsCOMPtr<nsIUrlListener> urlListener; rv = GetRootMsgFolder(getter_AddRefs(rootMsgFolder)); NS_ENSURE_TRUE(rootMsgFolder, NS_ERROR_FAILURE); rootMsgFolder->GetFolderWithFlags(nsMsgFolderFlags::Inbox, getter_AddRefs(inbox)); if (!inbox) return NS_ERROR_FAILURE; nsCOMPtr <nsIMsgIncomingServer> server; inbox->GetServer(getter_AddRefs(server)); server->SetPerformingBiff(true); urlListener = do_QueryInterface(inbox); bool downloadOnBiff = false; rv = GetDownloadOnBiff(&downloadOnBiff); if (downloadOnBiff) { nsCOMPtr <nsIMsgLocalMailFolder> localInbox = do_QueryInterface(inbox, &rv); if (localInbox && NS_SUCCEEDED(rv)) { bool valid = false; nsCOMPtr <nsIMsgDatabase> db; rv = inbox->GetMsgDatabase(getter_AddRefs(db)); if (NS_SUCCEEDED(rv) && db) rv = db->GetSummaryValid(&valid); if (NS_SUCCEEDED(rv) && valid) rv = pop3Service->GetNewMail(aMsgWindow, urlListener, inbox, this, nullptr); else { bool isLocked; inbox->GetLocked(&isLocked); if (!isLocked) rv = localInbox->GetDatabaseWithReparse(urlListener, aMsgWindow, getter_AddRefs(db)); if (NS_SUCCEEDED(rv)) rv = localInbox->SetCheckForNewMessagesAfterParsing(true); } } } else rv = pop3Service->CheckForNewMail(aMsgWindow, urlListener, inbox, this, nullptr); return NS_OK; }
NS_IMETHODIMP nsMovemailIncomingServer::PerformBiff(nsIMsgWindow *aMsgWindow) { nsresult rv; nsCOMPtr<nsIMovemailService> movemailService(do_GetService( kCMovemailServiceCID, &rv)); if (NS_FAILED(rv)) return rv; nsCOMPtr<nsIMsgFolder> inbox; nsCOMPtr<nsIMsgFolder> rootMsgFolder; nsCOMPtr<nsIUrlListener> urlListener; rv = GetRootMsgFolder(getter_AddRefs(rootMsgFolder)); if(NS_SUCCEEDED(rv) && rootMsgFolder) { rootMsgFolder->GetFolderWithFlags(nsMsgFolderFlags::Inbox, getter_AddRefs(inbox)); if (!inbox) return NS_ERROR_FAILURE; } SetPerformingBiff(PR_TRUE); urlListener = do_QueryInterface(inbox); bool downloadOnBiff = false; rv = GetDownloadOnBiff(&downloadOnBiff); if (downloadOnBiff) { nsCOMPtr <nsIMsgLocalMailFolder> localInbox = do_QueryInterface(inbox, &rv); if (localInbox && NS_SUCCEEDED(rv)) { bool valid = false; nsCOMPtr <nsIMsgDatabase> db; rv = inbox->GetMsgDatabase(getter_AddRefs(db)); if (NS_SUCCEEDED(rv) && db) { rv = db->GetSummaryValid(&valid); } if (NS_SUCCEEDED(rv) && valid) { rv = movemailService->GetNewMail(aMsgWindow, urlListener, inbox, this, nsnull); } else { bool isLocked; inbox->GetLocked(&isLocked); if (!isLocked) { rv = localInbox->ParseFolder(aMsgWindow, urlListener); } if (NS_SUCCEEDED(rv)) { rv = localInbox->SetCheckForNewMessagesAfterParsing(PR_TRUE); } } } } else { movemailService->CheckForNewMail(urlListener, inbox, this, nsnull); } return NS_OK; }