From e38db918c21e007cda42000d151e70e96108d6eb Mon Sep 17 00:00:00 2001 From: Daniel Andersson Date: Tue, 9 Apr 2013 13:21:49 +0200 Subject: Refactor to avoid deprecation by Google. --- background.html | 193 ------------------------------------------------------- js/background.js | 179 +++++++++++++++++++++++++++++++++++++++++++++++++++ js/options.js | 115 +++++++++++++++++++++++++++++++++ manifest.json | 11 +++- options.html | 116 ++------------------------------- 5 files changed, 307 insertions(+), 307 deletions(-) delete mode 100644 background.html create mode 100644 js/background.js create mode 100644 js/options.js diff --git a/background.html b/background.html deleted file mode 100644 index f67523b..0000000 --- a/background.html +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - diff --git a/js/background.js b/js/background.js new file mode 100644 index 0000000..754e178 --- /dev/null +++ b/js/background.js @@ -0,0 +1,179 @@ +/* Handle showing of new item count and polling the TT-RSS server. */ + +var last_updated = 0; +var feeds_last_updated = 0; +var prefs_last_updated = 0; + +function param_escape(arg) { + if (typeof encodeURIComponent != 'undefined') + return encodeURIComponent(arg); + else + return escape(arg); +} + +function update_feeds() { + console.log('feeds update'); + + var requestUrl = localStorage['site_url'] + + '/public.php?op=globalUpdateFeeds'; + + var xhr = new XMLHttpRequest(); + + xhr.open('POST', requestUrl, true); + xhr.send(); + + var d = new Date(); + localStorage['last_feeds_updated'] = d.getTime(); +} + +function update() { + console.log('update'); + + var d = new Date(); + var login = localStorage['login']; + var single_user = localStorage['single_user']; + + if (single_user == '1') login = 'admin'; + + var requestUrl = localStorage['site_url'] + '/public.php'; + var params = 'op=getUnread&fresh=1&login=' + param_escape(login); + + var xhr = new XMLHttpRequest(); + + xhr.open('POST', requestUrl, true); + xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); + xhr.send(params); + + xhr.onreadystatechange = function() { + if (xhr.readyState == 4) { + var icon = new Object(); + var title = new Object(); + var badge = new Object(); + var badge_color = new Object(); + + // init stuff + icon.path = 'images/normal.png'; + title.title = ''; + badge.text = ''; + badge_color.color = [0, 0, 0, 0]; + + var show_badge = localStorage['show_badge'] == '1'; + var show_fresh = localStorage['show_fresh'] == '1'; + + if (xhr.status == 200) { + var response = xhr.responseText.split(';'); + + var unread = parseInt(response[0]); + + if (isNaN(unread)) unread = 0; + + var fresh; + + if (response.length == 2) + fresh = parseInt(response[1]); + else + fresh = 0; + + if (isNaN(fresh)) fresh = 0; + + if (unread > 0) { + icon.path = 'images/alert.png'; + title.title = 'You have %s unread articles.'.replace('%s', unread); + + if (show_fresh && fresh > 0) { + badge.text = fresh + ''; + badge_color.color = [0, 200, 0, 255]; + } else { + badge.text = unread + ''; + badge_color.color = [255, 0, 0, 255]; + } + } else if (unread == -1) { + icon.path = 'images/error.png'; + + var errorMsg = xhr.responseText.split(';')[1]; + + title.title = 'Error: %s.'.replace('%s', errorMsg.trim()); + } else { + title.title = 'You have no unread articles.'; + } + + localStorage['last_updated'] = d.getTime(); + localStorage['last_error'] = ''; + } else { + localStorage['last_error'] = xhr.responseText; + + icon.path = 'images/error.png'; + title.title = 'Error (%s) while updating.'.replace('%s', xhr.status); + } + + if (!show_badge) badge.text = ''; + + chrome.browserAction.setBadgeBackgroundColor(badge_color); + chrome.browserAction.setBadgeText(badge); + chrome.browserAction.setTitle(title); + chrome.browserAction.setIcon(icon); + } + }; +} + +function timeout() { + var update_interval; + var prefs_updated; + var feeds_update_interval = 30 * 60 * 1000; + + if (localStorage['update_interval']) + update_interval = localStorage['update_interval'] * 60 * 1000; + else + update_interval = 15 * 60 * 1000; + + if (localStorage['prefs_updated']) + prefs_updated = localStorage['prefs_updated']; + else + prefs_updated = -1; + + var d = new Date(); + + if (d.getTime() > last_updated + update_interval || + prefs_updated != prefs_last_updated) { + last_updated = d.getTime(); + try { + update(); + } catch (e) { + console.warn(e); + } + } + + if (localStorage['update_feeds'] == 1 && + (d.getTime() > feeds_last_updated + feeds_update_interval || + prefs_updated != prefs_last_updated)) { + feeds_last_updated = d.getTime(); + + try { + update_feeds(); + } catch (e) { + console.warn(e); + } + } + + prefs_last_updated = prefs_updated; +} + +function init() { + chrome.browserAction.onClicked.addListener(function() { + var site_url = localStorage['site_url']; + + if (site_url) { + chrome.tabs.create({url: site_url}); + } + }); + + // TODO: Create smarter algorithm that sets `periodInMinutes` to + // `feeds_update_interval` and updates the `alarm` object when extension + // preferences are saved. + timeout(); + chrome.alarms.create({periodInMinutes: 1}); + chrome.alarms.onAlarm.addListener(function() {timeout();}); +} + +init(); + diff --git a/js/options.js b/js/options.js new file mode 100644 index 0000000..1835aba --- /dev/null +++ b/js/options.js @@ -0,0 +1,115 @@ +/* Option handling. */ + +function save() { + + var s = $('status'); + + s.innerHTML = 'Options saved successfully.'; + + var f = document.forms['options']; + + if (f.site_url.value.length > 0) + localStorage['site_url'] = f.site_url.value; + else { + s.innerHTML = 'Error: Site url cannot be blank.'; + new Effect.Highlight(f.site_url); + } + + if (f.login.value.length > 0) + localStorage['login'] = f.login.value; + else { + s.innerHTML = 'Error: Login cannot be blank.'; + new Effect.Highlight(f.login); + } + + var update_interval = parseInt(f.update_interval.value); + + if (update_interval > 0) + localStorage['update_interval'] = f.update_interval.value; + else { + s.innerHTML = 'Error: Update interval must be greater than zero.'; + new Effect.Highlight(f.update_interval); + } + + localStorage['show_badge'] = (f.show_badge.checked) ? '1' : '0'; + localStorage['show_fresh'] = (f.show_fresh.checked) ? '1' : '0'; + localStorage['single_user'] = (f.single_user.checked) ? '1' : '0'; + localStorage['update_feeds'] = (f.update_feeds.checked) ? '1' : '0'; + + var d = new Date(); + + localStorage['prefs_updated'] = d.getTime(); + + Element.show(s); + + return false; +} + +function single_user_toggle() { + var f = document.forms['options']; + + f.login.disabled = f.single_user.checked; +} + +function init() { + var f = document.forms['options']; + + if (localStorage['site_url']) + f.site_url.value = localStorage['site_url']; + else + f.site_url.value = 'http://example.dom/tt-rss/'; + + if (localStorage['login']) + f.login.value = localStorage['login']; + else + f.login.value = 'user'; + + if (localStorage['update_interval']) + f.update_interval.value = localStorage['update_interval']; + else + f.update_interval.value = '15'; + + if (localStorage['show_badge']) + f.show_badge.checked = localStorage['show_badge'] == '1'; + else + f.show_badge.checked = true; + + if (localStorage['show_fresh']) + f.show_fresh.checked = localStorage['show_fresh'] == '1'; + else + f.show_fresh.checked = false; + + if (localStorage['single_user']) + f.single_user.checked = localStorage['single_user'] == '1'; + else + f.single_user.checked = false; + + if (localStorage['update_feeds']) + f.update_feeds.checked = localStorage['update_feeds'] == '1'; + else + f.update_feeds.checked = false; + + single_user_toggle(); + + var last_updated = $('last_updated'); + + var d = new Date(); + + d.setTime(localStorage['last_updated']); + + last_updated.innerHTML = d; + + var feeds_last_updated = $('feeds-last-updated'); + + d.setTime(localStorage['last_feeds_updated']); + + feeds_last_updated.innerHTML = d; +} + +document.addEventListener('DOMContentLoaded', function() { + document.getElementById('options').addEventListener('submit', save); + document.querySelectorAll('input[name$="single_user"]')[0].addEventListener( + 'change', single_user_toggle); + init(); +}); + diff --git a/manifest.json b/manifest.json index c1935ef..f405e2c 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,11 @@ { "name": "Tiny Tiny RSS Notifier", - "background_page": "background.html", + "background": { + "scripts": ["js/background.js"], + "persistent": false + }, "version": "0.5.1", + "manifest_version": 2, "description": "This extension displays the number of unread articles in your Tiny Tiny RSS installation", "options_page": "options.html", "icons": { "48": "images/icon_48.png", "128": "images/icon_128.png" }, @@ -9,5 +13,8 @@ "default_icon": "images/normal.png", "default_title": "You have no unread articles." }, - "permissions": [ "http://*/*", "https://*/*" ] + "permissions": [ + "alarms", + "http://*/*", + "https://*/*"] } diff --git a/options.html b/options.html index 7818c25..dc50f65 100644 --- a/options.html +++ b/options.html @@ -4,114 +4,7 @@ - - + - +

Tiny Tiny RSS Notifier

@@ -155,7 +48,7 @@ fieldset span.note {

Options

-
+
@@ -168,8 +61,7 @@ fieldset span.note {
- +
-- cgit v1.2.3