// user has clicked get new messages on this server. If other servers defer to this server, // we need to get new mail for them. But if this server defers to an other server, // I think we only get new mail for this server. NS_IMETHODIMP nsPop3IncomingServer::GetNewMessages(nsIMsgFolder *aFolder, nsIMsgWindow *aMsgWindow, nsIUrlListener *aUrlListener) { nsresult rv; nsCOMPtr<nsIPop3Service> pop3Service = do_GetService(kCPop3ServiceCID, &rv); NS_ENSURE_SUCCESS(rv,rv); nsCOMPtr <nsIMsgFolder> inbox; rv = GetInbox(aMsgWindow, getter_AddRefs(inbox)); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr <nsIURI> url; nsCOMPtr <nsIMsgIncomingServer> server; nsCOMPtr <nsISupportsArray> deferredServers; nsCString deferredToAccount; GetDeferredToAccount(deferredToAccount); if (deferredToAccount.IsEmpty()) { aFolder->GetServer(getter_AddRefs(server)); GetDeferredServers(server, getter_AddRefs(deferredServers)); } uint32_t numDeferredServers; if (deferredToAccount.IsEmpty() && deferredServers && NS_SUCCEEDED(deferredServers->Count(&numDeferredServers)) && numDeferredServers > 0) { nsPop3GetMailChainer *getMailChainer = new nsPop3GetMailChainer; NS_ENSURE_TRUE(getMailChainer, NS_ERROR_OUT_OF_MEMORY); getMailChainer->AddRef(); // this object owns itself and releases when done. nsCOMPtr <nsISupports> supports; this->QueryInterface(NS_GET_IID(nsISupports), getter_AddRefs(supports)); deferredServers->InsertElementAt(supports, 0); return getMailChainer->GetNewMailForServers(deferredServers, aMsgWindow, inbox, aUrlListener); } if (m_runningProtocol) return NS_MSG_FOLDER_BUSY; return pop3Service->GetNewMail(aMsgWindow, aUrlListener, inbox, this, getter_AddRefs(url)); }
// user has clicked get new messages on this server. If other servers defer to this server, // we need to get new mail for them. But if this server defers to an other server, // I think we only get new mail for this server. NS_IMETHODIMP nsPop3IncomingServer::GetNewMessages(nsIMsgFolder *aFolder, nsIMsgWindow *aMsgWindow, nsIUrlListener *aUrlListener) { nsresult rv; nsCOMPtr<nsIPop3Service> pop3Service = do_GetService(kCPop3ServiceCID, &rv); NS_ENSURE_SUCCESS(rv,rv); nsCOMPtr <nsIMsgFolder> inbox; rv = GetInbox(aMsgWindow, getter_AddRefs(inbox)); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr <nsIURI> url; nsCOMPtr <nsIMsgIncomingServer> server; nsCOMArray<nsIPop3IncomingServer> deferredServers; nsCString deferredToAccount; GetDeferredToAccount(deferredToAccount); if (deferredToAccount.IsEmpty()) { aFolder->GetServer(getter_AddRefs(server)); GetDeferredServers(server, deferredServers); } if (deferredToAccount.IsEmpty() && !deferredServers.IsEmpty()) { nsPop3GetMailChainer *getMailChainer = new nsPop3GetMailChainer; NS_ENSURE_TRUE(getMailChainer, NS_ERROR_OUT_OF_MEMORY); getMailChainer->AddRef(); // this object owns itself and releases when done. deferredServers.InsertElementAt(0, this); return getMailChainer->GetNewMailForServers(deferredServers.Elements(), deferredServers.Length(), aMsgWindow, inbox, aUrlListener); } if (m_runningProtocol) return NS_MSG_FOLDER_BUSY; return pop3Service->GetNewMail(aMsgWindow, aUrlListener, inbox, this, getter_AddRefs(url)); }