diff --git a/mozilla/mailnews/base/public/nsIMsgIncomingServer.idl b/mozilla/mailnews/base/public/nsIMsgIncomingServer.idl index 2e4083a378e..19975023edd 100644 --- a/mozilla/mailnews/base/public/nsIMsgIncomingServer.idl +++ b/mozilla/mailnews/base/public/nsIMsgIncomingServer.idl @@ -49,6 +49,12 @@ interface nsIMsgIncomingServer : nsISupports { */ attribute wstring prettyName; + /** + * helper function to construct the pretty name in a server type + * specific way - e.g., mail for foo@test.com, news on news.mozilla.org + */ + readonly attribute wstring constructedPrettyName; + /** * hostname of the server */ diff --git a/mozilla/mailnews/base/util/nsMsgIncomingServer.cpp b/mozilla/mailnews/base/util/nsMsgIncomingServer.cpp index 55a5b3203b3..db825b9ec55 100644 --- a/mozilla/mailnews/base/util/nsMsgIncomingServer.cpp +++ b/mozilla/mailnews/base/util/nsMsgIncomingServer.cpp @@ -506,30 +506,11 @@ nsMsgIncomingServer::GetPrettyName(PRUnichar **retval) { nsresult rv = GetUnicharValue("name", getter_Copies(val)); if (NS_FAILED(rv)) return rv; - nsAutoString prettyName(val); - // if there's no name, then just return the hostname - if (prettyName.IsEmpty()) { - - nsXPIDLCString username; - rv = GetUsername(getter_Copies(username)); - if (NS_FAILED(rv)) return rv; - if ((const char*)username && - PL_strcmp((const char*)username, "")!=0) { - prettyName.AssignWithConversion(username); - prettyName.AppendWithConversion(" on "); - } - - nsXPIDLCString hostname; - rv = GetHostName(getter_Copies(hostname)); - if (NS_FAILED(rv)) return rv; - - - prettyName.AppendWithConversion(hostname); - } - - *retval = prettyName.ToNewUnicode(); - + if (nsCRT::strlen(val) == 0) + return GetConstructedPrettyName(retval); + else + *retval = nsCRT::strdup(val); return NS_OK; } @@ -547,6 +528,35 @@ nsMsgIncomingServer::SetPrettyName(const PRUnichar *value) return NS_OK; } + +// construct the pretty name to show to the user if they haven't +// specified one. This should be overridden for news and mail. +NS_IMETHODIMP +nsMsgIncomingServer::GetConstructedPrettyName(PRUnichar **retval) +{ + + nsXPIDLCString username; + nsAutoString prettyName; + nsresult rv = GetUsername(getter_Copies(username)); + if (NS_FAILED(rv)) return rv; + if ((const char*)username && + PL_strcmp((const char*)username, "")!=0) { + prettyName.AssignWithConversion(username); + prettyName.AppendWithConversion(" on "); + } + + nsXPIDLCString hostname; + rv = GetHostName(getter_Copies(hostname)); + if (NS_FAILED(rv)) return rv; + + + prettyName.AppendWithConversion(hostname); + + *retval = prettyName.ToNewUnicode(); + + return NS_OK; +} + NS_IMETHODIMP nsMsgIncomingServer::ToString(PRUnichar** aResult) { nsString servername; servername.AssignWithConversion("[nsIMsgIncomingServer: "); diff --git a/mozilla/mailnews/imap/resources/locale/en-US/imapMsgs.properties b/mozilla/mailnews/imap/resources/locale/en-US/imapMsgs.properties index 9c95677dbff..ef11760c7f4 100644 --- a/mozilla/mailnews/imap/resources/locale/en-US/imapMsgs.properties +++ b/mozilla/mailnews/imap/resources/locale/en-US/imapMsgs.properties @@ -323,3 +323,6 @@ ## @loc None 5056=There are no new messages on the server. +## @name IMAP_DEFAULT_ACCOUNT_NAME +## @loc None +5057=Mail for %S diff --git a/mozilla/mailnews/imap/src/nsImapIncomingServer.cpp b/mozilla/mailnews/imap/src/nsImapIncomingServer.cpp index 9a9d50af3ad..0cec50fcd01 100644 --- a/mozilla/mailnews/imap/src/nsImapIncomingServer.cpp +++ b/mozilla/mailnews/imap/src/nsImapIncomingServer.cpp @@ -33,6 +33,8 @@ #include "nsIMAPHostSessionList.h" #include "nsImapIncomingServer.h" +#include "nsIMsgAccountManager.h" +#include "nsIMsgIdentity.h" #include "nsIImapUrl.h" #include "nsIUrlListener.h" #include "nsIEventQueue.h" @@ -159,6 +161,73 @@ NS_IMETHODIMP nsImapIncomingServer::SetKey(const char * aKey) // override nsMsg return rv; } +// construct the pretty name to show to the user if they haven't +// specified one. This should be overridden for news and mail. +NS_IMETHODIMP +nsImapIncomingServer::GetConstructedPrettyName(PRUnichar **retval) +{ + + nsXPIDLCString username; + nsXPIDLCString hostName; + nsresult rv; + + NS_WITH_SERVICE(nsIMsgAccountManager, accountManager, + NS_MSGACCOUNTMANAGER_PROGID, &rv); + if (NS_FAILED(rv)) return rv; + + if (NS_FAILED(rv)) return rv; + + nsCOMPtr identities; + rv = accountManager->GetIdentitiesForServer(this, + getter_AddRefs(identities)); + if (NS_FAILED(rv)) return rv; + + nsCOMPtr identity; + + rv = identities->QueryElementAt(0, NS_GET_IID(nsIMsgIdentity), + (void **)getter_AddRefs(identity)); + + nsAutoString emailAddress; + + if (NS_SUCCEEDED(rv) && identity) + { + nsXPIDLCString identityEmailAddress; + identity->GetEmail(getter_Copies(identityEmailAddress)); + emailAddress.AssignWithConversion(identityEmailAddress); + } + else + { + rv = GetUsername(getter_Copies(username)); + if (NS_FAILED(rv)) return rv; + rv = GetHostName(getter_Copies(hostName)); + if (NS_FAILED(rv)) return rv; + if ((const char*)username && (const char *) hostName && + PL_strcmp((const char*)username, "")!=0) { + emailAddress.AssignWithConversion(username); + emailAddress.AppendWithConversion("@"); + emailAddress.AppendWithConversion(hostName); + + } + } + rv = GetStringBundle(); + if (m_stringBundle) + { + nsXPIDLString prettyName; + const PRUnichar *formatStrings[] = + { + emailAddress.GetUnicode(), + }; + rv = m_stringBundle->FormatStringFromID(IMAP_DEFAULT_ACCOUNT_NAME, + formatStrings, 1, + getter_Copies(prettyName)); + *retval = nsCRT::strdup(prettyName); + return NS_OK; + } + else + return rv; +} + + NS_IMETHODIMP nsImapIncomingServer::GetLocalStoreType(char ** type) { NS_ENSURE_ARG_POINTER(type); @@ -1488,11 +1557,9 @@ static NS_DEFINE_CID(kStringBundleServiceCID, NS_STRINGBUNDLESERVICE_CID); #define IMAP_MSGS_URL "chrome://messenger/locale/imapMsgs.properties" -NS_IMETHODIMP nsImapIncomingServer::GetImapStringByID(PRInt32 aMsgId, PRUnichar **aString) +nsresult nsImapIncomingServer::GetStringBundle() { - nsAutoString resultString; resultString.AssignWithConversion("???"); - nsresult res = NS_OK; - + nsresult res; if (!m_stringBundle) { char* propertyURL = NULL; @@ -1507,6 +1574,15 @@ NS_IMETHODIMP nsImapIncomingServer::GetImapStringByID(PRInt32 aMsgId, PRUnichar res = sBundleService->CreateBundle(propertyURL, locale, getter_AddRefs(m_stringBundle)); } } + return (m_stringBundle) ? NS_OK : res; +} + +NS_IMETHODIMP nsImapIncomingServer::GetImapStringByID(PRInt32 aMsgId, PRUnichar **aString) +{ + nsAutoString resultString; resultString.AssignWithConversion("???"); + nsresult res = NS_OK; + + GetStringBundle(); if (m_stringBundle) { PRUnichar *ptrv = nsnull; diff --git a/mozilla/mailnews/imap/src/nsImapIncomingServer.h b/mozilla/mailnews/imap/src/nsImapIncomingServer.h index 052fd04ec02..8ad2442304f 100644 --- a/mozilla/mailnews/imap/src/nsImapIncomingServer.h +++ b/mozilla/mailnews/imap/src/nsImapIncomingServer.h @@ -61,6 +61,7 @@ public: NS_IMETHOD PerformBiff(); NS_IMETHOD PerformExpand(nsIMsgWindow *aMsgWindow); NS_IMETHOD CloseCachedConnections(); + NS_IMETHOD GetConstructedPrettyName(PRUnichar **retval); protected: nsresult GetFolder(const char* name, nsIMsgFolder** pFolder); @@ -72,6 +73,7 @@ protected: PRBool NoDescendentsAreVerified(nsIFolder *parentFolder); PRBool AllDescendentsAreNoSelect(nsIFolder *parentFolder); + nsresult GetStringBundle(); private: nsresult SubscribeToFolder(const PRUnichar *aName, PRBool subscribe); nsresult CreateImapConnection (nsIEventQueue* aEventQueue, diff --git a/mozilla/mailnews/imap/src/nsImapStringBundle.h b/mozilla/mailnews/imap/src/nsImapStringBundle.h index ca53120b3fd..4c0ecc1fdba 100644 --- a/mozilla/mailnews/imap/src/nsImapStringBundle.h +++ b/mozilla/mailnews/imap/src/nsImapStringBundle.h @@ -88,5 +88,5 @@ NS_END_EXTERN_C #define IMAP_NET_TIMEOUT_ERROR 5054 #define IMAP_MOVE_FOLDER_TO_TRASH 5055 #define IMAP_NO_NEW_MESSAGES 5056 - +#define IMAP_DEFAULT_ACCOUNT_NAME 5057 #endif /* _nsImapStringBundle_H__ */