]> git.wh0rd.org - tt-rss.git/commitdiff
offline: store article labels
authorAndrew Dolgov <fox@bah.org.ru>
Fri, 6 Feb 2009 08:47:25 +0000 (11:47 +0300)
committerAndrew Dolgov <fox@bah.org.ru>
Fri, 6 Feb 2009 08:47:25 +0000 (11:47 +0300)
modules/backend-rpc.php
offline.js

index af8a94e356287932460aa3ad123f33b0c89786c7..2e9915f535527eb9b17feb210cb1d3502a7961c1 100644 (file)
                                        print __("Special");
                                        print "]]></category>";
 
+                                       print "<category id=\"-2\" collapsed=\"".
+                                               (int)$_COOKIE["ttrss_vf_lclps"]."\"><![CDATA[";
+                                       print __("Labels");
+                                       print "]]></category>";
+
                                while ($line = db_fetch_assoc($result)) {
                                        print "<category 
                                                id=\"".$line["id"]."\"
                                                        $line["marked"] = (int)sql_bool_to_bool($line["marked"]);
                                                        $line["unread"] = (int)sql_bool_to_bool($line["unread"]);
 
+                                                       $line["labels"] = get_article_labels($link, $line["id"]);
+
 //                                                     too slow :(                                                     
 //                                                     $line["tags"] = format_tags_string(
 //                                                             get_article_tags($link, $line["id"]), $line["id"]);
index 584cf8cee9b54b828320aca13f5c93a3e19d007f..b1a4af0cf832d4a31d9758708ebf1d78fbd0f326 100644 (file)
@@ -1,4 +1,4 @@
-var SCHEMA_VERSION = 6;
+var SCHEMA_VERSION = 7;
 
 var offline_mode = false;
 var store = false;
@@ -422,16 +422,7 @@ function render_offline_feedlist() {
                updateTitle();
 
                if (cats_enabled) {
-                       var rs = db.execute("SELECT collapsed FROM categories WHERE id = -1");
-                       var cat_hidden = 0;
-
-                       if (rs.isValidRow()) {
-                               cat_hidden = rs.field(0);
-                       }
-
-                       rs.close();
-
-                       tmp += printCategoryHeader(-1, cat_hidden, false);
+                       tmp += printCategoryHeader(-1, is_local_cat_collapsed(-1), false);
                }
 
                tmp += printFeedEntry(-4, __("All articles"), "feed", unread,
@@ -448,6 +439,33 @@ function render_offline_feedlist() {
                        tmp += "<li><hr/></li>";
                }
 
+               if (cats_enabled) {
+                       tmp += printCategoryHeader(-2, is_local_cat_collapsed(-2), false);
+               }
+
+               var rs = db.execute("SELECT id,caption "+
+                       "FROM labels "+
+                       "ORDER BY caption");
+
+               while (rs.isValidRow()) {
+                       var id = -11 - parseInt(rs.field(0));
+                       var caption = rs.field(1);
+                       var unread = get_local_feed_unread(id);
+
+                       tmp += printFeedEntry(id, caption, "feed", unread,
+                               "images/label.png");
+
+                       rs.next();
+               }
+
+               rs.close();
+
+               if (cats_enabled) {
+                       tmp += "</ul></li>";
+               } else {
+                       tmp += "<li><hr/></li>";
+               }
+
 /*             var rs = db.execute("SELECT feeds.id,feeds.title,has_icon,COUNT(articles.id) "+
                        "FROM feeds LEFT JOIN articles ON (feed_id = feeds.id) "+
                        "WHERE unread = 1 OR unread IS NULL GROUP BY feeds.id "+
@@ -647,6 +665,8 @@ function offline_download_parse(stage, transport) {
                                                var ts = Math.round(date.getTime() / 1000);
 
                                                db.execute("DELETE FROM articles WHERE id = ?", [a.id]);
+                                               db.execute("DELETE FROM article_labels WHERE id = ?", [a.id]);
+
                                                db.execute("INSERT INTO articles "+
                                                "(id, feed_id, title, link, guid, updated, content, "+
                                                        "unread, marked, tags, added, comments) "+
@@ -655,6 +675,12 @@ function offline_download_parse(stage, transport) {
                                                                a.content, a.unread, a.marked, a.tags, ts,
                                                                a.comments]);
 
+                                               if (a.labels.length > 0) {
+                                                       for (var j = 0; j < a.labels.length; j++) {
+                                                               label_local_add_article(a.id, a.labels[j][0]);
+                                                       }
+                                               }
+
                                        }
                                }
 
@@ -1014,3 +1040,44 @@ function printCategoryHeader(cat_id, hidden, can_browse) {
        }
 }
 
+function is_local_cat_collapsed(id) {
+       try {
+
+               var rs = db.execute("SELECT collapsed FROM categories WHERE id = ?", [id]);
+               var cat_hidden = 0;
+
+               if (rs.isValidRow()) {
+                       cat_hidden = rs.field(0);
+               }
+
+               rs.close();
+
+               return cat_hidden == "1";
+
+       } catch (e) {
+               exception_error("is_local_cat_collapsed", e);
+       }
+}
+
+function label_local_add_article(id, label_id) {
+       try {
+               debug("label_local_add_article " + id + " => " + label_id);
+
+               var rs = db.execute("SELECT COUNT(id) FROM article_labels WHERE "+
+                       "id = ? AND label_id = ?", [id, label_id]);
+               var check = rs.field(0);
+
+               if (rs.isValidRow()) {
+                       var check = rs.field(0);
+               }
+               rs.close();
+
+               if (check == 0) {
+                       db.execute("INSERT INTO article_labels (id, label_id) VALUES "+
+                               "(?,?)", [id, label_id]);
+               }
+
+       } catch (e) {
+               exception_error("label_local_add_article", e);
+       }
+}