diff options
-rw-r--r-- | src/js/App/Background.js | 2 | ||||
-rw-r--r-- | src/js/Manager/BadgeManager.js | 42 | ||||
-rw-r--r-- | src/js/Manager/RecommendationManager.js | 37 | ||||
-rw-r--r-- | src/js/Manager/TabManager.js | 4 |
4 files changed, 59 insertions, 26 deletions
diff --git a/src/js/App/Background.js b/src/js/App/Background.js index 0f1c741..46829df 100644 --- a/src/js/App/Background.js +++ b/src/js/App/Background.js @@ -8,6 +8,7 @@ import ControllerManager from '@js/Manager/ControllerManager'; import RecommendationManager from '@js/Manager/RecommendationManager'; import MessageService from '@js/Services/MessageService'; import TabManager from '@js/Manager/TabManager'; +import BadgeManager from '@js/Manager/BadgeManager'; class Background { async init() { @@ -22,6 +23,7 @@ class Background { SearchManager.init(); TabManager.init(); RecommendationManager.init(); + BadgeManager.init(); await ServerManager.init(); } catch(e) { ErrorManager.logError(e); diff --git a/src/js/Manager/BadgeManager.js b/src/js/Manager/BadgeManager.js new file mode 100644 index 0000000..7101568 --- /dev/null +++ b/src/js/Manager/BadgeManager.js @@ -0,0 +1,42 @@ +import SystemService from '@js/Services/SystemService'; +import RecommendationManager from '@js/Manager/RecommendationManager'; +import TabManager from '@js/Manager/TabManager'; + +class BadgeManager { + + constructor() { + this._api = null; + } + + init() { + this._api = SystemService.getBrowserApi(); + RecommendationManager.listen.on( + (r) => { + this._updateBadge(r); + } + ); + } + + /** + * + * @param {Array} recommended + * @private + */ + _updateBadge(recommended) { + let tabId = TabManager.currentTabId; + + if(recommended.length !== 0) { + this._api.browserAction.setBadgeText({text: recommended.length.toString(), tabId}); + } else { + this._api.browserAction.setBadgeText({text: '', tabId}); + } + + if(SystemService.getBrowserPlatform() === 'firefox') { + this._api.browserAction.setBadgeTextColor({color: '#fff'}); + } + + this._api.browserAction.setBadgeBackgroundColor({color: '#0082c9'}); + } +} + +export default new BadgeManager();
\ No newline at end of file diff --git a/src/js/Manager/RecommendationManager.js b/src/js/Manager/RecommendationManager.js index cbf5cd8..9ed05bb 100644 --- a/src/js/Manager/RecommendationManager.js +++ b/src/js/Manager/RecommendationManager.js @@ -3,16 +3,23 @@ import SearchQuery from '@js/Search/Query/SearchQuery'; import Url from 'url-parse'; import TabManager from '@js/Manager/TabManager'; import SearchIndex from '@js/Search/Index/SearchIndex'; +import EventQueue from '@js/Event/EventQueue'; class RecommendationManager { + get listen() { + return this._change; + } + constructor() { this._api = null; - this._recommendations = []; + this._change = new EventQueue(); this._tabEvent = (tab) => { if(!tab.hasOwnProperty('recommended') || tab.lastUrl !== tab.url) { this._updateRecommended(tab); + } else { + this._change.emit(tab.recommended); } }; @@ -55,12 +62,11 @@ class RecommendationManager { * @private */ _updateRecommended(tab) { - let start = new Date().getTime(); let url = Url(tab.url); delete tab.recommended; if(url.host.length === 0) { - this._updateBadge(tab); + this._change.emit([]); return; } @@ -72,6 +78,7 @@ class RecommendationManager { ) .type('password') .score(0.4) + .limit(8) .sortBy('favorite') .sortBy('shared') .sortBy('score') @@ -81,29 +88,7 @@ class RecommendationManager { if(recommendations.length !== 0) { tab.recommended = recommendations; } - this._updateBadge(tab); - - let time = new Date().getTime() - start; - console.log(`Found ${tab.recommended ? tab.recommended.length:0} recommendations for ${url.host} in ${time}ms`, url); - } - - /** - * - * @param {Object} tab - * @private - */ - _updateBadge(tab) { - if(tab.hasOwnProperty('recommended')) { - this._api.browserAction.setBadgeText({text: tab.recommended.length.toString(), tabId: tab.id}); - } else { - this._api.browserAction.setBadgeText({text: '', tabId: tab.id}); - } - - if(SystemService.getBrowserPlatform() === 'firefox') { - this._api.browserAction.setBadgeTextColor({color: '#fff'}); - } - - this._api.browserAction.setBadgeBackgroundColor({color: '#0082c9'}); + this._change.emit(recommendations); } /** diff --git a/src/js/Manager/TabManager.js b/src/js/Manager/TabManager.js index 2c27933..58cf141 100644 --- a/src/js/Manager/TabManager.js +++ b/src/js/Manager/TabManager.js @@ -12,6 +12,10 @@ class TabManager { return this._urlChange; } + get currentTabId() { + return this._currentTab; + } + constructor() { this._api = null; this._tabs = []; |