From 498dc1681d0fd5e508d8e37c91a4e1553de53d00 Mon Sep 17 00:00:00 2001 From: "alecf%netscape.com" Date: Fri, 3 Dec 1999 00:10:00 +0000 Subject: [PATCH] fix unicode support for prettyName, #20405 retrieve name from prefs using CopyUnicharPref() r=sspitzer git-svn-id: svn://10.0.0.236/trunk@55122 18797224-902f-48f8-a5cc-f745e15eee43 --- .../base/public/nsIMsgIncomingServer.idl | 3 + .../base/util/nsMsgIncomingServer.cpp | 70 ++++++++++++++++--- .../mailnews/base/util/nsMsgIncomingServer.h | 1 + 3 files changed, 65 insertions(+), 9 deletions(-) diff --git a/mozilla/mailnews/base/public/nsIMsgIncomingServer.idl b/mozilla/mailnews/base/public/nsIMsgIncomingServer.idl index 9f986332e6b..74775fee50d 100644 --- a/mozilla/mailnews/base/public/nsIMsgIncomingServer.idl +++ b/mozilla/mailnews/base/public/nsIMsgIncomingServer.idl @@ -124,6 +124,9 @@ interface nsIMsgIncomingServer : nsISupports { string getCharValue(in string attr); void setCharValue(in string attr, in string value); + wstring getUnicharValue(in string attr); + void setUnicharValue(in string attr, in wstring value); + long getIntValue(in string attr); void setIntValue(in string attr, in long value); diff --git a/mozilla/mailnews/base/util/nsMsgIncomingServer.cpp b/mozilla/mailnews/base/util/nsMsgIncomingServer.cpp index df9eba03ae1..9636a1ef0a1 100644 --- a/mozilla/mailnews/base/util/nsMsgIncomingServer.cpp +++ b/mozilla/mailnews/base/util/nsMsgIncomingServer.cpp @@ -360,6 +360,20 @@ nsMsgIncomingServer::GetCharValue(const char *prefname, return rv; } +nsresult +nsMsgIncomingServer::GetUnicharValue(const char *prefname, + PRUnichar **val) +{ + char *fullPrefName = getPrefName(m_serverKey, prefname); + nsresult rv = m_prefs->CopyUnicharPref(fullPrefName, val); + PR_Free(fullPrefName); + + if (NS_FAILED(rv)) + rv = getDefaultUnicharPref(prefname, val); + + return rv; +} + nsresult nsMsgIncomingServer::getDefaultCharPref(const char *prefname, char **val) { @@ -375,6 +389,21 @@ nsMsgIncomingServer::getDefaultCharPref(const char *prefname, return rv; } +nsresult +nsMsgIncomingServer::getDefaultUnicharPref(const char *prefname, + PRUnichar **val) { + + char *fullPrefName = getDefaultPrefName(prefname); + nsresult rv = m_prefs->CopyUnicharPref(fullPrefName, val); + PR_Free(fullPrefName); + + if (NS_FAILED(rv)) { + *val = nsnull; // null is ok to return here + rv = NS_OK; + } + return rv; +} + nsresult nsMsgIncomingServer::SetCharValue(const char *prefname, const char * val) @@ -402,20 +431,45 @@ nsMsgIncomingServer::SetCharValue(const char *prefname, return rv; } +nsresult +nsMsgIncomingServer::SetUnicharValue(const char *prefname, + const PRUnichar * val) +{ + nsresult rv; + char *fullPrefName = getPrefName(m_serverKey, prefname); + + if (!val) { + m_prefs->ClearUserPref(fullPrefName); + return NS_OK; + } + + PRUnichar *defaultVal=nsnull; + rv = getDefaultUnicharPref(prefname, &defaultVal); + if (NS_SUCCEEDED(rv) && + nsCRT::strcmp(defaultVal, val) == 0) + m_prefs->ClearUserPref(fullPrefName); + else + rv = m_prefs->SetUnicharPref(fullPrefName, val); + + PR_FREEIF(defaultVal); + + PR_smprintf_free(fullPrefName); + + return rv; +} + // pretty name is the display name to show to the user NS_IMETHODIMP nsMsgIncomingServer::GetPrettyName(PRUnichar **retval) { - char *val=nsnull; - nsresult rv = GetCharValue("name", &val); + nsXPIDLString val; + nsresult rv = GetUnicharValue("name", getter_Copies(val)); if (NS_FAILED(rv)) return rv; - nsString prettyName; + nsAutoString prettyName(val); // if there's no name, then just return the hostname - if (val) { - prettyName = val; - } else { + if (prettyName.IsEmpty()) { nsXPIDLCString username; rv = GetUsername(getter_Copies(username)); @@ -441,9 +495,7 @@ nsMsgIncomingServer::GetPrettyName(PRUnichar **retval) { NS_IMETHODIMP nsMsgIncomingServer::SetPrettyName(const PRUnichar *value) { - // this is lossy. Not sure what to do. - nsCString str(value); - return SetCharValue("name", str.GetBuffer()); + return SetUnicharValue("name", value); } NS_IMETHODIMP diff --git a/mozilla/mailnews/base/util/nsMsgIncomingServer.h b/mozilla/mailnews/base/util/nsMsgIncomingServer.h index 3b26a22dce0..15dcb6fff5a 100644 --- a/mozilla/mailnews/base/util/nsMsgIncomingServer.h +++ b/mozilla/mailnews/base/util/nsMsgIncomingServer.h @@ -64,6 +64,7 @@ protected: nsCOMPtr m_rootFolder; nsresult getDefaultCharPref(const char *pref, char **); + nsresult getDefaultUnicharPref(const char *pref, PRUnichar **); nsresult getDefaultBoolPref(const char *pref, PRBool *); nsresult getDefaultIntPref(const char *pref, PRInt32 *);