diff options
Diffstat (limited to 'modules')
-rw-r--r-- | modules/backend-rpc.php | 206 | ||||
-rw-r--r-- | modules/popup-dialog.php | 42 |
2 files changed, 248 insertions, 0 deletions
diff --git a/modules/backend-rpc.php b/modules/backend-rpc.php index 04e2858ca..6bae380a1 100644 --- a/modules/backend-rpc.php +++ b/modules/backend-rpc.php @@ -514,6 +514,212 @@ return; } + if ($subop == "download") { + $stage = (int) $_REQUEST["stage"]; + $cidt = db_escape_string($_REQUEST["cidt"]); + $cidb = db_escape_string($_REQUEST["cidb"]); + $sync = db_escape_string($_REQUEST["sync"]); + //$amount = (int) $_REQUEST["amount"]; + //$unread_only = db_escape_string($_REQUEST["unread_only"]); + //if (!$amount) $amount = 50; + + $amount = 100; + $unread_only = true; + + print "<rpc-reply>"; + + $sync = split(";", $sync); + + print "<sync>"; + + if (count($sync) > 0) { + if (strtotime($sync[0])) { + $last_online = db_escape_string($sync[0]); + + print "<sync-point><![CDATA[$last_online]]></sync-point>"; + + for ($i = 1; $i < count($sync); $i++) { + $e = split(",", $sync[$i]); + + if (count($e) == 3) { + + $id = (int) $e[0]; + $unread = bool_to_sql_bool((bool) $e[1]); + $marked = bool_to_sql_bool((bool) $e[2]); + + /* Marked status is not synchronized yet */ + + $query = "UPDATE ttrss_user_entries SET + unread = $unread, + last_read = '$last_online' + WHERE ref_id = '$id' AND + (last_read IS NULL OR last_read < '$last_online') AND + owner_uid = ".$_SESSION["uid"]; + + $result = db_query($link, $query); + +// if (db_affected_rows($result) > 0) { + print "<sync-ok id=\"$id\"/>"; +// } + + } + } + + /* Maybe we need to further update local DB for this client */ + + $query = "SELECT ref_id,unread FROM ttrss_user_entries + WHERE last_read >= '$last_online' AND + owner_uid = ".$_SESSION["uid"]; + + $result = db_query($link, $query); + + while ($line = db_fetch_assoc($result)) { + print "<sync-ok id=\"".$line["ref_id"]."\"/>"; + } + + } + } + + print "</sync>"; + + if ($stage == 0) { + print "<feeds>"; + + $result = db_query($link, "SELECT id, title, cat_id FROM + ttrss_feeds WHERE hidden = false AND owner_uid = ".$_SESSION["uid"]); + + while ($line = db_fetch_assoc($result)) { + + $has_icon = (int) feed_has_icon($line["id"]); + + print "<feed has_icon=\"$has_icon\" + cat_id=\"".(int)$line["cat_id"]."\" id=\"".$line["id"]."\"><![CDATA["; + print $line["title"]; + print "]]></feed>"; + } + + print "</feeds>"; + + print "<feed-categories>"; + + $result = db_query($link, "SELECT id, title, collapsed FROM + ttrss_feed_categories WHERE owner_uid = ".$_SESSION["uid"]); + + print "<category id=\"0\" collapsed=\"". + (int)$_COOKIE["ttrss_vf_uclps"]."\"><![CDATA["; + print __("Uncategorized"); + print "]]></category>"; + + print "<category id=\"-1\" collapsed=\"". + (int)$_COOKIE["ttrss_vf_vclps"]."\"><![CDATA["; + print __("Special"); + print "]]></category>"; + + print "<category id=\"-2\" collapsed=\"". + (int)$_COOKIE["ttrss_vf_lclps"]."\"><![CDATA["; + print __("Labels"); + print "]]></category>"; + + while ($line = db_fetch_assoc($result)) { + print "<category + id=\"".$line["id"]."\" + collapsed=\"".(int)sql_bool_to_bool($line["collapsed"])."\"><![CDATA["; + print $line["title"]; + print "]]></category>"; + } + + print "</feed-categories>"; + + print "<labels>"; + + $result = db_query($link, "SELECT * FROM + ttrss_labels2 WHERE owner_uid = ".$_SESSION["uid"]); + + while ($line = db_fetch_assoc($result)) { + print "<label + id=\"".$line["id"]."\" + fg_color=\"".$line["fg_color"]."\" + bg_color=\"".$line["bg_color"]."\" + ><![CDATA["; + print $line["caption"]; + print "]]></label>"; + } + + + print "</labels>"; + + } + + if ($stage > 0) { + print "<articles>"; + + $limit = 50; + $skip = $limit*($stage-1); + + print "<limit value=\"$limit\"/>"; + + if ($amount > 0) $amount -= $skip; + + if ($amount > 0) { + + $limit = min($limit, $amount); + + if ($unread_only) { + $unread_qpart = "(unread = true OR marked = true) AND "; + } + + if ($cidt && $cidb) { + $cid_qpart = "(id > $cidt OR id < $cidb) AND "; + } + + if (DB_TYPE == "pgsql") { + $date_qpart = "updated >= NOW() - INTERVAL '1 month' AND"; + } else { + $date_qpart = "updated >= DATE_SUB(NOW(), INTERVAL 1 MONTH) AND"; + } + + $result = db_query($link, + "SELECT DISTINCT ttrss_entries.id,ttrss_entries.title, + guid,link,comments, + feed_id,content,updated,unread,marked FROM + ttrss_user_entries,ttrss_entries,ttrss_feeds + WHERE $unread_qpart $cid_qpart $date_qpart + hidden = false AND + ttrss_feeds.id = feed_id AND + ref_id = ttrss_entries.id AND + ttrss_user_entries.owner_uid = ".$_SESSION["uid"]." + ORDER BY updated DESC LIMIT $limit OFFSET $skip"); + + if (function_exists('json_encode')) { + + while ($line = db_fetch_assoc($result)) { + print "<article><![CDATA["; + + $line["marked"] = (int)sql_bool_to_bool($line["marked"]); + $line["unread"] = (int)sql_bool_to_bool($line["unread"]); + + $line["labels"] = get_article_labels($link, $line["id"]); + +// too slow :( +// $line["tags"] = format_tags_string( +// get_article_tags($link, $line["id"]), $line["id"]); + + print json_encode($line); + print "]]></article>"; + } + } + + } + + print "</articles>"; + + } + + print "</rpc-reply>"; + + return; + } + print "<rpc-reply><error>Unknown method: $subop</error></rpc-reply>"; } ?> diff --git a/modules/popup-dialog.php b/modules/popup-dialog.php index 465d3bcd9..2ba0740c4 100644 --- a/modules/popup-dialog.php +++ b/modules/popup-dialog.php @@ -461,6 +461,48 @@ return; } +/* if ($id == "offlineDownload") { + print "<div id=\"infoBoxTitle\">".__('Download articles')."</div>"; + print "<div class=\"infoBoxContents\">"; + + print "<form name='download_ops_form' id='download_ops_form'>"; + + print "<div class=\"dlgSec\">".__("Download")."</div>"; + + print "<div class=\"dlgSecCont\">"; + + $amount = array( + 50 => 50, + 100 => 100, + 250 => 250, + 500 => 500); + + print_select_hash("amount", 50, $amount); + + print " " . __("latest articles for offline reading."); + + print "<br/>"; + + print "<input checked='yes' type='checkbox' name='unread_only' id='unread_only'>"; + print "<label for='unread_only'>".__('Only include unread articles')."</label>"; + + print "</div>"; + + print "</form>"; + + print "<div class=\"dlgButtons\"> + <input class=\"button\" + type=\"submit\" onclick=\"return initiate_offline_download(0, this)\" value=\"".__('Download')."\"> + <input class=\"button\" + type=\"submit\" onclick=\"return closeInfoBox()\" + value=\"".__('Cancel')."\"></div>"; + + print "</div>"; + + return; + } */ + + print "<div id='infoBoxTitle'>Internal Error</div> <div id='infoBoxContents'> <p>Unknown dialog <b>$id</b></p> |