diff --git a/offline.js b/offline.js index b1a4af0cf..f9f357966 100644 --- a/offline.js +++ b/offline.js @@ -117,19 +117,9 @@ function viewfeed_offline(feed_id, subop, is_cat, subop_param, skip_history, off var tmp = ""; - rs = db.execute("SELECT title FROM feeds WHERE id = ?", [feed_id]); + var feed_title = get_local_feed_title(feed_id); - if (rs.isValidRow() || feed_id == -1 || feed_id == -4) { - - feed_title = rs.field(0); - - if (feed_id == -1) { - feed_title = __("Starred articles"); - } - - if (feed_id == -4) { - feed_title = __("All articles"); - } + if (feed_title) { if (offset == 0) { tmp += "
"; @@ -211,6 +201,10 @@ function viewfeed_offline(feed_id, subop, is_cat, subop_param, skip_history, off strategy_qpart = "marked = 1"; } else if (feed_id == -4) { strategy_qpart = "1"; + } else if (feed_id < -10) { + var label_id = -11 - feed_id; + strategy_qpart = "label_id = " + label_id; + } if (offset > 0) { @@ -220,7 +214,8 @@ function viewfeed_offline(feed_id, subop, is_cat, subop_param, skip_history, off } var query = "SELECT *,feeds.title AS feed_title "+ - "FROM articles,feeds WHERE " + + "FROM articles,feeds LEFT JOIN article_labels "+ + "ON (article_labels.id = articles.id) WHERE " + "feed_id = feeds.id AND " + strategy_qpart + " AND " + mode_qpart + @@ -833,6 +828,17 @@ function update_local_feedlist_counters() { set_feedlist_counter(-4, get_local_feed_unread(-4)); set_feedlist_counter(-1, get_local_feed_unread(-1)); + var rs = db.execute("SELECT id FROM labels"); + + while (rs.isValidRow()) { + var id = -11 - rs.field(0); + var ctr = get_local_feed_unread(id); + set_feedlist_counter(id, ctr, false); + rs.next(); + } + + rs.close(); + hideOrShowFeeds(getInitParam("hide_read_feeds") == 1); global_unread = get_local_feed_unread(-4); @@ -851,8 +857,12 @@ function get_local_feed_unread(id) { rs = db.execute("SELECT SUM(unread) FROM articles"); } else if (id == -1) { rs = db.execute("SELECT SUM(unread) FROM articles WHERE marked = 1"); - } else { + } else if (id > 0) { rs = db.execute("SELECT SUM(unread) FROM articles WHERE feed_id = ?", [id]); + } else if (id < -10) { + var label_id = -11 - id; + rs = db.execute("SELECT SUM(unread) FROM articles,article_labels "+ + "WHERE article_labels.id = articles.id AND label_id = ?", [label_id]); } var a = false; @@ -1081,3 +1091,40 @@ function label_local_add_article(id, label_id) { exception_error("label_local_add_article", e); } } + +function get_local_feed_title(id) { + try { + + var feed_title = "Unknown feed: " + id; + + if (id > 0) { + var rs = db.execute("SELECT title FROM feeds WHERE id = ?", [id]); + + if (rs.isValidRow()) { + feed_title = rs.field(0); + } + + rs.close(); + } else if (id == -1) { + feed_title = __("Starred articles"); + } else if (id == -4) { + feed_title = __("All articles"); + } else if (id < -10) { + + var label_id = -11 - id; + + var rs = db.execute("SELECT caption FROM labels WHERE id = ?", [label_id]); + + if (rs.isValidRow()) { + feed_title = rs.field(0); + } + + rs.close(); + } + + return feed_title; + + } catch (e) { + exception_error("get_local_feed_title", e); + } +}