From 6c3b0198941b61915c1664d47abc8ae3cbdf88b5 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Fri, 24 Aug 2007 06:45:42 +0100 Subject: async headlines_callback fixes --- feedlist.js | 27 ++------ viewfeed.js | 206 ++++++++++++++++++++++++++++++++++-------------------------- 2 files changed, 120 insertions(+), 113 deletions(-) diff --git a/feedlist.js b/feedlist.js index 70e436897..07f218b38 100644 --- a/feedlist.js +++ b/feedlist.js @@ -83,30 +83,18 @@ function viewfeed(feed, subop, is_cat, subop_param, skip_history, offset) { closeInfoBox(true); } - debug("IS_CAT_STORED: " + activeFeedIsCat() + ", IS_CAT: " + is_cat); - - var fe = document.getElementById("FEEDR-" + getActiveFeedId()); - - if (fe) { - fe.className = fe.className.replace("Selected", ""); - } - - setActiveFeedId(feed); - - if (is_cat != undefined) { - active_feed_is_cat = is_cat; - } +// debug("IS_CAT_STORED: " + activeFeedIsCat() + ", IS_CAT: " + is_cat); if (subop == "MarkAllRead") { var feedlist = document.getElementById('feedList'); var next_unread_feed = getRelativeFeedId(feedlist, - getActiveFeedId(), "next", true); + feed, "next", true); if (!next_unread_feed) { next_unread_feed = getRelativeFeedId(feedlist, - -1, "next", true); + -3, "next", true); } var show_next_feed = getInitParam("on_catchup_show_next_feed") == "1"; @@ -117,7 +105,7 @@ function viewfeed(feed, subop, is_cat, subop_param, skip_history, offset) { } } - if (activeFeedIsCat()) { + if (is_cat) { query = query + "&cat=1"; } @@ -128,13 +116,6 @@ function viewfeed(feed, subop, is_cat, subop_param, skip_history, offset) { var date = new Date(); var timestamp = Math.round(date.getTime() / 1000); query = query + "&ts=" + timestamp - - if (!activeFeedIsCat()) { - var feedr = document.getElementById("FEEDR-" + getActiveFeedId()); - if (feedr && !feedr.className.match("Selected")) { - feedr.className = feedr.className + "Selected"; - } - } disableContainerChildren("headlinesToolbar", false); Form.enable("main_toolbar_form"); diff --git a/viewfeed.js b/viewfeed.js index a69c012a2..e898f84a1 100644 --- a/viewfeed.js +++ b/viewfeed.js @@ -45,115 +45,141 @@ function catchup_callback2(transport, callback) { } } -function headlines_callback2(transport, active_feed_id, active_feed_is_cat, feed_cur_page) { - debug("headlines_callback2 [page=" + feed_cur_page + "]"); - - var f = document.getElementById("headlines-frame"); +function headlines_callback2(transport, active_feed_id, is_cat, feed_cur_page) { try { - if (feed_cur_page == 0) { - debug("resetting headlines scrollTop"); - f.scrollTop = 0; - } - } catch (e) { }; - - if (transport.responseXML) { - var headlines = transport.responseXML.getElementsByTagName("headlines")[0]; - var headlines_count_obj = transport.responseXML.getElementsByTagName("headlines-count")[0]; - var headlines_count = headlines_count_obj.getAttribute("value"); + debug("headlines_callback2 [page=" + feed_cur_page + "]"); - if (headlines_count == 0) _infscroll_disable = 1; + var feeds = document.getElementById("feedList").getElementsByTagName("LI"); - var counters = transport.responseXML.getElementsByTagName("counters")[0]; - var articles = transport.responseXML.getElementsByTagName("article"); - var runtime_info = transport.responseXML.getElementsByTagName("runtime-info"); - - if (feed_cur_page == 0) { - if (headlines) { - f.innerHTML = headlines.firstChild.nodeValue; - } else { - debug("headlines_callback: returned no data"); - f.innerHTML = "
" + __('Could not update headlines (missing XML data)') + "
"; + for (var i = 0; i < feeds.length; i++) { + if (feeds[i].id && feeds[i].id.match("FEEDR-")) { + feeds[i].className = feeds[i].className.replace("Selected", ""); + } + } + setActiveFeedId(active_feed_id); + + if (is_cat != undefined) { + active_feed_is_cat = is_cat; + } + + if (!is_cat) { + var feedr = document.getElementById("FEEDR-" + active_feed_id); + if (feedr && !feedr.className.match("Selected")) { + feedr.className = feedr.className + "Selected"; + } + } + + var f = document.getElementById("headlines-frame"); + try { + if (feed_cur_page == 0) { + debug("resetting headlines scrollTop"); + f.scrollTop = 0; } - } else { - if (headlines) { - if (headlines_count > 0) { - debug("adding some more headlines..."); - - var c = document.getElementById("headlinesList"); + } catch (e) { }; + + if (transport.responseXML) { + var headlines = transport.responseXML.getElementsByTagName("headlines")[0]; + var headlines_count_obj = transport.responseXML.getElementsByTagName("headlines-count")[0]; + + var headlines_count = headlines_count_obj.getAttribute("value"); + + if (headlines_count == 0) _infscroll_disable = 1; + + var counters = transport.responseXML.getElementsByTagName("counters")[0]; + var articles = transport.responseXML.getElementsByTagName("article"); + var runtime_info = transport.responseXML.getElementsByTagName("runtime-info"); + + if (feed_cur_page == 0) { + if (headlines) { + f.innerHTML = headlines.firstChild.nodeValue; + } else { + debug("headlines_callback: returned no data"); + f.innerHTML = "
" + __('Could not update headlines (missing XML data)') + "
"; + + } + } else { + if (headlines) { + if (headlines_count > 0) { + debug("adding some more headlines..."); + + var c = document.getElementById("headlinesList"); + + if (!c) { + c = document.getElementById("headlinesInnerContainer"); + } - if (!c) { - c = document.getElementById("headlinesInnerContainer"); + c.innerHTML = c.innerHTML + headlines.firstChild.nodeValue; + } else { + debug("no new headlines received"); } - - c.innerHTML = c.innerHTML + headlines.firstChild.nodeValue; } else { - debug("no new headlines received"); + debug("headlines_callback: returned no data"); + notify_error("Error while trying to load more headlines"); + } + + } + + if (articles) { + for (var i = 0; i < articles.length; i++) { + var a_id = articles[i].getAttribute("id"); + debug("found id: " + a_id); + cache_inject(a_id, articles[i].firstChild.nodeValue); } } else { - debug("headlines_callback: returned no data"); - notify_error("Error while trying to load more headlines"); + debug("no cached articles received"); } - - } - - if (articles) { - for (var i = 0; i < articles.length; i++) { - var a_id = articles[i].getAttribute("id"); - debug("found id: " + a_id); - cache_inject(a_id, articles[i].firstChild.nodeValue); + + if (counters) { + debug("parsing piggybacked counters: " + counters); + parse_counters(counters, false); + } else { + debug("counters container not found in reply"); } + + if (runtime_info) { + debug("parsing runtime info: " + runtime_info[0]); + parse_runtime_info(runtime_info[0]); + } else { + debug("counters container not found in reply"); + } + } else { - debug("no cached articles received"); + debug("headlines_callback: returned no XML object"); + f.innerHTML = "
" + __('Could not update headlines (missing XML object)') + "
"; } - - if (counters) { - debug("parsing piggybacked counters: " + counters); - parse_counters(counters, false); - } else { - debug("counters container not found in reply"); + + if (typeof correctPNG != 'undefined') { + correctPNG(); } - - if (runtime_info) { - debug("parsing runtime info: " + runtime_info[0]); - parse_runtime_info(runtime_info[0]); + + if (_cdm_wd_timeout) window.clearTimeout(_cdm_wd_timeout); + + if (!document.getElementById("headlinesList") && + getInitParam("cdm_auto_catchup") == 1) { + debug("starting CDM watchdog"); + _cdm_wd_timeout = window.setTimeout("cdmWatchdog()", 5000); + _cdm_wd_vishist = new Array(); } else { - debug("counters container not found in reply"); + debug("not in CDM mode or watchdog disabled"); } - - } else { - debug("headlines_callback: returned no XML object"); - f.innerHTML = "
" + __('Could not update headlines (missing XML object)') + "
"; - } - - if (typeof correctPNG != 'undefined') { - correctPNG(); - } - - if (_cdm_wd_timeout) window.clearTimeout(_cdm_wd_timeout); - - if (!document.getElementById("headlinesList") && - getInitParam("cdm_auto_catchup") == 1) { - debug("starting CDM watchdog"); - _cdm_wd_timeout = window.setTimeout("cdmWatchdog()", 5000); - _cdm_wd_vishist = new Array(); - } else { - debug("not in CDM mode or watchdog disabled"); - } - - if (_tag_cdm_scroll) { - try { - document.getElementById("headlinesInnerContainer").scrollTop = _tag_cdm_scroll; - _tag_cdm_scroll = false; - debug("resetting headlinesInner scrollTop"); - - } catch (e) { } + + if (_tag_cdm_scroll) { + try { + document.getElementById("headlinesInnerContainer").scrollTop = _tag_cdm_scroll; + _tag_cdm_scroll = false; + debug("resetting headlinesInner scrollTop"); + + } catch (e) { } + } + + _feed_cur_page = feed_cur_page; + + notify(""); + } catch (e) { + exception_error("headlines_callback2", e); } - - _feed_cur_page = feed_cur_page; - - notify(""); } function render_article(article) { -- cgit v1.2.3