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
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -64,6 +64,7 @@ protected:
|
||||
|
||||
nsCOMPtr <nsIFolder> 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 *);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user