summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/backend-rpc.php206
-rw-r--r--modules/popup-dialog.php42
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>