properly update local vfeed counters

This commit is contained in:
Andrew Dolgov 2009-02-04 09:51:31 +03:00
parent 2a0dc5f902
commit c8a9fe5b07
3 changed files with 57 additions and 37 deletions

View File

@ -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);
set_feedlist_counter(id, ctr);
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", "");
}
}
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);
}
}

View File

@ -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("<b>all_counters_callback2 IN: " + transport + "</b>");
parse_counters_reply(transport);

View File

@ -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);