Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: lib/notification.js

Issue 11163031: Notifications: implemented better target checks (Closed)
Patch Set: Created July 19, 2013, 2:42 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « .hgsubstate ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * This file is part of Adblock Plus <http://adblockplus.org/>, 2 * This file is part of Adblock Plus <http://adblockplus.org/>,
3 * Copyright (C) 2006-2013 Eyeo GmbH 3 * Copyright (C) 2006-2013 Eyeo GmbH
4 * 4 *
5 * Adblock Plus is free software: you can redistribute it and/or modify 5 * Adblock Plus is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 3 as 6 * it under the terms of the GNU General Public License version 3 as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
8 * 8 *
9 * Adblock Plus is distributed in the hope that it will be useful, 9 * Adblock Plus is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 saveNotificationData(); 126 saveNotificationData();
127 }, 127 },
128 128
129 /** 129 /**
130 * Determines which notification is to be shown next. 130 * Determines which notification is to be shown next.
131 * @param {Array of Object} notifications active notifications 131 * @param {Array of Object} notifications active notifications
132 * @return {Object} notification to be shown, or null if there is none 132 * @return {Object} notification to be shown, or null if there is none
133 */ 133 */
134 getNextToShow: function() 134 getNextToShow: function()
135 { 135 {
136 function checkTarget(target, parameter, name, version)
137 {
138 let minVersionKey = parameter + "MinVersion";
139 let maxVersionKey = parameter + "MaxVersion";
140 return !((parameter in target && target[parameter] != name) ||
141 (minVersionKey in target && Services.vc.compare(version, target[m inVersionKey]) < 0) ||
142 (maxVersionKey in target && Services.vc.compare(version, target[m axVersionKey]) > 0));
143
144 }
145
136 if (typeof Prefs.notificationdata.data != "object" || !(Prefs.notificationda ta.data.notifications instanceof Array)) 146 if (typeof Prefs.notificationdata.data != "object" || !(Prefs.notificationda ta.data.notifications instanceof Array))
137 return null; 147 return null;
138 148
139 if (!(Prefs.notificationdata.shown instanceof Array)) 149 if (!(Prefs.notificationdata.shown instanceof Array))
140 { 150 {
141 Prefs.notificationdata.shown = []; 151 Prefs.notificationdata.shown = [];
142 saveNotificationData(); 152 saveNotificationData();
143 } 153 }
144 154
145 let {application, addonVersion} = require("info"); 155 let {addonName, addonVersion, application, applicationVersion, platform, pla tformVersion} = require("info");
146 let notifications = Prefs.notificationdata.data.notifications; 156 let notifications = Prefs.notificationdata.data.notifications;
147 let notificationToShow = null; 157 let notificationToShow = null;
148 for each (let notification in notifications) 158 for each (let notification in notifications)
149 { 159 {
150 if ((typeof notification.severity == "undefined" || notification.severity === "information") 160 if ((typeof notification.severity == "undefined" || notification.severity === "information")
151 && Prefs.notificationdata.shown.indexOf(notification.id) !== -1) 161 && Prefs.notificationdata.shown.indexOf(notification.id) !== -1)
152 continue; 162 continue;
153 163
154 if (notification.platforms instanceof Array 164 if (notification.targets instanceof Array)
155 && notification.platforms.indexOf(application) === -1) 165 {
156 continue; 166 let match = false;
157 167 for each (let target in notification.targets)
158 if ("minVersion" in notification 168 {
159 && Services.vc.compare(addonVersion, notification.minVersion) < 0) 169 if (checkTarget(target, "extension", addonName, addonVersion) &&
160 continue; 170 checkTarget(target, "application", application, applicationVersion ) &&
161 171 checkTarget(target, "platform", platform, platformVersion))
162 if ("maxVersion" in notification 172 {
163 && Services.vc.compare(addonVersion, notification.maxVersion) > 0) 173 match = true;
164 continue; 174 break;
175 }
176 }
177 if (!match)
178 continue;
179 }
165 180
166 if (!notificationToShow 181 if (!notificationToShow
167 || getNumericalSeverity(notification) > getNumericalSeverity(notificat ionToShow)) 182 || getNumericalSeverity(notification) > getNumericalSeverity(notificat ionToShow))
168 notificationToShow = notification; 183 notificationToShow = notification;
169 } 184 }
170 185
171 if (notificationToShow && "id" in notificationToShow) 186 if (notificationToShow && "id" in notificationToShow)
172 { 187 {
173 Prefs.notificationdata.shown.push(notificationToShow.id); 188 Prefs.notificationdata.shown.push(notificationToShow.id);
174 saveNotificationData(); 189 saveNotificationData();
175 } 190 }
176 191
177 return notificationToShow; 192 return notificationToShow;
178 } 193 }
179 }; 194 };
180 Notification.init(); 195 Notification.init();
OLDNEW
« no previous file with comments | « .hgsubstate ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld