]> git.wh0rd.org Git - tt-rss.git/commitdiff
offline: add progress indicator; tweak download intervals and amount of articles
authorAndrew Dolgov <fox@bah.org.ru>
Thu, 12 Feb 2009 13:35:25 +0000 (16:35 +0300)
committerAndrew Dolgov <fox@bah.org.ru>
Thu, 12 Feb 2009 13:35:25 +0000 (16:35 +0300)
feedlist.js
functions.js
manifest.json.php
modules/backend-rpc.php
offline.js
tt-rss.css
tt-rss.php

index 3634b87d70f72cb967960489146a1a0830d65a0e..93861bbd8d3e8a4f0b0450318eec3666ba49312d 100644 (file)
@@ -649,6 +649,10 @@ function mouse_up_handler(e) {
                        document.onselectstart = null;
                        var e = $("headlineActionsBody");
                        if (e) Element.hide(e);
+                       
+                       var e = $("offlineModeDrop");
+                       if (e) Element.hide(e);
+
                }
 
        } catch (e) {
index 8355deb04bcaa374828c784d7537aad8f6b6a6a6..24230f57ed6fb94cc9c1262f67c0fefbb2aae041 100644 (file)
@@ -460,9 +460,7 @@ function parse_counters(reply, scheduled_call) {
                        if (id == "global-unread") {
 
                                if (ctr > global_unread) {
-                                       if (db && getInitParam("offline_enabled") == "1") {
-                                       window.setTimeout("update_offline_data(0)", 100);
-                                       }
+                                       offlineDownloadStart();
                                }
 
                                global_unread = ctr;
index 22ea4cda27dae5995bc751dd1ccaf7ec5e5d15fe..525bc610332f11cb7b7c0ff7adf1c490da70ae70 100644 (file)
@@ -79,7 +79,7 @@
 
        foreach ($manifest_files as $f) {
                $tmp = filemtime($f);
-               if ($tmp > $mtime) {
+               if ($tmp > $mtime_max) {
                        $mtime_max = $tmp;
                }
 
@@ -89,7 +89,7 @@
 
 {
   "betaManifestVersion": 1,
-  "version": "<?php echo $mtime_max ?>",
+  "version": "<?php echo date("Y.m.d H:i:s", $mtime_max) ?>",
   "entries": [
      <?php echo join(",\n     ", $manifest_formatted); ?>
     ]
index 3a63c6094f8dd6f5eecbda4671633ca91723a444..b28b274624e1085b5f2cf768bcff1c1862dfbb54 100644 (file)
 
                                        $query = "SELECT ref_id,unread FROM ttrss_user_entries
                                                WHERE last_read >= '$last_online' AND
-                                                               owner_uid = ".$_SESSION["uid"];
+                                                               owner_uid = ".$_SESSION["uid"] . " LIMIT 500";
 
                                        $result = db_query($link, $query);
 
index e6b77ed772881e47d961d5d8c9dfdfbcf0d28c8a..974fa74916555bc4a4eb5e62b7203b8539bf8504 100644 (file)
@@ -4,6 +4,8 @@ var offline_mode = false;
 var store = false;
 var localServer = false;
 var db = false;
+var articles_synced = 0;
+var sync_in_progress = false;
 
 function view_offline(id, feed_id) {
        try {
@@ -564,6 +566,7 @@ function render_offline_feedlist() {
 function init_offline() {
        try {
                offline_mode = true;
+               store.enabled = true;
 
                Element.hide("dispSwitchPrompt");
                Element.hide("feedBrowserPrompt");
@@ -720,6 +723,12 @@ function offline_download_parse(stage, transport) {
 
                                debug("downloaded articles: " + articles_found + " limit: " + limit);
 
+                               articles_synced += articles_found;
+
+                               var msg =__("Synchronizing (got %d articles)...").replace("%d", articles_synced);
+
+                               $("offlineModeSyncMsg").innerHTML = msg;
+
                                var has_sync_data = has_local_sync_data();
 
                                if (articles_found >= limit || has_sync_data) {
@@ -730,13 +739,34 @@ function offline_download_parse(stage, transport) {
                                        window.setTimeout("update_offline_data(0)", 180*1000);
                                        debug("update_offline_data: finished");
 
-                                       var pic = $("restartOfflinePic");
+                                       var pic = $("offlineModePic");
 
                                        if (pic) { 
                                                pic.src = "images/offline.png";
-                                               pic.title = __("Restart in offline mode");
+
+                                               var rs = db.execute("SELECT value FROM syncdata WHERE key = 'last_online'");
+                                               var last_sync = "";
+
+                                               if (rs.isValidRow()) {
+                                                       last_sync = rs.field(0).substring(0,16);
+                                               }
+                                               rs.close();
+
+                                               var msg = __("Last sync: %s").replace("%s", last_sync);
+
+                                               articles_synced = 0;
+
+                                               $("offlineModeSyncMsg").innerHTML = msg;                                        
                                        }                        
 
+                                       var hide_elems = $$("div.hideWhenSyncing");
+
+                                       for (var j = 0; j < hide_elems.length; j++) {
+                                               Element.show(hide_elems[j]);
+                                       }
+
+                                       sync_in_progress = false;
+
                                        db.execute("DELETE FROM articles WHERE "+
                                                "updated < DATETIME('NOW', 'localtime', '-31 days')");
 
@@ -758,6 +788,7 @@ function update_offline_data(stage) {
        try {
 
                if (!stage) stage = 0;
+
                if (!db || offline_mode || getInitParam("offline_enabled") != "1") return;
 
 //             notify_progress("Updating offline data... (" + stage +")", true);
@@ -790,12 +821,22 @@ function update_offline_data(stage) {
 
                debug(query + "/" + to_sync);
 
-               var pic = $("restartOfflinePic");
+               var pic = $("offlineModePic");
 
                if (pic) {
                        pic.src = "images/offline-sync.gif";
-                       pic.title = __("Synchronizing offline data...");
+                       if (articles_synced == 0) {
+                               $("offlineModeSyncMsg").innerHTML = __("Synchronizing...");
+                       }
+               }
+
+               var hide_elems = $$("div.hideWhenSyncing");
+
+               for (var j = 0; j < hide_elems.length; j++) {
+                       Element.hide(hide_elems[j]);
                }
+               
+               sync_in_progress = true;
 
                new Ajax.Request(query, {
                        parameters: to_sync,
@@ -959,8 +1000,8 @@ function enable_offline_reading() {
 
                if (db && getInitParam("offline_enabled") == "1") {
                        init_local_sync_data();
-                       Element.show("restartOfflinePic");
-                       window.setTimeout("update_offline_data(0)", 100);
+                       Element.show("offlineModePic");
+                       offlineDownloadStart();
                }
 
        } catch (e) {
@@ -974,8 +1015,9 @@ 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";
+                       store.manifestUrl = "manifest.json.php";                
                        store.checkForUpdate();
+                       store.enabled = false;
 
                        db = google.gears.factory.create('beta.database');
                        db.open('tt-rss');
@@ -1454,3 +1496,50 @@ function catchup_local_feed(id, is_cat) {
                exception_error("catchup_local_feed", e);
        }
 }
+
+function toggleOfflineModeInfo() {
+       try {
+               var e = $('offlineModeDrop');
+               var p = $('offlineModePic');
+               
+               if (Element.visible(e)) {
+                       Element.hide(e);
+               } else {
+                       Element.show(e);
+               }
+
+       } catch (e) {
+               exception_error("toggleOfflineModeInfo", e);
+       }
+}
+
+function offlineDownloadStart() {
+       try {
+               if (db && !sync_in_progress && getInitParam("offline_enabled") == "1") {
+                       window.setTimeout("update_offline_data(0)", 100);
+               }
+       } catch (e) {
+               exception_error("offlineDownloadStart", e);
+       }
+}
+
+function offlineClearData() {
+       try {
+               if (db) {
+
+                       if (confirm(__("Remove offline data?"))) {
+
+                               notify_progress("Removing offline data...");
+
+                               db.execute("DELETE FROM articles");
+                               db.execute("DELETE FROM article_labels");
+                               db.execute("DELETE FROM labels");
+                               db.execute("DELETE FROM feeds");
+
+                               notify_info("Offline data removed");
+                       }
+               }
+       } catch (e) {
+               exception_error("offlineClearData", e);
+       }
+}
index 3fbf51fc0153269b764e3ea4a8a109caadb1b2a0..5dc2fd825c3628b0a19f666e4ef204beeb1eefcb 100644 (file)
@@ -1703,7 +1703,7 @@ div.topLinks img {
        cursor : pointer;
 }
 
-#restartOfflinePic {
+#offlineModePic {
        margin-left : 5px;
 }
 
@@ -2137,4 +2137,25 @@ div.colorPicker {
        color : #909090;
 }
 
+div#offlineModeDrop div {
+       padding : 2px 2px 2px 2px;
+       text-align : center;
+}
+
+div#offlineModeDrop {
+       position : absolute;
+       margin : 0px;
+       padding : 2px;
+       background-color : white;
+       z-index : 2;
+       margin : 2px 0px 0px 0px;
+       top : auto;
+       right : 0px;
+       border : 1px solid #cccccc;
+       background : white;
+       margin-left : -1px;
+       max-height : 250px;
+       overflow : auto;
+       color : #909090;
+}
 
index 5d765b5d92c25deaa48ffcd3c71c7362303ee1e9..0ba76db30f5f324d63aef641fc6f46c31a9fbb0e 100644 (file)
@@ -131,9 +131,23 @@ window.onload = init;
                        | <a href="logout.php"><?php echo __('Logout') ?></a>
        <?php } ?>
 
-       <img id="restartOfflinePic" src="images/offline.png" style="display:none"
-               onclick="gotoOffline()"
-               title="<?php echo __('Restart in offline mode') ?>"/>
+       <img id="offlineModePic" 
+               onmouseover="enable_selection(false)" 
+               onmouseout="enable_selection(true)"
+               onclick="toggleOfflineModeInfo()"
+               src="images/offline.png" style="display:none"
+               title="<?php echo __('Offline mode') ?>"/>
+
+       <div id="offlineModeDrop" style="display : none">
+               <div id="offlineModeSyncMsg">---</div>
+               <div class="hideWhenSyncing">
+                       <a href="javascript:offlineDownloadStart()">
+                       <?php echo __('Start synchronization') ?></a></div>
+               <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>
+       </div>
 
        <img id="newVersionIcon" style="display:none;" onclick="javascript:explainError(2)" 
                src="images/new_version.png" title="<?php echo __('New version of Tiny Tiny RSS is available!') ?>"