diff --git a/feedlist.js b/feedlist.js index 4609a2338..6ee3de1cc 100644 --- a/feedlist.js +++ b/feedlist.js @@ -1013,8 +1013,54 @@ function request_counters() { } } -function update_feedlist_counters() { +function set_feedlist_counter(id, ctr) { try { + + var feedctr = document.getElementById("FEEDCTR-" + id); + var feedu = document.getElementById("FEEDU-" + id); + var feedr = document.getElementById("FEEDR-" + id); + + if (feedctr && feedu && feedr) { + + var row_needs_hl = (ctr > 0 && ctr > parseInt(feedu.innerHTML)); + + feedu.innerHTML = ctr; + + if (ctr > 0) { + feedctr.className = "feedCtrHasUnread"; + if (!feedr.className.match("Unread")) { + var is_selected = feedr.className.match("Selected"); + + feedr.className = feedr.className.replace("Selected", ""); + feedr.className = feedr.className.replace("Unread", ""); + + feedr.className = feedr.className + "Unread"; + + if (is_selected) { + feedr.className = feedr.className + "Selected"; + } + + } + + if (row_needs_hl) { + new Effect.Highlight(feedr, {duration: 1, startcolor: "#fff7d5", + queue: { position:'end', scope: 'EFQ-' + id, limit: 1 } } ); + } + } else { + feedctr.className = "feedCtrNoUnread"; + feedr.className = feedr.className.replace("Unread", ""); + } + } + + } catch (e) { + exception_error("set_feedlist_counter", e); + } +} + +function update_local_feedlist_counters() { + try { + if (!db) return; + var rs = db.execute("SELECT feeds.id,COUNT(articles.id) "+ "FROM feeds LEFT JOIN articles ON (feed_id = feeds.id) "+ "WHERE unread = 1 OR unread IS NULL GROUP BY feeds.id "+ @@ -1024,50 +1070,20 @@ function update_feedlist_counters() { var id = rs.field(0); var ctr = rs.field(1); - var feedctr = document.getElementById("FEEDCTR-" + id); - var feedu = document.getElementById("FEEDU-" + id); - var feedr = document.getElementById("FEEDR-" + id); - - if (feedctr && feedu && feedr) { + set_feedlist_counter(id, ctr); - var row_needs_hl = (ctr > 0 && ctr > parseInt(feedu.innerHTML)); - - feedu.innerHTML = ctr; - - if (ctr > 0) { - feedctr.className = "feedCtrHasUnread"; - if (!feedr.className.match("Unread")) { - var is_selected = feedr.className.match("Selected"); - - feedr.className = feedr.className.replace("Selected", ""); - feedr.className = feedr.className.replace("Unread", ""); - - feedr.className = feedr.className + "Unread"; - - if (is_selected) { - feedr.className = feedr.className + "Selected"; - } - - } - - if (row_needs_hl) { - new Effect.Highlight(feedr, {duration: 1, startcolor: "#fff7d5", - queue: { position:'end', scope: 'EFQ-' + id, limit: 1 } } ); - } - } else { - feedctr.className = "feedCtrNoUnread"; - feedr.className = feedr.className.replace("Unread", ""); - } - } rs.next(); } + set_feedlist_counter(-4, get_local_feed_unread(-4)); + set_feedlist_counter(-1, get_local_feed_unread(-1)); + hideOrShowFeeds(getInitParam("hide_read_feeds") == 1); global_unread = get_local_feed_unread(-4); updateTitle(); } catch (e) { - exception_error("update_feedlist_counters", e); + exception_error("update_local_feedlist_counters", e); } } diff --git a/functions.js b/functions.js index 99ae1d430..837a6b42f 100644 --- a/functions.js +++ b/functions.js @@ -627,6 +627,8 @@ function parse_counters_reply(transport, scheduled_call) { function all_counters_callback2(transport, async_call) { try { if (async_call) async_counters_work = true; + + if (offline_mode) return; debug("all_counters_callback2 IN: " + transport + ""); parse_counters_reply(transport); diff --git a/viewfeed.js b/viewfeed.js index 3c9b30641..5285e4d16 100644 --- a/viewfeed.js +++ b/viewfeed.js @@ -396,7 +396,7 @@ function view_offline(id, feed_id) { } render_article("FIXME"); - update_feedlist_counters(); + update_local_feedlist_counters(); return false; @@ -585,6 +585,8 @@ function toggleMark(id, client_only, no_effects) { } + update_local_feedlist_counters(); + if (!client_only) { debug(query);