From 206d49676228fa2a1b74ab4116038c4d59370980 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Thu, 12 Feb 2009 20:16:10 +0300 Subject: [PATCH] rework gears offline/online interaction the way it probably should be done (also remove redirecting login system) --- functions.js | 2 +- functions.php | 4 ++-- offline.js | 61 ++++++++++++++++++++++++++++++++++++++++++--------- tt-rss.js | 25 ++++++++++----------- tt-rss.php | 5 ++--- 5 files changed, 68 insertions(+), 29 deletions(-) diff --git a/functions.js b/functions.js index 24230f57e..6c14d278a 100644 --- a/functions.js +++ b/functions.js @@ -1508,7 +1508,7 @@ function fatalError(code, msg, ext_info) { if (!ext_info) ext_info = "N/A"; if (code == 6) { - window.location.href = "login.php"; + window.location.href = "tt-rss.php"; } else if (code == 5) { window.location.href = "update.php"; } else { diff --git a/functions.php b/functions.php index 0a2f3e530..648ab3438 100644 --- a/functions.php +++ b/functions.php @@ -1918,8 +1918,8 @@ } if (!$_SESSION["uid"] || !validate_session($link)) { - //render_login_form($link, $mobile); - header("Location: login.php"); + render_login_form($link, $mobile); + //header("Location: login.php"); exit; } else { /* bump login timestamp */ diff --git a/offline.js b/offline.js index 98220afbb..6482a921b 100644 --- a/offline.js +++ b/offline.js @@ -6,6 +6,7 @@ var localServer = false; var db = false; var articles_synced = 0; var sync_in_progress = false; +var sync_timer = false; function view_offline(id, feed_id) { try { @@ -617,6 +618,8 @@ function offline_download_parse(stage, transport) { try { if (transport.responseXML) { + if (!sync_in_progress) return; + var sync_ok = transport.responseXML.getElementsByTagName("sync-ok"); if (sync_ok.length > 0) { @@ -681,7 +684,7 @@ function offline_download_parse(stage, transport) { [id, caption, fg_color, bg_color]); } - window.setTimeout("update_offline_data("+(stage+1)+")", 1*1000); + sync_timer = window.setTimeout("update_offline_data("+(stage+1)+")", 10*1000); } else { var articles = transport.responseXML.getElementsByTagName("article"); @@ -731,11 +734,12 @@ function offline_download_parse(stage, transport) { var has_sync_data = has_local_sync_data(); if (articles_found >= limit || has_sync_data) { - window.setTimeout("update_offline_data("+(stage+1)+")", 5*1000); + sync_timer = window.setTimeout("update_offline_data("+(stage+1)+")", + 5*1000); debug("update_offline_data: done " + stage + " HSD: " + has_sync_data + ""); } else { - window.setTimeout("update_offline_data(0)", 180*1000); + window.setTimeout("offlineDownloadStart()", 180*1000); debug("update_offline_data: finished"); var pic = $("offlineModePic"); @@ -1017,10 +1021,6 @@ function enable_offline_reading() { try { if (db && getInitParam("offline_enabled") == "1") { - - store.manifestUrl = "manifest.json.php"; - store.checkForUpdate(); - init_local_sync_data(); Element.show("offlineModePic"); offlineDownloadStart(); @@ -1037,7 +1037,8 @@ function init_gears() { if (window.google && google.gears) { localServer = google.gears.factory.create("beta.localserver"); store = localServer.createManagedStore("tt-rss"); - + store.manifestUrl = "manifest.json.php"; + db = google.gears.factory.create('beta.database'); db.open('tt-rss'); @@ -1126,11 +1127,31 @@ function init_gears() { } function gotoOffline() { - window.location.href = "tt-rss.php?offline=1"; + +// debug("[Local store] currentVersion = " + store.currentVersion); + + if (confirm(__("Switch Tiny Tiny RSS into offline mode?"))) { + + store.checkForUpdate(); + + notify_progress("Preparing offline mode..."); + + var timerId = window.setInterval(function() { + if (store.currentVersion) { + window.clearInterval(timerId); + //debug("[Local store] sync complete: " + store.currentVersion); + window.location.href = "tt-rss.php"; + } else if (store.updateStatus == 3) { + debug("[Local store] sync error: " + store.lastErrorMessage); + } }, 500); + } } function gotoOnline() { - window.location.href = "tt-rss.php"; + if (confirm(__("You won't be able to access offline version of Tiny Tiny RSS until you switch it into offline mode again. Go online?"))) { + localServer.removeManagedStore("tt-rss"); + window.location.href = "tt-rss.php"; + } } function local_collapse_cat(id) { @@ -1542,6 +1563,16 @@ function offlineDownloadStart() { } } +function offlineDownloadStop() { + try { + if (db && sync_in_progress && getInitParam("offline_enabled") == "1") { + window.clearTimeout(sync_timer); + } + } catch (e) { + exception_error("offlineDownloadStart", e); + } +} + function offlineClearData() { try { if (db) { @@ -1564,3 +1595,13 @@ function offlineClearData() { exception_error("offlineClearData", e); } } + +function offlineUpdateStore() { + try { + + if (offline_mode) return; + + } catch (e) { + exception_error("offlineUpdateStore", e); + } +} diff --git a/tt-rss.js b/tt-rss.js index d6a95eddd..fbfde92d4 100644 --- a/tt-rss.js +++ b/tt-rss.js @@ -132,18 +132,10 @@ function backend_sanity_check_callback(transport) { } if (!transport.responseXML) { - if (!window.google && !google.gears) { - fatalError(3, "Sanity check: Received reply is not XML", transport.responseText); - } else { - init_offline(); - } + fatalError(3, "Sanity check: Received reply is not XML", transport.responseText); return; } - if (getURLParam("offline")) { - return init_offline(); - } - var reply = transport.responseXML.firstChild.firstChild; if (!reply) { @@ -405,10 +397,17 @@ function init() { loading_set_progress(30); - new Ajax.Request("backend.php?op=rpc&subop=sanityCheck" + params, { - onComplete: function(transport) { - backend_sanity_check_callback(transport); - } }); + offline_mode = false; + if (store) offline_mode = store.currentVersion; + + if (offline_mode) { + init_offline(); + } else { + new Ajax.Request("backend.php?op=rpc&subop=sanityCheck" + params, { + onComplete: function(transport) { + backend_sanity_check_callback(transport); + } }); + } } catch (e) { exception_error("init", e); diff --git a/tt-rss.php b/tt-rss.php index 0ba76db30..7940a920a 100644 --- a/tt-rss.php +++ b/tt-rss.php @@ -146,7 +146,7 @@ window.onload = init;
-
+ + onclick="gotoOnline()" title=""/>