for local mail, use localized Drafts/Templates/etc from the stringbundle

git-svn-id: svn://10.0.0.236/trunk@70798 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
alecf%netscape.com
2000-05-25 03:52:40 +00:00
parent 669b3b25bc
commit da00796feb
3 changed files with 100 additions and 35 deletions

View File

@@ -50,7 +50,6 @@
#include "nsRDFCID.h"
#include "nsFileStream.h"
#include "nsMsgDBCID.h"
#include "nsLocalMessage.h"
#include "nsMsgUtils.h"
#include "nsLocalUtils.h"
#include "nsIPop3IncomingServer.h"

View File

@@ -28,6 +28,7 @@
#include "nsIPref.h"
#include "nsXPIDLString.h"
#include "nsIStringBundle.h"
#include "nsIPop3IncomingServer.h"
#include "nsPop3IncomingServer.h"
@@ -41,7 +42,18 @@
static NS_DEFINE_CID(kCPop3ServiceCID, NS_POP3SERVICE_CID);
static NS_DEFINE_CID(kCMsgMailSessionCID, NS_MSGMAILSESSION_CID);
static NS_DEFINE_CID(kStringBundleServiceCID, NS_STRINGBUNDLESERVICE_CID);
#define INBOX_NAME "Inbox"
nsrefcnt nsPop3IncomingServer::gInstanceCount = 0;
PRUnichar *nsPop3IncomingServer::kInboxName = 0;
PRUnichar *nsPop3IncomingServer::kTrashName = 0;
PRUnichar *nsPop3IncomingServer::kSentName = 0;
PRUnichar *nsPop3IncomingServer::kDraftsName = 0;
PRUnichar *nsPop3IncomingServer::kTemplatesName = 0;
PRUnichar *nsPop3IncomingServer::kUnsentName = 0;
NS_IMPL_ISUPPORTS_INHERITED2(nsPop3IncomingServer,
nsMsgIncomingServer,
@@ -58,13 +70,53 @@ nsPop3IncomingServer::nsPop3IncomingServer()
POP3_UIDL_UNDEFINED |
POP3_TOP_UNDEFINED |
POP3_XTND_XLST_UNDEFINED;
if (gInstanceCount++ == 0) {
initializeStrings();
}
}
nsPop3IncomingServer::~nsPop3IncomingServer()
{
if (--gInstanceCount == 0) {
CRTFREEIF(kInboxName);
CRTFREEIF(kTrashName);
CRTFREEIF(kSentName);
CRTFREEIF(kDraftsName);
CRTFREEIF(kTemplatesName);
CRTFREEIF(kUnsentName);
}
}
nsresult
nsPop3IncomingServer::initializeStrings()
{
nsresult rv;
nsCOMPtr<nsIStringBundleService> bundleService =
do_GetService(kStringBundleServiceCID, &rv);
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIStringBundle> bundle;
rv = bundleService->CreateBundle("chrome://messenger/locale/messenger.properties",
nsnull,
getter_AddRefs(bundle));
NS_ENSURE_SUCCESS(rv, rv);
bundle->GetStringFromName(NS_ConvertASCIItoUCS2("inboxFolderName").GetUnicode(),
&kInboxName);
bundle->GetStringFromName(NS_ConvertASCIItoUCS2("trashFolderName").GetUnicode(),
&kTrashName);
bundle->GetStringFromName(NS_ConvertASCIItoUCS2("sentFolderName").GetUnicode(),
&kSentName);
bundle->GetStringFromName(NS_ConvertASCIItoUCS2("draftsFolderName").GetUnicode(),
&kDraftsName);
bundle->GetStringFromName(NS_ConvertASCIItoUCS2("templatesFolderName").GetUnicode(),
&kTemplatesName);
bundle->GetStringFromName(NS_ConvertASCIItoUCS2("unsentFolderName").GetUnicode(),
&kUnsentName);
return NS_OK;
}
NS_IMPL_SERVERPREF_BOOL(nsPop3IncomingServer,
@@ -170,7 +222,7 @@ NS_IMETHODIMP nsPop3IncomingServer::SetFlagsOnDefaultMailboxes()
nsCOMPtr <nsIFolder> folder;
nsCOMPtr<nsIMsgFolder> msgFolder;
rv = rootFolder->FindSubFolder("Inbox", getter_AddRefs(folder));
rv = rootFolder->FindSubFolder(INBOX_NAME, getter_AddRefs(folder));
if (NS_FAILED(rv)) return rv;
if (!folder) return NS_ERROR_FAILURE;
msgFolder = do_QueryInterface(folder);
@@ -178,37 +230,10 @@ NS_IMETHODIMP nsPop3IncomingServer::SetFlagsOnDefaultMailboxes()
rv = msgFolder->SetFlag(MSG_FOLDER_FLAG_INBOX);
if (NS_FAILED(rv)) return rv;
rv = rootFolder->FindSubFolder("Sent", getter_AddRefs(folder));
if (NS_FAILED(rv)) return rv;
if (!folder) return NS_ERROR_FAILURE;
msgFolder = do_QueryInterface(folder);
if (!msgFolder) return NS_ERROR_FAILURE;
rv = msgFolder->SetFlag(MSG_FOLDER_FLAG_SENTMAIL);
if (NS_FAILED(rv)) return rv;
rv = rootFolder->FindSubFolder("Drafts", getter_AddRefs(folder));
if (NS_FAILED(rv)) return rv;
if (!folder) return NS_ERROR_FAILURE;
msgFolder = do_QueryInterface(folder);
if (!msgFolder) return NS_ERROR_FAILURE;
rv = msgFolder->SetFlag(MSG_FOLDER_FLAG_DRAFTS);
if (NS_FAILED(rv)) return rv;
rv = rootFolder->FindSubFolder("Templates", getter_AddRefs(folder));
if (NS_FAILED(rv)) return rv;
if (!folder) return NS_ERROR_FAILURE;
msgFolder = do_QueryInterface(folder);
if (!msgFolder) return NS_ERROR_FAILURE;
rv = msgFolder->SetFlag(MSG_FOLDER_FLAG_TEMPLATES);
if (NS_FAILED(rv)) return rv;
rv = rootFolder->FindSubFolder("Trash", getter_AddRefs(folder));
if (NS_FAILED(rv)) return rv;
if (!folder) return NS_ERROR_FAILURE;
msgFolder = do_QueryInterface(folder);
if (!msgFolder) return NS_ERROR_FAILURE;
rv = msgFolder->SetFlag(MSG_FOLDER_FLAG_TRASH);
if (NS_FAILED(rv)) return rv;
setSubFolderFlag(rootFolder, kSentName, MSG_FOLDER_FLAG_SENTMAIL);
setSubFolderFlag(rootFolder, kDraftsName, MSG_FOLDER_FLAG_DRAFTS);
setSubFolderFlag(rootFolder, kTemplatesName, MSG_FOLDER_FLAG_TEMPLATES);
setSubFolderFlag(rootFolder, kTrashName, MSG_FOLDER_FLAG_TRASH);
rv = rootFolder->FindSubFolder("Unsent Messages", getter_AddRefs(folder));
if (NS_FAILED(rv)) return rv;
@@ -221,6 +246,30 @@ NS_IMETHODIMP nsPop3IncomingServer::SetFlagsOnDefaultMailboxes()
return NS_OK;
}
nsresult
nsPop3IncomingServer::setSubFolderFlag(nsIFolder *aRootFolder,
PRUnichar *aFolderName,
PRUint32 flags)
{
nsresult rv;
// no-copy conversion to utf8 string
nsSubsumeCStr utf8Name(nsSubsumeStr(aFolderName, PR_FALSE).ToNewUTF8String(), PR_TRUE);
nsCOMPtr<nsIFolder> folder;
rv = aRootFolder->FindSubFolder(utf8Name, getter_AddRefs(folder));
if (NS_FAILED(rv)) return rv;
if (!folder) return NS_ERROR_FAILURE;
nsCOMPtr<nsIMsgFolder> msgFolder = do_QueryInterface(folder);
if (!msgFolder) return NS_ERROR_FAILURE;
rv = msgFolder->SetFlag(MSG_FOLDER_FLAG_TRASH);
if (NS_FAILED(rv)) return rv;
return NS_OK;
}
NS_IMETHODIMP nsPop3IncomingServer::CreateDefaultMailboxes(nsIFileSpec *path)
{
nsresult rv;
@@ -228,7 +277,7 @@ NS_IMETHODIMP nsPop3IncomingServer::CreateDefaultMailboxes(nsIFileSpec *path)
if (!path) return NS_ERROR_NULL_POINTER;
// todo, use a string bundle for this
rv =path->AppendRelativeUnixPath("Inbox");
rv =path->AppendRelativeUnixPath(INBOX_NAME);
if (NS_FAILED(rv)) return rv;
rv = path->Exists(&exists);
if (!exists) {

View File

@@ -46,6 +46,23 @@ public:
NS_IMETHOD PerformBiff();
private:
static nsresult setSubFolderFlag(nsIFolder *aRootFolder,
PRUnichar *folderName,
PRUint32 flag);
// copied from nsMsgFolder because flag setting is done in the
// server, not the folder :(
static nsrefcnt gInstanceCount;
static nsresult initializeStrings();
static PRUnichar *kInboxName;
static PRUnichar *kTrashName;
static PRUnichar *kSentName;
static PRUnichar *kDraftsName;
static PRUnichar *kTemplatesName;
static PRUnichar *kUnsentName;
PRUint32 m_capabilityFlags;
};