From 279273f4a8022a0ae3b3dfdcfb15bd21041228ca Mon Sep 17 00:00:00 2001 From: Kerrick Long Date: Thu, 21 Jul 2011 21:13:22 -0500 Subject: [PATCH] Desktop notifications now stay on the screen until the user clicks or closes them, or until Mostly Harmless checks again and the user has no mail. If the notification is still showing when it checks and you do have mail, the notification will not disappear and reappear, and it will not make anothre sound. Fixes #6. --- _locales/en_US/messages.json | 2 +- _locales/fr/messages.json | 2 +- _locales/hi/messages.json | 2 +- fancy-settings/manifest.js | 15 --------------- js/common.js | 37 +++++++++++++++++++++--------------- 5 files changed, 25 insertions(+), 33 deletions(-) diff --git a/_locales/en_US/messages.json b/_locales/en_US/messages.json index b023d65..2538bf7 100644 --- a/_locales/en_US/messages.json +++ b/_locales/en_US/messages.json @@ -524,7 +524,7 @@ } }, "orangered_description": { - "message": "When checked, $MOSTLY_HARMLESS$ will check for new $ORANGERED$s at the interval you set. If you get an $ORANGERED$, it will display a desktop notification for the length of time you choose.", + "message": "When checked, $MOSTLY_HARMLESS$ will check for new $ORANGERED$s at the interval you set. If you get an $ORANGERED$, it will display a desktop notification until you click or close it, or until $MOSTLY_HARMLESS$ checks again and you no longer have an $ORANGERED$.", "placeholders": { "MOSTLY_HARMLESS": { "content": "Mostly Harmless" diff --git a/_locales/fr/messages.json b/_locales/fr/messages.json index b023d65..2538bf7 100644 --- a/_locales/fr/messages.json +++ b/_locales/fr/messages.json @@ -524,7 +524,7 @@ } }, "orangered_description": { - "message": "When checked, $MOSTLY_HARMLESS$ will check for new $ORANGERED$s at the interval you set. If you get an $ORANGERED$, it will display a desktop notification for the length of time you choose.", + "message": "When checked, $MOSTLY_HARMLESS$ will check for new $ORANGERED$s at the interval you set. If you get an $ORANGERED$, it will display a desktop notification until you click or close it, or until $MOSTLY_HARMLESS$ checks again and you no longer have an $ORANGERED$.", "placeholders": { "MOSTLY_HARMLESS": { "content": "Mostly Harmless" diff --git a/_locales/hi/messages.json b/_locales/hi/messages.json index b023d65..2538bf7 100644 --- a/_locales/hi/messages.json +++ b/_locales/hi/messages.json @@ -524,7 +524,7 @@ } }, "orangered_description": { - "message": "When checked, $MOSTLY_HARMLESS$ will check for new $ORANGERED$s at the interval you set. If you get an $ORANGERED$, it will display a desktop notification for the length of time you choose.", + "message": "When checked, $MOSTLY_HARMLESS$ will check for new $ORANGERED$s at the interval you set. If you get an $ORANGERED$, it will display a desktop notification until you click or close it, or until $MOSTLY_HARMLESS$ checks again and you no longer have an $ORANGERED$.", "placeholders": { "MOSTLY_HARMLESS": { "content": "Mostly Harmless" diff --git a/fancy-settings/manifest.js b/fancy-settings/manifest.js index cb0db8f..26f1abb 100755 --- a/fancy-settings/manifest.js +++ b/fancy-settings/manifest.js @@ -102,21 +102,6 @@ this.manifest = { return chrome.i18n.getMessage('orangered_interval_minutes', value.toString()); } - }, - { - "tab": chrome.i18n.getMessage('tab_preferences'), - "group": chrome.i18n.getMessage('group_orangered_notifications'), - "name": "mailDisplayTime", - "type": "slider", - "label": "", - "max": 60, - "min": 10, - "step": 1, - "display": true, - "displayModifier": function (value) { - return chrome.i18n.getMessage('orangered_display_time', value.toString()); - } - }, { "tab": chrome.i18n.getMessage('tab_preferences'), diff --git a/js/common.js b/js/common.js index 23d544f..a39e7ed 100644 --- a/js/common.js +++ b/js/common.js @@ -9,7 +9,6 @@ settings = new Store('settings', { 'waitForClick': false, 'checkMail': true, 'mailInterval': 5, - 'mailDisplayTime': 30, 'mailSound': false, 'excludedDomains': 'secure.ingdirect.com\nchaseonline.chase.com\nonline.wellsfargo.com\nmail.google.com\ndocs.google.com', 'excludedRegex': 'chrome://.*\nchrome-extension://.*\nview-source://.*\nftp://.*\nhttps?://www\\.google\\.com/search.*\nhttps?://search\\.yahoo\\.com/search.*\nhttps?://www\\.bing\\.com/search.*\nhttps?://www\\.reddit\\.com/(?:r/(?:\\w|\\+)+/?)?(?:$|\\?count)' @@ -349,11 +348,15 @@ RedditAPI.prototype.apiTransmit = function (type, url, data, cback) { cback(JSON.parse(req.responseText)); } - notificationArea.innerHTML = ''; - notificationArea.style.display = 'none'; + if (notificationArea) { + notificationArea.innerHTML = ''; + notificationArea.style.display = 'none'; + } return JSON.parse(req.responseText); } else { - notificationArea.innerHTML = '' + chrome.i18n.getMessage('api_error', req.status.toString()) + '' + if (notificationArea) { + notificationArea.innerHTML = '' + chrome.i18n.getMessage('api_error', req.status.toString()) + '' + } throw chrome.i18n.getMessage('api_error', req.status.toString()); } } @@ -843,6 +846,8 @@ reddit = new RedditAPI('www.reddit.com'); * @constructor */ function Background() { + this.notificationIsShown = false; + this.notification = null; return true; } @@ -910,29 +915,31 @@ Background.prototype.watchMail = function () { var mailProcess, pop; function showNotification (hasMail) { - var notification, notificationTimeout, mailInterval; + var mailInterval; mailInterval = settings.get('mailInterval') * 1000 * 60; - - if (hasMail === true) { + + if (hasMail === true && background.notificationIsShown === false) { if (settings.get('mailSound') === true) { pop.play(); } - notification = webkitNotifications.createNotification( + background.notification = webkitNotifications.createNotification( '/pix/mail.png', // icon url - can be relative chrome.i18n.getMessage('orangered_received'), // notification title chrome.i18n.getMessage('orangered_action') // notification body text ); - notificationTimeout = window.setTimeout(function () { - notification.cancel(); - }, settings.get('mailDisplayTime') * 1000); - notification.onclick = function () { + background.notification.onclick = function () { chrome.tabs.create({'url': 'http://' + reddit.domain + '/message/unread/', 'selected': true}); - notification.cancel(); - window.clearTimeout(notificationTimeout); + background.notification.cancel(); }; - notification.show(); + background.notification.onclose = function () { + background.notificationIsShown = false; + }; + background.notificationIsShown = true; + background.notification.show(); + } else if (hasMail === false && background.notificationIsShown === true) { + background.notification.cancel(); } window.setTimeout(checkPrefs, mailInterval);