]>
Commit | Line | Data |
---|---|---|
3034277a | 1 | var SCHEMA_VERSION = 3; |
b871dd06 | 2 | |
25d99353 AD |
3 | var offline_mode = false; |
4 | var store = false; | |
5 | var localServer = false; | |
6 | var db = false; | |
7 | ||
4681834e AD |
8 | function view_offline(id, feed_id) { |
9 | try { | |
10 | ||
11 | enableHotkeys(); | |
12 | showArticleInHeadlines(id); | |
13 | ||
1b27261c AD |
14 | db.execute("UPDATE articles SET unread = 0 WHERE id = ?", [id]); |
15 | ||
16 | var rs = db.execute("SELECT * FROM articles WHERE id = ?", [id]); | |
17 | ||
18 | if (rs.isValidRow()) { | |
19 | ||
20 | var tmp = "<div class=\"postReply\">"; | |
21 | ||
22 | tmp += "<div class=\"postHeader\" onmouseover=\"enable_resize(true)\" "+ | |
23 | "onmouseout=\"enable_resize(false)\">"; | |
24 | ||
25 | tmp += "<div class=\"postDate\">"+rs.fieldByName("updated")+"</div>"; | |
26 | ||
27 | if (rs.fieldByName("link") != "") { | |
28 | tmp += "<div clear='both'><a target=\"_blank\" "+ | |
29 | "href=\"" + rs.fieldByName("link") + "\">" + | |
30 | rs.fieldByName("title") + "</a></div>"; | |
31 | } else { | |
32 | tmp += "<div clear='both'>" + rs.fieldByName("title") + "</div>"; | |
33 | } | |
4681834e | 34 | |
1b27261c AD |
35 | tmp += "<div style='float : right'> "+ |
36 | "<img src='images/tag.png' class='tagsPic' alt='Tags' title='Tags'>"; | |
37 | tmp += rs.fieldByName("tags"); | |
38 | tmp += "</div>"; | |
39 | ||
12aa4007 AD |
40 | tmp += "<div clear='both'>"+ |
41 | "<a target=\"_blank\" "+ | |
42 | "href=\"" + rs.fieldByName("comments") + "\">" + | |
43 | __("comments") + "</a></div>"; | |
1b27261c AD |
44 | |
45 | tmp += "</div>"; | |
46 | ||
47 | tmp += "<div class=\"postContent\">" | |
48 | tmp += rs.fieldByName("content"); | |
49 | tmp += "</div>"; | |
50 | ||
51 | tmp += "</div>"; | |
52 | ||
53 | render_article(tmp); | |
54 | update_local_feedlist_counters(); | |
55 | } | |
4681834e | 56 | |
03c96380 AD |
57 | rs.close(); |
58 | ||
4681834e AD |
59 | return false; |
60 | ||
61 | } catch (e) { | |
62 | exception_error("view_offline", e); | |
63 | } | |
64 | } | |
65 | ||
66 | function viewfeed_offline(feed_id, subop, is_cat, subop_param, skip_history, offset) { | |
67 | try { | |
68 | notify(''); | |
69 | ||
70 | if (!offset) offset = 0; | |
71 | ||
0e923da4 AD |
72 | if (offset > 0) { |
73 | _feed_cur_page = parseInt(offset); | |
74 | if (_infscroll_request_sent) { | |
75 | return; | |
76 | } | |
77 | } else { | |
78 | _feed_cur_page = 0; | |
79 | _infscroll_disable = 0; | |
80 | } | |
81 | ||
82 | if (getActiveFeedId() != feed_id) { | |
83 | _feed_cur_page = 0; | |
84 | active_post_id = 0; | |
85 | _infscroll_disable = 0; | |
86 | } | |
87 | ||
4681834e AD |
88 | loading_set_progress(100); |
89 | ||
90 | clean_feed_selections(); | |
91 | ||
92 | setActiveFeedId(feed_id, is_cat); | |
93 | ||
94 | if (!is_cat) { | |
95 | var feedr = document.getElementById("FEEDR-" + feed_id); | |
96 | if (feedr && !feedr.className.match("Selected")) { | |
97 | feedr.className = feedr.className + "Selected"; | |
98 | } | |
99 | } else { | |
100 | var feedr = document.getElementById("FCAT-" + feed_id); | |
101 | if (feedr && !feedr.className.match("Selected")) { | |
102 | feedr.className = feedr.className + "Selected"; | |
103 | } | |
104 | } | |
105 | ||
106 | disableContainerChildren("headlinesToolbar", false); | |
107 | Form.enable("main_toolbar_form"); | |
108 | ||
109 | var f = document.getElementById("headlines-frame"); | |
110 | try { | |
111 | if (reply.offset == 0) { | |
112 | debug("resetting headlines scrollTop"); | |
113 | f.scrollTop = 0; | |
114 | } | |
115 | } catch (e) { }; | |
116 | ||
117 | ||
4681834e AD |
118 | var tmp = ""; |
119 | ||
120 | rs = db.execute("SELECT title FROM feeds WHERE id = ?", [feed_id]); | |
121 | ||
122 | if (rs.isValidRow() || feed_id == -1 || feed_id == -4) { | |
123 | ||
124 | feed_title = rs.field(0); | |
125 | ||
126 | if (feed_id == -1) { | |
127 | feed_title = __("Starred articles"); | |
128 | } | |
129 | ||
130 | if (feed_id == -4) { | |
131 | feed_title = __("All articles"); | |
132 | } | |
133 | ||
134 | if (offset == 0) { | |
135 | tmp += "<div id=\"headlinesContainer\">"; | |
136 | ||
137 | tmp += "<div class=\"headlinesSubToolbar\">"; | |
138 | tmp += "<div id=\"subtoolbar_ftitle\">"; | |
139 | tmp += feed_title; | |
140 | tmp += "</div>"; | |
141 | ||
779ba075 AD |
142 | var sel_all_link; |
143 | var sel_unread_link; | |
144 | var sel_none_link; | |
145 | var sel_inv_link; | |
146 | ||
147 | if (document.getElementById("content-frame")) { | |
148 | sel_all_link = "javascript:selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', true, '', true)"; | |
149 | sel_unread_link = "javascript:selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', true, 'Unread', true)"; | |
150 | sel_none_link = "javascript:selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', false)"; | |
151 | sel_inv_link = "javascript:invertHeadlineSelection()"; | |
152 | } else { | |
153 | sel_all_link = "javascript:cdmSelectArticles('all')"; | |
154 | sel_unread_link = "javascript:cdmSelectArticles('unread')"; | |
155 | sel_none_link = "javascript:cdmSelectArticles('none')"; | |
156 | sel_inv_link = "javascript:invertHeadlineSelection()"; | |
157 | } | |
4681834e AD |
158 | |
159 | tmp += __('Select:')+ | |
160 | " <a href=\""+sel_all_link+"\">"+__('All')+"</a>, "+ | |
161 | "<a href=\""+sel_unread_link+"\">"+__('Unread')+"</a>, "+ | |
162 | "<a href=\""+sel_inv_link+"\">"+__('Invert')+"</a>, "+ | |
163 | "<a href=\""+sel_none_link+"\">"+__('None')+"</a>"; | |
164 | ||
165 | tmp += " "; | |
166 | ||
167 | tmp += "</div>"; | |
168 | ||
169 | tmp += "<div id=\"headlinesInnerContainer\" onscroll=\"headlines_scroll_handler()\">"; | |
779ba075 AD |
170 | if (document.getElementById("content-frame")) { |
171 | tmp += "<table class=\"headlinesList\" id=\"headlinesList\" cellspacing=\"0\">"; | |
172 | } | |
4681834e AD |
173 | |
174 | } | |
175 | ||
4681834e AD |
176 | var limit = 30; |
177 | ||
178 | var toolbar_form = document.forms["main_toolbar_form"]; | |
179 | ||
180 | var limit = toolbar_form.limit[toolbar_form.limit.selectedIndex].value; | |
181 | var view_mode = toolbar_form.view_mode[toolbar_form.view_mode.selectedIndex].value; | |
182 | ||
183 | var limit_qpart = ""; | |
184 | var strategy_qpart = ""; | |
185 | var mode_qpart = ""; | |
e491d06d | 186 | var offset_qpart = ""; |
4681834e AD |
187 | |
188 | if (limit != 0) { | |
189 | limit_qpart = "LIMIT " + limit; | |
190 | } | |
191 | ||
192 | if (view_mode == "all_articles") { | |
193 | mode_qpart = "1"; | |
194 | } else if (view_mode == "adaptive") { | |
195 | if (get_local_feed_unread(feed_id) > 0) { | |
196 | mode_qpart = "unread = 1"; | |
197 | } else { | |
198 | mode_qpart = "1"; | |
199 | } | |
200 | } else if (view_mode == "marked") { | |
201 | mode_qpart = "marked = 1"; | |
202 | } else if (view_mode == "unread") { | |
203 | mode_qpart = "unread = 1"; | |
204 | } else { | |
205 | mode_qpart = "1"; | |
206 | } | |
207 | ||
208 | if (feed_id > 0) { | |
209 | strategy_qpart = "feed_id = " + feed_id; | |
210 | } else if (feed_id == -1) { | |
211 | strategy_qpart = "marked = 1"; | |
212 | } else if (feed_id == -4) { | |
213 | strategy_qpart = "1"; | |
e491d06d AD |
214 | } |
215 | ||
216 | if (offset > 0) { | |
217 | offset_qpart = "OFFSET " + (offset*30); | |
218 | } else { | |
219 | offset_qpart = ""; | |
220 | } | |
4681834e AD |
221 | |
222 | var query = "SELECT * FROM articles WHERE " + | |
223 | strategy_qpart + | |
224 | " AND " + mode_qpart + | |
225 | " ORDER BY updated DESC "+ | |
e491d06d AD |
226 | limit_qpart + " " + |
227 | offset_qpart; | |
4681834e AD |
228 | |
229 | var rs = db.execute(query); | |
230 | ||
e491d06d | 231 | var line_num = offset*30; |
4681834e AD |
232 | |
233 | while (rs.isValidRow()) { | |
234 | ||
235 | var id = rs.fieldByName("id"); | |
236 | var feed_id = rs.fieldByName("feed_id"); | |
237 | ||
238 | var marked_pic; | |
239 | ||
240 | var row_class = (line_num % 2) ? "even" : "odd"; | |
241 | ||
242 | if (rs.fieldByName("unread") == "1") { | |
243 | row_class += "Unread"; | |
244 | } | |
245 | ||
246 | if (rs.fieldByName("marked") == "1") { | |
247 | marked_pic = "<img id=\"FMPIC-"+id+"\" "+ | |
248 | "src=\"images/mark_set.png\" class=\"markedPic\""+ | |
249 | "alt=\"Unstar article\" onclick='javascript:tMark("+id+")'>"; | |
250 | } else { | |
251 | marked_pic = "<img id=\"FMPIC-"+id+"\" "+ | |
252 | "src=\"images/mark_unset.png\" class=\"markedPic\""+ | |
253 | "alt=\"Star article\" onclick='javascript:tMark("+id+")'>"; | |
254 | } | |
255 | ||
256 | var mouseover_attrs = "onmouseover='postMouseIn($id)' "+ | |
257 | "onmouseout='postMouseOut($id)'"; | |
779ba075 AD |
258 | |
259 | var content_preview = truncate_string(strip_tags(rs.fieldByName("content")), | |
260 | 100); | |
4681834e | 261 | |
779ba075 | 262 | if (document.getElementById("content-frame")) { |
4681834e | 263 | |
779ba075 AD |
264 | tmp += "<tr class='"+row_class+"' id='RROW-"+id+"' "+mouseover_attrs+">"; |
265 | ||
266 | tmp += "<td class='hlUpdPic'> </td>"; | |
4681834e | 267 | |
779ba075 AD |
268 | tmp += "<td class='hlSelectRow'>"+ |
269 | "<input type=\"checkbox\" onclick=\"tSR(this)\" id=\"RCHK-"+id+"\"></td>"; | |
270 | ||
271 | tmp += "<td class='hlMarkedPic'>"+marked_pic+"</td>"; | |
272 | ||
273 | tmp += "<td onclick='view("+id+","+feed_id+")' "+ | |
274 | "class='hlContent' valign='middle'>"; | |
275 | ||
276 | tmp += "<a target=\"_blank\" id=\"RTITLE-$id\" href=\"" + | |
277 | rs.fieldByName("link") + "\"" + | |
278 | "onclick=\"return view("+id+","+feed_id+");\">"+ | |
279 | rs.fieldByName("title"); | |
4681834e | 280 | |
779ba075 AD |
281 | tmp += "<span class=\"contentPreview\"> - "+content_preview+"</span>"; |
282 | ||
283 | tmp += "</a>"; | |
4681834e | 284 | |
779ba075 | 285 | tmp += "</td>"; |
d07f08e8 | 286 | |
779ba075 | 287 | tmp += "<td class=\"hlUpdated\" onclick='view("+id+","+feed_id+")'>"+ |
d07f08e8 AD |
288 | "<nobr>"+rs.fieldByName("updated").substring(0,16)+ |
289 | "</nobr></td>"; | |
779ba075 AD |
290 | |
291 | tmp += "</tr>"; | |
292 | } else { | |
4681834e | 293 | |
779ba075 AD |
294 | var add_class = ""; |
295 | ||
296 | if (rs.fieldByName("unread") == "1") { | |
297 | add_class = "Unread"; | |
298 | } | |
299 | ||
300 | tmp += "<div class=\"cdmArticle"+add_class+"\" id=\"RROW-"+id+"\" "+ | |
301 | mouseover_attrs+"'>"; | |
302 | ||
d07f08e8 AD |
303 | feed_icon_img = "<img class=\"tinyFeedIcon\" src=\""+ |
304 | getInitParam("icons_url")+"/"+feed_id+".ico\" alt=\"\">"; | |
305 | cdm_feed_icon = "<span style=\"cursor : pointer\" "+ | |
306 | "onclick=\"viewfeed("+feed_id+")\">"+feed_icon_img+"</span>"; | |
307 | ||
779ba075 AD |
308 | tmp += "<div class=\"cdmHeader\">"; |
309 | tmp += "<div class=\"articleUpdated\">"+ | |
d07f08e8 AD |
310 | rs.fieldByName("updated").substring(0,16)+ |
311 | " "+cdm_feed_icon+"</div>"; | |
779ba075 AD |
312 | |
313 | tmp += "<span id=\"RTITLE-"+id+"\" class=\"titleWrap\">"+ | |
314 | "<a class=\"title\" onclick=\"javascript:toggleUnread("+id+", 0)\""+ | |
315 | "target=\"_blank\" href=\""+rs.fieldByName("link")+ | |
316 | "\">"+rs.fieldByName("title")+"</a>"; | |
317 | tmp += "</span></div>"; | |
318 | ||
319 | tmp += "<div class=\"cdmContent\" onclick=\"cdmClicked("+id+")\""+ | |
320 | "id=\"CICD-"+id+"\">"; | |
321 | tmp += rs.fieldByName("content"); | |
322 | tmp += "<br clear='both'>" | |
323 | tmp += "</div>"; | |
324 | ||
325 | tmp += "<div class=\"cdmFooter\"><span class='s0'>"; | |
326 | tmp += __("Select:")+ | |
327 | " <input type=\"checkbox\" "+ | |
328 | "onclick=\"toggleSelectRowById(this, 'RROW-"+id+"')\" "+ | |
329 | "class=\"feedCheckBox\" id=\"RCHK-"+id+"\">"; | |
330 | ||
331 | tmp += "</span><span class='s1'>"+marked_pic+"</span> "; | |
332 | ||
333 | tmp += "<span class='s1'>"+ | |
334 | "<img class='tagsPic' src='images/tag.png' alt='Tags' title='Tags'>"+ | |
335 | "<span id=\"ATSTR-"+id+"\">"+rs.fieldByName("tags")+"</span>"+ | |
336 | "</span>"; | |
337 | ||
338 | tmp += "<span class='s2'>Toggle: <a class=\"cdmToggleLink\""+ | |
339 | "href=\"javascript:toggleUnread("+id+")\">"+ | |
340 | "Unread</a></span>"; | |
341 | tmp += "</div>"; | |
342 | ||
343 | tmp += "</div>"; | |
344 | } | |
4681834e AD |
345 | |
346 | rs.next(); | |
347 | line_num++; | |
348 | } | |
03c96380 | 349 | |
0e923da4 AD |
350 | if (line_num - offset*30 < 30) { |
351 | _infscroll_disable = 1; | |
352 | } | |
353 | ||
03c96380 | 354 | rs.close(); |
4681834e AD |
355 | |
356 | if (offset == 0) { | |
357 | tmp += "</table>"; | |
358 | tmp += "</div></div>"; | |
359 | } | |
360 | ||
361 | if (offset == 0) { | |
e491d06d | 362 | var container = document.getElementById("headlines-frame"); |
4681834e AD |
363 | container.innerHTML = tmp; |
364 | } else { | |
365 | var ids = getSelectedArticleIds2(); | |
366 | ||
e491d06d AD |
367 | var container = document.getElementById("headlinesList"); |
368 | container.innerHTML = container.innerHTML + tmp; | |
4681834e AD |
369 | |
370 | for (var i = 0; i < ids.length; i++) { | |
371 | markHeadline(ids[i]); | |
372 | } | |
373 | } | |
374 | } | |
375 | ||
376 | remove_splash(); | |
377 | ||
0e923da4 | 378 | _infscroll_request_sent = 0; |
4681834e AD |
379 | |
380 | } catch (e) { | |
381 | exception_error("viewfeed_offline", e); | |
382 | } | |
383 | } | |
384 | ||
385 | function render_offline_feedlist() { | |
386 | try { | |
387 | var tmp = "<ul class=\"feedList\" id=\"feedList\">"; | |
388 | ||
389 | var unread = get_local_feed_unread(-4); | |
390 | ||
391 | global_unread = unread; | |
392 | updateTitle(); | |
393 | ||
394 | tmp += printFeedEntry(-4, __("All articles"), "feed", unread, | |
395 | "images/tag.png"); | |
396 | ||
397 | var unread = get_local_feed_unread(-1); | |
398 | ||
399 | tmp += printFeedEntry(-1, __("Starred articles"), "feed", unread, | |
400 | "images/mark_set.png"); | |
401 | ||
402 | tmp += "<li><hr/></li>"; | |
403 | ||
f4c11347 | 404 | /* var rs = db.execute("SELECT feeds.id,feeds.title,has_icon,COUNT(articles.id) "+ |
4681834e AD |
405 | "FROM feeds LEFT JOIN articles ON (feed_id = feeds.id) "+ |
406 | "WHERE unread = 1 OR unread IS NULL GROUP BY feeds.id "+ | |
f4c11347 AD |
407 | "ORDER BY feeds.title"); */ |
408 | ||
409 | var rs = db.execute("SELECT id,title,has_icon FROM feeds "+ | |
410 | "ORDER BY title"); | |
4681834e AD |
411 | |
412 | while (rs.isValidRow()) { | |
413 | ||
414 | var id = rs.field(0); | |
415 | var title = rs.field(1); | |
416 | var has_icon = rs.field(2); | |
f4c11347 | 417 | var unread = get_local_feed_unread(id); |
4681834e AD |
418 | |
419 | var icon = ""; | |
420 | ||
421 | if (has_icon) { | |
422 | icon = "icons/" + id + ".ico"; | |
423 | } | |
424 | ||
425 | ||
426 | var feed_icon = ""; | |
427 | ||
428 | var row_class = "feed"; | |
429 | ||
430 | if (unread > 0) { | |
431 | row_class += "Unread"; | |
432 | fctr_class = "feedCtrHasUnread"; | |
433 | } else { | |
434 | fctr_class = "feedCtrNoUnread"; | |
435 | } | |
436 | ||
437 | tmp += printFeedEntry(id, title, "feed", unread, icon); | |
438 | ||
439 | rs.next(); | |
440 | } | |
441 | ||
03c96380 AD |
442 | rs.close(); |
443 | ||
4681834e AD |
444 | tmp += "</ul>"; |
445 | ||
446 | render_feedlist(tmp); | |
447 | } catch (e) { | |
448 | exception_error("render_offline_feedlist", e); | |
449 | } | |
450 | } | |
451 | ||
452 | function init_offline() { | |
453 | try { | |
454 | offline_mode = true; | |
455 | ||
456 | Element.hide("dispSwitchPrompt"); | |
457 | Element.hide("feedBrowserPrompt"); | |
4681834e | 458 | |
69ea0cdd AD |
459 | Element.hide("topLinksOnline"); |
460 | Element.show("topLinksOffline"); | |
461 | ||
80b1c238 | 462 | var tb_form = document.getElementById("main_toolbar_form"); |
80b1c238 AD |
463 | Element.hide(tb_form.update); |
464 | ||
3c6d3586 AD |
465 | var chooser = document.getElementById("quickMenuChooser"); |
466 | chooser.disabled = true; | |
467 | ||
3034277a AD |
468 | var rs = db.execute("SELECT key, value FROM init_params"); |
469 | ||
470 | while (rs.isValidRow()) { | |
471 | init_params[rs.field(0)] = rs.field(1); | |
472 | rs.next(); | |
473 | } | |
474 | ||
475 | rs.close(); | |
4681834e AD |
476 | |
477 | render_offline_feedlist(); | |
10003c4c | 478 | init_second_stage(); |
4681834e AD |
479 | remove_splash(); |
480 | } catch (e) { | |
481 | exception_error("init_offline", e); | |
482 | } | |
483 | } | |
484 | ||
485 | function offline_download_parse(stage, transport) { | |
486 | try { | |
487 | if (transport.responseXML) { | |
488 | ||
489 | if (stage == 0) { | |
490 | ||
491 | var feeds = transport.responseXML.getElementsByTagName("feed"); | |
492 | ||
493 | if (feeds.length > 0) { | |
494 | db.execute("DELETE FROM feeds"); | |
495 | } | |
496 | ||
497 | for (var i = 0; i < feeds.length; i++) { | |
498 | var id = feeds[i].getAttribute("id"); | |
499 | var has_icon = feeds[i].getAttribute("has_icon"); | |
500 | var title = feeds[i].firstChild.nodeValue; | |
501 | ||
502 | db.execute("INSERT INTO feeds (id,title,has_icon)"+ | |
503 | "VALUES (?,?,?)", | |
504 | [id, title, has_icon]); | |
505 | } | |
506 | ||
507 | window.setTimeout("update_offline_data("+(stage+1)+")", 60*1000); | |
508 | } else { | |
509 | ||
510 | var articles = transport.responseXML.getElementsByTagName("article"); | |
511 | ||
512 | var articles_found = 0; | |
513 | ||
514 | for (var i = 0; i < articles.length; i++) { | |
515 | var a = eval("("+articles[i].firstChild.nodeValue+")"); | |
516 | articles_found++; | |
517 | if (a) { | |
518 | ||
519 | var date = new Date(); | |
520 | var ts = Math.round(date.getTime() / 1000); | |
521 | ||
522 | db.execute("DELETE FROM articles WHERE id = ?", [a.id]); | |
523 | db.execute("INSERT INTO articles "+ | |
524 | "(id, feed_id, title, link, guid, updated, content, "+ | |
3034277a AD |
525 | "unread, marked, tags, added, comments) "+ |
526 | "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", | |
4681834e | 527 | [a.id, a.feed_id, a.title, a.link, a.guid, a.updated, |
3034277a AD |
528 | a.content, a.unread, a.marked, a.tags, ts, |
529 | a.comments]); | |
4681834e AD |
530 | |
531 | } | |
532 | } | |
533 | ||
534 | if (articles_found > 0) { | |
535 | window.setTimeout("update_offline_data("+(stage+1)+")", 60*1000); | |
536 | } else { | |
537 | window.setTimeout("update_offline_data(0)", 1800*1000); | |
538 | ||
539 | var date = new Date(); | |
540 | var ts = Math.round(date.getTime() / 1000); | |
541 | ||
542 | db.execute("DELETE FROM articles WHERE added < ? - 2592000", [ts]); | |
543 | ||
544 | } | |
545 | } | |
546 | ||
b2319311 AD |
547 | notify(''); |
548 | ||
4681834e AD |
549 | } |
550 | } catch (e) { | |
551 | exception_error("offline_download_parse", e); | |
552 | } | |
553 | } | |
554 | ||
555 | function update_offline_data(stage) { | |
556 | try { | |
557 | ||
558 | if (!stage) stage = 0; | |
823ff6aa | 559 | if (offline_mode) return; |
4681834e AD |
560 | |
561 | debug("update_offline_data: stage " + stage); | |
562 | ||
823ff6aa | 563 | notify_progress("Updating offline data... (" + stage +")", true); |
4681834e AD |
564 | |
565 | var query = "backend.php?op=rpc&subop=download&stage=" + stage; | |
566 | ||
567 | var rs = db.execute("SELECT MAX(id), MIN(id) FROM articles"); | |
03c96380 | 568 | |
4681834e AD |
569 | if (rs.isValidRow() && rs.field(0)) { |
570 | var offline_dl_max_id = rs.field(0); | |
571 | var offline_dl_min_id = rs.field(1); | |
572 | ||
573 | query = query + "&cidt=" + offline_dl_max_id; | |
574 | query = query + "&cidb=" + offline_dl_min_id; | |
575 | } | |
576 | ||
03c96380 AD |
577 | rs.close(); |
578 | ||
4681834e AD |
579 | new Ajax.Request(query, { |
580 | onComplete: function(transport) { | |
581 | offline_download_parse(stage, transport); | |
582 | debug("update_offline_data: done " + stage); | |
583 | } }); | |
584 | ||
585 | } catch (e) { | |
586 | exception_error("initiate_offline_download", e); | |
587 | } | |
588 | } | |
589 | ||
590 | function set_feedlist_counter(id, ctr) { | |
591 | try { | |
592 | ||
593 | var feedctr = document.getElementById("FEEDCTR-" + id); | |
594 | var feedu = document.getElementById("FEEDU-" + id); | |
595 | var feedr = document.getElementById("FEEDR-" + id); | |
596 | ||
597 | if (feedctr && feedu && feedr) { | |
598 | ||
599 | var row_needs_hl = (ctr > 0 && ctr > parseInt(feedu.innerHTML)); | |
600 | ||
601 | feedu.innerHTML = ctr; | |
602 | ||
603 | if (ctr > 0) { | |
604 | feedctr.className = "feedCtrHasUnread"; | |
605 | if (!feedr.className.match("Unread")) { | |
606 | var is_selected = feedr.className.match("Selected"); | |
607 | ||
608 | feedr.className = feedr.className.replace("Selected", ""); | |
609 | feedr.className = feedr.className.replace("Unread", ""); | |
610 | ||
611 | feedr.className = feedr.className + "Unread"; | |
612 | ||
613 | if (is_selected) { | |
614 | feedr.className = feedr.className + "Selected"; | |
615 | } | |
616 | ||
617 | } | |
618 | ||
619 | if (row_needs_hl) { | |
620 | new Effect.Highlight(feedr, {duration: 1, startcolor: "#fff7d5", | |
621 | queue: { position:'end', scope: 'EFQ-' + id, limit: 1 } } ); | |
622 | } | |
623 | } else { | |
624 | feedctr.className = "feedCtrNoUnread"; | |
625 | feedr.className = feedr.className.replace("Unread", ""); | |
626 | } | |
627 | } | |
628 | ||
629 | } catch (e) { | |
630 | exception_error("set_feedlist_counter", e); | |
631 | } | |
632 | } | |
633 | ||
634 | function update_local_feedlist_counters() { | |
635 | try { | |
f4c11347 | 636 | if (!offline_mode) return; |
4681834e | 637 | |
f4c11347 | 638 | /* var rs = db.execute("SELECT feeds.id,COUNT(articles.id) "+ |
4681834e AD |
639 | "FROM feeds LEFT JOIN articles ON (feed_id = feeds.id) "+ |
640 | "WHERE unread = 1 OR unread IS NULL GROUP BY feeds.id "+ | |
f4c11347 AD |
641 | "ORDER BY feeds.title"); */ |
642 | ||
643 | var rs = db.execute("SELECT id,title,has_icon FROM feeds "+ | |
644 | "ORDER BY title"); | |
4681834e AD |
645 | |
646 | while (rs.isValidRow()) { | |
647 | var id = rs.field(0); | |
f4c11347 | 648 | var ctr = get_local_feed_unread(id); |
4681834e AD |
649 | |
650 | set_feedlist_counter(id, ctr); | |
651 | ||
652 | rs.next(); | |
653 | } | |
654 | ||
03c96380 AD |
655 | rs.close(); |
656 | ||
4681834e AD |
657 | set_feedlist_counter(-4, get_local_feed_unread(-4)); |
658 | set_feedlist_counter(-1, get_local_feed_unread(-1)); | |
659 | ||
660 | hideOrShowFeeds(getInitParam("hide_read_feeds") == 1); | |
661 | ||
662 | global_unread = get_local_feed_unread(-4); | |
663 | updateTitle(); | |
664 | ||
665 | } catch (e) { | |
666 | exception_error("update_local_feedlist_counters", e); | |
667 | } | |
668 | } | |
774b8df8 AD |
669 | |
670 | function get_local_feed_unread(id) { | |
671 | try { | |
672 | var rs; | |
673 | ||
674 | if (id == -4) { | |
675 | rs = db.execute("SELECT SUM(unread) FROM articles"); | |
676 | } else if (id == -1) { | |
677 | rs = db.execute("SELECT SUM(unread) FROM articles WHERE marked = 1"); | |
678 | } else { | |
679 | rs = db.execute("SELECT SUM(unread) FROM articles WHERE feed_id = ?", [id]); | |
680 | } | |
681 | ||
03c96380 AD |
682 | var a = false; |
683 | ||
774b8df8 | 684 | if (rs.isValidRow()) { |
03c96380 | 685 | a = rs.field(0); |
774b8df8 | 686 | } else { |
03c96380 | 687 | a = 0; |
774b8df8 AD |
688 | } |
689 | ||
03c96380 AD |
690 | rs.close(); |
691 | ||
692 | return a; | |
693 | ||
774b8df8 AD |
694 | } catch (e) { |
695 | exception_error("get_local_feed_unread", e); | |
696 | } | |
697 | } | |
698 | ||
25d99353 AD |
699 | function init_gears() { |
700 | try { | |
701 | ||
702 | if (window.google && google.gears) { | |
703 | localServer = google.gears.factory.create("beta.localserver"); | |
704 | store = localServer.createManagedStore("tt-rss"); | |
705 | db = google.gears.factory.create('beta.database'); | |
706 | db.open('tt-rss'); | |
707 | ||
708 | db.execute("CREATE TABLE IF NOT EXISTS version (schema_version text)"); | |
709 | ||
710 | var rs = db.execute("SELECT schema_version FROM version"); | |
711 | ||
712 | var version = ""; | |
713 | ||
714 | if (rs.isValidRow()) { | |
715 | version = rs.field(0); | |
716 | } | |
717 | ||
3034277a AD |
718 | rs.close(); |
719 | ||
25d99353 | 720 | if (version != SCHEMA_VERSION) { |
3034277a | 721 | db.execute("DROP TABLE IF EXISTS init_params"); |
b871dd06 AD |
722 | db.execute("DROP TABLE IF EXISTS cache"); |
723 | db.execute("DROP TABLE IF EXISTS feeds"); | |
724 | db.execute("DROP TABLE IF EXISTS articles"); | |
3034277a AD |
725 | db.execute("DROP TABLE IF EXISTS version"); |
726 | db.execute("CREATE TABLE IF NOT EXISTS version (schema_version text)"); | |
25d99353 AD |
727 | db.execute("INSERT INTO version (schema_version) VALUES (?)", |
728 | [SCHEMA_VERSION]); | |
729 | } | |
730 | ||
3034277a AD |
731 | db.execute("CREATE TABLE IF NOT EXISTS init_params (key text, value text)"); |
732 | ||
25d99353 | 733 | db.execute("CREATE TABLE IF NOT EXISTS cache (id text, article text, param text, added text)"); |
b871dd06 AD |
734 | db.execute("CREATE TABLE IF NOT EXISTS feeds (id integer, title text, has_icon integer)"); |
735 | db.execute("CREATE TABLE IF NOT EXISTS articles (id integer, feed_id integer, title text, link text, guid text, updated text, content text, tags text, unread text, marked text, added text, comments text)"); | |
779ba075 | 736 | |
779ba075 | 737 | db.execute("DELETE FROM cache WHERE id LIKE 'F:%' OR id LIKE 'C:%'"); |
69ea0cdd AD |
738 | |
739 | Element.show("restartOfflinePic"); | |
740 | ||
25d99353 AD |
741 | } |
742 | ||
743 | cache_expire(); | |
744 | ||
745 | } catch (e) { | |
746 | exception_error("init_gears", e); | |
747 | } | |
748 | } | |
749 | ||
69ea0cdd AD |
750 | function gotoOffline() { |
751 | window.location.href = "tt-rss.php?offline=1"; | |
752 | } | |
753 | ||
754 | function gotoOnline() { | |
755 | window.location.href = "tt-rss.php"; | |
756 | } | |
774b8df8 | 757 |