* refactor SeniorSpielbergo's work

* keep only one mail trigger on msg count change
* refactor FiretrayMessaging.jsm
* cleaning
This commit is contained in:
foudfou 2012-05-25 01:18:28 +02:00
parent 5a591834cc
commit de08f67324
7 changed files with 89 additions and 123 deletions

View File

@ -31,8 +31,6 @@ var firetrayUIOptions = {
this.updateScrollOptions();
this.initAppIconType();
this.initAppIconNames();
this.initNewMailScript();
this.initNoNewMailScript();
if (firetray.Handler.inMailApp)
this.initNewMailIconNames();
},
@ -170,6 +168,7 @@ var firetrayUIOptions = {
this.initMessageCountSettings();
this.initNotificationSettings();
this.initMailTrigger();
this.toggleNotifications(firetray.Utils.prefService.getBoolPref("mail_notification_enabled"));
},
@ -208,25 +207,15 @@ var firetrayUIOptions = {
if (+radio.getItemAtIndex(i).value == value) return i;
return -1;
},
initNewMailScript : function() {
document.getElementById("ui_new_mail_script").value =
firetray.Utils.prefService.getCharPref("new_mail_script");
initMailTrigger: function() {
document.getElementById("ui_mail_change_trigger").value =
firetray.Utils.prefService.getCharPref("mail_change_trigger");
},
initNoNewMailScript : function() {
document.getElementById("ui_no_new_mail_script").value =
firetray.Utils.prefService.getCharPref("no_new_mail_script");
},
updateNewMailScript : function() {
let newMailScript = document.getElementById("ui_new_mail_script").value;
firetray.Utils.prefService.setCharPref("new_mail_script", newMailScript);
},
updateNoNewMailScript : function() {
let noNewMailScript = document.getElementById("ui_no_new_mail_script").value;
firetray.Utils.prefService.setCharPref("no_new_mail_script", noNewMailScript);
updateMailTrigger: function() {
let mailTrigger = document.getElementById("ui_mail_change_trigger").value.trim();
firetray.Utils.prefService.setCharPref("mail_change_trigger", mailTrigger);
},
updateNotificationSettings: function() {
@ -236,7 +225,7 @@ var firetrayUIOptions = {
firetray.Utils.prefService.setIntPref("mail_notification_type", mailNotificationType);
this.disableNotificationMaybe(mailNotificationType);
firetray.Messaging.updateMsgCount();
firetray.Messaging.updateIcon();
},
updateMessageCountSettings: function() {
@ -283,7 +272,7 @@ var firetrayUIOptions = {
document.getElementById("broadcaster-notification-disabled")
.removeAttribute("disabled"); // UI update (enables!)
if (!firetray.Messaging.initialized) firetray.Messaging.init();
firetray.Messaging.updateMsgCount();
firetray.Messaging.updateIcon();
let prefMailNotificationType = firetray.Utils.prefService.getIntPref("mail_notification_type");
this.disableNotificationMaybe(prefMailNotificationType);
@ -308,7 +297,7 @@ var firetrayUIOptions = {
chooseMailIconFile: function() {
var filepath = document.getElementById("custom_mail_icon_filename");
this._chooseIconFile(filepath);
firetray.Messaging.updateMsgCount();
firetray.Messaging.updateIcon();
},
_chooseIconFile: function(iconFilename) {

View File

@ -30,14 +30,13 @@
<preference id="pref_app_icon_filename" name="extensions.firetray.app_icon_filename" type="string"/>
<preference id="pref_scroll_hides" name="extensions.firetray.scroll_hides" type="bool" />
<preference id="pref_scroll_mode" name="extensions.firetray.scroll_mode" type="string" />
<preference id="pref_icon_text_color" name="extensions.firetray.icon_text_color" type="string" />
<preference id="pref_mail_notification_enabled" name="extensions.firetray.mail_notification_enabled" type="bool" />
<preference id="pref_message_count_type" name="extensions.firetray.message_count_type" type="int" />
<preference id="pref_folder_count_recursive" name="extensions.firetray.folder_count_recursive" type="bool" />
<preference id="pref_message_count_type" name="extensions.firetray.message_count_type" type="int" />
<preference id="pref_icon_text_color" name="extensions.firetray.icon_text_color" type="string" />
<preference id="pref_custom_mail_icon" name="extensions.firetray.custom_mail_icon" type="string" />
<preference id="pref_mail_change_trigger" name="extensions.firetray.mail_change_trigger" type="string"/>
<preference id="pref_mail_accounts" name="extensions.firetray.mail_accounts" type="string"/>
<preference id="pref_new_mail_script" name="extensions.firetray.new_mail_script" type="string"/>
<preference id="pref_no_new_mail_script" name="extensions.firetray.no_new_mail_script" type="string"/>
</preferences>
<tabbox>
@ -151,6 +150,12 @@
</hbox>
</radiogroup>
<checkbox id="ui_folder_count_recursive"
label="&folder_count_recursive.label;"
accesskey="&folder_count_recursive.accesskey;"
preference="pref_folder_count_recursive"
observes="broadcaster-notification-disabled"/>
<groupbox id="ui_mail_notification" flex="1">
<caption>
<label id="ui_mail_notification_type_label"
@ -170,7 +175,7 @@
observes="broadcaster-notification-disabled"/>
<colorpicker id="btn_icon_text_color" type="button"
preference="pref_icon_text_color"
onchange="firetray.Messaging.updateMsgCount();"
onchange="firetray.Messaging.updateIcon();"
observes="broadcaster-notification-disabled"/>
</hbox>
</hbox>
@ -203,7 +208,7 @@
<hbox id="custom_mail_icon" align="center" flex="1" >
<textbox id="custom_mail_icon_filename" preference="pref_custom_mail_icon"
observes="broadcaster-notification-disabled"
onchange="firetray.Messaging.updateMsgCount();" flex="1" />
onchange="firetray.Messaging.updateIcon();" flex="1" />
<button id="custom_mail_icon_select" label="&choose;"
accesskey="&choose.accesskey;"
observes="broadcaster-notification-disabled"
@ -215,38 +220,10 @@
</groupbox>
<checkbox id="ui_folder_count_recursive"
label="&folder_count_recursive.label;"
accesskey="&folder_count_recursive.accesskey;"
preference="pref_folder_count_recursive"
observes="broadcaster-notification-disabled"/>
<groupbox id="mail_scripts" flex="1">
<caption>
<label id="ui_mail_scripts_label"
value="&mail_scripts.label;"
observes="broadcaster-notification-disabled" />
</caption>
<vbox>
<label id="ui_new_mail_script_label"
value="&new_mail_script.label;"
observes="broadcaster-notification-disabled" />
<textbox id="ui_new_mail_script" size="18"
onchange="firetrayUIOptions.updateNewMailScript();" flex="1" />
</vbox>
<vbox>
<label id="ui_no_new_mail_script_label"
value="&no_new_mail_script.label;"
observes="broadcaster-notification-disabled" />
<textbox id="ui_no_new_mail_script" size="18"
onchange="firetrayUIOptions.updateNoNewMailScript();" flex="1"
label="&no_new_mail_script.label;" />
</vbox>
</groupbox>
<textbox id="ui_mail_change_trigger" size="18" placeholder="&mail_change_trigger.placeholder;"
onchange="firetrayUIOptions.updateMailTrigger();" flex="1"
tooltiptext="&mail_change_trigger.tooltip;"
observes="broadcaster-notification-disabled" />
<!-- NOTE: groupbox and caption don't have a 'disabled' attribute !! -->
<groupbox id="unread_count_folder_exceptions" flex="1">

View File

@ -23,9 +23,6 @@ var firetrayChrome = { // each new window gets a new firetrayChrome !
F.LOG("ONLOAD"); firetray.Handler.dumpWindows();
this.winId = firetray.Handler.registerWindow(win);
if (firetray.Handler.inMailApp && firetray.Messaging.initialized)
firetray.Messaging.updateMsgCount();
win.addEventListener('close', firetrayChrome.onClose, true);
win.addEventListener('resize', firetrayChrome.onResize, true);

View File

@ -41,16 +41,15 @@
<!ENTITY hide "hide" >
<!ENTITY restore "restore" >
<!ENTITY mail_scripts.label "Scripts run on new mail / no new mail event" >
<!ENTITY new_mail_script.label "Script for new mail event:" >
<!ENTITY no_new_mail_script.label "Script for no new mail event:" >
<!ENTITY mail_change_trigger.placeholder "mail change trigger">
<!ENTITY mail_change_trigger.tooltip "Absolute path of the program to run when the message count changes. The first argument is the new message count.">
<!ENTITY mail_notification_enabled.label "Enable mail notification">
<!ENTITY mail_notification_enabled.accesskey "a">
<!ENTITY mail_notification_type.label "Mail notification type">
<!ENTITY mail_notification_type.tooltip "aka. Biff">
<!ENTITY folder_count_recursive.label "Include subfolders">
<!ENTITY folder_count_recursive.accesskey "f">
<!ENTITY mail_notification_type.label "Mail notification type">
<!ENTITY mail_notification_type.tooltip "aka. Biff">
<!ENTITY mail_notification_unread_count.label "display new message count">
<!ENTITY mail_notification_unread_count.accesskey "U">
<!ENTITY mail_notification_newmail_icon.label "display newmail icon">

View File

@ -22,13 +22,12 @@ pref("extensions.firetray.scroll_hides", true);
pref("extensions.firetray.scroll_mode", "down_hides");
pref("extensions.firetray.message_count_type", 0);
pref("extensions.firetray.folder_count_recursive", true);
pref("extensions.firetray.mail_notification_enabled", true);
pref("extensions.firetray.mail_notification_type", 0);
pref("extensions.firetray.icon_text_color", "#000000");
pref("extensions.firetray.custom_mail_icon", "");
pref("extensions.firetray.new_mail_script", "");
pref("extensions.firetray.no_new_mail_script", "");
pref("extensions.firetray.mail_change_trigger", "");
pref("extensions.firetray.folder_count_recursive", true);
// Ci.nsMsgFolderFlags.Archive|Drafts|Junk|Queue|SentMail|Trash|Virtual
pref("extensions.firetray.excluded_folders_flags", 1077956384);
// exposed in 1 tree, hence 2 branches: serverTypes, excludedAccounts

View File

@ -25,7 +25,7 @@ const FLDRS_UNINTERESTING = {
firetray.Messaging = {
initialized: false,
cleaningTimer: null,
oldMsgCount: 0,
currentMsgCount: null,
init: function() {
if (this.initialized) {
@ -139,77 +139,69 @@ firetray.Messaging = {
}
}
},
runNewMailScript: function() {
// create a file for the process
var file = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
file.initWithPath(firetray.Utils.prefService.getCharPref("new_mail_script"));
// create the process
var process = Components.classes["@mozilla.org/process/util;1"]
.createInstance(Components.interfaces.nsIProcess);
process.init(file);
var args = [ ];
process.run(false, args, args.length);
},
runNoNewMailScript: function() {
// create a file for the process
var file = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
file.initWithPath(firetray.Utils.prefService.getCharPref("no_new_mail_script"));
// create the process
var process = Components.classes["@mozilla.org/process/util;1"]
.createInstance(Components.interfaces.nsIProcess);
process.init(file);
var args = [ ];
process.run(false, args, args.length);
},
/**
* computes and display new msg count
*/
updateMsgCount: function() {
F.LOG("updateMsgCount");
if (!this.initialized)
return;
// initialize
let newMsgCount, localizedTooltip;
let msgCount;
let msgCountType = firetray.Utils.prefService.getIntPref("message_count_type");
F.LOG("msgCountType="+msgCountType);
if (msgCountType === FIRETRAY_MESSAGE_COUNT_TYPE_UNREAD) {
newMsgCount = this.countMessages(this.unreadMsgCountIterate);
msgCount = this.countMessages(this.unreadMsgCountIterate);
} else if (msgCountType === FIRETRAY_MESSAGE_COUNT_TYPE_NEW) {
msgCount = this.countMessages(this.newMsgCountIterate);
} else
F.ERROR('unknown message count type');
if (msgCount !== this.currentMsgCount) {
this.updateIcon(msgCount);
let mailChangeTriggerFile = firetray.Utils.prefService.getCharPref("mail_change_trigger");
if (mailChangeTriggerFile)
this.runProcess(mailChangeTriggerFile, [msgCount.toString()]);
this.currentMsgCount = msgCount;
} else {
F.LOG("message count unchanged");
}
},
updateIcon: function(msgCount) {
if ("undefined" === typeof(msgCount)) msgCount = this.currentMsgCount;
let localizedTooltip;
let msgCountType = firetray.Utils.prefService.getIntPref("message_count_type");
if (msgCountType === FIRETRAY_MESSAGE_COUNT_TYPE_UNREAD) {
localizedTooltip = PluralForm.get(
newMsgCount,
msgCount,
firetray.Utils.strings.GetStringFromName("tooltip.unread_messages"))
.replace("#1", newMsgCount);
.replace("#1", msgCount);
F.LOG(localizedTooltip);
} else if (msgCountType === FIRETRAY_MESSAGE_COUNT_TYPE_NEW) {
newMsgCount = this.countMessages(this.newMsgCountIterate);
localizedTooltip = firetray.Utils.strings.GetStringFromName("tooltip.new_messages");
} else
F.ERROR('unknown message count type');
// update icon
if (newMsgCount == 0) {
if (msgCount == 0) {
firetray.Handler.setIconImageDefault();
firetray.Handler.setIconTooltipDefault();
if (this.oldMsgCount > 0) {
this.runNoNewMailScript();
}
} else if (newMsgCount > 0) {
this.runNewMailScript();
} else if (msgCount > 0) {
let prefMailNotification = firetray.Utils.prefService.getIntPref('mail_notification_type');
switch (prefMailNotification) {
case FIRETRAY_NOTIFICATION_UNREAD_MESSAGE_COUNT:
let prefIconTextColor = firetray.Utils.prefService.getCharPref("icon_text_color");
firetray.Handler.setIconText(newMsgCount.toString(), prefIconTextColor);
firetray.Handler.setIconText(msgCount.toString(), prefIconTextColor);
break;
case FIRETRAY_NOTIFICATION_NEWMAIL_ICON:
firetray.Handler.setIconImageNewMail();
@ -227,8 +219,6 @@ firetray.Messaging = {
} else {
throw "negative message count"; // should never happen
}
this.oldMsgCount = newMsgCount;
},
/**
@ -242,7 +232,7 @@ firetray.Messaging = {
let excludedFoldersFlags = firetray.Utils.prefService
.getIntPref("excluded_folders_flags");
let newMsgCount = 0;
let msgCount = 0;
try {
let accounts = new this.Accounts();
for (let accountServer in accounts) {
@ -257,7 +247,7 @@ firetray.Messaging = {
while(subFolders.hasMoreElements()) {
let folder = subFolders.getNext().QueryInterface(Ci.nsIMsgFolder);
if (!(folder.flags & excludedFoldersFlags)) {
newMsgCount = folderCountFunction(folder, newMsgCount);
msgCount = folderCountFunction(folder, msgCount);
}
}
}
@ -265,8 +255,8 @@ firetray.Messaging = {
} catch (x) {
F.ERROR(x);
}
F.LOG("Total New="+newMsgCount);
return newMsgCount;
F.LOG("Total New="+msgCount);
return msgCount;
},
unreadMsgCountIterate: function(folder, accumulator) {
@ -294,6 +284,21 @@ firetray.Messaging = {
let folderNewMsgCount = folder.hasNewMessages;
F.LOG(folder.prettyName+" hasNewMessages="+folderNewMsgCount);
return accumulator || folderNewMsgCount;
},
runProcess: function(filepath, args) {
F.LOG("runProcess="+filepath+" args="+args);
try {
// create a file for the process
var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile); // TODO: nsILocalFile merged into the nsIFile in Gecko 14
file.initWithPath(filepath);
// create the process
var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
process.init(file);
process.run(false, args, args.length);
} catch(x) {F.ERROR(x);}
}
};

View File

@ -28,7 +28,7 @@ const FIRETRAY_APPLICATION_ICON_TYPE_CUSTOM = 1;
const FIRETRAY_NOTIFICATION_UNREAD_MESSAGE_COUNT = 0;
const FIRETRAY_NOTIFICATION_NEWMAIL_ICON = 1;
const FIRETRAY_NOTIFICATION_CUSTOM_ICON = 3;
const FIRETRAY_NOTIFICATION_CUSTOM_ICON = 2;
const FIRETRAY_DELAY_BROWSER_STARTUP_MILLISECONDS = 500;
const FIRETRAY_DELAY_NOWAIT_MILLISECONDS = 0;