Switch over mailnews/base to use nsIModule.

This commit is contained in:
putterman%netscape.com 1999-10-10 22:31:48 +00:00
Родитель 07068ab854
Коммит 489e979124
29 изменённых файлов: 723 добавлений и 1020 удалений

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

@ -19,6 +19,8 @@
#include "nsIFactory.h"
#include "nsISupports.h"
#include "msgCore.h"
#include "nsIModule.h"
#include "nsIGenericFactory.h"
#include "nsMsgBaseCID.h"
#include "pratom.h"
#include "nsIComponentManager.h"
@ -78,7 +80,6 @@ static NS_DEFINE_CID(kCMsgGroupRecordCID, NS_MSGGROUPRECORD_CID);
static NS_DEFINE_CID(kMailNewsFolderDataSourceCID, NS_MAILNEWSFOLDERDATASOURCE_CID);
static NS_DEFINE_CID(kMailNewsMessageDataSourceCID, NS_MAILNEWSMESSAGEDATASOURCE_CID);
static NS_DEFINE_CID(kCMessageViewDataSourceCID, NS_MESSAGEVIEWDATASOURCE_CID);
// account manager stuff
static NS_DEFINE_CID(kMsgAccountManagerCID, NS_MSGACCOUNTMANAGER_CID);
@ -110,279 +111,325 @@ static NS_DEFINE_CID(kMsgStatusFeedbackCID, NS_MSGSTATUSFEEDBACK_CID);
//MessageView
static NS_DEFINE_CID(kMessageViewCID, NS_MESSAGEVIEW_CID);
////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////
static PRInt32 g_InstanceCount = 0;
static PRInt32 g_LockCount = 0;
class nsMsgFactory : public nsIFactory
{
// private factory declarations for each component we know how to produce
NS_GENERIC_FACTORY_CONSTRUCTOR(nsMessengerBootstrap)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsUrlListenerManager)
NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsMsgMailSession, Init)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsMessenger)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsMsgAccountManager)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsMsgAccount)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsMsgIdentity)
NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsMsgFolderDataSource, Init)
NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsMsgMessageDataSource, Init)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsMsgAccountManagerDataSource)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsMsgFilterService)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsMsgBiffManager)
NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsMsgNotificationManager, Init)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsCopyMessageStreamListener)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsMsgCopyService)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsMsgFolderCache)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsMsgStatusFeedback)
NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsMessageView,Init)
// Module implementation for the sample library
class nsMsgBaseModule : public nsIModule
{
public:
// nsISupports methods
NS_DECL_ISUPPORTS
nsMsgBaseModule();
virtual ~nsMsgBaseModule();
nsMsgFactory(const nsCID &aClass,
const char* aClassName,
const char* aProgID);
NS_DECL_ISUPPORTS
// nsIFactory methods
NS_IMETHOD CreateInstance(nsISupports *aOuter, const nsIID &aIID, void **aResult);
NS_IMETHOD LockFactory(PRBool aLock);
NS_DECL_NSIMODULE
protected:
virtual ~nsMsgFactory();
nsresult Initialize();
nsCID mClassID;
char* mClassName;
char* mProgID;
};
void Shutdown();
nsMsgFactory::nsMsgFactory(const nsCID &aClass,
const char* aClassName,
const char* aProgID)
: mClassID(aClass),
mClassName(nsCRT::strdup(aClassName)),
mProgID(nsCRT::strdup(aProgID))
PRBool mInitialized;
nsCOMPtr<nsIGenericFactory> mMessengerBootstrapFactory;
nsCOMPtr<nsIGenericFactory> mUrlListenerManagerFactory;
nsCOMPtr<nsIGenericFactory> mMsgMailSessionFactory;
nsCOMPtr<nsIGenericFactory> mMessengerFactory;
nsCOMPtr<nsIGenericFactory> mMsgAccountManagerFactory;
nsCOMPtr<nsIGenericFactory> mMsgAccountFactory;
nsCOMPtr<nsIGenericFactory> mMsgIdentityFactory;
nsCOMPtr<nsIGenericFactory> mMsgFolderDataSourceFactory;
nsCOMPtr<nsIGenericFactory> mMsgMessageDataSourceFactory;
nsCOMPtr<nsIGenericFactory> mMsgAccountManagerDataSourceFactory;
nsCOMPtr<nsIGenericFactory> mMsgFilterServiceFactory;
nsCOMPtr<nsIGenericFactory> mMsgBiffManagerFactory;
nsCOMPtr<nsIGenericFactory> mMsgNotificationManagerFactory;
nsCOMPtr<nsIGenericFactory> mCopyMessageStreamListenerFactory;
nsCOMPtr<nsIGenericFactory> mMsgCopyServiceFactory;
nsCOMPtr<nsIGenericFactory> mMsgFolderCacheFactory;
nsCOMPtr<nsIGenericFactory> mMsgStatusFeedbackFactory;
nsCOMPtr<nsIGenericFactory> mMessageViewFactory;
};
nsMsgBaseModule::nsMsgBaseModule()
: mInitialized(PR_FALSE)
{
NS_INIT_REFCNT();
NS_INIT_ISUPPORTS();
}
}
nsMsgFactory::~nsMsgFactory()
nsMsgBaseModule::~nsMsgBaseModule()
{
Shutdown();
}
NS_ASSERTION(mRefCnt == 0, "non-zero refcnt at destruction");
PL_strfree(mClassName);
PL_strfree(mProgID);
}
NS_IMPL_ISUPPORTS(nsMsgBaseModule, NS_GET_IID(nsIModule))
nsresult
nsMsgFactory::QueryInterface(const nsIID &aIID, void **aResult)
{
if (aResult == NULL)
return NS_ERROR_NULL_POINTER;
// Always NULL result, in case of failure
*aResult = NULL;
// we support two interfaces....nsISupports and nsFactory.....
if (aIID.Equals(nsCOMTypeInfo<nsISupports>::GetIID()))
*aResult = (void *)NS_STATIC_CAST(nsISupports*,this);
else if (aIID.Equals(nsCOMTypeInfo<nsIFactory>::GetIID()))
*aResult = (void *)NS_STATIC_CAST(nsIFactory*,this);
if (*aResult == NULL)
return NS_NOINTERFACE;
NS_ADDREF_THIS(); // Increase reference count for caller
return NS_OK;
}
NS_IMPL_ADDREF(nsMsgFactory)
NS_IMPL_RELEASE(nsMsgFactory)
nsresult
nsMsgFactory::CreateInstance(nsISupports * aOuter,
const nsIID &aIID,
void **aResult)
// Perform our one-time intialization for this module
nsresult nsMsgBaseModule::Initialize()
{
nsresult rv = NS_ERROR_NO_INTERFACE;
if (aResult == NULL)
return NS_ERROR_NULL_POINTER;
if (mInitialized)
return NS_OK;
*aResult = NULL;
mInitialized = PR_TRUE;
return NS_OK;
}
// ClassID check happens here
// Whenever you add a new class that supports an interface, plug it in here!!!
if (mClassID.Equals(kCMsgFolderEventCID))
{
NS_NOTREACHED("hello? what happens here?");
rv = NS_OK;
}
else if (mClassID.Equals(kCMessengerBootstrapCID))
{
rv = NS_NewMessengerBootstrap(aIID, aResult);
}
else if (mClassID.Equals(kCUrlListenerManagerCID))
{
nsUrlListenerManager * listener = nsnull;
listener = new nsUrlListenerManager();
if (listener == nsnull)
rv = NS_ERROR_OUT_OF_MEMORY;
else {
rv = listener->QueryInterface(aIID, aResult);
if (NS_FAILED(rv))
delete listener;
// Shutdown this module, releasing all of the module resources
void nsMsgBaseModule::Shutdown()
{
// Release the factory object
mMessengerBootstrapFactory = null_nsCOMPtr();
mUrlListenerManagerFactory = null_nsCOMPtr();
mMsgMailSessionFactory = null_nsCOMPtr();
mMessengerFactory = null_nsCOMPtr();
mMsgAccountManagerFactory = null_nsCOMPtr();
mMsgAccountFactory = null_nsCOMPtr();
mMsgIdentityFactory = null_nsCOMPtr();
mMsgFolderDataSourceFactory = null_nsCOMPtr();
mMsgMessageDataSourceFactory = null_nsCOMPtr();
mMsgAccountManagerDataSourceFactory = null_nsCOMPtr();
mMsgFilterServiceFactory = null_nsCOMPtr();
mMsgBiffManagerFactory = null_nsCOMPtr();
mMsgNotificationManagerFactory = null_nsCOMPtr();
mCopyMessageStreamListenerFactory = null_nsCOMPtr();
mMsgCopyServiceFactory = null_nsCOMPtr();
mMsgFolderCacheFactory = null_nsCOMPtr();
mMsgStatusFeedbackFactory = null_nsCOMPtr();
mMessageViewFactory = null_nsCOMPtr();
}
// Create a factory object for creating instances of aClass.
NS_IMETHODIMP nsMsgBaseModule::GetClassObject(nsIComponentManager *aCompMgr,
const nsCID& aClass,
const nsIID& aIID,
void** r_classObj)
{
nsresult rv;
// Defensive programming: Initialize *r_classObj in case of error below
if (!r_classObj)
return NS_ERROR_INVALID_POINTER;
*r_classObj = NULL;
// Do one-time-only initialization if necessary
if (!mInitialized)
{
rv = Initialize();
if (NS_FAILED(rv)) // Initialization failed! yikes!
return rv;
}
}
else if (mClassID.Equals(kCMsgMailSessionCID))
{
rv = NS_NewMsgMailSession(aIID, aResult);
}
else if (mClassID.Equals(kCMessengerCID))
{
rv = NS_NewMessenger(aIID, aResult);
}
// Choose the appropriate factory, based on the desired instance
// class type (aClass).
nsCOMPtr<nsIGenericFactory> fact;
else if (mClassID.Equals(kMsgAccountManagerCID))
{
rv = NS_NewMsgAccountManager(aIID, aResult);
}
else if (mClassID.Equals(kMsgAccountCID))
{
rv = NS_NewMsgAccount(aIID, aResult);
}
else if (mClassID.Equals(kMsgIdentityCID)) {
nsMsgIdentity* identity = new nsMsgIdentity();
if (aClass.Equals(kCMessengerBootstrapCID))
{
if (!mMessengerBootstrapFactory)
rv = NS_NewGenericFactory(getter_AddRefs(mMessengerBootstrapFactory), &nsMessengerBootstrapConstructor);
fact = mMessengerBootstrapFactory;
}
else if (aClass.Equals(kCUrlListenerManagerCID))
{
if (!mUrlListenerManagerFactory)
rv = NS_NewGenericFactory(getter_AddRefs(mUrlListenerManagerFactory), &nsUrlListenerManagerConstructor);
fact = mUrlListenerManagerFactory;
}
else if (aClass.Equals(kCMsgMailSessionCID))
{
if (!mMsgMailSessionFactory)
rv = NS_NewGenericFactory(getter_AddRefs(mMsgMailSessionFactory), &nsMsgMailSessionConstructor);
fact = mMsgMailSessionFactory;
}
else if (aClass.Equals(kCMessengerCID))
{
if (!mMessengerFactory)
rv = NS_NewGenericFactory(getter_AddRefs(mMessengerFactory), &nsMessengerConstructor);
fact = mMessengerFactory;
}
else if (aClass.Equals(kMsgAccountManagerCID))
{
if (!mMsgAccountManagerFactory)
rv = NS_NewGenericFactory(getter_AddRefs(mMsgAccountManagerFactory), &nsMsgAccountManagerConstructor);
fact = mMsgAccountManagerFactory;
}
else if (aClass.Equals(kMsgAccountCID))
{
if (!mMsgAccountFactory)
rv = NS_NewGenericFactory(getter_AddRefs(mMsgAccountFactory), &nsMsgAccountConstructor);
fact = mMsgAccountFactory;
}
else if (aClass.Equals(kMsgIdentityCID))
{
if (!mMsgIdentityFactory)
rv = NS_NewGenericFactory(getter_AddRefs(mMsgIdentityFactory), &nsMsgIdentityConstructor);
fact = mMsgIdentityFactory;
}
else if (aClass.Equals(kMailNewsFolderDataSourceCID))
{
if (!mMsgFolderDataSourceFactory)
rv = NS_NewGenericFactory(getter_AddRefs(mMsgFolderDataSourceFactory), &nsMsgFolderDataSourceConstructor);
fact = mMsgFolderDataSourceFactory;
}
else if (aClass.Equals(kMailNewsMessageDataSourceCID))
{
if (!mMsgMessageDataSourceFactory)
rv = NS_NewGenericFactory(getter_AddRefs(mMsgMessageDataSourceFactory), &nsMsgMessageDataSourceConstructor);
fact = mMsgMessageDataSourceFactory;
}
else if (aClass.Equals(kMsgAccountManagerDataSourceCID))
{
if (!mMsgAccountManagerDataSourceFactory)
rv = NS_NewGenericFactory(getter_AddRefs(mMsgAccountManagerDataSourceFactory), &nsMsgAccountManagerDataSourceConstructor);
fact = mMsgAccountManagerDataSourceFactory;
}
else if (aClass.Equals(kMsgFilterServiceCID))
{
if (!mMsgFilterServiceFactory)
rv = NS_NewGenericFactory(getter_AddRefs(mMsgFilterServiceFactory), &nsMsgFilterServiceConstructor);
fact = mMsgFilterServiceFactory;
}
else if (aClass.Equals(kMsgBiffManagerCID))
{
if (!mMsgBiffManagerFactory)
rv = NS_NewGenericFactory(getter_AddRefs(mMsgBiffManagerFactory), &nsMsgBiffManagerConstructor);
fact = mMsgBiffManagerFactory;
}
else if (aClass.Equals(kMsgNotificationManagerCID))
{
if (!mMsgNotificationManagerFactory)
rv = NS_NewGenericFactory(getter_AddRefs(mMsgNotificationManagerFactory), &nsMsgNotificationManagerConstructor);
fact = mMsgNotificationManagerFactory;
}
else if (aClass.Equals(kCopyMessageStreamListenerCID))
{
if (!mCopyMessageStreamListenerFactory)
rv = NS_NewGenericFactory(getter_AddRefs(mCopyMessageStreamListenerFactory), &nsCopyMessageStreamListenerConstructor);
fact = mCopyMessageStreamListenerFactory;
}
else if (aClass.Equals(kMsgCopyServiceCID))
{
if (!mMsgCopyServiceFactory)
rv = NS_NewGenericFactory(getter_AddRefs(mMsgCopyServiceFactory), &nsMsgCopyServiceConstructor);
fact = mMsgCopyServiceFactory;
}
else if (aClass.Equals(kMsgFolderCacheCID))
{
if (!mMsgFolderCacheFactory)
rv = NS_NewGenericFactory(getter_AddRefs(mMsgFolderCacheFactory), &nsMsgFolderCacheConstructor);
fact = mMsgFolderCacheFactory;
}
else if (aClass.Equals(kMsgStatusFeedbackCID))
{
if (!mMsgStatusFeedbackFactory)
rv = NS_NewGenericFactory(getter_AddRefs(mMsgStatusFeedbackFactory), &nsMsgStatusFeedbackConstructor);
fact = mMsgStatusFeedbackFactory;
}
else if (aClass.Equals(kMessageViewCID))
{
if (!mMessageViewFactory)
rv = NS_NewGenericFactory(getter_AddRefs(mMessageViewFactory), &nsMessageViewConstructor);
fact = mMessageViewFactory;
}
if (identity == nsnull)
rv = NS_ERROR_OUT_OF_MEMORY;
else {
rv = identity->QueryInterface(aIID, aResult);
if (NS_FAILED(rv))
delete identity;
}
}
#if 0
else if (mClassID.Equals(kMsgIncomingServerCID)) {
nsMsgIncomingServer *server = new nsMsgIncomingServer();
if (!server)
rv = NS_ERROR_OUT_OF_MEMORY;
else {
rv = server->QueryInterface(aIID, aResult);
if (NS_FAILED(rv))
delete server;
}
}
#endif
else if (mClassID.Equals(kMailNewsFolderDataSourceCID))
{
rv = NS_NewMsgFolderDataSource(aIID, aResult);
}
else if (mClassID.Equals(kMailNewsMessageDataSourceCID))
{
rv = NS_NewMsgMessageDataSource(aIID, aResult);
}
else if (mClassID.Equals(kCMessageViewDataSourceCID))
{
rv = NS_NewMessageViewDataSource(aIID, aResult);
}
if (fact)
rv = fact->QueryInterface(aIID, r_classObj);
// account manager RDF datasources
else if (mClassID.Equals(kMsgAccountManagerDataSourceCID)) {
rv = NS_NewMsgAccountManagerDataSource(aIID, aResult);
}
else if (mClassID.Equals(kMsgFilterServiceCID)) {
rv = NS_NewMsgFilterService(aIID, aResult);
}
else if (mClassID.Equals(kMsgBiffManagerCID)){
rv = NS_NewMsgBiffManager(aIID, aResult);
}
else if (mClassID.Equals(kMsgNotificationManagerCID)){
rv = NS_NewMsgNotificationManager(aIID, aResult);
}
else if (mClassID.Equals(kCopyMessageStreamListenerCID)){
rv = NS_NewCopyMessageStreamListener(aIID, aResult);
}
else if (mClassID.Equals(kMsgCopyServiceCID)) {
rv = NS_NewMsgCopyService(aIID, aResult);
}
else if (mClassID.Equals(kMsgFolderCacheCID)) {
nsMsgFolderCache * folderCache = nsnull;
folderCache = new nsMsgFolderCache ();
if (folderCache == nsnull)
rv = NS_ERROR_OUT_OF_MEMORY;
else
{
rv = folderCache->QueryInterface(aIID, aResult);
if (NS_FAILED(rv))
delete folderCache;
}
}
else if (mClassID.Equals(kMsgStatusFeedbackCID)) {
rv = NS_NewMsgStatusFeedback(aIID, aResult);
}
else if (mClassID.Equals(kMessageViewCID)) {
rv = NS_NewMessageView(aIID, aResult);
}
if (NS_SUCCEEDED(rv))
PR_AtomicIncrement(&g_InstanceCount);
return rv;
}
nsresult
nsMsgFactory::LockFactory(PRBool aLock)
{
if (aLock)
PR_AtomicIncrement(&g_LockCount);
else
PR_AtomicDecrement(&g_LockCount);
return NS_OK;
}
////////////////////////////////////////////////////////////////////////////////
// return the proper factory to the caller.
extern "C" NS_EXPORT nsresult NSGetFactory(nsISupports* /*aServMgr */,
const nsCID &aClass,
const char *aClassName,
const char *aProgID,
nsIFactory **aFactory)
{
if (nsnull == aFactory)
return NS_ERROR_NULL_POINTER;
*aFactory = new nsMsgFactory(aClass, aClassName, aProgID);
if (aFactory)
return (*aFactory)->QueryInterface(nsCOMTypeInfo<nsIFactory>::GetIID(),
(void**)aFactory);
else
return NS_ERROR_OUT_OF_MEMORY;
return rv;
}
extern "C" NS_EXPORT PRBool NSCanUnload(nsISupports* /* aServMgr */)
struct Components {
const char* mDescription;
const nsID* mCID;
const char* mProgID;
};
// The list of components we register
static Components gComponents[] = {
{ "Netscape Messenger Bootstrapper", &kCMessengerBootstrapCID,
NS_MESSENGERBOOTSTRAP_PROGID },
{ "UrlListenerManager", &kCUrlListenerManagerCID,
NS_URLLISTENERMANAGER_PROGID },
{ "Mail Session", &kCMsgMailSessionCID,
NS_MSGMAILSESSION_PROGID },
{ "Messenger DOM interaction object", &kCMessengerCID,
NS_MESSENGER_PROGID },
{ "Messenger Account Manager", &kMsgAccountManagerCID,
NS_MSGACCOUNTMANAGER_PROGID },
{ "Messenger User Account", &kMsgAccountCID,
NS_MSGACCOUNT_PROGID },
{ "Messenger User Identity", &kMsgIdentityCID,
NS_MSGIDENTITY_PROGID },
{ "Mail/News Folder Data Source", &kMailNewsFolderDataSourceCID,
NS_MAILNEWSFOLDERDATASOURCE_PROGID },
{ "Mail/News Message Data Source", &kMailNewsMessageDataSourceCID,
NS_MAILNEWSMESSAGEDATASOURCE_PROGID},
{ "Mail/News Account Manager Data Source", &kMsgAccountManagerDataSourceCID,
NS_RDF_DATASOURCE_PROGID_PREFIX "msgaccountmanager"},
{ "Message Filter Service", &kMsgFilterServiceCID,
NS_MSGFILTERSERVICE_PROGID},
{ "Messenger Biff Manager", &kMsgBiffManagerCID,
NS_MSGBIFFMANAGER_PROGID},
{ "Mail/News Notification Manager", &kMsgNotificationManagerCID,
NS_MSGNOTIFICATIONMANAGER_PROGID},
{ "Mail/News CopyMessage Stream Listener", &kCopyMessageStreamListenerCID,
NS_COPYMESSAGESTREAMLISTENER_PROGID},
{ "Mail/News Message Copy Service", &kMsgCopyServiceCID,
NS_MSGCOPYSERVICE_PROGID},
{ "Mail/News Folder Cache", &kMsgFolderCacheCID,
NS_MSGFOLDERCACHE_PROGID},
{ "Mail/News Status Feedback", &kMsgStatusFeedbackCID,
NS_MSGSTATUSFEEDBACK_PROGID},
{ "Mail/News MessageView", &kMessageViewCID,
NS_MESSAGEVIEW_PROGID}
};
#define NUM_COMPONENTS (sizeof(gComponents) / sizeof(gComponents[0]))
NS_IMETHODIMP nsMsgBaseModule::RegisterSelf(nsIComponentManager *aCompMgr,
nsIFileSpec* aPath,
const char* registryLocation,
const char* componentType)
{
return PRBool(g_InstanceCount == 0 && g_LockCount == 0);
}
nsresult rv = NS_OK;
////////////////////////////////////////////////////////////////////////////////
Components* cp = gComponents;
Components* end = cp + NUM_COMPONENTS;
while (cp < end)
{
rv = aCompMgr->RegisterComponentSpec(*cp->mCID, cp->mDescription,
cp->mProgID, aPath, PR_TRUE,
PR_TRUE);
if (NS_FAILED(rv))
break;
cp++;
}
extern "C" NS_EXPORT nsresult
NSRegisterSelf(nsISupports* aServMgr, const char* path)
{
nsresult rv;
nsresult finalResult = NS_OK;
NS_WITH_SERVICE1(nsIComponentManager, compMgr, aServMgr, kComponentManagerCID, &rv);
if (NS_FAILED(rv)) return rv;
// register the message folder factory
rv = compMgr->RegisterComponent(kCMsgFolderEventCID,
"Folder Event",
nsnull,
path, PR_TRUE, PR_TRUE);
if (NS_FAILED(rv)) finalResult = rv;
rv = compMgr->RegisterComponent(kCUrlListenerManagerCID,
"UrlListenerManager",
NS_URLLISTENERMANAGER_PROGID,
path, PR_TRUE, PR_TRUE);
if (NS_FAILED(rv)) finalResult = rv;
rv = compMgr->RegisterComponent(kCMessengerBootstrapCID,
"Netscape Messenger Bootstrapper",
NS_MESSENGERBOOTSTRAP_PROGID,
path,
PR_TRUE, PR_TRUE);
if ( NS_SUCCEEDED( rv ) ) {
/* Add to appshell component list. */
/* Add to MessengerBootstrap appshell component list. */
NS_WITH_SERVICE(nsIRegistry, registry, NS_REGISTRY_PROGID, &rv);
if ( NS_SUCCEEDED( rv ) ) {
@ -398,189 +445,61 @@ NSRegisterSelf(nsISupports* aServMgr, const char* path)
nsRegistryKey key;
rv = registry->AddSubtree( nsIRegistry::Common,
buffer,
&key );
}
}
else finalResult = rv;
rv = compMgr->RegisterComponent(kCMessengerCID,
"Messenger DOM interaction object",
NS_MESSENGER_PROGID,
path,
PR_TRUE, PR_TRUE);
if (NS_FAILED(rv)) finalResult = rv;
rv = compMgr->RegisterComponent(kMsgAccountManagerCID,
"Messenger Account Manager",
NS_MSGACCOUNTMANAGER_PROGID,
path,
PR_TRUE, PR_TRUE);
if (NS_FAILED(rv)) finalResult = rv;
rv = compMgr->RegisterComponent(kMsgAccountCID,
"Messenger User Account",
NS_MSGACCOUNT_PROGID,
path,
PR_TRUE, PR_TRUE);
if (NS_FAILED(rv)) finalResult = rv;
rv = compMgr->RegisterComponent(kMsgIdentityCID,
"Messenger User Identity",
NS_MSGIDENTITY_PROGID,
path,
PR_TRUE, PR_TRUE);
if (NS_FAILED(rv)) finalResult = rv;
#if 0
rv = compMgr->RegisterComponent(kMsgIncomingServerCID,
"Messenger Incoming Server",
NS_MSGINCOMINGSERVER_PROGID,
path,
PR_TRUE, PR_TRUE);
if (NS_FAILED(rv)) finalResult = rv;
#endif
rv = compMgr->RegisterComponent(kCMsgMailSessionCID,
"Mail Session",
NS_MSGMAILSESSION_PROGID,
path,
PR_TRUE, PR_TRUE);
if (NS_FAILED(rv)) finalResult = rv;
// register our RDF datasources:
rv = compMgr->RegisterComponent(kMailNewsFolderDataSourceCID,
"Mail/News Folder Data Source",
NS_MAILNEWSFOLDERDATASOURCE_PROGID,
path, PR_TRUE, PR_TRUE);
if (NS_FAILED(rv)) finalResult = rv;
// register our RDF datasources:
rv = compMgr->RegisterComponent(kMailNewsMessageDataSourceCID,
"Mail/News Message Data Source",
NS_MAILNEWSMESSAGEDATASOURCE_PROGID,
path, PR_TRUE, PR_TRUE);
if (NS_FAILED(rv)) finalResult = rv;
rv = compMgr->RegisterComponent(kCMessageViewDataSourceCID,
"Mail/News Message View Data Source",
NS_MESSAGEVIEWDATASOURCE_PROGID,
path, PR_TRUE, PR_TRUE);
if (NS_FAILED(rv)) finalResult = rv;
rv = compMgr->RegisterComponent(kMsgAccountManagerDataSourceCID,
"Mail/News Account Manager Data Source",
NS_RDF_DATASOURCE_PROGID_PREFIX "msgaccountmanager",
path, PR_TRUE, PR_TRUE);
if (NS_FAILED(rv)) finalResult = rv;
rv = compMgr->RegisterComponent(kMsgFilterServiceCID,
"Message Filter Service",
NS_MSGFILTERSERVICE_PROGID,
path, PR_TRUE, PR_TRUE);
if (NS_FAILED(rv)) finalResult = rv;
rv = compMgr->RegisterComponent(kMsgBiffManagerCID,
"Messenger Biff Manager",
NS_MSGBIFFMANAGER_PROGID,
path,
PR_TRUE, PR_TRUE);
if (NS_FAILED(rv)) finalResult = rv;
rv = compMgr->RegisterComponent(kMsgNotificationManagerCID,
"Mail/News Notification Manager",
NS_MSGNOTIFICATIONMANAGER_PROGID,
path, PR_TRUE, PR_TRUE);
if (NS_FAILED(rv)) finalResult = rv;
rv = compMgr->RegisterComponent(kCopyMessageStreamListenerCID,
"Mail/News CopyMessage Stream Listener",
NS_COPYMESSAGESTREAMLISTENER_PROGID,
path, PR_TRUE, PR_TRUE);
if (NS_FAILED(rv)) finalResult = rv;
rv = compMgr->RegisterComponent(kMsgCopyServiceCID,
"Mail/News Message Copy Service",
NS_MSGCOPYSERVICE_PROGID,
path, PR_TRUE, PR_TRUE);
if (NS_FAILED(rv)) finalResult = rv;
rv = compMgr->RegisterComponent(kMsgFolderCacheCID,
"Mail/News Folder Cache",
NS_MSGFOLDERCACHE_PROGID,
path, PR_TRUE, PR_TRUE);
if (NS_FAILED(rv)) finalResult = rv;
rv = compMgr->RegisterComponent(kMsgStatusFeedbackCID,
"Mail/News Status Feedback",
NS_MSGSTATUSFEEDBACK_PROGID,
path, PR_TRUE, PR_TRUE);
if (NS_FAILED(rv)) finalResult = rv;
rv = compMgr->RegisterComponent(kMessageViewCID,
"Mail/News MessageView",
NS_MESSAGEVIEW_PROGID,
path, PR_TRUE, PR_TRUE);
if (NS_FAILED(rv)) finalResult = rv;
return finalResult;
&key );
}
return rv;
}
extern "C" NS_EXPORT nsresult
NSUnregisterSelf(nsISupports* aServMgr, const char* path)
NS_IMETHODIMP nsMsgBaseModule::UnregisterSelf(nsIComponentManager* aCompMgr,
nsIFileSpec* aPath,
const char* registryLocation)
{
nsresult rv = NS_OK;
nsresult finalResult = NS_OK;
Components* cp = gComponents;
Components* end = cp + NUM_COMPONENTS;
while (cp < end)
{
aCompMgr->UnregisterComponentSpec(*cp->mCID, aPath);
cp++;
}
NS_WITH_SERVICE1(nsIComponentManager, compMgr, aServMgr, kComponentManagerCID, &rv);
if (NS_FAILED(rv)) return rv;
rv = compMgr->UnregisterComponent(kCUrlListenerManagerCID, path);
if (NS_FAILED(rv)) finalResult = rv;
rv = compMgr->UnregisterComponent(kCMessengerBootstrapCID, path);
if (NS_FAILED(rv)) finalResult = rv;
rv = compMgr->UnregisterComponent(kCMsgFolderEventCID, path);
if (NS_FAILED(rv)) finalResult = rv;
rv = compMgr->UnregisterComponent(kCMsgMailSessionCID, path);
if (NS_FAILED(rv)) finalResult = rv;
rv = compMgr->UnregisterComponent(kMailNewsFolderDataSourceCID, path);
if (NS_FAILED(rv)) finalResult = rv;
rv = compMgr->UnregisterComponent(kMailNewsMessageDataSourceCID, path);
if (NS_FAILED(rv)) finalResult = rv;
rv = compMgr->UnregisterComponent(kCMessageViewDataSourceCID, path);
if (NS_FAILED(rv)) finalResult = rv;
// Account Manager RDF stuff
rv = compMgr->UnregisterComponent(kMsgAccountManagerDataSourceCID, path);
if (NS_FAILED(rv)) finalResult = rv;
rv = compMgr->UnregisterComponent(kMsgFilterServiceCID, path);
if (NS_FAILED(rv)) finalResult = rv;
//Biff
rv = compMgr->UnregisterComponent(kMsgBiffManagerCID, path);
if (NS_FAILED(rv)) finalResult = rv;
rv = compMgr->UnregisterComponent(kMsgNotificationManagerCID, path);
if (NS_FAILED(rv)) finalResult = rv;
rv = compMgr->UnregisterComponent(kCopyMessageStreamListenerCID, path);
if (NS_FAILED(rv)) finalResult = rv;
rv = compMgr->UnregisterComponent(kMsgCopyServiceCID, path);
if (NS_FAILED(rv)) finalResult = rv;
rv = compMgr->UnregisterComponent(kMsgFolderCacheCID, path);
if (NS_FAILED(rv)) finalResult = rv;
rv = compMgr->UnregisterComponent(kMsgStatusFeedbackCID, path);
if (NS_FAILED(rv)) finalResult = rv;
rv = compMgr->UnregisterComponent(kMessageViewCID, path);
if (NS_FAILED(rv)) finalResult = rv;
return finalResult;
return NS_OK;
}
////////////////////////////////////////////////////////////////////////////////
NS_IMETHODIMP nsMsgBaseModule::CanUnload(nsIComponentManager *aCompMgr, PRBool *okToUnload)
{
if (!okToUnload)
return NS_ERROR_INVALID_POINTER;
*okToUnload = PR_FALSE;
return NS_ERROR_FAILURE;
}
//----------------------------------------------------------------------
static nsMsgBaseModule *gModule = NULL;
extern "C" NS_EXPORT nsresult NSGetModule(nsIComponentManager *servMgr,
nsIFileSpec* location,
nsIModule** return_cobj)
{
nsresult rv = NS_OK;
NS_ASSERTION(return_cobj, "Null argument");
NS_ASSERTION(gModule == NULL, "nsMsgBaseModule: Module already created.");
// Create an initialize the imap module instance
nsMsgBaseModule *module = new nsMsgBaseModule();
if (!module)
return NS_ERROR_OUT_OF_MEMORY;
// Increase refcnt and store away nsIModule interface to m in return_cobj
rv = module->QueryInterface(nsIModule::GetIID(), (void**)return_cobj);
if (NS_FAILED(rv))
{
delete module;
module = nsnull;
}
gModule = module; // WARNING: Weak Reference
return rv;
}

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

@ -28,18 +28,6 @@
static NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID);
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
NS_BEGIN_EXTERN_C
nsresult
NS_NewCopyMessageStreamListener(const nsIID& iid, void **result)
{
nsCopyMessageStreamListener *listener = new nsCopyMessageStreamListener();
if(!listener)
return NS_ERROR_OUT_OF_MEMORY;
return listener->QueryInterface(iid, result);
}
NS_END_EXTERN_C
/* the following macros actually implement addref, release and query interface for our component. */
NS_IMPL_ADDREF(nsCopyMessageStreamListener)

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

@ -44,11 +44,6 @@ protected:
};
NS_BEGIN_EXTERN_C
nsresult
NS_NewCopyMessageStreamListener(const nsIID& iid, void **result);
NS_END_EXTERN_C
#endif

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

@ -18,25 +18,7 @@
#include "nsMessageView.h"
NS_BEGIN_EXTERN_C
nsresult
NS_NewMessageView(const nsIID& iid, void **result)
{
nsMessageView *messageView = new nsMessageView();
if(!messageView)
return NS_ERROR_OUT_OF_MEMORY;
nsresult rv = messageView->Init();
if(NS_FAILED(rv))
{
delete messageView;
return rv;
}
return messageView->QueryInterface(iid, result);
}
NS_END_EXTERN_C
NS_IMPL_ISUPPORTS(nsMessageView, nsCOMTypeInfo<nsIMessageView>::GetIID())

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

@ -38,11 +38,6 @@ protected:
};
NS_BEGIN_EXTERN_C
nsresult
NS_NewMessageView(const nsIID& iid, void **result);
NS_END_EXTERN_C
#endif

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

@ -18,14 +18,11 @@
#include "prsystem.h"
#include "nsIMessenger.h"
#include "nsMessenger.h"
/* rhp - for access to webshell */
#include "nsCOMPtr.h"
#include "nsIDOMWindow.h"
#include "nsIBrowserWindow.h"
#include "nsIWebShell.h"
#include "nsIWebShellWindow.h"
#include "nsIScriptGlobalObject.h"
#include "nsAppShellCIDs.h"
@ -36,7 +33,6 @@
#include "nsIDocument.h"
#include "nsIDocumentViewer.h"
#include "nsIDOMXULDocument.h"
#include "nsIDocumentLoaderObserver.h"
#include "nsIMsgMailSession.h"
#include "nsIMsgIncomingServer.h"
@ -44,7 +40,6 @@
#include "nsINoIncomingServer.h"
#include "nsIMsgMessageService.h"
#include "nsIFileSpecWithUI.h"
#include "nsFileSpec.h"
#include "nsFileStream.h"
#include "nsIMessage.h"
@ -72,7 +67,6 @@
#include "nsIComponentManager.h"
#include "nsTransactionManagerCID.h"
#include "nsITransactionManager.h"
#include "nsIMsgSendLater.h"
#include "nsMsgCompCID.h"
@ -149,38 +143,6 @@ public:
};
class nsMessenger : public nsIMessenger
{
public:
nsMessenger();
virtual ~nsMessenger();
NS_DECL_ISUPPORTS
NS_DECL_NSIMESSENGER
protected:
nsresult DoDelete(nsIRDFCompositeDataSource* db, nsISupportsArray *srcArray, nsISupportsArray *deletedArray);
nsresult DoCommand(nsIRDFCompositeDataSource *db, char * command, nsISupportsArray *srcArray,
nsISupportsArray *arguments);
nsresult DoMarkMessagesRead(nsIRDFCompositeDataSource *database, nsISupportsArray *resourceArray, PRBool markRead);
nsresult DoMarkMessagesFlagged(nsIRDFCompositeDataSource *database, nsISupportsArray *resourceArray, PRBool markFlagged);
private:
nsString mId;
void *mScriptObject;
nsCOMPtr<nsITransactionManager> mTxnMgr;
/* rhp - need this to drive message display */
nsIDOMWindow *mWindow;
nsIWebShell *mWebShell;
nsCOMPtr <nsIDocumentLoaderObserver> m_docLoaderObserver;
// mscott: temporary variable used to support running urls through the 'Demo' menu....
nsFileSpec m_folderPath;
void InitializeFolderRoot();
};
static nsresult ConvertDOMListToResourceArray(nsIDOMNodeList *nodeList, nsISupportsArray **resourceArray)
{
@ -305,19 +267,6 @@ nsMessenger::GetNewMessages(nsIRDFCompositeDataSource *db, nsIDOMXULElement *fol
return rv;
}
extern "C"
nsresult
NS_NewMessenger(const nsIID &aIID, void **aResult)
{
if (!aResult) return NS_ERROR_NULL_POINTER;
nsMessenger *appcore = new nsMessenger();
if (appcore)
return appcore->QueryInterface(aIID, (void **)aResult);
else
return NS_ERROR_NOT_INITIALIZED;
}
NS_IMETHODIMP
nsMessenger::SetWindow(nsIDOMWindow *aWin, nsIMsgStatusFeedback *aStatusFeedback)

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

@ -21,17 +21,50 @@
#include "nsCom.h"
#include "nscore.h"
#include "nsIMessenger.h"
#include "nsCOMPtr.h"
#include "nsITransactionManager.h"
#include "nsIDocumentLoaderObserver.h"
#include "nsFileSpec.h"
#include "nsIWebShell.h"
class nsMessenger : public nsIMessenger
{
public:
nsMessenger();
virtual ~nsMessenger();
NS_DECL_ISUPPORTS
NS_DECL_NSIMESSENGER
protected:
nsresult DoDelete(nsIRDFCompositeDataSource* db, nsISupportsArray *srcArray, nsISupportsArray *deletedArray);
nsresult DoCommand(nsIRDFCompositeDataSource *db, char * command, nsISupportsArray *srcArray,
nsISupportsArray *arguments);
nsresult DoMarkMessagesRead(nsIRDFCompositeDataSource *database, nsISupportsArray *resourceArray, PRBool markRead);
nsresult DoMarkMessagesFlagged(nsIRDFCompositeDataSource *database, nsISupportsArray *resourceArray, PRBool markFlagged);
private:
nsString mId;
void *mScriptObject;
nsCOMPtr<nsITransactionManager> mTxnMgr;
/* rhp - need this to drive message display */
nsIDOMWindow *mWindow;
nsIWebShell *mWebShell;
nsCOMPtr <nsIDocumentLoaderObserver> m_docLoaderObserver;
// mscott: temporary variable used to support running urls through the 'Demo' menu....
nsFileSpec m_folderPath;
void InitializeFolderRoot();
};
#define NS_MESSENGER_CID \
{ /* 3f181950-c14d-11d2-b7f2-00805f05ffa5 */ \
0x3f181950, 0xc14d, 0x11d2, \
{0xb7, 0xf2, 0x0, 0x80, 0x5f, 0x05, 0xff, 0xa5}}
NS_BEGIN_EXTERN_C
nsresult
NS_NewMessenger(const nsIID &aIID, void **);
NS_END_EXTERN_C
#endif

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

@ -17,22 +17,11 @@
*/
#include "nsMessengerBootstrap.h"
#include "nsIAppShellComponent.h"
#include "nsCOMPtr.h"
#include "nsDOMCID.h"
class nsMessengerBootstrap : public nsIAppShellComponent {
public:
nsMessengerBootstrap();
virtual ~nsMessengerBootstrap();
NS_DECL_ISUPPORTS
NS_DECL_NSIAPPSHELLCOMPONENT
};
NS_IMPL_ISUPPORTS(nsMessengerBootstrap, nsCOMTypeInfo<nsIAppShellComponent>::GetIID())
@ -74,17 +63,4 @@ nsMessengerBootstrap::Shutdown()
return finalrv;
}
nsresult
NS_NewMessengerBootstrap(const nsIID &aIID, void ** msgboot)
{
if (!msgboot) return NS_ERROR_NULL_POINTER;
nsMessengerBootstrap *bootstrap =
new nsMessengerBootstrap();
if (!bootstrap) return NS_ERROR_OUT_OF_MEMORY;
return bootstrap->QueryInterface(aIID, msgboot);
}

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

@ -23,6 +23,7 @@
#include "nscore.h"
#include "nsIServiceManager.h"
#include "nsIAppShellService.h"
#include "nsIAppShellComponent.h"
#define NS_MESSENGERBOOTSTRAP_CID \
{ /* 4a85a5d0-cddd-11d2-b7f6-00805f05ffa5 */ \
@ -30,10 +31,17 @@
{0xb7, 0xf6, 0x00, 0x80, 0x5f, 0x05, 0xff, 0xa5}}
NS_BEGIN_EXTERN_C
class nsMessengerBootstrap : public nsIAppShellComponent {
public:
nsMessengerBootstrap();
virtual ~nsMessengerBootstrap();
NS_DECL_ISUPPORTS
NS_DECL_NSIAPPSHELLCOMPONENT
};
nsresult NS_NewMessengerBootstrap(const nsIID &aIID, void ** inst);
NS_END_EXTERN_C
#endif

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

@ -39,33 +39,6 @@ static NS_DEFINE_CID(kMsgIdentityCID, NS_MSGIDENTITY_CID);
static NS_DEFINE_CID(kPrefServiceCID, NS_PREF_CID);
class nsMsgAccount : public nsIMsgAccount,
public nsIShutdownListener
{
public:
nsMsgAccount();
virtual ~nsMsgAccount();
NS_DECL_ISUPPORTS
NS_DECL_NSIMSGACCOUNT
// nsIShutdownListener
NS_IMETHOD OnShutdown(const nsCID& aClass, nsISupports *service);
private:
char *m_accountKey;
nsIPref *m_prefs;
nsCOMPtr<nsIMsgIncomingServer> m_incomingServer;
nsCOMPtr<nsIMsgIdentity> m_defaultIdentity;
nsCOMPtr<nsISupportsArray> m_identities;
nsresult getPrefService();
nsresult createIncomingServer();
nsresult createIdentities();
};
@ -424,15 +397,4 @@ nsMsgAccount::OnShutdown(const nsCID& aClass, nsISupports *service)
return NS_OK;
}
nsresult
NS_NewMsgAccount(const nsIID& iid, void **result)
{
if (!result) return NS_ERROR_NULL_POINTER;
nsMsgAccount *account = new nsMsgAccount;
if (!account) return NS_ERROR_OUT_OF_MEMORY;
return account->QueryInterface(iid, result);
}

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

@ -19,9 +19,31 @@
#include "nscore.h"
#include "nsIMsgAccount.h"
NS_BEGIN_EXTERN_C
class nsMsgAccount : public nsIMsgAccount,
public nsIShutdownListener
{
public:
nsMsgAccount();
virtual ~nsMsgAccount();
NS_DECL_ISUPPORTS
NS_DECL_NSIMSGACCOUNT
// nsIShutdownListener
nsresult
NS_NewMsgAccount(const nsIID& iid, void **result);
NS_IMETHOD OnShutdown(const nsCID& aClass, nsISupports *service);
private:
char *m_accountKey;
nsIPref *m_prefs;
nsCOMPtr<nsIMsgIncomingServer> m_incomingServer;
nsCOMPtr<nsIMsgIdentity> m_defaultIdentity;
nsCOMPtr<nsISupportsArray> m_identities;
nsresult getPrefService();
nsresult createIncomingServer();
nsresult createIdentities();
};
NS_END_EXTERN_C

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

@ -16,16 +16,12 @@
* Reserved.
*/
#include "nsIMsgAccountManager.h"
#include "nsIComponentManager.h"
#include "nsIServiceManager.h"
#include "nsISupportsArray.h"
#include "nsMsgAccountManager.h"
#include "nsHashtable.h"
#include "nsMsgBaseCID.h"
#include "nsMsgCompCID.h"
#include "nsIPref.h"
#include "nsCOMPtr.h"
#include "prmem.h"
#include "plstr.h"
#include "nsString.h"
@ -47,7 +43,6 @@
#include "nsFileLocations.h"
#include "nsIURL.h"
#include "nsISmtpService.h"
#include "nsISmtpServer.h"
// this should eventually be moved to the pop3 server for upgrading
#include "nsIPop3IncomingServer.h"
@ -303,139 +298,6 @@ typedef struct _findAccountByKeyEntry {
class nsMsgAccountManager : public nsIMsgAccountManager,
public nsIShutdownListener
{
public:
nsMsgAccountManager();
virtual ~nsMsgAccountManager();
NS_DECL_ISUPPORTS
/* nsIShutdownListener methods */
NS_IMETHOD OnShutdown(const nsCID& aClass, nsISupports *service);
/* nsIMsgAccountManager methods */
NS_DECL_NSIMSGACCOUNTMANAGER
//Add/remove an account to/from the Biff Manager if it has Biff turned on.
nsresult AddServerToBiff(nsIMsgIncomingServer *account);
nsresult RemoveServerFromBiff(nsIMsgIncomingServer *account);
private:
PRBool m_accountsLoaded;
PRBool m_alreadySetNntpDefaultLocalPath;
PRBool m_alreadySetImapDefaultLocalPath;
nsISupportsArray *m_accounts;
nsHashtable m_identities;
nsHashtable m_incomingServers;
nsCOMPtr<nsIMsgAccount> m_defaultAccount;
nsCAutoString accountKeyList;
/* internal creation routines - updates m_identities and m_incomingServers */
nsresult createKeyedAccount(const char* key,
nsIMsgAccount **_retval);
nsresult createKeyedServer(const char*key,
const char* type,
nsIMsgIncomingServer **_retval);
nsresult createKeyedIdentity(const char* key,
nsIMsgIdentity **_retval);
// hash table enumerators
//
static PRBool hashElementToArray(nsHashKey *aKey, void *aData,
void *closure);
// called by EnumerateRemove to release all elements
static PRBool hashElementRelease(nsHashKey *aKey, void *aData,
void *closure);
// remove all of the servers from the Biff Manager
static PRBool removeServerFromBiff(nsHashKey *aKey, void *aData,
void *closure);
//
// account enumerators
// ("element" is always an account)
//
// append the account keys to the given string
static PRBool getAccountList(nsISupports *aKey, void *aData);
// find the identities that correspond to the given server
static PRBool findIdentitiesForServer(nsISupports *element, void *aData);
// find the servers that correspond to the given identity
static PRBool findServersForIdentity (nsISupports *element, void *aData);
static PRBool findServerIndexByServer(nsISupports *element, void *aData);
// find the account with the given key
static PRBool findAccountByKey (nsISupports *element, void *aData);
static PRBool findAccountByServerKey (nsISupports *element, void *aData);
// load up the servers into the given nsISupportsArray
static PRBool getServersToArray(nsISupports *element, void *aData);
// load up the identities into the given nsISupportsArray
static PRBool getIdentitiesToArray(nsISupports *element, void *aData);
// add identities if they don't alreadby exist in the given nsISupportsArray
static PRBool addIdentityIfUnique(nsISupports *element, void *aData);
//
// server enumerators
// ("element" is always a server)
//
// find the server given by {username, hostname, type}
static PRBool findServer(nsISupports *aElement, void *data);
// write out the server's cache through the given folder cache
static PRBool writeFolderCache(nsHashKey *aKey, void *aData, void *closure);
static PRBool closeCachedConnections(nsHashKey *aKey, void *aData, void *closure);
// methods for migration / upgrading
nsresult MigrateIdentity(nsIMsgIdentity *identity);
nsresult MigrateSmtpServer(nsISmtpServer *server);
nsresult CopyIdentity(nsIMsgIdentity *srcIdentity, nsIMsgIdentity *destIdentity);
nsresult SetNewsCcAndFccValues(nsIMsgIdentity *identity);
nsresult SetMailCcAndFccValues(nsIMsgIdentity *identity);
nsresult MigrateImapAccounts(nsIMsgIdentity *identity);
nsresult MigrateImapAccount(nsIMsgIdentity *identity, const char *hostname);
nsresult MigrateOldImapPrefs(nsIMsgIncomingServer *server, const char *hostname);
nsresult MigratePopAccount(nsIMsgIdentity *identity);
nsresult CreateLocalMailAccount(nsIMsgIdentity *identity);
nsresult MigrateLocalMailAccount(nsIMsgIdentity *identity);
nsresult MigrateOldPopPrefs(nsIMsgIncomingServer *server, const char *hostname);
nsresult MigrateNewsAccounts(nsIMsgIdentity *identity);
nsresult MigrateNewsAccount(nsIMsgIdentity *identity, const char *hostname, nsFileSpec &newsrcfile, nsFileSpec &newsHostsDir);
nsresult MigrateOldNntpPrefs(nsIMsgIncomingServer *server, const char *hostname, nsFileSpec &newsrcfile);
nsresult ProceedWithMigration(PRInt32 oldMailType);
static char *getUniqueKey(const char* prefix, nsHashtable *hashTable);
static char *getUniqueAccountKey(const char* prefix,
nsISupportsArray *accounts);
nsresult Convert4XUri(const char *old_uri, const char *default_folder_name, char **new_uri);
nsresult getPrefService();
nsIPref *m_prefs;
};
NS_IMPL_ADDREF(nsMsgAccountManager)
@ -2779,13 +2641,3 @@ nsMsgAccountManager::findServersForIdentity(nsISupports *element, void *aData)
return PR_TRUE;
}
nsresult
NS_NewMsgAccountManager(const nsIID& iid, void **result)
{
nsMsgAccountManager* manager;
if (!result) return NS_ERROR_NULL_POINTER;
manager = new nsMsgAccountManager();
return manager->QueryInterface(iid, result);
}

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

@ -18,6 +18,10 @@
#include "nscore.h"
#include "nsIMsgAccountManager.h"
#include "nsCOMPtr.h"
#include "nsHashtable.h"
#include "nsISmtpServer.h"
#include "nsIPref.h"
/*
* some platforms (like Windows and Mac) use a map file, because of
@ -47,10 +51,137 @@
#endif /* XP_UNIX || XP_BEOS */
class nsMsgAccountManager : public nsIMsgAccountManager,
public nsIShutdownListener
{
public:
NS_BEGIN_EXTERN_C
nsMsgAccountManager();
virtual ~nsMsgAccountManager();
NS_DECL_ISUPPORTS
nsresult
NS_NewMsgAccountManager(const nsIID& iid, void **result);
/* nsIShutdownListener methods */
NS_IMETHOD OnShutdown(const nsCID& aClass, nsISupports *service);
/* nsIMsgAccountManager methods */
NS_DECL_NSIMSGACCOUNTMANAGER
//Add/remove an account to/from the Biff Manager if it has Biff turned on.
nsresult AddServerToBiff(nsIMsgIncomingServer *account);
nsresult RemoveServerFromBiff(nsIMsgIncomingServer *account);
private:
PRBool m_accountsLoaded;
PRBool m_alreadySetNntpDefaultLocalPath;
PRBool m_alreadySetImapDefaultLocalPath;
nsISupportsArray *m_accounts;
nsHashtable m_identities;
nsHashtable m_incomingServers;
nsCOMPtr<nsIMsgAccount> m_defaultAccount;
nsCAutoString accountKeyList;
/* internal creation routines - updates m_identities and m_incomingServers */
nsresult createKeyedAccount(const char* key,
nsIMsgAccount **_retval);
nsresult createKeyedServer(const char*key,
const char* type,
nsIMsgIncomingServer **_retval);
nsresult createKeyedIdentity(const char* key,
nsIMsgIdentity **_retval);
// hash table enumerators
//
static PRBool hashElementToArray(nsHashKey *aKey, void *aData,
void *closure);
// called by EnumerateRemove to release all elements
static PRBool hashElementRelease(nsHashKey *aKey, void *aData,
void *closure);
// remove all of the servers from the Biff Manager
static PRBool removeServerFromBiff(nsHashKey *aKey, void *aData,
void *closure);
//
// account enumerators
// ("element" is always an account)
//
// append the account keys to the given string
static PRBool getAccountList(nsISupports *aKey, void *aData);
// find the identities that correspond to the given server
static PRBool findIdentitiesForServer(nsISupports *element, void *aData);
// find the servers that correspond to the given identity
static PRBool findServersForIdentity (nsISupports *element, void *aData);
static PRBool findServerIndexByServer(nsISupports *element, void *aData);
// find the account with the given key
static PRBool findAccountByKey (nsISupports *element, void *aData);
static PRBool findAccountByServerKey (nsISupports *element, void *aData);
// load up the servers into the given nsISupportsArray
static PRBool getServersToArray(nsISupports *element, void *aData);
// load up the identities into the given nsISupportsArray
static PRBool getIdentitiesToArray(nsISupports *element, void *aData);
// add identities if they don't alreadby exist in the given nsISupportsArray
static PRBool addIdentityIfUnique(nsISupports *element, void *aData);
//
// server enumerators
// ("element" is always a server)
//
// find the server given by {username, hostname, type}
static PRBool findServer(nsISupports *aElement, void *data);
// write out the server's cache through the given folder cache
static PRBool writeFolderCache(nsHashKey *aKey, void *aData, void *closure);
static PRBool closeCachedConnections(nsHashKey *aKey, void *aData, void *closure);
// methods for migration / upgrading
nsresult MigrateIdentity(nsIMsgIdentity *identity);
nsresult MigrateSmtpServer(nsISmtpServer *server);
nsresult CopyIdentity(nsIMsgIdentity *srcIdentity, nsIMsgIdentity *destIdentity);
nsresult SetNewsCcAndFccValues(nsIMsgIdentity *identity);
nsresult SetMailCcAndFccValues(nsIMsgIdentity *identity);
nsresult MigrateImapAccounts(nsIMsgIdentity *identity);
nsresult MigrateImapAccount(nsIMsgIdentity *identity, const char *hostname);
nsresult MigrateOldImapPrefs(nsIMsgIncomingServer *server, const char *hostname);
nsresult MigratePopAccount(nsIMsgIdentity *identity);
nsresult CreateLocalMailAccount(nsIMsgIdentity *identity);
nsresult MigrateLocalMailAccount(nsIMsgIdentity *identity);
nsresult MigrateOldPopPrefs(nsIMsgIncomingServer *server, const char *hostname);
nsresult MigrateNewsAccounts(nsIMsgIdentity *identity);
nsresult MigrateNewsAccount(nsIMsgIdentity *identity, const char *hostname, nsFileSpec &newsrcfile, nsFileSpec &newsHostsDir);
nsresult MigrateOldNntpPrefs(nsIMsgIncomingServer *server, const char *hostname, nsFileSpec &newsrcfile);
nsresult ProceedWithMigration(PRInt32 oldMailType);
static char *getUniqueKey(const char* prefix, nsHashtable *hashTable);
static char *getUniqueAccountKey(const char* prefix,
nsISupportsArray *accounts);
nsresult Convert4XUri(const char *old_uri, const char *default_folder_name, char **new_uri);
nsresult getPrefService();
nsIPref *m_prefs;
};
NS_END_EXTERN_C

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

@ -21,9 +21,7 @@
*/
#include "nsMsgAccountManagerDS.h"
#include "nsMsgRDFDataSource.h"
#include "nsIMsgAccountManager.h"
#include "rdf.h"
#include "nsRDFCID.h"
@ -32,7 +30,6 @@
#include "nsIServiceManager.h"
#include "nsIMsgMailSession.h"
#include "nsCOMPtr.h"
#include "nsXPIDLString.h"
#include "nsMsgRDFUtils.h"
@ -54,63 +51,6 @@ static NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID);
#define NC_RDF_ACCOUNTROOT "msgaccounts:/"
class nsMsgAccountManagerDataSource : public nsMsgRDFDataSource
{
public:
nsMsgAccountManagerDataSource();
virtual ~nsMsgAccountManagerDataSource();
virtual nsresult Init();
// service manager shutdown method
// RDF datasource methods
/* nsIRDFNode GetTarget (in nsIRDFResource aSource, in nsIRDFResource property, in boolean aTruthValue); */
NS_IMETHOD GetTarget(nsIRDFResource *source,
nsIRDFResource *property,
PRBool aTruthValue,
nsIRDFNode **_retval);
/* nsISimpleEnumerator GetTargets (in nsIRDFResource aSource, in nsIRDFResource property, in boolean aTruthValue); */
NS_IMETHOD GetTargets(nsIRDFResource *source,
nsIRDFResource *property,
PRBool aTruthValue,
nsISimpleEnumerator **_retval);
/* nsISimpleEnumerator ArcLabelsOut (in nsIRDFResource aSource); */
NS_IMETHOD ArcLabelsOut(nsIRDFResource *source, nsISimpleEnumerator **_retval);
protected:
static nsIRDFResource* kNC_Name;
static nsIRDFResource* kNC_NameSort;
static nsIRDFResource* kNC_PageTag;
static nsIRDFResource* kNC_Child;
static nsIRDFResource* kNC_AccountRoot;
static nsIRDFResource* kNC_Account;
static nsIRDFResource* kNC_Server;
static nsIRDFResource* kNC_Identity;
static nsIRDFResource* kNC_Settings;
static nsIRDFResource* kNC_PageTitleMain;
static nsIRDFResource* kNC_PageTitleServer;
static nsIRDFResource* kNC_PageTitleCopies;
static nsIRDFResource* kNC_PageTitleAdvanced;
static nsIRDFResource* kNC_PageTitleSMTP;
static nsrefcnt gAccountManagerResourceRefCnt;
private:
// enumeration function to convert each server (element)
// to an nsIRDFResource and append it to the array (in data)
static PRBool createServerResources(nsISupports *element, void *data);
nsCOMPtr<nsIMsgAccountManager> mAccountManager;
};
typedef struct _serverCreationParams {
nsISupportsArray *serverArray;
nsIRDFService *rdfService;
@ -503,10 +443,4 @@ nsMsgAccountManagerDataSource::ArcLabelsOut(nsIRDFResource *source,
return NS_OK;
}
nsresult
NS_NewMsgAccountManagerDataSource(const nsIID& iid, void ** result)
{
nsMsgAccountManagerDataSource *amds = new nsMsgAccountManagerDataSource();
if (!amds) return NS_ERROR_OUT_OF_MEMORY;
return amds->QueryInterface(iid, result);
}

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

@ -22,18 +22,72 @@
#include "nscore.h"
#include "nsError.h"
#include "nsIID.h"
#include "nsMsgRDFDataSource.h"
#include "nsCOMPtr.h"
#include "nsIMsgAccountManager.h"
/* {3f989ca4-f77a-11d2-969d-006008948010} */
#define NS_MSGACCOUNTMANAGERDATASOURCE_CID \
{0x3f989ca4, 0xf77a, 0x11d2, \
{0x96, 0x9d, 0x00, 0x60, 0x08, 0x94, 0x80, 0x10}}
NS_BEGIN_EXTERN_C
class nsMsgAccountManagerDataSource : public nsMsgRDFDataSource
{
nsresult
NS_NewMsgAccountManagerDataSource(const nsIID& iid, void ** result);
public:
nsMsgAccountManagerDataSource();
virtual ~nsMsgAccountManagerDataSource();
virtual nsresult Init();
// service manager shutdown method
// RDF datasource methods
/* nsIRDFNode GetTarget (in nsIRDFResource aSource, in nsIRDFResource property, in boolean aTruthValue); */
NS_IMETHOD GetTarget(nsIRDFResource *source,
nsIRDFResource *property,
PRBool aTruthValue,
nsIRDFNode **_retval);
/* nsISimpleEnumerator GetTargets (in nsIRDFResource aSource, in nsIRDFResource property, in boolean aTruthValue); */
NS_IMETHOD GetTargets(nsIRDFResource *source,
nsIRDFResource *property,
PRBool aTruthValue,
nsISimpleEnumerator **_retval);
/* nsISimpleEnumerator ArcLabelsOut (in nsIRDFResource aSource); */
NS_IMETHOD ArcLabelsOut(nsIRDFResource *source, nsISimpleEnumerator **_retval);
protected:
static nsIRDFResource* kNC_Name;
static nsIRDFResource* kNC_NameSort;
static nsIRDFResource* kNC_PageTag;
static nsIRDFResource* kNC_Child;
static nsIRDFResource* kNC_AccountRoot;
static nsIRDFResource* kNC_Account;
static nsIRDFResource* kNC_Server;
static nsIRDFResource* kNC_Identity;
static nsIRDFResource* kNC_Settings;
static nsIRDFResource* kNC_PageTitleMain;
static nsIRDFResource* kNC_PageTitleServer;
static nsIRDFResource* kNC_PageTitleCopies;
static nsIRDFResource* kNC_PageTitleAdvanced;
static nsIRDFResource* kNC_PageTitleSMTP;
static nsrefcnt gAccountManagerResourceRefCnt;
private:
// enumeration function to convert each server (element)
// to an nsIRDFResource and append it to the array (in data)
static PRBool createServerResources(nsISupports *element, void *data);
nsCOMPtr<nsIMsgAccountManager> mAccountManager;
};
NS_END_EXTERN_C
#endif

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

@ -19,18 +19,7 @@
#include "nsMsgBiffManager.h"
#include "nsCRT.h"
NS_BEGIN_EXTERN_C
nsresult
NS_NewMsgBiffManager(const nsIID& iid, void **result)
{
nsMsgBiffManager *biffManager = new nsMsgBiffManager();
if(!biffManager)
return NS_ERROR_OUT_OF_MEMORY;
return biffManager->QueryInterface(iid, result);
}
NS_END_EXTERN_C
NS_IMPL_ADDREF(nsMsgBiffManager)
NS_IMPL_RELEASE(nsMsgBiffManager)

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

@ -57,12 +57,7 @@ protected:
nsVoidArray *mBiffArray;
};
NS_BEGIN_EXTERN_C
nsresult
NS_NewMsgBiffManager(const nsIID& iid, void **result);
NS_END_EXTERN_C
#endif

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

@ -17,98 +17,21 @@
*/
#include "nsMsgCopyService.h"
#include "nsCOMPtr.h"
#include "nsVoidArray.h"
#include "nsMsgKeyArray.h"
#include "nspr.h"
#include "nsIMessage.h"
#include "nsIMsgFolder.h"
typedef enum _nsCopyRequestType
{
nsCopyMessagesType = 0x0,
nsCopyFileMessageType = 0x1
} nsCopyRequestType;
class nsCopyRequest;
class nsCopySource
{
public:
nsCopySource();
nsCopySource(nsIMsgFolder* srcFolder);
~nsCopySource();
void AddMessage(nsIMessage* aMsg);
nsCOMPtr<nsIMsgFolder> m_msgFolder;
nsCOMPtr<nsISupportsArray> m_messageArray;
PRBool m_processed;
};
class nsCopyRequest
{
public:
nsCopyRequest();
~nsCopyRequest();
nsresult Init(nsCopyRequestType type, nsISupports* aSupport,
nsIMsgFolder* dstFolder,
PRBool bVal, nsIMsgCopyServiceListener* listener,
nsITransactionManager* txnMgr);
nsCopySource* AddNewCopySource(nsIMsgFolder* srcFolder);
nsCOMPtr<nsISupports> m_srcSupport; // ui source folder or file spec
nsCOMPtr<nsIMsgFolder> m_dstFolder;
nsCOMPtr<nsITransactionManager> m_txnMgr;
nsCOMPtr<nsIMsgCopyServiceListener> m_listener;
nsCopyRequestType m_requestType;
PRBool m_isMoveOrDraftOrTemplate;
PRBool m_processed;
nsVoidArray m_copySourceArray; // array of nsCopySource
};
class nsMsgCopyService : public nsIMsgCopyService
{
public:
nsMsgCopyService();
virtual ~nsMsgCopyService();
NS_DECL_ISUPPORTS
// nsIMsgCopyService interface
NS_IMETHOD CopyMessages(nsIMsgFolder* srcFolder, /* UI src foler */
nsISupportsArray* messages,
nsIMsgFolder* dstFolder,
PRBool isMove,
nsIMsgCopyServiceListener* listener,
nsITransactionManager* txnMgr);
NS_IMETHOD CopyFileMessage(nsIFileSpec* fileSpec,
nsIMsgFolder* dstFolder,
nsIMessage* msgToReplace,
PRBool isDraftOrTemplate,
nsIMsgCopyServiceListener* listener,
nsITransactionManager* txnMgr);
NS_IMETHOD NotifyCompletion(nsISupports* aSupport, /* store src folder */
nsIMsgFolder* dstFolder,
nsresult result);
private:
nsresult ClearRequest(nsCopyRequest* aRequest, nsresult rv);
nsresult DoCopy(nsCopyRequest* aRequest);
nsresult DoNextCopy();
nsCopyRequest* FindRequest(nsISupports* aSupport, nsIMsgFolder* dstFolder);
nsVoidArray m_copyRequests;
};
// ******************** nsCopySource ******************
//
MOZ_DECL_CTOR_COUNTER(nsCopySource);
nsCopySource::nsCopySource() : m_processed(PR_FALSE)
{
MOZ_COUNT_CTOR(nsCopySource);
nsresult rv;
rv = NS_NewISupportsArray(getter_AddRefs(m_messageArray));
}
@ -116,6 +39,7 @@ nsCopySource::nsCopySource() : m_processed(PR_FALSE)
nsCopySource::nsCopySource(nsIMsgFolder* srcFolder) :
m_processed(PR_FALSE)
{
MOZ_COUNT_CTOR(nsCopySource);
nsresult rv;
rv = NS_NewISupportsArray(getter_AddRefs(m_messageArray));
m_msgFolder = do_QueryInterface(srcFolder, &rv);
@ -123,6 +47,7 @@ nsCopySource::nsCopySource(nsIMsgFolder* srcFolder) :
nsCopySource::~nsCopySource()
{
MOZ_COUNT_DTOR(nsCopySource);
}
void nsCopySource::AddMessage(nsIMessage* aMsg)
@ -134,16 +59,22 @@ void nsCopySource::AddMessage(nsIMessage* aMsg)
// ************ nsCopyRequest *****************
//
MOZ_DECL_CTOR_COUNTER(nsCopyRequest);
nsCopyRequest::nsCopyRequest() :
m_requestType(nsCopyMessagesType),
m_isMoveOrDraftOrTemplate(PR_FALSE),
m_processed(PR_FALSE)
{
MOZ_COUNT_CTOR(nsCopyRequest);
}
nsCopyRequest::~nsCopyRequest()
{
PRInt32 j;
MOZ_COUNT_DTOR(nsCopyRequest);
PRInt32 j;
nsCopySource* ncs;
j = m_copySourceArray.Count();
@ -187,6 +118,7 @@ nsCopyRequest::AddNewCopySource(nsIMsgFolder* srcFolder)
// ************* nsMsgCopyService ****************
//
nsMsgCopyService::nsMsgCopyService()
{
NS_INIT_REFCNT();
@ -194,6 +126,7 @@ nsMsgCopyService::nsMsgCopyService()
nsMsgCopyService::~nsMsgCopyService()
{
PRInt32 i;
nsCopyRequest* copyRequest;

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

@ -21,6 +21,91 @@
#include "nscore.h"
#include "nsIMsgCopyService.h"
#include "nsCOMPtr.h"
#include "nsIMsgFolder.h"
#include "nsIMessage.h"
typedef enum _nsCopyRequestType
{
nsCopyMessagesType = 0x0,
nsCopyFileMessageType = 0x1
} nsCopyRequestType;
class nsCopyRequest;
class nsCopySource
{
public:
nsCopySource();
nsCopySource(nsIMsgFolder* srcFolder);
~nsCopySource();
void AddMessage(nsIMessage* aMsg);
nsCOMPtr<nsIMsgFolder> m_msgFolder;
nsCOMPtr<nsISupportsArray> m_messageArray;
PRBool m_processed;
};
class nsCopyRequest
{
public:
nsCopyRequest();
~nsCopyRequest();
nsresult Init(nsCopyRequestType type, nsISupports* aSupport,
nsIMsgFolder* dstFolder,
PRBool bVal, nsIMsgCopyServiceListener* listener,
nsITransactionManager* txnMgr);
nsCopySource* AddNewCopySource(nsIMsgFolder* srcFolder);
nsCOMPtr<nsISupports> m_srcSupport; // ui source folder or file spec
nsCOMPtr<nsIMsgFolder> m_dstFolder;
nsCOMPtr<nsITransactionManager> m_txnMgr;
nsCOMPtr<nsIMsgCopyServiceListener> m_listener;
nsCopyRequestType m_requestType;
PRBool m_isMoveOrDraftOrTemplate;
PRBool m_processed;
nsVoidArray m_copySourceArray; // array of nsCopySource
};
class nsMsgCopyService : public nsIMsgCopyService
{
public:
nsMsgCopyService();
virtual ~nsMsgCopyService();
NS_DECL_ISUPPORTS
// nsIMsgCopyService interface
NS_IMETHOD CopyMessages(nsIMsgFolder* srcFolder, /* UI src foler */
nsISupportsArray* messages,
nsIMsgFolder* dstFolder,
PRBool isMove,
nsIMsgCopyServiceListener* listener,
nsITransactionManager* txnMgr);
NS_IMETHOD CopyFileMessage(nsIFileSpec* fileSpec,
nsIMsgFolder* dstFolder,
nsIMessage* msgToReplace,
PRBool isDraftOrTemplate,
nsIMsgCopyServiceListener* listener,
nsITransactionManager* txnMgr);
NS_IMETHOD NotifyCompletion(nsISupports* aSupport, /* store src folder */
nsIMsgFolder* dstFolder,
nsresult result);
private:
nsresult ClearRequest(nsCopyRequest* aRequest, nsresult rv);
nsresult DoCopy(nsCopyRequest* aRequest);
nsresult DoNextCopy();
nsCopyRequest* FindRequest(nsISupports* aSupport, nsIMsgFolder* dstFolder);
nsVoidArray m_copyRequests;
};
NS_BEGIN_EXTERN_C

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

@ -1267,23 +1267,4 @@ nsresult nsMsgFolderDataSource::GetFolderSortOrder(nsIMsgFolder *folder, PRInt32
}
nsresult
NS_NewMsgFolderDataSource(const nsIID& iid, void **result)
{
NS_PRECONDITION(result != nsnull, "null ptr");
if (! result)
return NS_ERROR_NULL_POINTER;
nsMsgFolderDataSource* datasource = new nsMsgFolderDataSource();
if (! datasource)
return NS_ERROR_OUT_OF_MEMORY;
nsresult rv;
rv = datasource->Init();
if (NS_FAILED(rv)) {
delete datasource;
return rv;
}
return datasource->QueryInterface(iid, result);
}

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

@ -182,5 +182,4 @@ protected:
};
PR_EXTERN(nsresult)
NS_NewMsgFolderDataSource(const nsIID& iid, void **result);

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

@ -297,20 +297,5 @@ NS_IMETHODIMP nsMsgMailSession::NotifyFolderLoaded(nsIFolder *folder)
}
nsresult
NS_NewMsgMailSession(const nsIID& iid, void **result)
{
if (!result) return NS_ERROR_NULL_POINTER;
nsMsgMailSession *mailSession = new nsMsgMailSession;
if (!mailSession) return NS_ERROR_OUT_OF_MEMORY;
nsresult rv = mailSession->Init();
if(NS_FAILED(rv))
{
delete mailSession;
return rv;
}
return mailSession->QueryInterface(iid, result);
}

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

@ -57,11 +57,5 @@ protected:
};
NS_BEGIN_EXTERN_C
nsresult
NS_NewMsgMailSession(const nsIID& iid, void **result);
NS_END_EXTERN_C
#endif /* nsMsgMailSession_h__ */

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

@ -1182,25 +1182,6 @@ nsresult nsMsgMessageDataSource::GetMessagesAndFirstFolder(nsISupportsArray *mes
}
nsresult
NS_NewMsgMessageDataSource(const nsIID& iid, void **result)
{
NS_PRECONDITION(result != nsnull, "null ptr");
if (! result)
return NS_ERROR_NULL_POINTER;
nsMsgMessageDataSource* datasource = new nsMsgMessageDataSource();
if (! datasource)
return NS_ERROR_OUT_OF_MEMORY;
nsresult rv;
rv = datasource->Init();
if (NS_FAILED(rv)) {
delete datasource;
return rv;
}
return datasource->QueryInterface(iid, result);
}

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

@ -204,5 +204,4 @@ protected:
};
PR_EXTERN(nsresult)
NS_NewMsgMessageDataSource(const nsIID& iid, void **result);

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

@ -53,24 +53,7 @@ nsIRDFResource* nsMsgNotificationManager::kNC_NewMessages = nsnull;
#define NC_RDF_NEWMESSAGES "http://home.netscape.com/NC-rdf#MsgNewMessages"
NS_BEGIN_EXTERN_C
nsresult
NS_NewMsgNotificationManager(const nsIID& iid, void **result)
{
nsresult rv;
nsMsgNotificationManager *notificationManager = new nsMsgNotificationManager();
if(!notificationManager)
return NS_ERROR_OUT_OF_MEMORY;
rv = notificationManager->Init();
if(!NS_SUCCEEDED(rv))
return rv;
return notificationManager->QueryInterface(iid, result);
}
NS_END_EXTERN_C
nsMsgNotificationManager::nsMsgNotificationManager()
{

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

@ -57,11 +57,6 @@ protected:
};
NS_BEGIN_EXTERN_C
nsresult
NS_NewMsgNotificationManager(const nsIID& iid, void **result);
NS_END_EXTERN_C
#endif

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

@ -25,18 +25,7 @@
#include "nsIDOMElement.h"
#include "nsIDOMXULDocument.h"
NS_BEGIN_EXTERN_C
nsresult
NS_NewMsgStatusFeedback(const nsIID& iid, void **result)
{
nsMsgStatusFeedback *statusFeedback = new nsMsgStatusFeedback();
if(!statusFeedback)
return NS_ERROR_OUT_OF_MEMORY;
return statusFeedback->QueryInterface(iid, result);
}
NS_END_EXTERN_C
nsMsgStatusFeedback::nsMsgStatusFeedback()
{

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

@ -57,12 +57,7 @@ protected:
};
NS_BEGIN_EXTERN_C
nsresult
NS_NewMsgStatusFeedback(const nsIID& iid, void **result);
NS_END_EXTERN_C
#endif // _nsMsgStatusFeedback_h