]> git.wh0rd.org Git - tt-rss.git/commitdiff
rework gears offline/online interaction the way it probably should be done (also...
authorAndrew Dolgov <fox@bah.org.ru>
Thu, 12 Feb 2009 17:16:10 +0000 (20:16 +0300)
committerAndrew Dolgov <fox@bah.org.ru>
Thu, 12 Feb 2009 17:16:10 +0000 (20:16 +0300)
functions.js
functions.php
offline.js
tt-rss.js
tt-rss.php

index 24230f57ed6fb94cc9c1262f67c0fefbb2aae041..6c14d278a1c8f5ea32d5597325e2fabf2bea8c53 100644 (file)
@@ -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 {
index 0a2f3e530112738ce75a97ee0441969b74d0306e..648ab3438657dc4a4ef36c60846a3c6810469ec4 100644 (file)
                        }
 
                        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 */
index 98220afbb759b73d06537ff67ae30d76e15742e1..6482a921bfcd9da2fc7e78d5552379387ace1719 100644 (file)
@@ -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("<b>update_offline_data: done " + stage + " HSD: " + 
                                                has_sync_data + "</b>");
                                } 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);
+       }
+}
index d6a95eddda41e1d3b1ed81572feca6f2824e772e..fbfde92d4394e456b4213ce4057486b5d300766b 100644 (file)
--- 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);
index 0ba76db30f5f324d63aef641fc6f46c31a9fbb0e..7940a920a69c535c4059a56887b048af7a3db2a5 100644 (file)
@@ -146,7 +146,7 @@ window.onload = init;
                <div class="hideWhenSyncing"><a href="javascript:offlineClearData()">
                        <?php echo __('Remove offline data') ?></a></div>
                <div><a href="javascript:gotoOffline()">
-                       <?php echo __('Restart in offline mode') ?></a></div>
+                       <?php echo __('Go offline') ?></a></div>
        </div>
 
        <img id="newVersionIcon" style="display:none;" onclick="javascript:explainError(2)" 
@@ -157,8 +157,7 @@ window.onload = init;
 
        <span id="topLinksOffline" style="display : none">
                <img id="restartOnlinePic" src="images/online.png" 
-                       onclick="gotoOnline()"
-                       title="<?php echo __('Restart in online mode') ?>"/>
+                       onclick="gotoOnline()" title="<?php echo __('Go online') ?>"/>
        </span>
 
        </div>