make filtername i18n friendly (store in utf8 format)

This commit is contained in:
alecf%netscape.com 2000-05-12 07:26:15 +00:00
parent 923f1bc193
commit d5fd2cbfab
6 changed files with 44 additions and 14 deletions

View File

@ -33,7 +33,7 @@ interface nsOutputStream;
interface nsIMsgFilter : nsISupports {
readonly attribute nsMsgFilterTypeType filterType;
attribute boolean enabled;
attribute string filterName;
attribute wstring filterName;
attribute string filterDesc;
readonly attribute nsIMsgFilterList filterList; // owning filter list

View File

@ -69,7 +69,7 @@ interface nsIMsgFilterList : nsISupports {
attribute boolean loggingEnabled;
nsIMsgFilter createFilter(in string name);
nsIMsgFilter createFilter(in wstring name);
void saveToFile(in nsIOFileStream stream);
@ -88,6 +88,7 @@ interface nsIMsgFilterList : nsISupports {
// IO routines, used by filter object filing code.
void writeIntAttr(in nsMsgFilterFileAttribValue attrib, in long value);
void writeStrAttr(in nsMsgFilterFileAttribValue attrib, in string value);
void writeWstrAttr(in nsMsgFilterFileAttribValue attrib, in wstring value);
void writeBoolAttr(in nsMsgFilterFileAttribValue attrib, in boolean value);
};

View File

@ -101,15 +101,15 @@ NS_IMETHODIMP nsMsgFilter::SetEnabled(PRBool enabled)
return NS_OK;
}
NS_IMETHODIMP nsMsgFilter::GetFilterName(char **name)
NS_IMETHODIMP nsMsgFilter::GetFilterName(PRUnichar **name)
{
NS_ENSURE_ARG_POINTER(name);
*name = m_filterName.ToNewCString();
*name = m_filterName.ToNewUnicode();
return NS_OK;
}
NS_IMETHODIMP nsMsgFilter::SetFilterName(const char *name)
NS_IMETHODIMP nsMsgFilter::SetFilterName(const PRUnichar *name)
{
m_filterName.Assign(name);
return NS_OK;
@ -273,7 +273,6 @@ nsMsgFilter::GetActionTargetFolderUri(char** aResult)
NS_IMETHODIMP nsMsgFilter::LogRuleHit(nsOutputStream *stream, nsIMsgDBHdr *msgHdr)
{
char *filterName = "";
PRTime date;
char dateStr[40]; /* 30 probably not enough */
nsMsgRuleActionType actionType;
@ -281,8 +280,9 @@ NS_IMETHODIMP nsMsgFilter::LogRuleHit(nsOutputStream *stream, nsIMsgDBHdr *msgHd
nsXPIDLCString author;
nsXPIDLCString subject;
nsXPIDLString filterName;
GetFilterName(&filterName);
GetFilterName(getter_Copies(filterName));
GetAction(&actionType);
nsresult res;
res = msgHdr->GetDate(&date);
@ -294,8 +294,12 @@ NS_IMETHODIMP nsMsgFilter::LogRuleHit(nsOutputStream *stream, nsIMsgDBHdr *msgHd
msgHdr->GetSubject(getter_Copies(subject));
if (stream)
{
char *utf8name = nsAutoString(filterName).ToNewUTF8String();
*stream << "Applied filter \"";
*stream << filterName;
*stream << utf8name;
::Recycle(utf8name);
*stream << "\" to message from ";
*stream << (const char*)author;
*stream << " - ";
@ -315,6 +319,7 @@ NS_IMETHODIMP nsMsgFilter::LogRuleHit(nsOutputStream *stream, nsIMsgDBHdr *msgHd
} else {
*stream << "";
}
*stream << "\n\n";
// XP_FilePrintf(*m_logFile, "Action = %s %s\n\n", actionStr, actionValue);
if (actionType == nsMsgFilterAction::MoveToFolder)
@ -454,7 +459,7 @@ nsresult nsMsgFilter::ConvertMoveToFolderValue(nsCString &moveValue)
nsresult nsMsgFilter::SaveToTextFile(nsIOFileStream *stream)
{
nsresult err = m_filterList->WriteStrAttr(nsIMsgFilterList::attribName, m_filterName);
nsresult err = m_filterList->WriteWstrAttr(nsIMsgFilterList::attribName, m_filterName.GetUnicode());
err = m_filterList->WriteBoolAttr(nsIMsgFilterList::attribEnabled, m_enabled);
err = m_filterList->WriteStrAttr(nsIMsgFilterList::attribDescription, m_description);
err = m_filterList->WriteIntAttr(nsIMsgFilterList::attribType, m_type);

View File

@ -83,7 +83,7 @@ static nsMsgRuleActionType GetActionForFilingStr(nsCString &actionStr);
protected:
nsMsgFilterTypeType m_type;
PRBool m_enabled;
nsCString m_filterName;
nsString m_filterName;
nsCString m_scriptFileName; // iff this filter is a script.
nsCString m_description;
PRBool m_dontFileMe;

View File

@ -341,9 +341,10 @@ nsMsgFilterDataSource::getFilterTarget(nsIMsgFilter *aFilter,
{
if (aProperty == kNC_Name.get()) {
nsXPIDLCString filterName;
nsXPIDLString filterName;
aFilter->GetFilterName(getter_Copies(filterName));
return createNode((const char*)filterName, aResult, getRDFService());
return createNode((const PRUnichar*)filterName, aResult,
getRDFService());
} else if (aProperty == kNC_Enabled.get()) {
PRBool enabled;

View File

@ -23,6 +23,8 @@
// this file implements the nsMsgFilterList interface
#include "nsTextFormatter.h"
#include "msgCore.h"
#include "nsMsgFilterList.h"
#include "nsMsgFilter.h"
@ -31,6 +33,13 @@
#include "nsMsgUtils.h"
#include "nsMsgSearchTerm.h"
// unicode "%s" format string
static const PRUnichar unicodeFormatter[] = {
(PRUnichar)'%',
(PRUnichar)'s',
(PRUnichar)0,
};
nsMsgFilterList::nsMsgFilterList(nsIOFileStream *fileStream)
{
@ -61,7 +70,7 @@ NS_IMETHODIMP nsMsgFilterList::QueryInterface(REFNSIID aIID, void** aResult)
return NS_NOINTERFACE;
}
NS_IMETHODIMP nsMsgFilterList::CreateFilter(const char *name,class nsIMsgFilter **aFilter)
NS_IMETHODIMP nsMsgFilterList::CreateFilter(const PRUnichar *name,class nsIMsgFilter **aFilter)
{
if (!aFilter)
return NS_ERROR_NULL_POINTER;
@ -431,7 +440,11 @@ nsresult nsMsgFilterList::LoadTextFilters()
break;
}
filter->SetFilterList(NS_STATIC_CAST(nsIMsgFilterList*,this));
filter->SetFilterName(value.GetBuffer());
PRUnichar *unicodeString =
nsTextFormatter::smprintf(unicodeFormatter, value.GetBuffer());
filter->SetFilterName(unicodeString);
nsTextFormatter::smprintf_free(unicodeString);
m_curFilter = filter;
m_filters->AppendElement(filter);
}
@ -603,6 +616,16 @@ nsresult nsMsgFilterList::WriteBoolAttr(nsMsgFilterFileAttribValue attrib, PRBoo
return WriteStrAttr(attrib, strToWrite);
}
nsresult
nsMsgFilterList::WriteWstrAttr(nsMsgFilterFileAttribValue attrib,
const PRUnichar *aFilterName)
{
char* utf8Name = nsAutoString(aFilterName).ToNewUTF8String();
WriteStrAttr(attrib, utf8Name);
::Recycle(utf8Name);
return NS_OK;
}
nsresult nsMsgFilterList::SaveTextFilters()
{
nsresult err = NS_OK;