add getsserver and GetIncomingServerType. This allows us to get the incoming server associated with a folder.

This commit is contained in:
mscott%netscape.com 1999-05-15 21:03:02 +00:00
parent 0fc879a65a
commit cab48caf44
2 changed files with 58 additions and 9 deletions

View File

@ -258,6 +258,45 @@ NS_IMETHODIMP nsMsgFolder::BuildUrl(nsMsgDatabase *db, nsMsgKey key, char ** url
}
#endif
NS_IMETHODIMP nsMsgFolder::GetServer(nsIMsgIncomingServer ** aServer)
{
nsresult rv = NS_OK;
if (!m_server) // if we haven't fetched the server yet....
{
NS_WITH_SERVICE(nsIMsgMailSession, session, kMsgMailSessionCID, &rv);
if (NS_FAILED(rv)) return rv;
nsCOMPtr<nsIMsgAccountManager> accountManager;
rv = session->GetAccountManager(getter_AddRefs(accountManager));
if(NS_FAILED(rv)) return rv;
char * hostname = nsnull;
rv = GetHostName(&hostname);
if(NS_FAILED(rv)) return rv;
nsCOMPtr<nsISupportsArray> servers;
rv = accountManager->FindServersByHostname(hostname,
GetIncomingServerType(),
getter_AddRefs(servers));
PR_FREEIF(hostname);
if (NS_FAILED(rv)) return rv;
// mscott: this is pretty bogus....we should be required by FindServers
// to pass in enough information to uniquely identify ONE
// server. we need at least the user name and host name.
m_server = do_QueryInterface(servers->ElementAt(0));
}
if (aServer)
{
*aServer = m_server;
NS_IF_ADDREF(*aServer);
}
else
rv = NS_ERROR_NULL_POINTER;
return rv;
}
NS_IMETHODIMP nsMsgFolder::GetPrettyName(char ** name)
{

View File

@ -30,6 +30,7 @@
#include "nsRDFResource.h"
#include "nsIDBFolderInfo.h"
#include "nsIMsgDatabase.h"
#include "nsIMsgIncomingServer.h"
#include "nsCOMPtr.h"
/*
@ -75,10 +76,10 @@ public:
NS_IMETHOD GetChildNamed(const char *name, nsISupports* *result);
NS_IMETHOD GetSubFolders(nsIEnumerator* *result);
NS_IMETHOD GetHasSubFolders(PRBool *_retval);
NS_IMETHOD AddFolderListener(nsIFolderListener * listener);
NS_IMETHOD RemoveFolderListener(nsIFolderListener * listener);
NS_IMETHOD GetParent(nsIFolder * *aParent);
NS_IMETHOD SetParent(nsIFolder * aParent);
NS_IMETHOD AddFolderListener(nsIFolderListener * listener);
NS_IMETHOD RemoveFolderListener(nsIFolderListener * listener);
NS_IMETHOD GetParent(nsIFolder * *aParent);
NS_IMETHOD SetParent(nsIFolder * aParent);
// nsIMsgFolder methods:
@ -86,9 +87,11 @@ public:
NS_IMETHOD ReplaceElement(nsISupports* element, nsISupports* newElement);
NS_IMETHOD GetVisibleSubFolders(nsIEnumerator* *result);
NS_IMETHOD GetMessages(nsIEnumerator* *result);
NS_IMETHOD GetThreads(nsIEnumerator ** threadEnumerator);
NS_IMETHOD GetThreadForMessage(nsIMessage *message, nsIMsgThread **thread);
NS_IMETHOD HasMessage(nsIMessage *message, PRBool *hasMessage);
NS_IMETHOD GetThreads(nsIEnumerator ** threadEnumerator);
NS_IMETHOD GetThreadForMessage(nsIMessage *message, nsIMsgThread **thread);
NS_IMETHOD HasMessage(nsIMessage *message, PRBool *hasMessage);
NS_IMETHOD GetServer(nsIMsgIncomingServer ** aServer);
NS_IMETHOD GetPrettyName(char ** name);
@ -265,6 +268,11 @@ protected:
nsresult NotifyItemAdded(nsISupports *item);
nsresult NotifyItemDeleted(nsISupports *item);
// this is a little helper function that is not part of the public interface.
// we use it to get the IID of the incoming server for the derived folder.
// w/out a function like this we would have to implement GetServer in each
// derived folder class.
virtual const nsIID& GetIncomingServerType() = 0;
protected:
nsString mName;
@ -275,7 +283,7 @@ protected:
tried to find out.) */
PRInt32 mNumTotalMessages; /* count of existing messages. */
nsCOMPtr<nsISupportsArray> mSubFolders;
nsVoidArray *mListeners; //This can't be an nsISupportsArray because due to
nsVoidArray *mListeners; //This can't be an nsISupportsArray because due to
//ownership issues, listeners can't be AddRef'd
PRInt16 mCsid; // default csid for folder/newsgroup - maintained by fe.
@ -284,6 +292,8 @@ protected:
nsISupports *mSemaphoreHolder; // set when the folder is being written to
//Due to ownership issues, this won't be AddRef'd.
nsCOMPtr<nsIMsgIncomingServer> m_server; // this will be addrefed....no ownership issue here
#ifdef HAVE_DB
nsMsgKey m_lastMessageLoaded;
#endif
@ -293,7 +303,7 @@ protected:
PRInt32 mNumPendingUnreadMessages;
PRInt32 mNumPendingTotalMessages;
PRBool mIsCachable;
PRBool mIsCachable;
};