]>
git.wh0rd.org - tt-rss.git/blob - feedlist.js
05a16d865bc5ccbad4b6771467a4a258d1053a63
1 var _feed_cur_page
= 0;
2 var _infscroll_disable
= 0;
3 var _infscroll_request_sent
= 0;
4 var _search_query
= false;
6 var counter_timeout_id
= false;
8 var resize_enabled
= false;
9 var counters_last_request
= 0;
11 function viewCategory(cat
) {
12 viewfeed(cat
, '', true);
16 function viewNextFeedPage() {
18 //if (!getActiveFeedId()) return;
20 console
.log("viewNextFeedPage: calling viewfeed(), p: " + parseInt(_feed_cur_page
+1));
22 viewfeed(getActiveFeedId(), '', activeFeedIsCat(), parseInt(_feed_cur_page
+1));
25 exception_error("viewNextFeedPage", e
);
30 function viewfeed(feed
, subop
, is_cat
, offset
) {
32 if (is_cat
== undefined) is_cat
= false;
33 if (subop
== undefined) subop
= '';
35 // if (!offset) page_offset = 0;
37 last_requested_article
= 0;
38 //counters_last_request = 0;
40 if (feed
== getActiveFeedId()) {
41 cache_invalidate("F:" + feed
);
44 /* if (getInitParam("theme") == "" || getInitParam("theme") == "compact") {
45 if (getInitParam("hide_feedlist") == 1) {
46 Element.hide("feeds-holder");
50 dijit
.byId("content-tabs").selectChild(
51 dijit
.byId("content-tabs").getChildren()[0]);
53 var force_nocache
= false;
62 _infscroll_disable
= 0;
65 if (getActiveFeedId() != feed
) {
68 _infscroll_disable
= 0;
71 if (page_offset
!= 0 && !subop
) {
72 var date
= new Date();
73 var timestamp
= Math
.round(date
.getTime() / 1000);
75 console
.log(_infscroll_request_sent
+ " : " + timestamp
);
77 if (_infscroll_request_sent
&& _infscroll_request_sent
+ 30 > timestamp
) {
78 console
.log("infscroll request in progress, aborting");
82 _infscroll_request_sent
= timestamp
;
89 Form
.enable("main_toolbar_form");
91 var toolbar_form
= document
.forms
["main_toolbar_form"];
92 var toolbar_query
= Form
.serialize("main_toolbar_form");
94 if (toolbar_form
.query
) {
95 if (toolbar_form
.query
.value
!= "") {
98 toolbar_form
.query
.value
= "";
101 var query
= "?op=viewfeed&feed=" + feed
+ "&" +
102 toolbar_query
+ "&subop=" + param_escape(subop
);
105 force_nocache
= true;
106 query
= query
+ "&" + _search_query
;
107 _search_query
= false;
110 // console.log("IS_CAT_STORED: " + activeFeedIsCat() + ", IS_CAT: " + is_cat);
112 if (subop
== "MarkAllRead") {
114 var show_next_feed
= getInitParam("on_catchup_show_next_feed") == "1";
116 if (show_next_feed
) {
117 var tree
= dijit
.byId("feedTree");
118 var nuf
= tree
.model
.getNextUnreadFeed(feed
, is_cat
);
121 var nuf_id
= tree
.model
.store
.getValue(nuf
, 'bare_id');
123 query
= query
+ "&nuf=" + param_escape(nuf_id
);
129 query
= query
+ "&cat=1";
132 if (page_offset
!= 0) {
133 query
= query
+ "&skip=" + page_offset
;
135 // to prevent duplicate feed titles when showing grouped vfeeds
136 if (vgroup_last_feed
) {
137 query
= query
+ "&vgrlf=" + param_escape(vgroup_last_feed
);
141 Form
.enable("main_toolbar_form");
147 if (!is_cat
) unread_ctr
= getFeedUnread(feed
);
149 var cache_check
= false;
151 if (unread_ctr
!= -1 && !page_offset
&& !force_nocache
&& !subop
) {
153 var cache_prefix
= "";
161 cache_check
= cache_check_param(cache_prefix
+ feed
, unread_ctr
);
162 console
.log("headline cache check: " + cache_check
);
167 setActiveFeedId(feed
, is_cat
);
169 $("headlines-frame").innerHTML
= cache_find_param(cache_prefix
+ feed
,
178 if (!setFeedExpandoIcon(feed
, is_cat
, 'images/indicator_white.gif'))
179 notify_progress("Loading, please wait...", true);
181 notify_progress("Loading, please wait...", true);
184 new Ajax
.Request("backend.php", {
186 onComplete: function(transport
) {
187 setFeedExpandoIcon(feed
, is_cat
, 'images/blank_icon.gif');
188 headlines_callback2(transport
, page_offset
);
193 exception_error("viewfeed", e
);
197 function feedlist_init() {
199 console
.log("in feedlist init");
201 hideOrShowFeeds(getInitParam("hide_read_feeds") == 1);
202 document
.onkeydown
= hotkey_handler
;
203 setTimeout("hotkey_prefix_timeout()", 5*1000);
205 if (!getActiveFeedId()) {
206 if (getInitParam("cdm_auto_catchup") != 1) {
207 setTimeout("viewfeed(-3)", 100);
209 setTimeout("viewfeed(-5)", 100);
214 getInitParam("cdm_auto_catchup") + " " + getFeedUnread(-3));
216 hideOrShowFeeds(getInitParam("hide_read_feeds") == 1);
218 setTimeout("timeout()", 5000);
221 exception_error("feedlist/init", e
);
225 function request_counters_real() {
227 console
.log("requesting counters...");
229 var query
= "?op=rpc&subop=getAllCounters&seq=" + next_seq();
231 query
= query
+ "&omode=flc";
233 new Ajax
.Request("backend.php", {
235 onComplete: function(transport
) {
237 handle_rpc_reply(transport
);
239 exception_error("viewfeed/getcounters", e
);
244 exception_error("request_counters_real", e
);
249 function request_counters() {
253 if (getInitParam("bw_limit") == "1") return;
255 var date
= new Date();
256 var timestamp
= Math
.round(date
.getTime() / 1000);
258 if (timestamp
- counters_last_request
> 5) {
259 console
.log("scheduling request of counters...");
261 window
.clearTimeout(counter_timeout_id
);
262 counter_timeout_id
= window
.setTimeout("request_counters_real()", 1000);
264 counters_last_request
= timestamp
;
266 console
.log("request_counters: rate limit reached: " + (timestamp
- counters_last_request
));
270 exception_error("request_counters", e
);
274 function displayNewContentPrompt(id
) {
277 var msg
= "<a href='#' onclick='viewCurrentFeed()'>" +
278 __("New articles available in this feed (click to show)") + "</a>";
280 msg
= msg
.replace("%s", getFeedName(id
));
282 $('auxDlg').innerHTML
= msg
;
284 new Effect
.Appear('auxDlg', {duration
: 0.5});
287 exception_error("displayNewContentPrompt", e
);
291 function parse_counters(reply
, scheduled_call
) {
296 var elems
= JSON
.parse(reply
.firstChild
.nodeValue
);
298 for (var l
= 0; l
< elems
.length
; l
++) {
301 var kind
= elems
[l
].kind
;
302 var ctr
= parseInt(elems
[l
].counter
)
303 var error
= elems
[l
].error
;
304 var has_img
= elems
[l
].has_img
;
305 var updated
= elems
[l
].updated
;
306 var title
= elems
[l
].title
;
308 if (id
== "global-unread") {
314 if (id
== "subscribed-feeds") {
321 // TODO: enable new content notification for categories
323 if (!activeFeedIsCat() && id
== getActiveFeedId()
324 && ctr
> getFeedUnread(id
) && scheduled_call
) {
325 displayNewContentPrompt(id
);
328 setFeedUnread(id
, (kind
== "cat"), ctr
);
331 //setFeedValue(id, false, 'error', error);
332 setFeedValue(id
, false, 'updated', updated
);
336 setFeedIcon(id
, false,
337 getInitParam("icons_url") + "/" + id
+ ".ico");
339 setFeedIcon(id
, false, 'images/blank_icon.gif');
345 hideOrShowFeeds(getInitParam("hide_read_feeds") == 1);
347 var feeds_stored
= number_of_feeds
;
349 if (feeds_stored
!= feeds_found
) {
350 number_of_feeds
= feeds_found
;
352 if (feeds_stored
!= 0 && feeds_found
!= 0) {
353 console
.log("Subscribed feed number changed, refreshing feedlist");
354 setTimeout('updateFeedList()', 50);
359 exception_error("parse_counters", e
);
363 function getFeedUnread(feed
, is_cat
) {
365 var tree
= dijit
.byId("feedTree");
367 if (tree
&& tree
.model
)
368 return tree
.model
.getFeedUnread(feed
, is_cat
);
377 function resort_feedlist() {
378 console
.warn("resort_feedlist: function not implemented");
381 function hideOrShowFeeds(hide
) {
382 var tree
= dijit
.byId("feedTree");
385 return tree
.hideRead(hide
, getInitParam("hide_read_shows_special"));
388 function getFeedName(feed
, is_cat
) {
389 var tree
= dijit
.byId("feedTree");
391 if (tree
&& tree
.model
)
392 return tree
.model
.getFeedValue(feed
, is_cat
, 'name');
395 function getFeedValue(feed
, is_cat
, key
) {
397 var tree
= dijit
.byId("feedTree");
399 if (tree
&& tree
.model
)
400 return tree
.model
.getFeedValue(feed
, is_cat
, key
);
408 function setFeedUnread(feed
, is_cat
, unread
) {
410 var tree
= dijit
.byId("feedTree");
412 if (tree
&& tree
.model
)
413 return tree
.model
.setFeedUnread(feed
, is_cat
, unread
);
416 exception_error("setFeedUnread", e
);
420 function setFeedValue(feed
, is_cat
, key
, value
) {
422 var tree
= dijit
.byId("feedTree");
424 if (tree
&& tree
.model
)
425 return tree
.model
.setFeedValue(feed
, is_cat
, key
, value
);
432 function selectFeed(feed
, is_cat
) {
434 var tree
= dijit
.byId("feedTree");
436 if (tree
) return tree
.selectFeed(feed
, is_cat
);
439 exception_error("selectFeed", e
);
443 function setFeedIcon(feed
, is_cat
, src
) {
445 var tree
= dijit
.byId("feedTree");
447 if (tree
) return tree
.setFeedIcon(feed
, is_cat
, src
);
450 exception_error("setFeedIcon", e
);
454 function setFeedExpandoIcon(feed
, is_cat
, src
) {
456 var tree
= dijit
.byId("feedTree");
458 if (tree
) return tree
.setFeedExpandoIcon(feed
, is_cat
, src
);
461 exception_error("setFeedIcon", e
);