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:
alecf%netscape.com
1999-12-03 00:10:00 +00:00
parent 547e07303b
commit 498dc1681d
3 changed files with 65 additions and 9 deletions

View File

@@ -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);

View File

@@ -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

View File

@@ -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 *);