From 17fb4d2d0b73b9e7dffd3b43cbdd52c13cb08b6d Mon Sep 17 00:00:00 2001 From: "sspitzer%netscape.com" Date: Sat, 1 Apr 2000 04:16:32 +0000 Subject: [PATCH] start of filter migration work. r=bienvenu, a=leaf. not turned on yet for anyone but david b. and me. newsgroup filter migration not working yet. git-svn-id: svn://10.0.0.236/trunk@64844 18797224-902f-48f8-a5cc-f745e15eee43 --- .../mailnews/base/src/nsMessengerMigrator.cpp | 72 +++++++++++++++++++ .../mailnews/base/src/nsMessengerMigrator.h | 3 +- 2 files changed, 74 insertions(+), 1 deletion(-) diff --git a/mozilla/mailnews/base/src/nsMessengerMigrator.cpp b/mozilla/mailnews/base/src/nsMessengerMigrator.cpp index 4139bf51cfc..1f92e4eb7db 100644 --- a/mozilla/mailnews/base/src/nsMessengerMigrator.cpp +++ b/mozilla/mailnews/base/src/nsMessengerMigrator.cpp @@ -64,6 +64,9 @@ #include "nsIAddressBook.h" #include "nsAbBaseCID.h" +#include "nsIMsgFilterService.h" +#include "nsIMsgFilterList.h" + #define BUF_STR_LEN 1024 #if defined(DEBUG_sspitzer) || defined(DEBUG_seth) @@ -118,6 +121,8 @@ static NS_DEFINE_CID(kAddressBookCID, NS_ADDRESSBOOK_CID); #define DEFAULT_4X_TEMPLATES_FOLDER_NAME "Templates" #define UNSENT_MESSAGES_FOLDER_NAME "Unsent Messages" +#define FILTER_FILE_NAME "rules.dat" /* this is XP in 5.x */ + /* we are going to clear these after migration */ #define PREF_4X_MAIL_IDENTITY_USEREMAIL "mail.identity.useremail" #define PREF_4X_MAIL_IDENTITY_USERNAME "mail.identity.username" @@ -1374,6 +1379,10 @@ nsMessengerMigrator::MigratePopAccount(nsIMsgIdentity *identity) rv = SetSendLaterUriPref(server); if (NS_FAILED(rv)) return rv; + // migrate the filter file + rv = MigrateFilters(server); + if (NS_FAILED(rv)) return rv; + // we could only have one pop account in 4.x, so we make it the default in 5.0 rv = accountManager->SetDefaultAccount(account); return rv; @@ -1613,6 +1622,10 @@ nsMessengerMigrator::MigrateImapAccount(nsIMsgIdentity *identity, const char *ho imapMailDir->CreateDir(); } + // migrate the filter file + rv = MigrateFilters(server); + if (NS_FAILED(rv)) return rv; + if (isDefaultAccount) { rv = accountManager->SetDefaultAccount(account); if (NS_FAILED(rv)) return rv; @@ -2165,6 +2178,10 @@ nsMessengerMigrator::MigrateNewsAccount(nsIMsgIdentity *identity, const char *ho newsDir->CreateDir(); } + // migrate the filter file + rv = MigrateFilters(server); + if (NS_FAILED(rv)) return rv; + return NS_OK; } @@ -2197,3 +2214,58 @@ nsMessengerMigrator::MigrateOldNntpPrefs(nsIMsgIncomingServer *server, const cha return NS_OK; } +#if defined(DEBUG_sspitzer) || defined(DEBUG_bienvenu) +#define MIGRATE_FILTERS 1 +#endif + +nsresult nsMessengerMigrator::MigrateFilters(nsIMsgIncomingServer *aServer) +{ +#ifdef MIGRATE_FILTERS + nsresult rv; + if (!aServer) return NS_ERROR_NULL_POINTER; + + nsCOMPtr rootFolder; + rv = aServer->GetRootFolder(getter_AddRefs(rootFolder)); + if (NS_FAILED(rv)) return rv; + if (!rootFolder) return NS_ERROR_FAILURE; + + nsCOMPtr folder = do_QueryInterface(rootFolder, &rv); + if (NS_FAILED(rv)) return rv; + if (!folder) return NS_ERROR_FAILURE; + + nsCOMPtr filterService = do_GetService(NS_MSGFILTERSERVICE_PROGID, &rv); + if (NS_FAILED(rv)) return rv; + if (!filterService) return NS_ERROR_FAILURE; + + nsCOMPtr filterList; + nsCOMPtr filterFile; + + rv = aServer->GetLocalPath(getter_AddRefs(filterFile)); + if (NS_FAILED(rv)) return rv; + if (!filterFile) return NS_ERROR_FAILURE; + + rv = filterFile->AppendRelativeUnixPath(FILTER_FILE_NAME); + if (NS_FAILED(rv)) return rv; + + PRBool exists; + rv = filterFile->Exists(&exists); + if (NS_FAILED(rv)) return rv; + + if (exists) { + nsFileSpec filterFileSpec; + rv = filterFile->GetFileSpec(&filterFileSpec); + if (NS_FAILED(rv)) return rv; + + // open will migrate the filters. + rv = filterService->OpenFilterList(&filterFileSpec, getter_AddRefs(filterList)); + if (NS_FAILED(rv)) return rv; + if (!filterList) return NS_ERROR_FAILURE; + + // now save the filters. + rv = filterService->SaveFilterList(filterList, &filterFileSpec); + if (NS_FAILED(rv)) return rv; + } +#endif /* MIGRATE_FILTERS */ + + return NS_OK; +} diff --git a/mozilla/mailnews/base/src/nsMessengerMigrator.h b/mozilla/mailnews/base/src/nsMessengerMigrator.h index e186df2c4fa..f23834f1d00 100644 --- a/mozilla/mailnews/base/src/nsMessengerMigrator.h +++ b/mozilla/mailnews/base/src/nsMessengerMigrator.h @@ -120,7 +120,8 @@ private: nsresult Convert4XUri(const char *old_uri, PRBool for_news, const char *aUsername, const char *aHostname, const char *default_folder_name, char **new_uri); nsresult SetSendLaterUriPref(nsIMsgIncomingServer *server); - + nsresult MigrateFilters(nsIMsgIncomingServer *server); + nsresult getPrefService(); nsCOMPtr m_prefs;