 Issue 11165026:
  Show notifications on startup  (Closed)
    
  
    Issue 11165026:
  Show notifications on startup  (Closed) 
  | Index: lib/ui.js | 
| =================================================================== | 
| --- a/lib/ui.js | 
| +++ b/lib/ui.js | 
| @@ -29,6 +29,7 @@ | 
| let {Subscription, SpecialSubscription, DownloadableSubscription} = require("subscriptionClasses"); | 
| let {Synchronizer} = require("synchronizer"); | 
| let {KeySelector} = require("keySelector"); | 
| +let {Notification} = require("notification"); | 
| /** | 
| * Filter corresponding with "disable on site" menu item (set in fillIconMent()). | 
| @@ -420,6 +421,14 @@ | 
| if (/^(filter|subscription)\.(added|removed|disabled|updated)$/.test(action) || action == "load") | 
| this.updateState(); | 
| }.bind(this)); | 
| + | 
| + let timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer); | 
| 
Wladimir Palant
2013/07/19 15:17:52
Sure, we do:
  onShutdown.add(function() timer.ca
 
Felix Dahlke
2013/07/19 17:07:01
Done.
 | 
| + timer.initWithCallback(function() | 
| + { | 
| + let notificationToShow = Notification.getNextToShow(); | 
| + if (notificationToShow) | 
| + this._showNotification(notificationToShow); | 
| + }.bind(this), 3 * 60 * 1000, Ci.nsITimer.TYPE_ONE_SHOT); | 
| }, | 
| /** | 
| @@ -1914,6 +1923,44 @@ | 
| if (button) | 
| button.hidden = true; | 
| } | 
| + }, | 
| + | 
| + _showNotification: function(notification) | 
| + { | 
| + let window = null; | 
| + for (window in this.applicationWindows) | 
| + break; | 
| + | 
| + if (!window) | 
| + return; | 
| 
Wladimir Palant
2013/07/19 15:17:52
We already marked the notification as shown at thi
 
Felix Dahlke
2013/07/19 17:07:01
Done.
 | 
| + | 
| + let button = window.document.getElementById("abp-toolbarbutton") | 
| + || window.document.getElementById("abp-status"); | 
| + if (!button) | 
| + return; | 
| + | 
| + let texts = Notification.getLocalizedTexts(notification); | 
| + let titleElement = window.document.getElementById("abp-notification-title"); | 
| + titleElement.setAttribute("value", texts.title); | 
| + let messageElement = window.document.getElementById("abp-notification-message"); | 
| + let message = texts.message.replace(/<(\/?)a(.*?)>/g, "<$1html:a$2>"); | 
| + messageElement.innerHTML = message; | 
| + | 
| + let links = window.document.querySelectorAll("#abp-notification-message a"); | 
| + for each (let link in links) | 
| + { | 
| + let url = link.href; | 
| + let ui = this; | 
| + link.onclick = function(event) | 
| + { | 
| + event.preventDefault(); | 
| + event.stopPropagation(); | 
| + ui.loadInBrowser(url, window); | 
| + }; | 
| + } | 
| + | 
| + let panel = window.document.getElementById("abp-notification"); | 
| + panel.openPopup(button, "bottomcenter topcenter", 0, 0, false, false, null); | 
| } | 
| }; | 
| UI.onPopupShowing = UI.onPopupShowing.bind(UI); |