1
0
mirror of https://github.com/moparisthebest/FireTray synced 2024-12-22 22:08:49 -05:00

* make FLDR_UNINTERESTING customizable

* fix actual skipping of uninteresting folders
This commit is contained in:
foudfou 2011-11-22 01:37:52 +01:00
parent 04af43779e
commit 9ffd3543f6
6 changed files with 101 additions and 28 deletions

View File

@ -21,8 +21,11 @@ const TREELEVEL_SERVER_TYPES = 0;
const TREELEVEL_EXCLUDED_ACCOUNTS = 1; const TREELEVEL_EXCLUDED_ACCOUNTS = 1;
firetray.UIOptions = { firetray.UIOptions = {
strings: null,
onLoad: function() { onLoad: function() {
this.strings = document.getElementById("firetray-options-strings");
if(firetray.Handler.inMailApp) { if(firetray.Handler.inMailApp) {
Cu.import("resource://firetray/FiretrayMessaging.jsm"); Cu.import("resource://firetray/FiretrayMessaging.jsm");
this.initMailControls(); this.initMailControls();
@ -67,6 +70,7 @@ firetray.UIOptions = {
initMailControls: function() { initMailControls: function() {
this.initNotificationSettings(); this.initNotificationSettings();
this.populateExcludedFoldersList();
this.populateTreeAccountsOrServerTypes(); this.populateTreeAccountsOrServerTypes();
}, },
@ -123,6 +127,46 @@ firetray.UIOptions = {
} }
}, },
populateExcludedFoldersList: function() {
let excludedFoldersList = document.getElementById('excluded_folders');
let prefExcludedFolders = firetray.Utils.getArrayPref("excluded_folders");
LOG("pref excluded folder: "+prefExcludedFolders);
for(let folderType in FLDRS_UNINTERESTING) {
let localizedFolderType = this.strings.getString(folderType);
let item = excludedFoldersList.appendItem(localizedFolderType, folderType);
LOG("folder: "+folderType+", "+prefExcludedFolders.indexOf(folderType));
if (prefExcludedFolders.indexOf(folderType) > -1)
excludedFoldersList.addItemToSelection(item);
}
},
/**
* store to prefs excluded folder type names, and the computed flags (as soon as the
* change is applied)
*/
updateExcludedFoldersPref: function() {
let excludedFoldersList = document.getElementById('excluded_folders');
LOG("LAST SELECTED: "+excludedFoldersList.currentItem.label);
let excludedFolders = [];
let excludedFoldersFlags = null;
for(let i = 0; i < excludedFoldersList.selectedCount; i++) {
let folderType = excludedFoldersList.getSelectedItem(i).value;
excludedFolders.push(folderType);
excludedFoldersFlags |= FLDRS_UNINTERESTING[folderType];
}
LOG("excluded folders: "+excludedFolders);
LOG("excluded folders flags: "+excludedFoldersFlags);
firetray.Utils.setArrayPref("excluded_folders", excludedFolders);
firetray.Utils.prefService.setIntPref("excluded_folders_flags",
excludedFoldersFlags);
firetray.Messaging.updateUnreadMsgCount();
},
/** /**
* should be called only for excludedAccounts * should be called only for excludedAccounts
*/ */
@ -191,13 +235,12 @@ firetray.UIOptions = {
* NOTE: account exceptions for unread messages count are *stored* in * NOTE: account exceptions for unread messages count are *stored* in
* preferences as excluded, but *shown* as "not included" * preferences as excluded, but *shown* as "not included"
*/ */
// FIXME: this function is too long !
populateTreeAccountsOrServerTypes: function() { populateTreeAccountsOrServerTypes: function() {
let that = this; let that = this;
let prefPane = document.getElementById("pane1"); let prefPane = document.getElementById("pane1");
let prefStr = firetray.Utils.prefService.getCharPref("mail_accounts"); let mailAccounts = firetray.Utils.getObjPref("mail_accounts");
LOG("PREF="+prefStr);
let mailAccounts = JSON.parse(prefStr);
let serverTypes = mailAccounts["serverTypes"]; let serverTypes = mailAccounts["serverTypes"];
let accountsExcluded = mailAccounts["excludedAccounts"]; let accountsExcluded = mailAccounts["excludedAccounts"];
let accountsByServerType = firetray.Messaging.accountsByServerType(); let accountsByServerType = firetray.Messaging.accountsByServerType();

View File

@ -8,6 +8,10 @@
<script type="application/x-javascript" src="options.js" /> <script type="application/x-javascript" src="options.js" />
<stringbundleset id="stringbundleset">
<stringbundle id="firetray-options-strings" src="chrome://firetray/locale/options.properties"/>
</stringbundleset>
<prefpane id="pane1" label="&pane1.title;"> <prefpane id="pane1" label="&pane1.title;">
<preferences> <preferences>
@ -50,13 +54,13 @@
<!-- <label value="&mail_notification;" class="header" /> --> <!-- <label value="&mail_notification;" class="header" /> -->
<groupbox flex="1"> <groupbox flex="1">
<caption label="&mail_notification;" /> <caption label="&mail_notification.label;" />
<radiogroup id="radiogroup_mail_notification"> <radiogroup id="radiogroup_mail_notification">
<radio id="radio_mail_icon1" label="&mail_notification_disabled;" <radio id="radio_mail_icon1" label="&mail_notification_disabled.label;"
accesskey="&mail_notification_disabled.accesskey;" accesskey="&mail_notification_disabled.accesskey;"
oncommand="firetray.UIOptions.updateNotificationSettings()" /> oncommand="firetray.UIOptions.updateNotificationSettings()" />
<hbox> <hbox>
<radio id="radio_mail_icon2" label="&mail_notification_unread_count;" <radio id="radio_mail_icon2" label="&mail_notification_unread_count.label;"
accesskey="&mail_notification_unread_count.accesskey;" accesskey="&mail_notification_unread_count.accesskey;"
oncommand="firetray.UIOptions.updateNotificationSettings()" /> oncommand="firetray.UIOptions.updateNotificationSettings()" />
<hbox id="icon_text_color" align="center"> <hbox id="icon_text_color" align="center">
@ -66,11 +70,11 @@
onchange="firetray.Messaging.updateUnreadMsgCount();"/> onchange="firetray.Messaging.updateUnreadMsgCount();"/>
</hbox> </hbox>
</hbox> </hbox>
<radio id="radio_mail_icon3" label="&mail_notification_newmail_icon;" <radio id="radio_mail_icon3" label="&mail_notification_newmail_icon.label;"
accesskey="&mail_notification_newmail_icon.accesskey;" accesskey="&mail_notification_newmail_icon.accesskey;"
oncommand="firetray.UIOptions.updateNotificationSettings()" /> oncommand="firetray.UIOptions.updateNotificationSettings()" />
<hbox> <hbox>
<radio id="radio_mail_icon4" label="&mail_notification_custom_mail_icon;" <radio id="radio_mail_icon4" label="&mail_notification_custom_mail_icon.label;"
accesskey="&mail_notification_custom_mail_icon.accesskey;" accesskey="&mail_notification_custom_mail_icon.accesskey;"
oncommand="firetray.UIOptions.updateNotificationSettings()" /> oncommand="firetray.UIOptions.updateNotificationSettings()" />
<hbox id="custom_mail_icon" align="center" flex="1" > <hbox id="custom_mail_icon" align="center" flex="1" >
@ -85,7 +89,16 @@
</groupbox> </groupbox>
<groupbox flex="1"> <groupbox flex="1">
<caption label="&unread_count_account_exceptions;" <caption label="&unread_count_folder_exceptions.label;"
tooltiptext="&unread_count_folder_exceptions.tooltip;" />
<listbox id="excluded_folders" rows="7" flex="1" seltype="multiple"
tooltiptext="&excluded_folders.tooltip;"
onselect="firetray.UIOptions.updateExcludedFoldersPref()"/>
</groupbox>
<groupbox flex="1">
<caption label="&unread_count_account_exceptions.label;"
tooltiptext="&unread_count_account_exceptions.tooltip;" /> tooltiptext="&unread_count_account_exceptions.tooltip;" />
<tree id="ui_tree_mail_accounts" flex="1" rows="10" minwidth="400" <tree id="ui_tree_mail_accounts" flex="1" rows="10" minwidth="400"

View File

@ -15,21 +15,24 @@
<!ENTITY bool_hides_on_minimize.label "Minimize window hides to tray"> <!ENTITY bool_hides_on_minimize.label "Minimize window hides to tray">
<!ENTITY bool_hides_on_minimize.accesskey "M"> <!ENTITY bool_hides_on_minimize.accesskey "M">
<!ENTITY mail_notification "Mail notification"> <!ENTITY mail_notification.label "Mail notification">
<!ENTITY mail_notification_disabled "disabled"> <!ENTITY mail_notification_disabled.label "disabled">
<!ENTITY mail_notification_disabled.accesskey "D"> <!ENTITY mail_notification_disabled.accesskey "D">
<!ENTITY mail_notification_unread_count "display unread messages count"> <!ENTITY mail_notification_unread_count.label "display unread messages count">
<!ENTITY mail_notification_unread_count.accesskey "U"> <!ENTITY mail_notification_unread_count.accesskey "U">
<!ENTITY mail_notification_newmail_icon "display newmail icon"> <!ENTITY mail_notification_newmail_icon.label "display newmail icon">
<!ENTITY mail_notification_newmail_icon.accesskey "N"> <!ENTITY mail_notification_newmail_icon.accesskey "N">
<!ENTITY mail_notification_custom_mail_icon "display custom icon"> <!ENTITY mail_notification_custom_mail_icon.label "display custom icon">
<!ENTITY mail_notification_custom_mail_icon.accesskey "I"> <!ENTITY mail_notification_custom_mail_icon.accesskey "I">
<!ENTITY icon_text_color "Text color"> <!ENTITY icon_text_color "Text color">
<!ENTITY icon_text_color.accesskey "T"> <!ENTITY icon_text_color.accesskey "T">
<!ENTITY choose "Choose"> <!ENTITY choose "Choose">
<!ENTITY choose.accesskey "O"> <!ENTITY choose.accesskey "O">
<!ENTITY unread_count_account_exceptions "Included accounts"> <!ENTITY unread_count_folder_exceptions.label "Excluded special folders">
<!ENTITY unread_count_folder_exceptions.tooltip "Excluded special folders for unread message count">
<!ENTITY excluded_folders.tooltip "Use CTRL + left click to select/deslect folders for unread message count">
<!ENTITY unread_count_account_exceptions.label "Included accounts">
<!ENTITY unread_count_account_exceptions.tooltip "Included accounts for unread message count"> <!ENTITY unread_count_account_exceptions.tooltip "Included accounts for unread message count">
<!ENTITY account_or_server_type_name "Account"> <!ENTITY account_or_server_type_name "Account">

View File

@ -0,0 +1,7 @@
Archive=Archive
Drafts=Drafts
Junk=Junk
Queue=Queue
SentMail=SentMail
Templates=Templates
Trash=Trash

View File

@ -12,5 +12,6 @@ pref("extensions.firetray.hides_on_minimize", true);
pref("extensions.firetray.mail_notification", 1); pref("extensions.firetray.mail_notification", 1);
pref("extensions.firetray.icon_text_color", "#000000"); pref("extensions.firetray.icon_text_color", "#000000");
pref("extensions.firetray.custom_mail_icon", ""); pref("extensions.firetray.custom_mail_icon", "");
pref("extensions.firetray.excluded_folders", '["Archive", "Drafts", "Junk", "Queue", "SentMail", "Templates", "Trash"]');
// exposed in 1 tree, hence 2 branches: serverTypes, excludedAccounts // exposed in 1 tree, hence 2 branches: serverTypes, excludedAccounts
pref("extensions.firetray.mail_accounts", '{ "serverTypes": {"pop3":{"order":1,"excluded":false}, "imap":{"order":1,"excluded":false}, "movemail":{"order":2,"excluded":true}, "none":{"order":3,"excluded":false}, "rss":{"order":4,"excluded":true}, "nntp":{"order":5,"excluded":true}}, "excludedAccounts": [] }'); // JSON pref("extensions.firetray.mail_accounts", '{ "serverTypes": {"pop3":{"order":1,"excluded":false}, "imap":{"order":1,"excluded":false}, "movemail":{"order":2,"excluded":true}, "none":{"order":3,"excluded":false}, "rss":{"order":4,"excluded":true}, "nntp":{"order":5,"excluded":true}}, "excludedAccounts": [] }'); // JSON

View File

@ -1,6 +1,6 @@
/* -*- Mode: js2; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* -*- Mode: js2; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
var EXPORTED_SYMBOLS = [ "firetray" ]; var EXPORTED_SYMBOLS = [ "firetray", "FLDRS_UNINTERESTING" ];
const Cc = Components.classes; const Cc = Components.classes;
const Ci = Components.interfaces; const Ci = Components.interfaces;
@ -11,14 +11,15 @@ Cu.import("resource://gre/modules/PluralForm.jsm");
// Cu.import("resource://firetray/FiretrayHandler.jsm"); // Cu.import("resource://firetray/FiretrayHandler.jsm");
Cu.import("resource://firetray/commons.js"); Cu.import("resource://firetray/commons.js");
const FLDR_UNINTERESTING = const FLDRS_UNINTERESTING = {
Ci.nsMsgFolderFlags.Archive | Archive: Ci.nsMsgFolderFlags.Archive,
Ci.nsMsgFolderFlags.Drafts | Drafts: Ci.nsMsgFolderFlags.Drafts,
Ci.nsMsgFolderFlags.Junk | Junk: Ci.nsMsgFolderFlags.Junk,
Ci.nsMsgFolderFlags.Queue | Queue: Ci.nsMsgFolderFlags.Queue,
Ci.nsMsgFolderFlags.SentMail | SentMail: Ci.nsMsgFolderFlags.SentMail,
Ci.nsMsgFolderFlags.Templates | Templates: Ci.nsMsgFolderFlags.Templates,
Ci.nsMsgFolderFlags.Trash; Trash: Ci.nsMsgFolderFlags.Trash
};
/** /**
* firetray namespace. * firetray namespace.
@ -65,8 +66,10 @@ firetray.Messaging = {
* @param newFlag: New header flag (long). * @param newFlag: New header flag (long).
*/ */
OnItemIntPropertyChanged: function(folder, property, oldValue, newValue) { OnItemIntPropertyChanged: function(folder, property, oldValue, newValue) {
let excludedFoldersFlags = firetray.Utils.prefService
.getIntPref("excluded_folders_flags");
if (property.toString() === "TotalUnreadMessages" && if (property.toString() === "TotalUnreadMessages" &&
!(folder.flags & FLDR_UNINTERESTING)) { !(folder.flags & excludedFoldersFlags)) {
LOG("Unread msgs for folder "+folder.prettyName+" was "+oldValue+" became "+newValue); LOG("Unread msgs for folder "+folder.prettyName+" was "+oldValue+" became "+newValue);
firetray.Messaging.updateUnreadMsgCount(); firetray.Messaging.updateUnreadMsgCount();
} }
@ -82,6 +85,8 @@ firetray.Messaging = {
let mailAccounts = firetray.Utils.getObjPref('mail_accounts'); let mailAccounts = firetray.Utils.getObjPref('mail_accounts');
let serverTypes = mailAccounts["serverTypes"]; let serverTypes = mailAccounts["serverTypes"];
let excludedAccounts = mailAccounts["excludedAccounts"]; let excludedAccounts = mailAccounts["excludedAccounts"];
let excludedFoldersFlags = firetray.Utils.prefService
.getIntPref("excluded_folders_flags");
this._unreadMsgCount = 0; // reset this._unreadMsgCount = 0; // reset
try { try {
@ -96,9 +101,10 @@ firetray.Messaging = {
let subFolders = rootFolder.subFolders; // nsIMsgFolder let subFolders = rootFolder.subFolders; // nsIMsgFolder
while(subFolders.hasMoreElements()) { while(subFolders.hasMoreElements()) {
let folder = subFolders.getNext().QueryInterface(Ci.nsIMsgFolder); let folder = subFolders.getNext().QueryInterface(Ci.nsIMsgFolder);
if (!(folder.flags & FLDR_UNINTERESTING)) if (!(folder.flags & excludedFoldersFlags)) {
LOG(folder.prettyName+" unread="+folder.getNumUnread(true)); // include subfolders LOG(folder.prettyName+" unread="+folder.getNumUnread(true));
this._unreadMsgCount += folder.getNumUnread(true); // reset this._unreadMsgCount += folder.getNumUnread(true); // includes subfolders
}
} }
} }
} }