remove nsIFileSpec from filter and related code, sr=mscott 33451

This commit is contained in:
bienvenu%nventure.com 2007-04-13 15:25:58 +00:00
Родитель c7dc835ec2
Коммит 8177e8a274
19 изменённых файлов: 173 добавлений и 245 удалений

Просмотреть файл

@ -41,7 +41,6 @@
#include "nsIMsgFilter.idl"
#include "nsIMsgFilterHitNotify.idl"
interface nsIOFileStream;
interface nsIOutputStream;
///////////////////////////////////////////////////////////////////////////////
@ -53,7 +52,7 @@ interface nsIOutputStream;
typedef long nsMsgFilterFileAttribValue;
[scriptable, uuid(ab0105ad-86bf-4862-9adb-84f4e266577c)]
[scriptable, uuid(a5cf1698-251a-4c5a-9fcd-9ae518fda452)]
interface nsIMsgFilterList : nsISupports {
const nsMsgFilterFileAttribValue attribNone = 0;
@ -91,13 +90,13 @@ interface nsIMsgFilterList : nsISupports {
nsIMsgFilter createFilter(in wstring name);
void saveToFile(in nsIOFileStream stream);
void saveToFile(in nsIOutputStream stream);
void parseCondition(in nsIMsgFilter aFilter, in string condition);
// this is temporary so that we can save the filterlist to disk
// without knowing where the filters were read from intially
// (such as the filter list dialog)
attribute nsIFileSpec defaultFile;
attribute nsILocalFile defaultFile;
void saveToDefaultFile();
@ -116,10 +115,10 @@ interface nsIMsgFilterList : nsISupports {
in nsILocalFile aMessageFile);
// IO routines, used by filter object filing code.
void writeIntAttr(in nsMsgFilterFileAttribValue attrib, in long value, in nsIOFileStream stream);
void writeStrAttr(in nsMsgFilterFileAttribValue attrib, in string value, in nsIOFileStream stream);
void writeWstrAttr(in nsMsgFilterFileAttribValue attrib, in wstring value, in nsIOFileStream stream);
void writeBoolAttr(in nsMsgFilterFileAttribValue attrib, in boolean value, in nsIOFileStream stream);
void writeIntAttr(in nsMsgFilterFileAttribValue attrib, in long value, in nsIOutputStream stream);
void writeStrAttr(in nsMsgFilterFileAttribValue attrib, in string value, in nsIOutputStream stream);
void writeWstrAttr(in nsMsgFilterFileAttribValue attrib, in wstring value, in nsIOutputStream stream);
void writeBoolAttr(in nsMsgFilterFileAttribValue attrib, in boolean value, in nsIOutputStream stream);
boolean matchOrChangeFilterTarget(in string oldUri, in string newUri, in boolean caseInsensitive);
// for filter logging

Просмотреть файл

@ -60,9 +60,9 @@ public:
with dialog boxes. To apply the new list call MSG_CloseFilterList.
*/
NS_IMETHOD OpenFilterList(nsFileSpec *filterFile, nsIMsgFilterList **filterList) = 0;
NS_IMETHOD OpenFilterList(nsILocalFile *filterFile, nsIMsgFilterList **filterList) = 0;
NS_IMETHOD CloseFilterList(nsIMsgFilterList *filterList) = 0;
NS_IMETHOD SaveFilterList(nsIMsgFilterList *filterList, nsFileSpec *filterFile) = 0; /* save without deleting */
NS_IMETHOD SaveFilterList(nsIMsgFilterList *filterList, nsILocalFile *filterFile) = 0; /* save without deleting */
NS_IMETHOD CancelFilterList(nsIMsgFilterList *filterList) = 0;
};

Просмотреть файл

@ -40,14 +40,14 @@
#include "nsIMsgFilterList.idl"
#include "nsIMsgWindow.idl"
[scriptable, uuid(6673cad0-072e-11d3-8d70-00805f8a6617)]
[scriptable, uuid(fda31be9-b5c1-465b-99c9-c90835a214a3)]
interface nsIMsgFilterService : nsISupports {
nsIMsgFilterList OpenFilterList(in nsIFileSpec filterFile, in nsIMsgFolder rootFolder, in nsIMsgWindow msgWindow);
nsIMsgFilterList OpenFilterList(in nsILocalFile filterFile, in nsIMsgFolder rootFolder, in nsIMsgWindow msgWindow);
void CloseFilterList(in nsIMsgFilterList filterList);
void SaveFilterList(in nsIMsgFilterList filterList,
in nsIFileSpec filterFile);
in nsILocalFile filterFile);
void CancelFilterList(in nsIMsgFilterList filterList);
nsIMsgFilterList getTempFilterList(in nsIMsgFolder aFolder);

Просмотреть файл

@ -732,15 +732,15 @@ nsresult nsMsgFilter::ConvertMoveOrCopyToFolderValue(nsIMsgRuleAction *filterAct
// set m_action.m_value.m_folderUri
}
nsresult nsMsgFilter::SaveToTextFile(nsIOFileStream *aStream)
nsresult nsMsgFilter::SaveToTextFile(nsIOutputStream *aStream)
{
NS_ENSURE_ARG_POINTER(aStream);
if (m_unparseable)
{
PRUint32 bytesWritten;
//we need to trim leading whitespaces before filing out
m_unparsedBuffer.Trim(kWhitespace, PR_TRUE /*leadingCharacters*/, PR_FALSE /*trailingCharacters*/);
*aStream << m_unparsedBuffer.get();
return NS_OK;
return aStream->Write(m_unparsedBuffer.get(), m_unparsedBuffer.Length(), &bytesWritten);
}
nsresult err = m_filterList->WriteWstrAttr(nsIMsgFilterList::attribName, m_filterName.get(), aStream);
err = m_filterList->WriteBoolAttr(nsIMsgFilterList::attribEnabled, m_enabled, aStream);
@ -753,7 +753,7 @@ nsresult nsMsgFilter::SaveToTextFile(nsIOFileStream *aStream)
return err;
}
nsresult nsMsgFilter::SaveRule(nsIOFileStream *aStream)
nsresult nsMsgFilter::SaveRule(nsIOutputStream *aStream)
{
nsresult err = NS_OK;
nsCOMPtr<nsIMsgFilterList> filterList;

Просмотреть файл

@ -93,8 +93,8 @@ public:
nsMsgFilterType::NewsJavaScript)) != 0;}
// filing routines.
nsresult SaveToTextFile(nsIOFileStream *aStream);
nsresult SaveRule(nsIOFileStream *aStream);
nsresult SaveToTextFile(nsIOutputStream *aStream);
nsresult SaveRule(nsIOutputStream *aStream);
PRInt16 GetVersion();
#ifdef DEBUG

Просмотреть файл

@ -117,7 +117,7 @@ NS_IMETHODIMP nsMsgFilterList::SetFolder(nsIMsgFolder *aFolder)
return NS_OK;
}
NS_IMETHODIMP nsMsgFilterList::SaveToFile(nsIOFileStream *stream)
NS_IMETHODIMP nsMsgFilterList::SaveToFile(nsIOutputStream *stream)
{
if (!stream)
return NS_ERROR_NULL_POINTER;
@ -127,7 +127,7 @@ NS_IMETHODIMP nsMsgFilterList::SaveToFile(nsIOFileStream *stream)
NS_IMETHODIMP nsMsgFilterList::EnsureLogFile()
{
nsCOMPtr <nsILocalFile> file;
nsresult rv = GetLogFileSpec(getter_AddRefs(file));
nsresult rv = GetLogFile(getter_AddRefs(file));
NS_ENSURE_SUCCESS(rv,rv);
PRBool exists;
@ -146,7 +146,7 @@ nsresult nsMsgFilterList::TruncateLog()
NS_ENSURE_SUCCESS(rv,rv);
nsCOMPtr <nsILocalFile> file;
rv = GetLogFileSpec(getter_AddRefs(file));
rv = GetLogFile(getter_AddRefs(file));
NS_ENSURE_SUCCESS(rv,rv);
file->Remove(PR_FALSE);
@ -174,7 +174,7 @@ NS_IMETHODIMP nsMsgFilterList::ClearLog()
}
nsresult
nsMsgFilterList::GetLogFileSpec(nsILocalFile **aFile)
nsMsgFilterList::GetLogFile(nsILocalFile **aFile)
{
NS_ENSURE_ARG_POINTER(aFile);
@ -205,16 +205,13 @@ nsMsgFilterList::GetLogFileSpec(nsILocalFile **aFile)
// mcom.test.htm
if (type.Equals("nntp") && !isServer)
{
nsCOMPtr<nsIFileSpec> thisFolder;
rv = m_folder->GetPath(getter_AddRefs(thisFolder));
nsCOMPtr<nsILocalFile> thisFolder;
rv = m_folder->GetFilePath(getter_AddRefs(thisFolder));
NS_ENSURE_SUCCESS(rv, rv);
nsFileSpec spec;
rv = thisFolder->GetFileSpec(&spec);
nsCOMPtr<nsILocalFile> filterLogFile = do_CreateInstance(NS_LOCAL_FILE_CONTRACTID, &rv);
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsILocalFile> filterLogFile;
rv = NS_FileSpecToIFile(&spec, getter_AddRefs(filterLogFile));
rv = filterLogFile->InitWithFile(thisFolder);
NS_ENSURE_SUCCESS(rv, rv);
// NOTE:
@ -247,7 +244,7 @@ nsMsgFilterList::GetLogURL(char **aLogURL)
NS_ENSURE_ARG_POINTER(aLogURL);
nsCOMPtr <nsILocalFile> file;
nsresult rv = GetLogFileSpec(getter_AddRefs(file));
nsresult rv = GetLogFile(getter_AddRefs(file));
NS_ENSURE_SUCCESS(rv,rv);
nsCString url;
@ -285,7 +282,7 @@ nsMsgFilterList::GetLogStream(nsIOutputStream **aLogStream)
if (!m_logStream) {
nsCOMPtr <nsILocalFile> logFile;
rv = GetLogFileSpec(getter_AddRefs(logFile));
rv = GetLogFile(getter_AddRefs(logFile));
NS_ENSURE_SUCCESS(rv,rv);
// append to the end of the log file
@ -377,33 +374,17 @@ nsMsgFilterList::ApplyFiltersToHdr(nsMsgFilterTypeType filterType,
}
NS_IMETHODIMP
nsMsgFilterList::SetDefaultFile(nsIFileSpec *aFileSpec)
nsMsgFilterList::SetDefaultFile(nsILocalFile *aFile)
{
nsresult rv;
m_defaultFile = do_CreateInstance(NS_FILESPEC_CONTRACTID, &rv);
NS_ENSURE_SUCCESS(rv, rv);
rv = m_defaultFile->FromFileSpec(aFileSpec);
NS_ENSURE_SUCCESS(rv, rv);
return NS_OK;
m_defaultFile = aFile;
return NS_OK;
}
NS_IMETHODIMP
nsMsgFilterList::GetDefaultFile(nsIFileSpec **aResult)
nsMsgFilterList::GetDefaultFile(nsILocalFile **aResult)
{
NS_ENSURE_ARG_POINTER(aResult);
nsresult rv;
nsCOMPtr<nsIFileSpec> fileSpec =
do_CreateInstance(NS_FILESPEC_CONTRACTID, &rv);
NS_ENSURE_SUCCESS(rv, rv);
rv = fileSpec->FromFileSpec(m_defaultFile);
NS_ENSURE_SUCCESS(rv, rv);
*aResult = fileSpec;
NS_ADDREF(*aResult);
NS_IF_ADDREF(*aResult = m_defaultFile);
return NS_OK;
}
@ -440,11 +421,16 @@ static FilterFileAttribEntry FilterFileAttribTable[] =
};
// If we want to buffer file IO, wrap it in here.
char nsMsgFilterList::ReadChar(nsIOFileStream *aStream)
char nsMsgFilterList::ReadChar(nsIInputStream *aStream)
{
char newChar;
*aStream >> newChar;
if (aStream->eof())
PRUint32 bytesRead;
nsresult rv = aStream->Read(&newChar, 1, &bytesRead);
if (NS_FAILED(rv) || !bytesRead)
return -1;
PRUint32 bytesAvailable;
rv = aStream->Available(&bytesAvailable);
if (NS_FAILED(rv))
return -1;
else
{
@ -454,7 +440,7 @@ char nsMsgFilterList::ReadChar(nsIOFileStream *aStream)
}
}
char nsMsgFilterList::SkipWhitespace(nsIOFileStream *aStream)
char nsMsgFilterList::SkipWhitespace(nsIInputStream *aStream)
{
char ch;
do
@ -469,7 +455,7 @@ PRBool nsMsgFilterList::StrToBool(nsCString &str)
return str.Equals("yes") ;
}
char nsMsgFilterList::LoadAttrib(nsMsgFilterFileAttribValue &attrib, nsIOFileStream *aStream)
char nsMsgFilterList::LoadAttrib(nsMsgFilterFileAttribValue &attrib, nsIInputStream *aStream)
{
char attribStr[100];
char curChar;
@ -506,7 +492,7 @@ const char *nsMsgFilterList::GetStringForAttrib(nsMsgFilterFileAttribValue attri
return nsnull;
}
nsresult nsMsgFilterList::LoadValue(nsCString &value, nsIOFileStream *aStream)
nsresult nsMsgFilterList::LoadValue(nsCString &value, nsIInputStream *aStream)
{
nsCAutoString valueStr;
char curChar;
@ -547,17 +533,17 @@ nsresult nsMsgFilterList::LoadValue(nsCString &value, nsIOFileStream *aStream)
valueStr += curChar;
curChar = ReadChar(aStream);
}
while (!aStream->eof());
while (curChar != -1);
return NS_OK;
}
nsresult nsMsgFilterList::LoadTextFilters(nsIOFileStream *aStream)
nsresult nsMsgFilterList::LoadTextFilters(nsIInputStream *aStream)
{
nsresult err = NS_OK;
PRUint32 bytesAvailable;
nsMsgFilterFileAttribValue attrib;
nsCOMPtr<nsIMsgRuleAction> currentFilterAction;
// We'd really like to move lot's of these into the objects that they refer to.
aStream->seek(PR_SEEK_SET, 0);
do
{
nsCAutoString value;
@ -731,7 +717,7 @@ nsresult nsMsgFilterList::LoadTextFilters(nsIOFileStream *aStream)
}
break;
}
} while (!aStream->eof());
} while (NS_SUCCEEDED(aStream->Available(&bytesAvailable)));
if (m_curFilter)
{
@ -841,58 +827,62 @@ NS_IMETHODIMP nsMsgFilterList::ParseCondition(nsIMsgFilter *aFilter, const char
return err;
}
nsresult nsMsgFilterList::WriteIntAttr(nsMsgFilterFileAttribValue attrib, int value, nsIOFileStream *aStream)
nsresult nsMsgFilterList::WriteIntAttr(nsMsgFilterFileAttribValue attrib, int value, nsIOutputStream *aStream)
{
const char *attribStr = GetStringForAttrib(attrib);
if (attribStr)
{
*aStream << attribStr;
*aStream << "=\"";
*aStream << value;
*aStream << "\"" MSG_LINEBREAK;
}
// XP_FilePrintf(fid, "%s=\"%d\"%s", attribStr, value, LINEBREAK);
return NS_OK;
nsresult rv = NS_OK;
const char *attribStr = GetStringForAttrib(attrib);
if (attribStr)
{
PRUint32 bytesWritten;
nsCAutoString writeStr(attribStr);
writeStr.AppendLiteral("=\"");
writeStr.AppendInt(value);
writeStr.AppendLiteral("\"" MSG_LINEBREAK);
rv = aStream->Write(writeStr.get(), writeStr.Length(), &bytesWritten);
}
return rv;
}
nsresult
nsMsgFilterList::WriteStrAttr(nsMsgFilterFileAttribValue attrib,
const char *str, nsIOFileStream *aStream)
const char *str, nsIOutputStream *aStream)
{
if (str && str[0] && aStream) // only proceed if we actually have a string to write out.
{
char *escapedStr = nsnull;
if (PL_strchr(str, '"'))
escapedStr = nsMsgSearchTerm::EscapeQuotesInStr(str);
nsresult rv = NS_OK;
if (str && str[0] && aStream) // only proceed if we actually have a string to write out.
{
char *escapedStr = nsnull;
if (PL_strchr(str, '"'))
escapedStr = nsMsgSearchTerm::EscapeQuotesInStr(str);
const char *attribStr = GetStringForAttrib(attrib);
if (attribStr)
{
*aStream << attribStr;
*aStream << "=\"";
*aStream << ((escapedStr) ? escapedStr : (const char *) str);
*aStream << "\"" MSG_LINEBREAK;
// XP_FilePrintf(fid, "%s=\"%s\"%s", attribStr, (escapedStr) ? escapedStr : str, LINEBREAK);
}
PR_FREEIF(escapedStr);
}
return NS_OK;
const char *attribStr = GetStringForAttrib(attrib);
if (attribStr)
{
PRUint32 bytesWritten;
nsCAutoString writeStr(attribStr);
writeStr.AppendLiteral("=\"");
writeStr.Append((escapedStr) ? escapedStr : (const char *) str);
writeStr.AppendLiteral("\"" MSG_LINEBREAK);
rv = aStream->Write(writeStr.get(), writeStr.Length(), &bytesWritten);
}
PR_Free(escapedStr);
}
return rv;
}
nsresult nsMsgFilterList::WriteBoolAttr(nsMsgFilterFileAttribValue attrib, PRBool boolVal, nsIOFileStream *aStream)
nsresult nsMsgFilterList::WriteBoolAttr(nsMsgFilterFileAttribValue attrib, PRBool boolVal, nsIOutputStream *aStream)
{
return WriteStrAttr(attrib, (boolVal) ? "yes" : "no", aStream);
return WriteStrAttr(attrib, (boolVal) ? "yes" : "no", aStream);
}
nsresult
nsMsgFilterList::WriteWstrAttr(nsMsgFilterFileAttribValue attrib,
const PRUnichar *aFilterName, nsIOFileStream *aStream)
const PRUnichar *aFilterName, nsIOutputStream *aStream)
{
WriteStrAttr(attrib, NS_ConvertUTF16toUTF8(aFilterName).get(), aStream);
return NS_OK;
}
nsresult nsMsgFilterList::SaveTextFilters(nsIOFileStream *aStream)
nsresult nsMsgFilterList::SaveTextFilters(nsIOutputStream *aStream)
{
nsresult err = NS_OK;
const char *attribStr;

Просмотреть файл

@ -45,7 +45,6 @@
#include "nsCOMPtr.h"
#include "nsISupportsArray.h"
#include "nsILocalFile.h"
#include "nsIFileSpec.h"
#include "nsIOutputStream.h"
const PRInt16 kFileVersion = 8;
@ -73,7 +72,7 @@ public:
virtual ~nsMsgFilterList();
nsresult Close();
nsresult LoadTextFilters(nsIOFileStream *aStream);
nsresult LoadTextFilters(nsIInputStream *aStream);
PRBool m_temporaryList;
@ -85,14 +84,14 @@ protected:
#endif
protected:
nsresult ComputeArbitraryHeaders();
nsresult SaveTextFilters(nsIOFileStream *aStream);
nsresult SaveTextFilters(nsIOutputStream *aStream);
// file streaming methods
char ReadChar(nsIOFileStream *aStream);
char SkipWhitespace(nsIOFileStream *aStream);
char ReadChar(nsIInputStream *aStream);
char SkipWhitespace(nsIInputStream *aStream);
PRBool StrToBool(nsCString &str);
char LoadAttrib(nsMsgFilterFileAttribValue &attrib, nsIOFileStream *aStream);
char LoadAttrib(nsMsgFilterFileAttribValue &attrib, nsIInputStream *aStream);
const char *GetStringForAttrib(nsMsgFilterFileAttribValue attrib);
nsresult LoadValue(nsCString &value, nsIOFileStream *aStream);
nsresult LoadValue(nsCString &value, nsIInputStream *aStream);
PRInt16 m_fileVersion;
PRPackedBool m_loggingEnabled;
PRPackedBool m_startWritingToBuffer; //tells us when to start writing one whole filter to m_unparsedBuffer
@ -101,12 +100,12 @@ protected:
const char *m_filterFileName;
nsCOMPtr<nsISupportsArray> m_filters;
nsCString m_arbitraryHeaders;
nsCOMPtr<nsIFileSpec> m_defaultFile;
nsCOMPtr<nsILocalFile> m_defaultFile;
nsCString m_unparsedFilterBuffer; //holds one entire filter unparsed
private:
nsresult TruncateLog();
nsresult GetLogFileSpec(nsILocalFile **aFileSpec);
nsresult GetLogFile(nsILocalFile **aFile);
nsCOMPtr<nsIOutputStream> m_logStream;
};

Просмотреть файл

@ -42,7 +42,6 @@
#include "msgCore.h"
#include "nsMsgFilterService.h"
#include "nsFileStream.h"
#include "nsMsgFilterList.h"
#include "nsDirectoryServiceDefs.h"
#include "nsIPrompt.h"
@ -64,6 +63,7 @@
#include "nsIOutputStream.h"
#include "nsIMsgComposeService.h"
#include "nsMsgCompCID.h"
#include "nsNetUtil.h"
#include "nsMsgUtils.h"
NS_IMPL_ISUPPORTS1(nsMsgFilterService, nsIMsgFilterService)
@ -76,13 +76,14 @@ nsMsgFilterService::~nsMsgFilterService()
{
}
NS_IMETHODIMP nsMsgFilterService::OpenFilterList(nsIFileSpec *filterFile, nsIMsgFolder *rootFolder, nsIMsgWindow *aMsgWindow, nsIMsgFilterList **resultFilterList)
NS_IMETHODIMP nsMsgFilterService::OpenFilterList(nsILocalFile *aFilterFile, nsIMsgFolder *rootFolder, nsIMsgWindow *aMsgWindow, nsIMsgFilterList **resultFilterList)
{
nsresult ret = NS_OK;
nsresult rv = NS_OK;
nsCOMPtr <nsIInputStream> fileStream;
rv = NS_NewLocalFileInputStream(getter_AddRefs(fileStream), aFilterFile);
NS_ENSURE_SUCCESS(rv, rv);
nsFileSpec filterSpec;
filterFile->GetFileSpec(&filterSpec);
nsIOFileStream *fileStream = new nsIOFileStream(filterSpec);
if (!fileStream)
return NS_ERROR_OUT_OF_MEMORY;
@ -93,16 +94,15 @@ NS_IMETHODIMP nsMsgFilterService::OpenFilterList(nsIFileSpec *filterFile, nsIMsg
filterList->SetFolder(rootFolder);
// temporarily tell the filter where it's file path is
filterList->SetDefaultFile(filterFile);
filterList->SetDefaultFile(aFilterFile);
PRUint32 size;
ret = filterFile->GetFileSize(&size);
if (NS_SUCCEEDED(ret) && size > 0)
ret = filterList->LoadTextFilters(fileStream);
fileStream->close();
delete fileStream;
PRInt64 size;
rv = aFilterFile->GetFileSize(&size);
if (NS_SUCCEEDED(rv) && size > 0)
rv = filterList->LoadTextFilters(fileStream);
fileStream->Close();
fileStream =nsnull;
if (NS_SUCCEEDED(ret))
if (NS_SUCCEEDED(rv))
{
*resultFilterList = filterList;
PRInt16 version;
@ -110,26 +110,26 @@ NS_IMETHODIMP nsMsgFilterService::OpenFilterList(nsIFileSpec *filterFile, nsIMsg
if (version != kFileVersion)
{
SaveFilterList(filterList, filterFile);
SaveFilterList(filterList, aFilterFile);
}
}
else
{
NS_RELEASE(filterList);
if (ret == NS_MSG_FILTER_PARSE_ERROR && aMsgWindow)
if (rv == NS_MSG_FILTER_PARSE_ERROR && aMsgWindow)
{
ret = BackUpFilterFile(filterFile, aMsgWindow);
NS_ENSURE_SUCCESS(ret, ret);
ret = filterFile->Truncate(0);
NS_ENSURE_SUCCESS(ret, ret);
return OpenFilterList(filterFile, rootFolder, aMsgWindow, resultFilterList);
rv = BackUpFilterFile(aFilterFile, aMsgWindow);
NS_ENSURE_SUCCESS(rv, rv);
rv = aFilterFile->SetFileSize(0);
NS_ENSURE_SUCCESS(rv, rv);
return OpenFilterList(aFilterFile, rootFolder, aMsgWindow, resultFilterList);
}
else if(ret == NS_MSG_CUSTOM_HEADERS_OVERFLOW && aMsgWindow)
else if (rv == NS_MSG_CUSTOM_HEADERS_OVERFLOW && aMsgWindow)
ThrowAlertMsg("filterCustomHeaderOverflow", aMsgWindow);
else if(ret == NS_MSG_INVALID_CUSTOM_HEADER && aMsgWindow)
else if(rv == NS_MSG_INVALID_CUSTOM_HEADER && aMsgWindow)
ThrowAlertMsg("invalidCustomHeader", aMsgWindow);
}
return ret;
return rv;
}
NS_IMETHODIMP nsMsgFilterService::CloseFilterList(nsIMsgFilterList *filterList)
@ -139,100 +139,69 @@ NS_IMETHODIMP nsMsgFilterService::CloseFilterList(nsIMsgFilterList *filterList)
}
/* save without deleting */
NS_IMETHODIMP nsMsgFilterService::SaveFilterList(nsIMsgFilterList *filterList, nsIFileSpec *filterFile)
NS_IMETHODIMP nsMsgFilterService::SaveFilterList(nsIMsgFilterList *filterList, nsILocalFile *filterFile)
{
NS_ENSURE_ARG_POINTER(filterFile);
NS_ENSURE_ARG_POINTER(filterList);
nsresult ret = NS_OK;
nsCOMPtr <nsIFileSpec> tmpFiltersFile;
nsCOMPtr <nsIFileSpec> realFiltersFile;
nsCOMPtr <nsIFileSpec> parentDir;
nsCOMPtr <nsILocalFile> realFiltersFile;
nsCOMPtr <nsIFile> parentDir;
nsCOMPtr <nsIFile> tmpFile;
ret = GetSpecialDirectoryWithFileName(NS_OS_TEMP_DIR,
"tmprules.dat",
getter_AddRefs(tmpFiltersFile));
getter_AddRefs(tmpFile));
NS_ASSERTION(NS_SUCCEEDED(ret),"writing filters file: failed to append filename");
if (NS_FAILED(ret))
return ret;
ret = tmpFiltersFile->MakeUnique(); //need a unique tmp file to prevent dataloss in multiuser environment
nsCOMPtr <nsILocalFile> tmpFiltersFile = do_QueryInterface(tmpFile);
ret = tmpFiltersFile->CreateUnique(nsIFile::NORMAL_FILE_TYPE, 00600); //need a unique tmp file to prevent dataloss in multiuser environment
NS_ENSURE_SUCCESS(ret, ret);
nsFileSpec tmpFileSpec;
tmpFiltersFile->GetFileSpec(&tmpFileSpec);
nsIOFileStream *tmpFileStream = nsnull;
if (NS_SUCCEEDED(ret))
ret = filterFile->GetParent(getter_AddRefs(parentDir));
nsCOMPtr <nsIOutputStream> tmpFileStream;
if (NS_SUCCEEDED(ret))
tmpFileStream = new nsIOFileStream(tmpFileSpec);
if (!tmpFileStream)
return NS_ERROR_OUT_OF_MEMORY;
ret = NS_NewLocalFileOutputStream(getter_AddRefs(tmpFileStream), tmpFiltersFile, -1, 00600);
NS_ENSURE_SUCCESS(ret, ret);
ret = filterList->SaveToFile(tmpFileStream);
tmpFileStream->close();
delete tmpFileStream;
tmpFileStream->Close();
tmpFileStream = nsnull;
if (NS_SUCCEEDED(ret))
{
// can't move across drives
ret = tmpFiltersFile->CopyToDir(parentDir);
if (NS_SUCCEEDED(ret))
{
filterFile->Delete(PR_FALSE);
nsXPIDLCString tmpFileName;
tmpFiltersFile->GetLeafName(getter_Copies(tmpFileName));
parentDir->AppendRelativeUnixPath(tmpFileName.get());
nsXPIDLCString finalLeafName;
filterFile->GetLeafName(getter_Copies(finalLeafName));
if (!finalLeafName.IsEmpty())
parentDir->Rename(finalLeafName);
else // fall back to msgFilterRules.dat
parentDir->Rename("msgFilterRules.dat");
tmpFiltersFile->Delete(PR_FALSE);
}
nsXPIDLCString finalLeafName;
filterFile->GetNativeLeafName(finalLeafName);
ret = tmpFiltersFile->MoveToNative(parentDir, finalLeafName);
}
NS_ASSERTION(NS_SUCCEEDED(ret), "error opening/saving filter list");
return ret;
return ret;
}
NS_IMETHODIMP nsMsgFilterService::CancelFilterList(nsIMsgFilterList *filterList)
{
return NS_ERROR_NOT_IMPLEMENTED;
return NS_ERROR_NOT_IMPLEMENTED;
}
nsresult nsMsgFilterService::BackUpFilterFile(nsIFileSpec *aFilterFile, nsIMsgWindow *aMsgWindow)
nsresult nsMsgFilterService::BackUpFilterFile(nsILocalFile *aFilterFile, nsIMsgWindow *aMsgWindow)
{
nsresult rv;
AlertBackingUpFilterFile(aMsgWindow);
aFilterFile->CloseStream();
nsCOMPtr<nsILocalFile> localFilterFile;
nsFileSpec filterFileSpec;
aFilterFile->GetFileSpec(&filterFileSpec);
rv = NS_FileSpecToIFile(&filterFileSpec, getter_AddRefs(localFilterFile));
NS_ENSURE_SUCCESS(rv,rv);
nsCOMPtr<nsILocalFile> localParentDir;
nsCOMPtr <nsIFileSpec> parentDir;
rv = aFilterFile->GetParent(getter_AddRefs(parentDir));
NS_ENSURE_SUCCESS(rv,rv);
nsFileSpec parentDirSpec;
parentDir->GetFileSpec(&parentDirSpec);
rv = NS_FileSpecToIFile(&parentDirSpec, getter_AddRefs(localParentDir));
nsCOMPtr<nsIFile> localParentDir;
rv = aFilterFile->GetParent(getter_AddRefs(localParentDir));
NS_ENSURE_SUCCESS(rv,rv);
//if back-up file exists delete the back up file otherwise copy fails.
nsCOMPtr <nsILocalFile> backupFile;
rv = NS_FileSpecToIFile(&parentDirSpec, getter_AddRefs(backupFile));
nsCOMPtr <nsIFile> backupFile;
rv = localParentDir->Clone(getter_AddRefs(backupFile));
NS_ENSURE_SUCCESS(rv,rv);
backupFile->AppendNative(NS_LITERAL_CSTRING("rulesbackup.dat"));
PRBool exists;
@ -240,7 +209,7 @@ nsresult nsMsgFilterService::BackUpFilterFile(nsIFileSpec *aFilterFile, nsIMsgWi
if (exists)
backupFile->Remove(PR_FALSE);
return localFilterFile->CopyToNative(localParentDir, NS_LITERAL_CSTRING("rulesbackup.dat"));
return aFilterFile->CopyToNative(localParentDir, NS_LITERAL_CSTRING("rulesbackup.dat"));
}
nsresult nsMsgFilterService::AlertBackingUpFilterFile(nsIMsgWindow *aMsgWindow)

Просмотреть файл

@ -61,7 +61,7 @@ public:
with dialog boxes. To apply the new list call MSG_CloseFilterList.
*/
nsresult BackUpFilterFile(nsIFileSpec *aFilterFile, nsIMsgWindow *aMsgWindow);
nsresult BackUpFilterFile(nsILocalFile *aFilterFile, nsIMsgWindow *aMsgWindow);
nsresult AlertBackingUpFilterFile(nsIMsgWindow *aMsgWindow);
nsresult ThrowAlertMsg(const char*aMsgName, nsIMsgWindow *aMsgWindow);
nsresult GetStringFromBundle(const char *aMsgName, PRUnichar **aResult);

Просмотреть файл

@ -1167,47 +1167,31 @@ nsMsgIncomingServer::GetFilterList(nsIMsgWindow *aMsgWindow, nsIMsgFilterList **
nsresult rv = GetRootFolder(getter_AddRefs(msgFolder));
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIFileSpec> thisFolder;
rv = msgFolder->GetPath(getter_AddRefs(thisFolder));
nsCOMPtr<nsILocalFile> thisFolder;
rv = msgFolder->GetFilePath(getter_AddRefs(thisFolder));
NS_ENSURE_SUCCESS(rv, rv);
mFilterFile = do_CreateInstance(NS_FILESPEC_CONTRACTID, &rv);
mFilterFile = do_CreateInstance(NS_LOCAL_FILE_CONTRACTID, &rv);
NS_ENSURE_SUCCESS(rv, rv);
rv = mFilterFile->InitWithFile(thisFolder);
NS_ENSURE_SUCCESS(rv, rv);
rv = mFilterFile->FromFileSpec(thisFolder);
NS_ENSURE_SUCCESS(rv, rv);
mFilterFile->AppendRelativeUnixPath("msgFilterRules.dat");
mFilterFile->AppendNative(NS_LITERAL_CSTRING("msgFilterRules.dat"));
PRBool fileExists;
mFilterFile->Exists(&fileExists);
if (!fileExists)
{
nsCOMPtr<nsIFileSpec> oldFilterFile = do_CreateInstance(NS_FILESPEC_CONTRACTID, &rv);
nsCOMPtr<nsILocalFile> oldFilterFile = do_CreateInstance(NS_LOCAL_FILE_CONTRACTID, &rv);
NS_ENSURE_SUCCESS(rv, rv);
rv = oldFilterFile->FromFileSpec(thisFolder);
rv = oldFilterFile->InitWithFile(thisFolder);
NS_ENSURE_SUCCESS(rv, rv);
oldFilterFile->AppendRelativeUnixPath("rules.dat");
oldFilterFile->AppendNative(NS_LITERAL_CSTRING("rules.dat"));
oldFilterFile->Exists(&fileExists);
if (fileExists) //copy rules.dat --> msgFilterRules.dat
{
nsFileSpec rootFolderSpec;
thisFolder->GetFileSpec(&rootFolderSpec);
nsCOMPtr<nsILocalFile> rootFolderDir;
rv = NS_FileSpecToIFile(&rootFolderSpec, getter_AddRefs(rootFolderDir));
NS_ENSURE_SUCCESS(rv, rv);
nsFileSpec oldFilterSpec;
oldFilterFile->GetFileSpec(&oldFilterSpec);
nsCOMPtr<nsILocalFile> localFilterFile;
rv = NS_FileSpecToIFile(&oldFilterSpec, getter_AddRefs(localFilterFile));
NS_ENSURE_SUCCESS(rv, rv);
rv = localFilterFile->CopyToNative(rootFolderDir, NS_LITERAL_CSTRING("msgFilterRules.dat"));
rv = oldFilterFile->CopyToNative(thisFolder, NS_LITERAL_CSTRING("msgFilterRules.dat"));
NS_ENSURE_SUCCESS(rv, rv);
}
}
@ -1933,14 +1917,11 @@ nsMsgIncomingServer::ConfigureTemporaryServerSpamFilters(nsIMsgFilterList *filte
if (!file)
return NS_OK;
nsCOMPtr<nsIFileSpec> serverFilterSpec;
rv = NS_NewFileSpecFromIFile(file, getter_AddRefs(serverFilterSpec));
if (NS_FAILED(rv)) return rv;
nsCOMPtr<nsIMsgFilterService> filterService = do_GetService(NS_MSGFILTERSERVICE_CONTRACTID, &rv);
nsCOMPtr<nsIMsgFilterList> serverFilterList;
rv = filterService->OpenFilterList(serverFilterSpec, NULL, NULL, getter_AddRefs(serverFilterList));
nsCOMPtr <nsILocalFile> localFile = do_QueryInterface(file);
rv = filterService->OpenFilterList(localFile, NULL, NULL, getter_AddRefs(serverFilterList));
NS_ENSURE_SUCCESS(rv, rv);
rv = serverFilterList->GetFilterNamed(yesFilterName.get(),

Просмотреть файл

@ -105,7 +105,7 @@ protected:
nsresult InternalSetHostName(const char *aHostname, const char *prefName);
nsresult getProtocolInfo(nsIMsgProtocolInfo **aResult);
nsCOMPtr <nsIFileSpec> mFilterFile;
nsCOMPtr <nsILocalFile> mFilterFile;
nsCOMPtr <nsIMsgFilterList> mFilterList;
// these allow us to handle duplicate incoming messages, e.g. delete them.
nsHashtable m_downloadedHdrs;

Просмотреть файл

@ -280,20 +280,16 @@ nsresult nsMsgMailViewList::LoadMailViews()
// now copy the file over to the profile directory
defaultMailViewSpec->CopyToDir(profileDirSpec);
}
nsCOMPtr<nsIFileSpec> mailViewSpec;
rv = NS_NewFileSpecFromIFile(file, getter_AddRefs(mailViewSpec));
if (NS_FAILED(rv)) return rv;
// this is kind of a hack but I think it will be an effective hack. The filter service already knows how to
// take a nsIFileSpec and parse the contents into filters which are very similar to mail views. Intead of
// take a nsILocalFile and parse the contents into filters which are very similar to mail views. Intead of
// re-writing all of that dirty parsing code, let's just re-use it then convert the results into a data strcuture
// we wish to give to our consumers.
nsCOMPtr<nsIMsgFilterService> filterService = do_GetService(NS_MSGFILTERSERVICE_CONTRACTID, &rv);
nsCOMPtr<nsIMsgFilterList> mfilterList;
rv = filterService->OpenFilterList(mailViewSpec, NULL, NULL, getter_AddRefs(mFilterList));
nsCOMPtr <nsILocalFile> localFile = do_QueryInterface(file);
rv = filterService->OpenFilterList(localFile, NULL, NULL, getter_AddRefs(mFilterList));
NS_ENSURE_SUCCESS(rv, rv);
// now convert the filter list into our mail view objects, stripping out just the info we need

Просмотреть файл

@ -61,7 +61,6 @@
#include "nsIMsgMailSession.h"
#include "nsNetUtil.h"
#include "nsIFileURL.h"
#include "nsIFileSpec.h"
static NS_DEFINE_CID(kCMailDB, NS_MAILDB_CID);

Просмотреть файл

@ -41,7 +41,6 @@
#include "plstr.h"
#include "prprf.h"
#include "nsIFileSpec.h"
#include "nsXPIDLString.h"
#include "nsNoIncomingServer.h"

Просмотреть файл

@ -42,7 +42,6 @@
#include "nsINoIncomingServer.h"
#include "nsILocalMailIncomingServer.h"
#include "nsMsgIncomingServer.h"
#include "nsIFileSpec.h"
/* get some implementation from nsMsgIncomingServer */
class nsNoIncomingServer : public nsMsgIncomingServer,

Просмотреть файл

@ -49,7 +49,6 @@
#include "nsMsgBaseCID.h"
#include "nsXPIDLString.h"
#include "nsCOMPtr.h"
#include "nsIFileSpec.h"
#include "nsMsgUtils.h"
#include "nsIDirectoryService.h"

Просмотреть файл

@ -44,7 +44,6 @@
#include "nscore.h"
#include <stdio.h>
#include <time.h>
#include "nsIFileSpec.h"
#include "nsParseMailbox.h"
#include "nsIMsgLocalMailFolder.h"
#include "nsIMsgIncomingServer.h"
@ -868,17 +867,17 @@ nsPop3Sink::IncorporateComplete(nsIMsgWindow *aMsgWindow, PRInt32 aSize)
}
else
{
nsFileSpec destFolderSpec;
nsCOMPtr<nsIFileSpec> path;
nsCOMPtr<nsILocalFile> path;
// cleanup after mailHdr in source DB because we moved the message.
m_newMailParser->m_mailDB->RemoveHeaderMdbRow(hdr);
// if the filter moved the message, it called nsParseMailMessageState::Init
// to truncate the source folder, which resets m_envelopePos and m_position.
// So set the envelopePos explicitly here.
m_folder->GetPath(getter_AddRefs(path));
path->GetFileSpec(&destFolderSpec);
m_newMailParser->SetEnvelopePos(destFolderSpec.GetFileSize());
m_folder->GetFilePath(getter_AddRefs(path));
PRInt64 fileSize;
path->GetFileSize(&fileSize);
m_newMailParser->SetEnvelopePos(fileSize);
}
m_newMailParser->m_newMsgHdr = nsnull;
m_outFileStream->close(); // close so we can truncate.

Просмотреть файл

@ -39,7 +39,6 @@
#include "nsCOMPtr.h"
#include "nsILocalFile.h"
#include "nsFileSpec.h"
#include "nsIFileSpec.h"
#include "nsAppDirectoryServiceDefs.h"
nsRssService::nsRssService()

Просмотреть файл

@ -1881,11 +1881,13 @@ nsMsgNewsFolder::GetFilterList(nsIMsgWindow *aMsgWindow, nsIMsgFilterList **aRes
if (!mFilterList)
{
nsCOMPtr<nsIFileSpec> thisFolder;
nsresult rv = GetPath(getter_AddRefs(thisFolder));
nsCOMPtr<nsILocalFile> thisFolder;
nsresult rv = GetFilePath(getter_AddRefs(thisFolder));
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr <nsIFileSpec> mFilterFile = do_CreateInstance(NS_FILESPEC_CONTRACTID, &rv);
nsCOMPtr <nsILocalFile> filterFile = do_CreateInstance(NS_LOCAL_FILE_CONTRACTID, &rv);
NS_ENSURE_SUCCESS(rv, rv);;
rv = filterFile->InitWithFile(thisFolder);
NS_ENSURE_SUCCESS(rv, rv);
// in 4.x, the news filter file was
@ -1893,26 +1895,24 @@ nsMsgNewsFolder::GetFilterList(nsIMsgWindow *aMsgWindow, nsIMsgFilterList **aRes
// where the summary file was
// C:\Program Files\Netscape\Users\meer\News\host-news.mcom.com\mcom.test.snm
// we make the rules file ".dat" in mozilla, so that migration works.
rv = mFilterFile->FromFileSpec(thisFolder);
NS_ENSURE_SUCCESS(rv, rv);
// NOTE:
// we don't we need to call NS_MsgHashIfNecessary()
// it's already been hashed, if necessary
nsXPIDLCString filterFileName;
rv = mFilterFile->GetLeafName(getter_Copies(filterFileName));
rv = filterFile->GetNativeLeafName(filterFileName);
NS_ENSURE_SUCCESS(rv,rv);
filterFileName.Append(".dat");
rv = mFilterFile->SetLeafName(filterFileName.get());
rv = filterFile->SetNativeLeafName(filterFileName);
NS_ENSURE_SUCCESS(rv,rv);
nsCOMPtr<nsIMsgFilterService> filterService =
do_GetService(NS_MSGFILTERSERVICE_CONTRACTID, &rv);
NS_ENSURE_SUCCESS(rv, rv);
rv = filterService->OpenFilterList(mFilterFile, this, aMsgWindow, getter_AddRefs(mFilterList));
rv = filterService->OpenFilterList(filterFile, this, aMsgWindow, getter_AddRefs(mFilterList));
NS_ENSURE_SUCCESS(rv, rv);
}