diff --git a/mozilla/mailnews/imap/public/nsIImapIncomingServer.idl b/mozilla/mailnews/imap/public/nsIImapIncomingServer.idl index 663fe603ea3..bafba0c0243 100644 --- a/mozilla/mailnews/imap/public/nsIImapIncomingServer.idl +++ b/mozilla/mailnews/imap/public/nsIImapIncomingServer.idl @@ -24,6 +24,7 @@ interface nsIImapUrl; interface nsIEventQueue; interface nsIImapProtocol; interface nsISupportsArray; +interface nsIMsgFolder; [scriptable, uuid(3d2e7e38-f9d8-11d2-af8f-001083002da8)] interface nsIImapIncomingServer : nsISupports { @@ -53,4 +54,5 @@ interface nsIImapIncomingServer : nsISupports { void RemoveConnection(in nsIImapProtocol aImapConnection); void ResetNamespaceReferences(); + void PseudoInterruptMsgLoad(in nsIMsgFolder folder, out boolean interrupted); }; diff --git a/mozilla/mailnews/imap/public/nsIImapProtocol.h b/mozilla/mailnews/imap/public/nsIImapProtocol.h index 999b904f557..836d881cc62 100644 --- a/mozilla/mailnews/imap/public/nsIImapProtocol.h +++ b/mozilla/mailnews/imap/public/nsIImapProtocol.h @@ -38,6 +38,7 @@ class nsIURI; class nsIImapUrl; class nsIImapHostSessionList; class nsIWebShell; +class nsIMsgFolder; class nsIImapProtocol : public nsIStreamListener { @@ -98,6 +99,8 @@ public: NS_IMETHOD TellThreadToDie(PRBool isSafeToDie) = 0; // Get last active time stamp NS_IMETHOD GetLastActiveTimeStamp(PRTime *aTimeStamp) = 0; + + NS_IMETHOD PseudoInterruptMsgLoad(nsIMsgFolder *aFolder, PRBool *interrupted) = 0; }; #endif /* nsIImapProtocol_h___ */ diff --git a/mozilla/mailnews/imap/src/nsImapIncomingServer.cpp b/mozilla/mailnews/imap/src/nsImapIncomingServer.cpp index e93bdaf75c8..5abf8cca78a 100644 --- a/mozilla/mailnews/imap/src/nsImapIncomingServer.cpp +++ b/mozilla/mailnews/imap/src/nsImapIncomingServer.cpp @@ -1305,6 +1305,37 @@ NS_IMETHODIMP nsImapIncomingServer::CommitNamespaces() } +NS_IMETHODIMP nsImapIncomingServer::PseudoInterruptMsgLoad(nsIMsgFolder *aFolder, PRBool *interrupted) +{ + nsresult rv = NS_OK; + PRBool canRunUrl = PR_FALSE; + PRBool hasToWait = PR_FALSE; + nsCOMPtr connection; + nsCOMPtr freeConnection; + PRBool isBusy = PR_FALSE; + PRBool isInboxConnection = PR_FALSE; + + PR_CEnterMonitor(this); + + // iterate through the connection cache for a connection that is loading + // a message in this folder and should be pseudo-interrupted. + PRUint32 cnt; + nsCOMPtr aSupport; + + rv = m_connectionCache->Count(&cnt); + if (NS_FAILED(rv)) return rv; + for (PRUint32 i = 0; i < cnt && !canRunUrl && !hasToWait; i++) + { + aSupport = getter_AddRefs(m_connectionCache->ElementAt(i)); + connection = do_QueryInterface(aSupport); + if (connection) + rv = connection->PseudoInterruptMsgLoad(aFolder, interrupted); + } + + PR_CExitMonitor(this); + return rv; +} + NS_IMETHODIMP nsImapIncomingServer::ResetNamespaceReferences() { return NS_ERROR_NOT_IMPLEMENTED; diff --git a/mozilla/mailnews/imap/src/nsImapProtocol.cpp b/mozilla/mailnews/imap/src/nsImapProtocol.cpp index 247f7825f73..782f2d9d258 100644 --- a/mozilla/mailnews/imap/src/nsImapProtocol.cpp +++ b/mozilla/mailnews/imap/src/nsImapProtocol.cpp @@ -780,6 +780,14 @@ nsImapProtocol::GetLastActiveTimeStamp(PRTime* aTimeStamp) return NS_OK; } +NS_IMETHODIMP +nsImapProtocol::PseudoInterruptMsgLoad(nsIMsgFolder *aFolder, PRBool *interrupted) +{ + // this should check if the protocol instance is currently running a msg fetch + // url for the passed folder, and if so, pseudo interrupt it. + return NS_ERROR_NOT_IMPLEMENTED; +} + void nsImapProtocol::ImapThreadMainLoop() { diff --git a/mozilla/mailnews/imap/src/nsImapProtocol.h b/mozilla/mailnews/imap/src/nsImapProtocol.h index 54ed4d773c7..4157944d1a0 100644 --- a/mozilla/mailnews/imap/src/nsImapProtocol.h +++ b/mozilla/mailnews/imap/src/nsImapProtocol.h @@ -111,6 +111,8 @@ public: NS_IMETHOD TellThreadToDie(PRBool isSafeToClose); // Get last active time stamp NS_IMETHOD GetLastActiveTimeStamp(PRTime *aTimeStamp); + + NS_IMETHOD PseudoInterruptMsgLoad(nsIMsgFolder *aFolder, PRBool *interrupted); //////////////////////////////////////////////////////////////////////////////////////// // End of nsIStreamListenerSupport ////////////////////////////////////////////////////////////////////////////////////////