зеркало из https://github.com/mozilla/gecko-dev.git
remove DOING_FILTERS, cleanup shutdown of mail session and writing out folder cache
This commit is contained in:
Родитель
18a2becea1
Коммит
26f90fa775
|
@ -193,7 +193,7 @@ static nsresult ConvertDOMListToResourceArray(nsIDOMNodeList *nodeList, nsISuppo
|
|||
|
||||
if(NS_SUCCEEDED(rv = node->QueryInterface(nsCOMTypeInfo<nsIDOMXULElement>::GetIID(), (void**)&xulElement)))
|
||||
{
|
||||
if(NS_SUCCEEDED(rv = xulElement->GetResource(&resource)))
|
||||
if(NS_SUCCEEDED(rv = xulElement->GetResource(&resource)) && resource)
|
||||
{
|
||||
(*resourceArray)->AppendElement(resource);
|
||||
NS_RELEASE(resource);
|
||||
|
@ -433,12 +433,6 @@ nsMessenger::OpenURL(const char * url)
|
|||
mWebShell->LoadURL(urlStr.GetUnicode());
|
||||
}
|
||||
}
|
||||
/* here's how we'd turn off the throbber
|
||||
setAttribute( rootWebshell, "Messenger:Throbber", "busy", "false" );
|
||||
PRBool result=PR_TRUE;
|
||||
//Disable the Stop button
|
||||
setAttribute( rootWebshell, "canStop", "disabled", "true" );
|
||||
*/
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
*/
|
||||
|
||||
#include "msgCore.h"
|
||||
#include "nsIMsgAccountManager.h"
|
||||
#include "nsMsgFolderCacheElement.h"
|
||||
#include "nsMsgFolderCache.h"
|
||||
#include "nsMorkCID.h"
|
||||
|
@ -24,8 +25,10 @@
|
|||
#include "nsFileStream.h"
|
||||
|
||||
#include "nsXPIDLString.h"
|
||||
#include "nsMsgBaseCID.h"
|
||||
|
||||
static NS_DEFINE_CID(kCMorkFactory, NS_MORK_CID);
|
||||
static NS_DEFINE_CID(kCMsgMailSessionCID, NS_MSGMAILSESSION_CID);
|
||||
|
||||
const char *kFoldersScope = "ns:msg:db:row:scope:folders:all"; // scope for all folders table
|
||||
const char *kFoldersTableKind = "ns:msg:db:table:kind:folders";
|
||||
|
@ -36,6 +39,11 @@ nsMsgFolderCache::nsMsgFolderCache()
|
|||
m_mdbStore = nsnull;
|
||||
NS_INIT_REFCNT();
|
||||
m_mdbAllFoldersTable = nsnull;
|
||||
nsresult rv = nsServiceManager::GetService(kCMsgMailSessionCID,
|
||||
nsCOMTypeInfo<nsIMsgMailSession>::GetIID(),
|
||||
(nsISupports**)&m_mailSession,
|
||||
this);
|
||||
NS_ASSERTION(NS_SUCCEEDED(rv), "have to get mail session service");
|
||||
}
|
||||
|
||||
// should this, could this be an nsCOMPtr ?
|
||||
|
@ -54,7 +62,58 @@ nsMsgFolderCache::~nsMsgFolderCache()
|
|||
}
|
||||
|
||||
|
||||
NS_IMPL_ISUPPORTS(nsMsgFolderCache, GetIID());
|
||||
|
||||
|
||||
NS_IMPL_ADDREF(nsMsgFolderCache)
|
||||
NS_IMPL_RELEASE(nsMsgFolderCache)
|
||||
|
||||
nsresult
|
||||
nsMsgFolderCache::QueryInterface(const nsIID& iid, void **result)
|
||||
{
|
||||
nsresult rv = NS_NOINTERFACE;
|
||||
if (! result)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
void *res = nsnull;
|
||||
if (iid.Equals(nsCOMTypeInfo<nsIMsgFolderCache>::GetIID()) ||
|
||||
iid.Equals(nsCOMTypeInfo<nsISupports>::GetIID()))
|
||||
res = NS_STATIC_CAST(nsIMsgFolderCache*, this);
|
||||
else if (iid.Equals(nsCOMTypeInfo<nsIShutdownListener>::GetIID()))
|
||||
res = NS_STATIC_CAST(nsIShutdownListener*, this);
|
||||
|
||||
if (res)
|
||||
{
|
||||
NS_ADDREF(this);
|
||||
*result = res;
|
||||
rv = NS_OK;
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
/* called if the mail session service goes offline */
|
||||
NS_IMETHODIMP
|
||||
nsMsgFolderCache::OnShutdown(const nsCID& aClass, nsISupports *service)
|
||||
{
|
||||
if (aClass.Equals(kCMsgMailSessionCID))
|
||||
{
|
||||
nsCOMPtr <nsIMsgAccountManager> accountManager;
|
||||
|
||||
if (m_mailSession)
|
||||
{
|
||||
nsresult rv = m_mailSession->GetAccountManager(getter_AddRefs(accountManager));
|
||||
if (NS_SUCCEEDED(rv) && accountManager)
|
||||
rv = accountManager->WriteToFolderCache(this);
|
||||
// releasing the service seems to be wrong, since it causes the service to
|
||||
// be deleted out from under itself while getting shut down.
|
||||
// nsServiceManager::ReleaseService(kCMsgMailSessionCID, m_mailSession /*, this */);
|
||||
}
|
||||
m_mailSession = nsnull;
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
/* static */ nsIMdbFactory *nsMsgFolderCache::GetMDBFactory()
|
||||
{
|
||||
|
@ -313,7 +372,7 @@ NS_IMETHODIMP nsMsgFolderCache::GetCacheElement(const char *uri, PRBool createIf
|
|||
}
|
||||
}
|
||||
}
|
||||
return NS_COMFALSE;
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsMsgFolderCache::Close()
|
||||
|
|
|
@ -24,9 +24,10 @@
|
|||
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsISupportsArray.h"
|
||||
#include "nsIMsgMailSession.h"
|
||||
#include "mdb.h"
|
||||
|
||||
class nsMsgFolderCache : public nsIMsgFolderCache
|
||||
class nsMsgFolderCache : public nsIMsgFolderCache, public nsIShutdownListener
|
||||
{
|
||||
|
||||
public:
|
||||
|
@ -35,6 +36,10 @@ public:
|
|||
nsMsgFolderCache();
|
||||
virtual ~nsMsgFolderCache();
|
||||
|
||||
/* nsIShutdownListener methods */
|
||||
|
||||
NS_IMETHOD OnShutdown(const nsCID& aClass, nsISupports *service);
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
//nsMsgFolderCache
|
||||
|
@ -60,6 +65,7 @@ protected:
|
|||
|
||||
nsFileSpec m_dbFileSpec;
|
||||
nsISupportsArray *m_cacheElements;
|
||||
nsCOMPtr <nsIMsgMailSession> m_mailSession;
|
||||
|
||||
// mdb stuff
|
||||
nsIMdbEnv *m_mdbEnv; // to be used in all the db calls.
|
||||
|
|
|
@ -52,8 +52,8 @@ nsMsgMailSession::~nsMsgMailSession()
|
|||
{
|
||||
if(m_accountManager)
|
||||
{
|
||||
if (m_msgFolderCache)
|
||||
m_accountManager->WriteToFolderCache(m_msgFolderCache);
|
||||
// if (m_msgFolderCache)
|
||||
// m_accountManager->WriteToFolderCache(m_msgFolderCache);
|
||||
m_accountManager->UnloadAccounts();
|
||||
}
|
||||
|
||||
|
@ -84,34 +84,6 @@ nsresult nsMsgMailSession:: Init()
|
|||
if(!mListeners)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
rv = nsComponentManager::CreateInstance(kMsgFolderCacheCID,
|
||||
NULL,
|
||||
nsCOMTypeInfo<nsIMsgFolderCache>::GetIID(),
|
||||
(void **)&m_msgFolderCache);
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
nsFileSpec profileDir;
|
||||
nsCOMPtr <nsIFileSpec> cacheFile;
|
||||
|
||||
NS_WITH_SERVICE(nsIProfile, profile, kProfileCID, &rv);
|
||||
if (NS_FAILED(rv))
|
||||
return 0;
|
||||
|
||||
rv = profile->GetCurrentProfileDir(&profileDir);
|
||||
if (NS_FAILED(rv))
|
||||
return 0;
|
||||
|
||||
nsFileSpec folderCache(profileDir);
|
||||
|
||||
folderCache += "panacea.dat";
|
||||
|
||||
rv = NS_NewFileSpecWithSpec(folderCache, getter_AddRefs(cacheFile));
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
m_msgFolderCache->Init(cacheFile);
|
||||
|
||||
return NS_OK;
|
||||
|
||||
}
|
||||
|
@ -160,10 +132,44 @@ nsresult nsMsgMailSession::GetAccountManager(nsIMsgAccountManager* *aAM)
|
|||
nsresult nsMsgMailSession::GetFolderCache(nsIMsgFolderCache* *aFolderCache)
|
||||
{
|
||||
if (!aFolderCache) return NS_ERROR_NULL_POINTER;
|
||||
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
if (!m_msgFolderCache)
|
||||
{
|
||||
rv = nsComponentManager::CreateInstance(kMsgFolderCacheCID,
|
||||
NULL,
|
||||
nsCOMTypeInfo<nsIMsgFolderCache>::GetIID(),
|
||||
(void **)&m_msgFolderCache);
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
nsFileSpec profileDir;
|
||||
nsCOMPtr <nsIFileSpec> cacheFile;
|
||||
|
||||
NS_WITH_SERVICE(nsIProfile, profile, kProfileCID, &rv);
|
||||
if (NS_FAILED(rv))
|
||||
return 0;
|
||||
|
||||
rv = profile->GetCurrentProfileDir(&profileDir);
|
||||
if (NS_FAILED(rv))
|
||||
return 0;
|
||||
|
||||
nsFileSpec folderCache(profileDir);
|
||||
|
||||
folderCache += "panacea.dat";
|
||||
|
||||
rv = NS_NewFileSpecWithSpec(folderCache, getter_AddRefs(cacheFile));
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
m_msgFolderCache->Init(cacheFile);
|
||||
|
||||
}
|
||||
|
||||
*aFolderCache = m_msgFolderCache;
|
||||
NS_IF_ADDREF(*aFolderCache);
|
||||
return NS_OK;
|
||||
return rv;
|
||||
}
|
||||
|
||||
nsresult nsMsgMailSession::GetTemporaryMsgStatusFeedback(nsIMsgStatusFeedback* *aMsgStatusFeedback)
|
||||
|
|
Загрузка…
Ссылка в новой задаче