diff --git a/mailnews/base/util/nsMsgDBFolder.cpp b/mailnews/base/util/nsMsgDBFolder.cpp index 1a117ae030af..f8c931a2a8ed 100644 --- a/mailnews/base/util/nsMsgDBFolder.cpp +++ b/mailnews/base/util/nsMsgDBFolder.cpp @@ -18,8 +18,11 @@ #include "nsMsgDBFolder.h" #include "nsMsgFolderFlags.h" +#include "nsIPref.h" +static NS_DEFINE_CID(kPrefServiceCID, NS_PREF_CID); + NS_IMPL_ADDREF_INHERITED(nsMsgDBFolder, nsMsgFolder) NS_IMPL_RELEASE_INHERITED(nsMsgDBFolder, nsMsgFolder) @@ -42,6 +45,7 @@ NS_IMETHODIMP nsMsgDBFolder::QueryInterface(REFNSIID aIID, void** aInstancePtr) } nsMsgDBFolder::nsMsgDBFolder(void) +: mCharset("") { } @@ -108,6 +112,57 @@ nsMsgDBFolder::HasMessage(nsIMessage *message, PRBool *hasMessage) return rv; } + +NS_IMETHODIMP nsMsgDBFolder::GetCharset(PRUnichar * *aCharset) +{ + nsresult rv = NS_OK; + if(!aCharset) + return NS_ERROR_NULL_POINTER; + + if(mCharset == "") + { + NS_WITH_SERVICE(nsIPref, prefs, kPrefServiceCID, &rv); + + char *prefCharset = nsnull; + if (NS_SUCCEEDED(rv)) + { + rv = prefs->CopyCharPref("intl.character_set_name", &prefCharset); + } + + nsString prefCharsetStr; + if(prefCharset) + { + prefCharsetStr = prefCharset; + PR_Free(prefCharset); + } + else + { + prefCharsetStr = "us-ascii"; + } + *aCharset = prefCharsetStr.ToNewUnicode(); + } + else + { + *aCharset = mCharset.ToNewUnicode(); + } + return rv; +} + +NS_IMETHODIMP nsMsgDBFolder::SetCharset(PRUnichar * aCharset) +{ + nsresult rv; + + nsCOMPtr folderInfo; + nsCOMPtr db; + rv = GetDBFolderInfoAndDB(getter_AddRefs(folderInfo), getter_AddRefs(db)); + if(NS_SUCCEEDED(rv)) + { + nsString charset(aCharset); + rv = folderInfo->SetCharacterSet(charset); + } + return rv; +} + nsresult nsMsgDBFolder::ReadDBFolderInfo(PRBool force) { // Since it turns out to be pretty expensive to open and close @@ -119,8 +174,8 @@ nsresult nsMsgDBFolder::ReadDBFolderInfo(PRBool force) { nsCOMPtr folderInfo; nsCOMPtr db; - result = NS_SUCCEEDED(GetDBFolderInfoAndDB(getter_AddRefs(folderInfo), getter_AddRefs(db))); - if(result) + result = GetDBFolderInfoAndDB(getter_AddRefs(folderInfo), getter_AddRefs(db)); + if(NS_SUCCEEDED(result)) { mIsCachable = TRUE; if (folderInfo) @@ -137,7 +192,7 @@ nsresult nsMsgDBFolder::ReadDBFolderInfo(PRBool force) //folderInfo->GetImapTotalPendingMessages(&mNumPendingTotalMessages); //folderInfo->GetImapUnreadPendingMessages(&mNumPendingUnreadMessages); - // folderInfo->GetCSID(&mCsid); + folderInfo->GetCharacterSet(mCharset); if (db && !db->HasNew() && mNumPendingUnreadMessages <= 0) ClearFlag(MSG_FOLDER_FLAG_GOT_NEW); diff --git a/mailnews/base/util/nsMsgDBFolder.h b/mailnews/base/util/nsMsgDBFolder.h index 1a5df7daaf28..1ed820a1645a 100644 --- a/mailnews/base/util/nsMsgDBFolder.h +++ b/mailnews/base/util/nsMsgDBFolder.h @@ -41,6 +41,8 @@ public: NS_IMETHOD GetThreads(nsIEnumerator** threadEnumerator); NS_IMETHOD GetThreadForMessage(nsIMessage *message, nsIMsgThread **thread); NS_IMETHOD HasMessage(nsIMessage *message, PRBool *hasMessage); + NS_IMETHOD GetCharset(PRUnichar * *aCharset); + NS_IMETHOD SetCharset(PRUnichar * aCharset); //nsIDBChangeListener NS_IMETHOD OnKeyChange(nsMsgKey aKeyChanged, PRUint32 aOldFlags, PRUint32 aNewFlags, @@ -60,6 +62,7 @@ protected: protected: nsCOMPtr mDatabase; + nsString mCharset; }; diff --git a/mailnews/base/util/nsMsgFolder.cpp b/mailnews/base/util/nsMsgFolder.cpp index fae0791e0758..0c43b97fd9fd 100644 --- a/mailnews/base/util/nsMsgFolder.cpp +++ b/mailnews/base/util/nsMsgFolder.cpp @@ -50,7 +50,6 @@ nsMsgFolder::nsMsgFolder(void) mParent(nsnull), mNumUnreadMessages(-1), mNumTotalMessages(-1), - mCsid(0), mDepth(0), mPrefFlags(0) { @@ -802,15 +801,6 @@ NS_IMETHODIMP nsMsgFolder::GetFolderPrefFlags(PRUint32 *flags) } -NS_IMETHODIMP nsMsgFolder::SetFolderCSID(PRInt16 csid) -{ - -} - -NS_IMETHODIMP nsMsgFolder::GetFolderCSID(PRInt16 *csid) -{ - -} NS_IMETHODIMP nsMsgFolder::SetLastMessageLoaded(nsMsgKey lastMessageLoaded) { diff --git a/mailnews/base/util/nsMsgFolder.h b/mailnews/base/util/nsMsgFolder.h index 24de78f38c1d..057f5595afce 100644 --- a/mailnews/base/util/nsMsgFolder.h +++ b/mailnews/base/util/nsMsgFolder.h @@ -178,8 +178,6 @@ public: NS_IMETHOD SetFolderPrefFlags(PRUint32 flags); NS_IMETHOD GetFolderPrefFlags(PRUint32 *flags); - NS_IMETHOD SetFolderCSID(PRInt16 csid); - NS_IMETHOD GetFolderCSID(PRInt16 *csid); NS_IMETHOD SetLastMessageLoaded(nsMsgKey lastMessageLoaded); @@ -263,6 +261,9 @@ public: NS_IMETHOD DeleteMessages(nsISupportsArray *messages) = 0; NS_IMETHOD GetNewMessages(); + NS_IMETHOD GetCharset(PRUnichar * *aCharset) = 0; + NS_IMETHOD SetCharset(PRUnichar * aCharset) = 0; + protected: nsresult NotifyPropertyChanged(char *property, char* oldValue, char* newValue); nsresult NotifyPropertyFlagChanged(nsISupports *item, char *property, PRUint32 oldValue, @@ -288,7 +289,6 @@ protected: 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. PRUint8 mDepth; PRInt32 mPrefFlags; // prefs like MSG_PREF_OFFLINE, MSG_PREF_ONE_PANE, etc nsISupports *mSemaphoreHolder; // set when the folder is being written to