remove DOING_FILTERS, cleanup shutdown of mail session and writing out folder cache

This commit is contained in:
bienvenu%netscape.com 1999-08-24 04:41:05 +00:00
Родитель 18a2becea1
Коммит 26f90fa775
4 изменённых файлов: 106 добавлений и 41 удалений

Просмотреть файл

@ -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)