working on spam UI, making it match the spec. see bug #169638.

not visible to the user yet.  r/sr=bienvenu
This commit is contained in:
sspitzer%netscape.com 2002-09-26 00:33:15 +00:00
Родитель 0503099ac2
Коммит 421c0d835e
13 изменённых файлов: 186 добавлений и 20 удалений

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

@ -13,7 +13,17 @@ interface nsISpamSettings: nsISupports {
attribute long level;
attribute boolean moveOnSpam;
/**
* 0 for actionTargetAccount, 1 for actionTargetFolder
* most consumers will just use spamFolderURI
*/
attribute long moveTargetMode;
attribute string actionTargetAccount;
attribute string actionTargetFolder;
/**
* built from moveTargetMode, actionTargetAccount, actionTargetFolder
*/
readonly attribute string spamFolderURI;
attribute boolean purge;
/**

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

@ -61,15 +61,24 @@ function setupForAccountFromFolder(aURI)
serverList.selectedItem = menuitems[0];
// set up the UI for this server
// set up the level radio group
document.getElementById("level").selectedItem = document.getElementById("level" + obj.settings.level);
// set up the junk mail folder picker
document.getElementById("moveOnSpam").checked = obj.settings.moveOnSpam;
document.getElementById("moveTargetMode").selectedItem = document.getElementById("moveTargetMode" + obj.settings.moveTargetMode);
// if there is a target account, use it. else use the current account
SetFolderPicker(obj.settings.actionTargetAccount ? obj.settings.actionTargetAccount : obj.server.serverURI, "actionTargetAccount");
if (obj.settings.actionTargetFolder)
SetFolderPicker(obj.settings.actionTargetFolder, "actionTargetFolder");
// set up the purge UI
document.getElementById("purge").checked = obj.settings.purge;
document.getElementById("purgeInterval").value = obj.settings.purgeInterval;
// set up the whitelist UI
document.getElementById("useWhiteList").checked = obj.settings.useWhiteList;
var abList = document.getElementById("whiteListAbURI");
menuitems = abList.getElementsByAttribute("id", obj.settings.whiteListAbURI);
@ -98,6 +107,8 @@ function storeSettings(aSettings)
aSettings.level = document.getElementById("level").selectedItem.getAttribute("value");
aSettings.moveOnSpam = document.getElementById("moveOnSpam").checked;
aSettings.moveTargetMode = document.getElementById("moveTargetMode").selectedItem.getAttribute("value");
aSettings.actionTargetAccount = document.getElementById("actionTargetAccount").getAttribute("uri");
aSettings.actionTargetFolder = document.getElementById("actionTargetFolder").getAttribute("uri");
aSettings.purge = document.getElementById("purge").checked;
@ -109,4 +120,6 @@ function storeSettings(aSettings)
function doHelpButton()
{
// until we have help, I use this for testing
dump("XXX " + gSpamSettings[gCurrentServer.key].settings.spamFolderURI + "\n");
}

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

@ -1,6 +1,6 @@
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://messenger/skin/messenger.css" type="text/css"?>
<?xml-stylesheet href="chrome://messenger/skin/accountManage.css" type="text/css"?>
<?xul-overlay href="chrome://global/content/dialogOverlay.xul"?>
@ -71,10 +71,32 @@
<separator/>
<hbox align="center">
<checkbox id="moveOnSpam" accesskey="&move.accesskey;" label="&move.label;"/>
<menulist id="actionTargetFolder"/>
</hbox>
<vbox align="start">
<label value="&action.label;"/>
<checkbox id="moveOnSpam" label="&move.label;"/>
<radiogroup id="moveTargetMode">
<grid class="specialFolderPickerGrid">
<columns>
<column flex="1"/>
<column flex="2"/>
</columns>
<rows>
<row align="center">
<radio id="moveTargetMode0"
value="0" label="&junkFolderOn.label;"/>
<menulist id="actionTargetAccount" flex="1"/>
</row>
<row align="center">
<radio id="moveTargetMode1"
value="1" label="&otherFolder.label;"/>
<menulist id="actionTargetFolder"/>
</row>
</rows>
</grid>
</radiogroup>
</vbox>
<hbox autostretch="never" align="center">
<checkbox id="purge" accesskey="&purge1.accesskey;" label="&purge1.label;"/>

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

@ -319,6 +319,28 @@ Rights Reserved.
<menupopup />
</menulist>
<menulist label="&chooseaccountclickhere.label;"
uri="" id="actionTargetAccount"
sortResource="http://home.netscape.com/NC-rdf#FolderTreeName"
sortDirection="ascending"
datasources="rdf:msgaccountmanager rdf:mailnewsfolders"
ref="msgaccounts:/">
<template>
<rule nc:IsServer="true" nc:CanCreateFoldersOnServer="true">
<menupopup>
<menuitem uri="..." class="folderMenuItem menuitem-iconic"
label="rdf:http://home.netscape.com/NC-rdf#Name"
oncommand="PickedMsgFolder(event.target,'actionTargetAccount')"
IsServer="rdf:http://home.netscape.com/NC-rdf#IsServer"
IsSecure="rdf:http://home.netscape.com/NC-rdf#IsSecure"
ServerType="rdf:http://home.netscape.com/NC-rdf#ServerType"
CanCreateFoldersOnServer="rdf:http://home.netscape.com/NC-rdf#CanCreateFoldersOnServer"/>
</menupopup>
</rule>
</template>
<menupopup />
</menulist>
<menulist label="&chooseaccountclickhere.label;"
uri="" id="msgFccAccountPicker"
sortResource="http://home.netscape.com/NC-rdf#FolderTreeName"

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

@ -3,7 +3,7 @@
<!ENTITY account.accesskey "A">
<!ENTITY viewLog.label "Junk Mail Log">
<!ENTITY viewLog.accesskey "j">
<!ENTITY info1.label "Junk Mail Controls evaluate your incoming messages and identify those which are most likely to be junk.">
<!ENTITY info1.label "Junk Mail Controls evaluate your incoming messages, and identify those which are most likely to be &quot;junk&quot; mail or unsolicted mail.">
<!ENTITY info2.label "Choose a level of control below. A high level will identify more junk mail but may identify some valid messages as junk, while a low level will identify less junk mail but is less likely to identify some valid messages as junk.">
<!ENTITY off.label "Off">
<!ENTITY off.accesskey "O">
@ -17,10 +17,12 @@
<!ENTITY high.accesskey "H">
<!ENTITY highest.label "Highest">
<!ENTITY highest.accesskey "s">
<!ENTITY move.label "When messages are identitied as junk, move them to a folder:">
<!ENTITY move.accesskey "n">
<!ENTITY action.label "When messages are identified as junk mail:">
<!ENTITY move.label "Move the messages to:">
<!ENTITY otherFolder.label "Other:">
<!ENTITY junkFolderOn.label "&quot;Junk&quot; Folder on:">
<!ENTITY purge1.label "Automatically delete messages identified as junk after">
<!ENTITY purge1.accesskey "u">
<!ENTITY purge2.label "days">
<!ENTITY whitelist.label "Always accept messages from people in my address book:">
<!ENTITY whitelist.accesskey "c">
<!ENTITY whitelist.accesskey "c">

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

@ -123,6 +123,7 @@ sentFolderName=Sent
draftsFolderName=Drafts
templatesFolderName=Templates
unsentFolderName=Unsent Messages
junkFolderName=Junk
# Error message for special folder deletion on imap accounts
# LOCALIZATION NOTES (specialFolderDeletionErr): Do not translate "IMAP" in the line below

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

@ -5,14 +5,18 @@
#include "prmem.h"
#include "nsIFileStreams.h"
#define MOVE_TARGET_MODE_JUNK_ON_ACCOUNT 0
#define MOVE_TARGET_MODE_FOLDER 1
nsSpamSettings::nsSpamSettings()
{
NS_INIT_ISUPPORTS();
mLevel = 0;
mMoveOnSpam = PR_FALSE;
mMoveTargetMode = MOVE_TARGET_MODE_JUNK_ON_ACCOUNT;
mPurge = PR_FALSE;
mPurgeInterval = 15; // 15 days
mPurgeInterval = 14; // 14 days
mUseWhiteList = PR_FALSE;
mLoggingEnabled = PR_FALSE;
}
@ -38,6 +42,21 @@ NS_IMETHODIMP nsSpamSettings::SetLevel(PRInt32 aLevel)
return NS_OK;
}
NS_IMETHODIMP
nsSpamSettings::GetMoveTargetMode(PRInt32 *aMoveTargetMode)
{
NS_ENSURE_ARG_POINTER(aMoveTargetMode);
*aMoveTargetMode = mMoveTargetMode;
return NS_OK;
}
NS_IMETHODIMP nsSpamSettings::SetMoveTargetMode(PRInt32 aMoveTargetMode)
{
NS_ASSERTION((aMoveTargetMode == 0 || aMoveTargetMode == 1), "bad mode");
mMoveTargetMode = aMoveTargetMode;
return NS_OK;
}
NS_IMPL_GETSET(nsSpamSettings, LoggingEnabled, PRBool, mLoggingEnabled);
NS_IMPL_GETSET(nsSpamSettings, MoveOnSpam, PRBool, mMoveOnSpam);
NS_IMPL_GETSET(nsSpamSettings, Purge, PRBool, mPurge);
@ -56,6 +75,19 @@ NS_IMETHODIMP nsSpamSettings::SetWhiteListAbURI(const char * aWhiteListAbURI)
return NS_OK;
}
NS_IMETHODIMP nsSpamSettings::GetActionTargetAccount(char * *aActionTargetAccount)
{
NS_ENSURE_ARG_POINTER(aActionTargetAccount);
*aActionTargetAccount = ToNewCString(mActionTargetAccount);
return NS_OK;
}
NS_IMETHODIMP nsSpamSettings::SetActionTargetAccount(const char * aActionTargetAccount)
{
mActionTargetAccount = aActionTargetAccount;
return NS_OK;
}
NS_IMETHODIMP nsSpamSettings::GetActionTargetFolder(char * *aActionTargetFolder)
{
NS_ENSURE_ARG_POINTER(aActionTargetFolder);
@ -263,6 +295,14 @@ NS_IMETHODIMP nsSpamSettings::Clone(nsISpamSettings *aSpamSettings)
rv = aSpamSettings->GetLevel(&mLevel);
NS_ENSURE_SUCCESS(rv,rv);
rv = aSpamSettings->GetMoveTargetMode(&mMoveTargetMode);
NS_ENSURE_SUCCESS(rv,rv);
nsXPIDLCString actionTargetAccount;
rv = aSpamSettings->GetActionTargetAccount(getter_Copies(actionTargetAccount));
NS_ENSURE_SUCCESS(rv,rv);
mActionTargetAccount = actionTargetAccount;
nsXPIDLCString actionTargetFolder;
rv = aSpamSettings->GetActionTargetFolder(getter_Copies(actionTargetFolder));
NS_ENSURE_SUCCESS(rv,rv);
@ -275,3 +315,29 @@ NS_IMETHODIMP nsSpamSettings::Clone(nsISpamSettings *aSpamSettings)
return rv;
}
NS_IMETHODIMP nsSpamSettings::GetSpamFolderURI(char **aSpamFolderURI)
{
NS_ENSURE_ARG_POINTER(aSpamFolderURI);
nsresult rv;
if (mMoveTargetMode == MOVE_TARGET_MODE_FOLDER)
return GetActionTargetFolder(aSpamFolderURI);
NS_ASSERTION(mMoveTargetMode == MOVE_TARGET_MODE_JUNK_ON_ACCOUNT, "bad mode");
// if the mode is MOVE_TARGET_MODE_JUNK_ON_ACCOUNT
// the spam folder URI = account uri + "/Junk"
nsXPIDLCString folderURI;
rv = GetActionTargetAccount(getter_Copies(folderURI));
NS_ENSURE_SUCCESS(rv,rv);
// see nsMsgFolder::SetPrettyName() for where the pretty name is set.
folderURI.Append("/Junk");
*aSpamFolderURI = ToNewCString(folderURI);
if (!*aSpamFolderURI)
return NS_ERROR_OUT_OF_MEMORY;
else
return rv;
}

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

@ -22,6 +22,8 @@ private:
PRInt32 mLevel;
PRBool mMoveOnSpam;
PRInt32 mMoveTargetMode;
nsCString mActionTargetAccount;
nsCString mActionTargetFolder;
PRBool mPurge;

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

@ -95,6 +95,7 @@ PRUnichar *nsMsgFolder::kLocalizedSentName;
PRUnichar *nsMsgFolder::kLocalizedDraftsName;
PRUnichar *nsMsgFolder::kLocalizedTemplatesName;
PRUnichar *nsMsgFolder::kLocalizedUnsentName;
PRUnichar *nsMsgFolder::kLocalizedJunkName;
nsIAtom * nsMsgFolder::kTotalMessagesAtom = nsnull;
nsIAtom * nsMsgFolder::kBiffStateAtom = nsnull;
@ -200,6 +201,7 @@ nsMsgFolder::~nsMsgFolder(void)
CRTFREEIF(kLocalizedDraftsName);
CRTFREEIF(kLocalizedTemplatesName);
CRTFREEIF(kLocalizedUnsentName);
CRTFREEIF(kLocalizedJunkName);
#ifdef MSG_FASTER_URI_PARSING
mParsingURL = nsnull;
#endif
@ -234,6 +236,8 @@ nsMsgFolder::initializeStrings()
&kLocalizedDraftsName);
bundle->GetStringFromName(NS_LITERAL_STRING("templatesFolderName").get(),
&kLocalizedTemplatesName);
bundle->GetStringFromName(NS_LITERAL_STRING("junkFolderName").get(),
&kLocalizedJunkName);
bundle->GetStringFromName(NS_LITERAL_STRING("unsentFolderName").get(),
&kLocalizedUnsentName);
return NS_OK;
@ -877,27 +881,22 @@ NS_IMETHODIMP nsMsgFolder::SetPrettyName(const PRUnichar *name)
nsAutoString unicodeName(name);
//Set pretty name only if special flag is set and if it the default folder name
if (mFlags & MSG_FOLDER_FLAG_INBOX && unicodeName.Equals(NS_LITERAL_STRING("Inbox"), nsCaseInsensitiveStringComparator()))
rv = SetName(kLocalizedInboxName);
else if (mFlags & MSG_FOLDER_FLAG_SENTMAIL && unicodeName.Equals(NS_LITERAL_STRING("Sent"), nsCaseInsensitiveStringComparator()))
rv = SetName(kLocalizedSentName);
//netscape webmail uses "Draft" instead of "Drafts"
else if (mFlags & MSG_FOLDER_FLAG_DRAFTS && (unicodeName.Equals(NS_LITERAL_STRING("Drafts"), nsCaseInsensitiveStringComparator())
|| unicodeName.Equals(NS_LITERAL_STRING("Draft"), nsCaseInsensitiveStringComparator())))
rv = SetName(kLocalizedDraftsName);
else if (mFlags & MSG_FOLDER_FLAG_TEMPLATES && unicodeName.Equals(NS_LITERAL_STRING("Templates"), nsCaseInsensitiveStringComparator()))
rv = SetName(kLocalizedTemplatesName);
else if (mFlags & MSG_FOLDER_FLAG_TRASH && unicodeName.Equals(NS_LITERAL_STRING("Trash"), nsCaseInsensitiveStringComparator()))
rv = SetName(kLocalizedTrashName);
else if (mFlags & MSG_FOLDER_FLAG_QUEUE && unicodeName.Equals(NS_LITERAL_STRING("Unsent Messages"), nsCaseInsensitiveStringComparator()))
rv = SetName(kLocalizedUnsentName);
else if (mFlags & MSG_FOLDER_FLAG_JUNK && unicodeName.Equals(NS_LITERAL_STRING("Junk"), nsCaseInsensitiveStringComparator()))
rv = SetName(kLocalizedJunkName);
else
rv = SetName(name);

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

@ -320,6 +320,7 @@ protected:
static PRUnichar *kLocalizedDraftsName;
static PRUnichar *kLocalizedTemplatesName;
static PRUnichar *kLocalizedUnsentName;
static PRUnichar *kLocalizedJunkName;
static nsIAtom* kTotalUnreadMessagesAtom;
static nsIAtom* kBiffStateAtom;

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

@ -1823,7 +1823,19 @@ nsMsgIncomingServer::SetSpamSettings(nsISpamSettings *aSpamSettings)
NS_ENSURE_SUCCESS(rv,rv);
rv = SetBoolValue("moveOnSpam", moveOnSpam);
NS_ENSURE_SUCCESS(rv,rv);
PRInt32 moveTargetMode;
rv = mSpamSettings->GetMoveTargetMode(&moveTargetMode);
NS_ENSURE_SUCCESS(rv,rv);
rv = SetIntValue("moveTargetMode", moveTargetMode);
NS_ENSURE_SUCCESS(rv,rv);
nsXPIDLCString spamActionTargetAccount;
rv = mSpamSettings->GetActionTargetAccount(getter_Copies(spamActionTargetAccount));
NS_ENSURE_SUCCESS(rv,rv);
rv = SetCharValue("spamActionTargetAccount", spamActionTargetAccount.get());
NS_ENSURE_SUCCESS(rv,rv);
nsXPIDLCString spamActionTargetFolder;
rv = mSpamSettings->GetActionTargetFolder(getter_Copies(spamActionTargetFolder));
NS_ENSURE_SUCCESS(rv,rv);
@ -1883,6 +1895,18 @@ nsMsgIncomingServer::GetSpamSettings(nsISpamSettings **aSpamSettings)
rv = mSpamSettings->SetMoveOnSpam(moveOnSpam);
NS_ENSURE_SUCCESS(rv,rv);
PRInt32 moveTargetMode;
rv = GetIntValue("moveTargetMode", &moveTargetMode);
NS_ENSURE_SUCCESS(rv,rv);
rv = mSpamSettings->SetMoveTargetMode(moveTargetMode);
NS_ENSURE_SUCCESS(rv,rv);
nsXPIDLCString spamActionTargetAccount;
rv = GetCharValue("spamActionTargetAccount", getter_Copies(spamActionTargetAccount));
NS_ENSURE_SUCCESS(rv,rv);
rv = mSpamSettings->SetActionTargetAccount(spamActionTargetAccount);
NS_ENSURE_SUCCESS(rv,rv);
nsXPIDLCString spamActionTargetFolder;
rv = GetCharValue("spamActionTargetFolder", getter_Copies(spamActionTargetFolder));
NS_ENSURE_SUCCESS(rv,rv);

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

@ -334,7 +334,9 @@ pref("mail.server.default.canFileMessages", true);
// for spam
pref("mail.server.default.spamLevel",60); // 0 - 100, 0 off, 20, lowest, 40 low, 60 medium, 80 high, 100 highest
pref("mail.server.default.moveOnSpam",false);
pref("mail.server.default.spamActionTargetFolder","mailbox://nobody@Local%20Folders/Junk%20Mail");
pref("mail.server.default.moveTargetMode",0); // 0 == "Junk" on server, 1 == specific folder
pref("mail.server.default.spamActionTargetAccount","");
pref("mail.server.default.spamActionTargetFolder","");
pref("mail.server.default.useWhiteList",true);
pref("mail.server.default.whiteListAbURI","moz-abmdbdirectory://abook.mab"); // the Personal addressbook.
pref("mail.server.default.purgeSpam",false);

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

@ -334,7 +334,9 @@ pref("mail.server.default.canFileMessages", true);
// for spam
pref("mail.server.default.spamLevel",60); // 0 - 100, 0 off, 20, lowest, 40 low, 60 medium, 80 high, 100 highest
pref("mail.server.default.moveOnSpam",false);
pref("mail.server.default.spamActionTargetFolder","mailbox://nobody@Local%20Folders/Junk%20Mail");
pref("mail.server.default.moveTargetMode",0); // 0 == "Junk" on server, 1 == specific folder
pref("mail.server.default.spamActionTargetAccount","");
pref("mail.server.default.spamActionTargetFolder","");
pref("mail.server.default.useWhiteList",true);
pref("mail.server.default.whiteListAbURI","moz-abmdbdirectory://abook.mab"); // the Personal addressbook.
pref("mail.server.default.purgeSpam",false);