backend/view: use JSON instead of XML; backend: output session invalid error using JSON

master
Andrew Dolgov 13 years ago
parent 014d3ad823
commit 009646d23a

@ -3,7 +3,7 @@
if (get_magic_quotes_gpc()) { if (get_magic_quotes_gpc()) {
function stripslashes_deep($value) { function stripslashes_deep($value) {
$value = is_array($value) ? $value = is_array($value) ?
array_map('stripslashes_deep', $value) : stripslashes($value); array_map('stripslashes_deep', $value) : stripslashes($value);
return $value; return $value;
} }
@ -24,19 +24,19 @@
no_cache_incantation(); no_cache_incantation();
if (ENABLE_TRANSLATIONS == true) { if (ENABLE_TRANSLATIONS == true) {
startup_gettext(); startup_gettext();
} }
$script_started = getmicrotime(); $script_started = getmicrotime();
$link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if (!$link) { if (!$link) {
if (DB_TYPE == "mysql") { if (DB_TYPE == "mysql") {
print mysql_error(); print mysql_error();
} }
// PG seems to display its own errors just fine by default. // PG seems to display its own errors just fine by default.
return; return;
} }
@ -48,9 +48,8 @@
$print_exec_time = false; $print_exec_time = false;
if ((!$op || $op == "rpc" || $op == "rss" || if ((!$op || $op == "rpc" || $op == "rss" ||
($op == "view" && $mode != "zoom") || $op == "digestSend" || $op == "dlg" ||
$op == "digestSend" || $op == "dlg" ||
$op == "viewfeed" || $op == "publish" || $op == "viewfeed" || $op == "publish" ||
$op == "globalUpdateFeeds") && !$_REQUEST["noxml"]) { $op == "globalUpdateFeeds") && !$_REQUEST["noxml"]) {
header("Content-Type: application/xml; charset=utf-8"); header("Content-Type: application/xml; charset=utf-8");
@ -58,7 +57,7 @@
if (ENABLE_GZIP_OUTPUT) { if (ENABLE_GZIP_OUTPUT) {
ob_start("ob_gzhandler"); ob_start("ob_gzhandler");
} }
} else { } else {
if (!$_REQUEST["noxml"]) { if (!$_REQUEST["noxml"]) {
header("Content-Type: text/html; charset=utf-8"); header("Content-Type: text/html; charset=utf-8");
@ -67,25 +66,28 @@
} }
} }
if (!$op) {
header("Content-Type: application/xml");
print_error_xml(7); exit;
}
if (SINGLE_USER_MODE) { if (SINGLE_USER_MODE) {
authenticate_user($link, "admin", null); authenticate_user($link, "admin", null);
} }
if (!($_SESSION["uid"] && validate_session($link)) && $op != "globalUpdateFeeds" /* if (!($_SESSION["uid"] && validate_session($link)) && $op != "globalUpdateFeeds"
&& $op != "rss" && $op != "getUnread" && $op != "publish" && $op != "getProfiles") { && $op != "rss" && $op != "getUnread" && $op != "publish" && $op != "getProfiles") {
if ($op == "rpc" || $op == "viewfeed" || $op == "view") { if ($op == "rpc" || $op == "viewfeed" || $op == "view") {
print_error_xml(6); die; print_error_xml(6); exit;
} else { } else {
header("Location: tt-rss.php?return=" . header("Location: tt-rss.php?return=" .
urlencode($_SERVER['REQUEST_URI'])); urlencode($_SERVER['REQUEST_URI']));
} }
exit; exit;
} */
if (!($_SESSION["uid"] && validate_session($link)) && $op != "globalUpdateFeeds" &&
$op != "rss" && $op != "getUnread" && $op != "getProfiles") {
header("Content-Type: text/plain");
print json_encode(array("error" => array("code" => 6)));
return;
} }
$purge_intervals = array( $purge_intervals = array(
@ -121,7 +123,7 @@
$update_methods = array( $update_methods = array(
0 => __("Default"), 0 => __("Default"),
1 => __("Magpie"), 1 => __("Magpie"),
2 => __("SimplePie"), 2 => __("SimplePie"),
3 => __("Twitter OAuth")); 3 => __("Twitter OAuth"));
if (DEFAULT_UPDATE_METHOD == "1") { if (DEFAULT_UPDATE_METHOD == "1") {
@ -131,7 +133,7 @@
} }
$access_level_names = array( $access_level_names = array(
0 => __("User"), 0 => __("User"),
5 => __("Power User"), 5 => __("Power User"),
10 => __("Administrator")); 10 => __("Administrator"));
@ -157,7 +159,7 @@
switch($subop) { switch($subop) {
case "catchupAll": case "catchupAll":
db_query($link, "UPDATE ttrss_user_entries SET db_query($link, "UPDATE ttrss_user_entries SET
last_read = NOW(),unread = false WHERE owner_uid = " . $_SESSION["uid"]); last_read = NOW(),unread = false WHERE owner_uid = " . $_SESSION["uid"]);
ccache_zero_all($link, $_SESSION["uid"]); ccache_zero_all($link, $_SESSION["uid"]);
@ -217,15 +219,15 @@
$mode = db_escape_string($_REQUEST["mode"]); $mode = db_escape_string($_REQUEST["mode"]);
$omode = db_escape_string($_REQUEST["omode"]); $omode = db_escape_string($_REQUEST["omode"]);
if ($mode != "zoom") print "<reply>"; // in prefetch mode we only output requested cids, main article
// in prefetch mode we only output requested cids, main article
// just gets marked as read (it already exists in client cache) // just gets marked as read (it already exists in client cache)
$articles = array();
if ($mode == "") { if ($mode == "") {
outputArticleXML($link, $id, false); array_push($articles, format_article($link, $id, false));
} else if ($mode == "zoom") { } else if ($mode == "zoom") {
outputArticleXML($link, $id, false, true, true); array_push($articles, format_article($link, $id, false, true, true));
} else { } else {
catchupArticleById($link, $id, 0); catchupArticleById($link, $id, 0);
} }
@ -233,18 +235,13 @@
if (!$_SESSION["bw_limit"]) { if (!$_SESSION["bw_limit"]) {
foreach ($cids as $cid) { foreach ($cids as $cid) {
if ($cid) { if ($cid) {
outputArticleXML($link, $cid, false, false); array_push($articles, format_article($link, $cid, false, false));
} }
} }
} }
/* if ($mode == "prefetch") { print json_encode($articles);
print "<counters><![CDATA[";
print json_encode(getAllCounters($link, $omode));
print "]]></counters>";
} */
if ($mode != "zoom") print "</reply>";
break; // view break; // view
case "viewfeed": case "viewfeed":
@ -298,7 +295,7 @@
} else { } else {
print "<headlines id=\"$next_unread_feed\" is_cat=\"$cat_view\">"; print "<headlines id=\"$next_unread_feed\" is_cat=\"$cat_view\">";
} }
$override_order = false; $override_order = false;
if (get_pref($link, "SORT_HEADLINES_BY_FEED_DATE", $owner_uid)) { if (get_pref($link, "SORT_HEADLINES_BY_FEED_DATE", $owner_uid)) {
@ -311,7 +308,7 @@
case "date": case "date":
if (get_pref($link, 'REVERSE_HEADLINES', $owner_uid)) { if (get_pref($link, 'REVERSE_HEADLINES', $owner_uid)) {
$override_order = "$date_sort_field"; $override_order = "$date_sort_field";
} else { } else {
$override_order = "$date_sort_field DESC"; $override_order = "$date_sort_field DESC";
} }
break; break;
@ -335,8 +332,8 @@
if ($_REQUEST["debug"]) $timing_info = print_checkpoint("04", $timing_info); if ($_REQUEST["debug"]) $timing_info = print_checkpoint("04", $timing_info);
$ret = outputHeadlinesList($link, $feed, $subop, $ret = outputHeadlinesList($link, $feed, $subop,
$view_mode, $limit, $cat_view, $next_unread_feed, $offset, $view_mode, $limit, $cat_view, $next_unread_feed, $offset,
$vgroup_last_feed, $override_order); $vgroup_last_feed, $override_order);
$topmost_article_ids = $ret[0]; $topmost_article_ids = $ret[0];
@ -376,13 +373,18 @@
if ($_REQUEST["debug"]) $timing_info = print_checkpoint("10", $timing_info); if ($_REQUEST["debug"]) $timing_info = print_checkpoint("10", $timing_info);
if (is_array($topmost_article_ids) && !get_pref($link, 'COMBINED_DISPLAY_MODE') && !$_SESSION["bw_limit"]) { /* if (is_array($topmost_article_ids) && !get_pref($link, 'COMBINED_DISPLAY_MODE') && !$_SESSION["bw_limit"]) {
print "<articles>";
$articles = array();
foreach ($topmost_article_ids as $id) { foreach ($topmost_article_ids as $id) {
outputArticleXML($link, $id, $feed, false); array_push($articles, format_article($link, $id, $feed, false));
} }
print "</articles>";
} print "<articles><![CDATA[";
print json_encode($articles);
print "]]></articles>";
} */
if ($_REQUEST["debug"]) $timing_info = print_checkpoint("20", $timing_info); if ($_REQUEST["debug"]) $timing_info = print_checkpoint("20", $timing_info);
@ -391,7 +393,7 @@
print "<counters><![CDATA["; print "<counters><![CDATA[";
print json_encode(getAllCounters($link, $omode, $feed)); print json_encode(getAllCounters($link, $omode, $feed));
print "]]></counters>"; print "]]></counters>";
} }
if ($_REQUEST["debug"]) $timing_info = print_checkpoint("30", $timing_info); if ($_REQUEST["debug"]) $timing_info = print_checkpoint("30", $timing_info);
@ -481,7 +483,6 @@
$search, $search_mode, $match_on, $view_mode); $search, $search_mode, $match_on, $view_mode);
} else { } else {
header('HTTP/1.1 403 Forbidden'); header('HTTP/1.1 403 Forbidden');
print_error_xml(6); die;
} }
break; // rss break; // rss
@ -523,7 +524,7 @@
break; // digestSend break; // digestSend
case "loading": case "loading":
print __("Loading, please wait...") . " " . print __("Loading, please wait...") . " " .
"<img src='images/indicator_tiny.gif'>"; "<img src='images/indicator_tiny.gif'>";
case "getProfiles": case "getProfiles":

@ -4487,9 +4487,13 @@
return $entry; return $entry;
} }
function outputArticleXML($link, $id, $feed_id, $mark_as_read = true, function format_article($link, $id, $feed_id, $mark_as_read = true,
$zoom_mode = false) { $zoom_mode = false) {
$rv = array();
$rv['id'] = $id;
/* we can figure out feed_id from article id anyway, why do we /* we can figure out feed_id from article id anyway, why do we
* pass feed_id here? let's ignore the argument :( */ * pass feed_id here? let's ignore the argument :( */
@ -4498,7 +4502,9 @@
$feed_id = (int) db_fetch_result($result, 0, "feed_id"); $feed_id = (int) db_fetch_result($result, 0, "feed_id");
if (!$zoom_mode) { print "<article id='$id'><![CDATA["; }; $rv['feed_id'] = $feed_id;
//if (!$zoom_mode) { print "<article id='$id'><![CDATA["; };
$result = db_query($link, "SELECT rtl_content, always_display_enclosures FROM ttrss_feeds $result = db_query($link, "SELECT rtl_content, always_display_enclosures FROM ttrss_feeds
WHERE id = '$feed_id' AND owner_uid = " . $_SESSION["uid"]); WHERE id = '$feed_id' AND owner_uid = " . $_SESSION["uid"]);
@ -4568,28 +4574,19 @@
if ($zoom_mode) { if ($zoom_mode) {
header("Content-Type: text/html"); header("Content-Type: text/html");
print "<html><head> $rv['content'] .= "<html><head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>
<title>Tiny Tiny RSS - ".$line["title"]."</title> <title>Tiny Tiny RSS - ".$line["title"]."</title>
<link rel=\"stylesheet\" type=\"text/css\" href=\"tt-rss.css\"> <link rel=\"stylesheet\" type=\"text/css\" href=\"tt-rss.css\">
</head><body>"; </head><body>";
} }
print "<div id=\"PTITLE-$id\" style=\"display : none\">" . $rv['content'] .= "<div id=\"PTITLE-$id\" style=\"display : none\">" .
truncate_string(strip_tags($line['title']), 15) . "</div>"; truncate_string(strip_tags($line['title']), 15) . "</div>";
print "<div class=\"postReply\" id=\"POST-$id\">"; $rv['content'] .= "<div class=\"postReply\" id=\"POST-$id\">";
/* print "<div dojoType=\"dijit.Menu\" style=\"display: none;\"
targetNodeIds=\"POSTHDR-$id\">";
print "<div onclick=\"postOpenInNewTab(event, $id)\"
dojoType=\"dijit.MenuItem\">".__('View in a new tab')."</div>";
print "<div dojoType=\"dijit.MenuSeparator\"></div>";
print "<div onclick=\"openArticleInNewWindow($id)\"
dojoType=\"dijit.MenuItem\">".__('Open original article')."</div>";
print "</div>"; */
print "<div onclick=\"return postClicked(event, $id)\" $rv['content'] .= "<div onclick=\"return postClicked(event, $id)\"
class=\"postHeader\" id=\"POSTHDR-$id\">"; class=\"postHeader\" id=\"POSTHDR-$id\">";
$entry_author = $line["author"]; $entry_author = $line["author"];
@ -4601,69 +4598,69 @@
$parsed_updated = make_local_datetime($link, $line["updated"], true, $parsed_updated = make_local_datetime($link, $line["updated"], true,
false, true); false, true);
print "<div class=\"postDate$rtl_class\">$parsed_updated</div>"; $rv['content'] .= "<div class=\"postDate$rtl_class\">$parsed_updated</div>";
if ($line["link"]) { if ($line["link"]) {
print "<div clear='both'><a target='_blank' $rv['content'] .= "<div clear='both'><a target='_blank'
title=\"".htmlspecialchars($line['title'])."\" title=\"".htmlspecialchars($line['title'])."\"
href=\"" . href=\"" .
$line["link"] . "\">" . $line["link"] . "\">" .
truncate_string($line["title"], 100) . truncate_string($line["title"], 100) .
"<span class='author'>$entry_author</span></a></div>"; "<span class='author'>$entry_author</span></a></div>";
} else { } else {
print "<div clear='both'>" . $line["title"] . "$entry_author</div>"; $rv['content'] .= "<div clear='both'>" . $line["title"] . "$entry_author</div>";
} }
$tags_str = format_tags_string(get_article_tags($link, $id), $id); $tags_str = format_tags_string(get_article_tags($link, $id), $id);
if (!$entry_comments) $entry_comments = "&nbsp;"; # placeholder if (!$entry_comments) $entry_comments = "&nbsp;"; # placeholder
print "<div style='float : right'> $rv['content'] .= "<div style='float : right'>
<img src='".theme_image($link, 'images/tag.png')."' <img src='".theme_image($link, 'images/tag.png')."'
class='tagsPic' alt='Tags' title='Tags'>&nbsp;"; class='tagsPic' alt='Tags' title='Tags'>&nbsp;";
if (!$zoom_mode) { if (!$zoom_mode) {
print "<span id=\"ATSTR-$id\">$tags_str</span> $rv['content'] .= "<span id=\"ATSTR-$id\">$tags_str</span>
<a title=\"".__('Edit tags for this article')."\" <a title=\"".__('Edit tags for this article')."\"
href=\"#\" onclick=\"editArticleTags($id, $feed_id)\">(+)</a>"; href=\"#\" onclick=\"editArticleTags($id, $feed_id)\">(+)</a>";
print "<img src=\"".theme_image($link, 'images/art-zoom.png')."\" $rv['content'] .= "<img src=\"".theme_image($link, 'images/art-zoom.png')."\"
class='tagsPic' style=\"cursor : pointer\" class='tagsPic' style=\"cursor : pointer\"
onclick=\"postOpenInNewTab(event, $id)\" onclick=\"postOpenInNewTab(event, $id)\"
alt='Zoom' title='".__('Open article in new tab')."'>"; alt='Zoom' title='".__('Open article in new tab')."'>";
//$note_escaped = htmlspecialchars($line['note'], ENT_QUOTES); //$note_escaped = htmlspecialchars($line['note'], ENT_QUOTES);
print "<img src=\"".theme_image($link, 'images/art-pub-note.png')."\" $rv['content'] .= "<img src=\"".theme_image($link, 'images/art-pub-note.png')."\"
class='tagsPic' style=\"cursor : pointer\" class='tagsPic' style=\"cursor : pointer\"
onclick=\"editArticleNote($id)\" onclick=\"editArticleNote($id)\"
alt='PubNote' title='".__('Edit article note')."'>"; alt='PubNote' title='".__('Edit article note')."'>";
if (DIGEST_ENABLE) { if (DIGEST_ENABLE) {
print "<img src=\"".theme_image($link, 'images/art-email.png')."\" $rv['content'] .= "<img src=\"".theme_image($link, 'images/art-email.png')."\"
class='tagsPic' style=\"cursor : pointer\" class='tagsPic' style=\"cursor : pointer\"
onclick=\"emailArticle($id)\" onclick=\"emailArticle($id)\"
alt='Zoom' title='".__('Forward by email')."'>"; alt='Zoom' title='".__('Forward by email')."'>";
} }
if (ENABLE_TWEET_BUTTON) { if (ENABLE_TWEET_BUTTON) {
print "<img src=\"".theme_image($link, 'images/art-tweet.png')."\" $rv['content'] .= "<img src=\"".theme_image($link, 'images/art-tweet.png')."\"
class='tagsPic' style=\"cursor : pointer\" class='tagsPic' style=\"cursor : pointer\"
onclick=\"tweetArticle($id)\" onclick=\"tweetArticle($id)\"
alt='Zoom' title='".__('Share on Twitter')."'>"; alt='Zoom' title='".__('Share on Twitter')."'>";
} }
print "<img src=\"".theme_image($link, 'images/digest_checkbox.png')."\" $rv['content'] .= "<img src=\"".theme_image($link, 'images/digest_checkbox.png')."\"
class='tagsPic' style=\"cursor : pointer\" class='tagsPic' style=\"cursor : pointer\"
onclick=\"closeArticlePanel($id)\" onclick=\"closeArticlePanel($id)\"
alt='Zoom' title='".__('Close this panel')."'>"; alt='Zoom' title='".__('Close this panel')."'>";
} else { } else {
$tags_str = strip_tags($tags_str); $tags_str = strip_tags($tags_str);
print "<span id=\"ATSTR-$id\">$tags_str</span>"; $rv['content'] .= "<span id=\"ATSTR-$id\">$tags_str</span>";
} }
print "</div>"; $rv['content'] .= "</div>";
print "<div clear='both'>$entry_comments</div>"; $rv['content'] .= "<div clear='both'>$entry_comments</div>";
if ($line["orig_feed_id"]) { if ($line["orig_feed_id"]) {
@ -4672,66 +4669,65 @@
if (db_num_rows($tmp_result) != 0) { if (db_num_rows($tmp_result) != 0) {
print "<div clear='both'>"; $rv['content'] .= "<div clear='both'>";
print __("Originally from:"); $rv['content'] .= __("Originally from:");
print "&nbsp;"; $rv['content'] .= "&nbsp;";
$tmp_line = db_fetch_assoc($tmp_result); $tmp_line = db_fetch_assoc($tmp_result);
print "<a target='_blank' $rv['content'] .= "<a target='_blank'
href=' " . htmlspecialchars($tmp_line['site_url']) . "'>" . href=' " . htmlspecialchars($tmp_line['site_url']) . "'>" .
$tmp_line['title'] . "</a>"; $tmp_line['title'] . "</a>";
print "&nbsp;"; $rv['content'] .= "&nbsp;";
print "<a target='_blank' href='" . htmlspecialchars($tmp_line['feed_url']) . "'>"; $rv['content'] .= "<a target='_blank' href='" . htmlspecialchars($tmp_line['feed_url']) . "'>";
print "<img title='".__('Feed URL')."'class='tinyFeedIcon' src='images/pub_set.gif'></a>"; $rv['content'] .= "<img title='".__('Feed URL')."'class='tinyFeedIcon' src='images/pub_set.gif'></a>";
print "</div>"; $rv['content'] .= "</div>";
} }
} }
print "</div>"; $rv['content'] .= "</div>";
print "<div class=\"postIcon\">" . $rv['content'] .= "<div class=\"postIcon\">" .
"<a target=\"_blank\" title=\"".__("Visit the website")."\"$ "<a target=\"_blank\" title=\"".__("Visit the website")."\"$
href=\"".htmlspecialchars($feed_site_url)."\">". href=\"".htmlspecialchars($feed_site_url)."\">".
$feed_icon . "</a></div>"; $feed_icon . "</a></div>";
print "<div id=\"POSTNOTE-$id\">"; $rv['content'] .= "<div id=\"POSTNOTE-$id\">";
if ($line['note']) { if ($line['note']) {
print format_article_note($id, $line['note']); $rv['content'] .= format_article_note($id, $line['note']);
} }
print "</div>"; $rv['content'] .= "</div>";
print "<div class=\"postContent\">"; $rv['content'] .= "<div class=\"postContent\">";
$article_content = sanitize_rss($link, $line["content"], false, false, $article_content = sanitize_rss($link, $line["content"], false, false,
$feed_site_url); $feed_site_url);
print $article_content; $rv['content'] .= $article_content;
print_article_enclosures($link, $id, $always_display_enclosures, $rv['content'] .= format_article_enclosures($link, $id,
$article_content); $always_display_enclosures, $article_content);
print "</div>"; $rv['content'] .= "</div>";
print "</div>"; $rv['content'] .= "</div>";
} }
if (!$zoom_mode) { if ($zoom_mode) {
print "]]></article>"; $rv['content'] .= "
} else {
print "
<div style=\"text-align : center\"> <div style=\"text-align : center\">
<button onclick=\"return window.close()\">". <button onclick=\"return window.close()\">".
__("Close this window")."</button></div>"; __("Close this window")."</button></div>";
print "</body></html>"; $rv['content'] .= "</body></html>";
} }
return $rv;
} }
function outputHeadlinesList($link, $feed, $subop, $view_mode, $limit, $cat_view, function outputHeadlinesList($link, $feed, $subop, $view_mode, $limit, $cat_view,
@ -5230,7 +5226,7 @@
$always_display_enclosures = sql_bool_to_bool(db_fetch_result($tmp_result, $always_display_enclosures = sql_bool_to_bool(db_fetch_result($tmp_result,
0, "always_display_enclosures")); 0, "always_display_enclosures"));
print_article_enclosures($link, $id, $always_display_enclosures, print format_article_enclosures($link, $id, $always_display_enclosures,
$article_content); $article_content);
print "</div>"; print "</div>";
@ -6795,10 +6791,11 @@
} }
function print_article_enclosures($link, $id, $always_display_enclosures, function format_article_enclosures($link, $id, $always_display_enclosures,
$article_content) { $article_content) {
$result = get_article_enclosures($link, $id); $result = get_article_enclosures($link, $id);
$rv = '';
if (count($result) > 0) { if (count($result) > 0) {
@ -6830,7 +6827,7 @@
array_push($entries, $entry); array_push($entries, $entry);
} }
print "<div class=\"postEnclosures\">"; $rv .= "<div class=\"postEnclosures\">";
if (!get_pref($link, "STRIP_IMAGES")) { if (!get_pref($link, "STRIP_IMAGES")) {
if ($always_display_enclosures || if ($always_display_enclosures ||
@ -6841,7 +6838,7 @@
if (preg_match("/image/", $entry["type"]) || if (preg_match("/image/", $entry["type"]) ||
preg_match("/\.(jpg|png|gif|bmp)/i", $entry["filename"])) { preg_match("/\.(jpg|png|gif|bmp)/i", $entry["filename"])) {
print "<p><img $rv .= "<p><img
alt=\"".htmlspecialchars($entry["filename"])."\" alt=\"".htmlspecialchars($entry["filename"])."\"
src=\"" .htmlspecialchars($entry["url"]) . "\"/></p>"; src=\"" .htmlspecialchars($entry["url"]) . "\"/></p>";
} }
@ -6850,15 +6847,17 @@
} }
if (count($entries) == 1) { if (count($entries) == 1) {
print __("Attachment:") . " "; $rv .= __("Attachment:") . " ";
} else { } else {
print __("Attachments:") . " "; $rv .= __("Attachments:") . " ";
} }
print join(", ", $entries_html); $rv .= join(", ", $entries_html);
print "</div>"; $rv .= "</div>";
} }
return $rv;
} }
function getLastArticleId($link) { function getLastArticleId($link) {

@ -39,15 +39,15 @@
db_query($link, "INSERT INTO ttrss_settings_profiles (title, owner_uid) db_query($link, "INSERT INTO ttrss_settings_profiles (title, owner_uid)
VALUES ('$title', ".$_SESSION["uid"] .")"); VALUES ('$title', ".$_SESSION["uid"] .")");
$result = db_query($link, "SELECT id FROM ttrss_settings_profiles WHERE $result = db_query($link, "SELECT id FROM ttrss_settings_profiles WHERE
title = '$title'"); title = '$title'");
if (db_num_rows($result) != 0) { if (db_num_rows($result) != 0) {
$profile_id = db_fetch_result($result, 0, "id"); $profile_id = db_fetch_result($result, 0, "id");
if ($profile_id) { if ($profile_id) {
initialize_user_prefs($link, $_SESSION["uid"], $profile_id); initialize_user_prefs($link, $_SESSION["uid"], $profile_id);
} }
} }
} }
@ -85,7 +85,7 @@
} }
db_query($link, "COMMIT"); db_query($link, "COMMIT");
} }
return; return;
} }
@ -95,7 +95,7 @@
foreach ($ids as $id) { foreach ($ids as $id) {
$result = db_query($link, "DELETE FROM ttrss_archived_feeds WHERE $result = db_query($link, "DELETE FROM ttrss_archived_feeds WHERE
(SELECT COUNT(*) FROM ttrss_user_entries (SELECT COUNT(*) FROM ttrss_user_entries
WHERE orig_feed_id = '$id') = 0 AND WHERE orig_feed_id = '$id') = 0 AND
id = '$id' AND owner_uid = ".$_SESSION["uid"]); id = '$id' AND owner_uid = ".$_SESSION["uid"]);
@ -178,7 +178,7 @@
$ids = db_escape_string($_REQUEST["ids"]); $ids = db_escape_string($_REQUEST["ids"]);
$result = db_query($link, "DELETE FROM ttrss_user_entries $result = db_query($link, "DELETE FROM ttrss_user_entries
WHERE ref_id IN ($ids) AND owner_uid = " . $_SESSION["uid"]); WHERE ref_id IN ($ids) AND owner_uid = " . $_SESSION["uid"]);
print json_encode(array("message" => "UPDATE_COUNTERS")); print json_encode(array("message" => "UPDATE_COUNTERS"));
@ -190,7 +190,7 @@
$ids = db_escape_string($_REQUEST["ids"]); $ids = db_escape_string($_REQUEST["ids"]);
$result = db_query($link, "UPDATE ttrss_user_entries $result = db_query($link, "UPDATE ttrss_user_entries
SET feed_id = orig_feed_id, orig_feed_id = NULL SET feed_id = orig_feed_id, orig_feed_id = NULL
WHERE ref_id IN ($ids) AND owner_uid = " . $_SESSION["uid"]); WHERE ref_id IN ($ids) AND owner_uid = " . $_SESSION["uid"]);
@ -224,7 +224,7 @@
$pub = "false"; $pub = "false";
} }
$result = db_query($link, "UPDATE ttrss_user_entries SET $result = db_query($link, "UPDATE ttrss_user_entries SET
published = $pub published = $pub
WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]); WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]);
@ -248,7 +248,7 @@
header("Content-Type: text/plain"); header("Content-Type: text/plain");
$last_article_id = (int) $_REQUEST["last_article_id"]; $last_article_id = (int) $_REQUEST["last_article_id"];
$reply = array(); $reply = array();
@ -257,12 +257,12 @@
if ($last_article_id != getLastArticleId($link)) { if ($last_article_id != getLastArticleId($link)) {
$omode = $_REQUEST["omode"]; $omode = $_REQUEST["omode"];
if ($omode != "T") if ($omode != "T")
$reply['counters'] = getAllCounters($link, $omode); $reply['counters'] = getAllCounters($link, $omode);
else else
$reply['counters'] = getGlobalCounters($link); $reply['counters'] = getGlobalCounters($link);
} }
$reply['runtime-info'] = make_runtime_info($link); $reply['runtime-info'] = make_runtime_info($link);
@ -325,7 +325,7 @@
print "</rpc-reply>"; print "</rpc-reply>";
return; return;
} }
/* if ($subop == "globalPurge") { /* if ($subop == "globalPurge") {
@ -357,11 +357,11 @@
$int_id = db_fetch_result($result, 0, "int_id"); $int_id = db_fetch_result($result, 0, "int_id");
db_query($link, "DELETE FROM ttrss_tags WHERE db_query($link, "DELETE FROM ttrss_tags WHERE
post_int_id = $int_id AND owner_uid = '".$_SESSION["uid"]."'"); post_int_id = $int_id AND owner_uid = '".$_SESSION["uid"]."'");
foreach ($tags as $tag) { foreach ($tags as $tag) {
$tag = sanitize_tag($tag); $tag = sanitize_tag($tag);
if (!tag_is_valid($tag)) { if (!tag_is_valid($tag)) {
continue; continue;
@ -372,9 +372,9 @@
} }
// print "<!-- $id : $int_id : $tag -->"; // print "<!-- $id : $int_id : $tag -->";
if ($tag != '') { if ($tag != '') {
db_query($link, "INSERT INTO ttrss_tags db_query($link, "INSERT INTO ttrss_tags
(post_int_id, owner_uid, tag_name) VALUES ('$int_id', '".$_SESSION["uid"]."', '$tag')"); (post_int_id, owner_uid, tag_name) VALUES ('$int_id', '".$_SESSION["uid"]."', '$tag')");
} }
@ -385,7 +385,7 @@
$tags_str = join(",", $tags_to_cache); $tags_str = join(",", $tags_to_cache);
db_query($link, "UPDATE ttrss_user_entries db_query($link, "UPDATE ttrss_user_entries
SET tag_cache = '$tags_str' WHERE ref_id = '$id' SET tag_cache = '$tags_str' WHERE ref_id = '$id'
AND owner_uid = " . $_SESSION["uid"]); AND owner_uid = " . $_SESSION["uid"]);
} }
@ -408,10 +408,10 @@
if ($subop == "regenOPMLKey") { if ($subop == "regenOPMLKey") {
header("Content-Type: text/plain"); header("Content-Type: text/plain");
update_feed_access_key($link, 'OPML:Publish', update_feed_access_key($link, 'OPML:Publish',
false, $_SESSION["uid"]); false, $_SESSION["uid"]);
$new_link = opml_publish_url($link); $new_link = opml_publish_url($link);
print json_encode(array("link" => $new_link)); print json_encode(array("link" => $new_link));
return; return;
@ -429,7 +429,7 @@
$search = db_escape_string($_REQUEST["search"]); $search = db_escape_string($_REQUEST["search"]);
$result = db_query($link, "SELECT DISTINCT tag_name FROM ttrss_tags $result = db_query($link, "SELECT DISTINCT tag_name FROM ttrss_tags
WHERE owner_uid = '".$_SESSION["uid"]."' AND WHERE owner_uid = '".$_SESSION["uid"]."' AND
tag_name LIKE '$search%' ORDER BY tag_name tag_name LIKE '$search%' ORDER BY tag_name
LIMIT 10"); LIMIT 10");
@ -473,20 +473,20 @@
} */ } */
// XML method
if ($subop == "getArticles") { if ($subop == "getArticles") {
$ids = split(",", db_escape_string($_REQUEST["ids"])); header("Content-Type: text/plain");
print "<rpc-reply>"; $ids = split(",", db_escape_string($_REQUEST["ids"]));
$articles = array();
foreach ($ids as $id) { foreach ($ids as $id) {
if ($id) { if ($id) {
outputArticleXML($link, $id, 0, false); array_push($articles, format_article($link, $id, 0, false));
} }
} }
print "</rpc-reply>";
return; print json_encode($articles);
return;
} }
if ($subop == "checkDate") { if ($subop == "checkDate") {
@ -507,7 +507,7 @@
$ids = split(",", db_escape_string($_REQUEST["ids"])); $ids = split(",", db_escape_string($_REQUEST["ids"]));
$label_id = db_escape_string($_REQUEST["lid"]); $label_id = db_escape_string($_REQUEST["lid"]);
$label = db_escape_string(label_find_caption($link, $label_id, $label = db_escape_string(label_find_caption($link, $label_id,
$_SESSION["uid"])); $_SESSION["uid"]));
$reply["info-for-headlines"] = array(); $reply["info-for-headlines"] = array();
@ -522,7 +522,7 @@
label_remove_article($link, $id, $label, $_SESSION["uid"]); label_remove_article($link, $id, $label, $_SESSION["uid"]);
$labels = get_article_labels($link, $id, $_SESSION["uid"]); $labels = get_article_labels($link, $id, $_SESSION["uid"]);
array_push($reply["info-for-headlines"], array_push($reply["info-for-headlines"],
array("id" => $id, "labels" => format_article_labels($labels, $id))); array("id" => $id, "labels" => format_article_labels($labels, $id)));
@ -568,23 +568,23 @@
$orig_id = db_escape_string(db_fetch_result($result, 0, "id")); $orig_id = db_escape_string(db_fetch_result($result, 0, "id"));
$site_url = db_escape_string(db_fetch_result($result, 0, "site_url")); $site_url = db_escape_string(db_fetch_result($result, 0, "site_url"));
} }
$feed_url = db_escape_string(db_fetch_result($result, 0, "feed_url")); $feed_url = db_escape_string(db_fetch_result($result, 0, "feed_url"));
$title = db_escape_string(db_fetch_result($result, 0, "title")); $title = db_escape_string(db_fetch_result($result, 0, "title"));
$title_orig = db_fetch_result($result, 0, "title"); $title_orig = db_fetch_result($result, 0, "title");
$result = db_query($link, "SELECT id FROM ttrss_feeds WHERE $result = db_query($link, "SELECT id FROM ttrss_feeds WHERE
feed_url = '$feed_url' AND owner_uid = " . $_SESSION["uid"]); feed_url = '$feed_url' AND owner_uid = " . $_SESSION["uid"]);
if (db_num_rows($result) == 0) { if (db_num_rows($result) == 0) {
if ($mode == 1) { if ($mode == 1) {
$result = db_query($link, $result = db_query($link,
"INSERT INTO ttrss_feeds (owner_uid,feed_url,title,cat_id) "INSERT INTO ttrss_feeds (owner_uid,feed_url,title,cat_id)
VALUES ('".$_SESSION["uid"]."', '$feed_url', '$title', NULL)"); VALUES ('".$_SESSION["uid"]."', '$feed_url', '$title', NULL)");
} else if ($mode == 2) { } else if ($mode == 2) {
$result = db_query($link, $result = db_query($link,
"INSERT INTO ttrss_feeds (id,owner_uid,feed_url,title,cat_id,site_url) "INSERT INTO ttrss_feeds (id,owner_uid,feed_url,title,cat_id,site_url)
VALUES ('$orig_id','".$_SESSION["uid"]."', '$feed_url', '$title', NULL, '$site_url')"); VALUES ('$orig_id','".$_SESSION["uid"]."', '$feed_url', '$title', NULL, '$site_url')");
} }
array_push($subscribed, $title_orig); array_push($subscribed, $title_orig);
@ -592,14 +592,14 @@
} }
return; return;
} }
if ($subop == "digest-get-contents") { if ($subop == "digest-get-contents") {
header("Content-Type: text/plain"); header("Content-Type: text/plain");
$article_id = db_escape_string($_REQUEST['article_id']); $article_id = db_escape_string($_REQUEST['article_id']);
$result = db_query($link, "SELECT content $result = db_query($link, "SELECT content
FROM ttrss_entries, ttrss_user_entries FROM ttrss_entries, ttrss_user_entries
WHERE id = '$article_id' AND ref_id = id AND owner_uid = ".$_SESSION['uid']); WHERE id = '$article_id' AND ref_id = id AND owner_uid = ".$_SESSION['uid']);
@ -616,7 +616,7 @@
$feed_id = db_escape_string($_REQUEST['feed_id']); $feed_id = db_escape_string($_REQUEST['feed_id']);
$offset = db_escape_string($_REQUEST['offset']); $offset = db_escape_string($_REQUEST['offset']);
$seq = db_escape_string($_REQUEST['seq']); $seq = db_escape_string($_REQUEST['seq']);
if (!$feed_id) $feed_id = -4; if (!$feed_id) $feed_id = -4;
if (!$offset) $offset = 0; if (!$offset) $offset = 0;
@ -670,7 +670,7 @@
$reply = array(); $reply = array();
if (DIGEST_ENABLE && $_SESSION['email_secretkey'] && if (DIGEST_ENABLE && $_SESSION['email_secretkey'] &&
$secretkey == $_SESSION['email_secretkey']) { $secretkey == $_SESSION['email_secretkey']) {
$_SESSION['email_secretkey'] = ''; $_SESSION['email_secretkey'] = '';
@ -798,19 +798,19 @@
$id = db_escape_string($_REQUEST["id"]); $id = db_escape_string($_REQUEST["id"]);
$result = db_query($link, "SELECT content, $result = db_query($link, "SELECT content,
ttrss_feeds.site_url AS site_url FROM ttrss_user_entries, ttrss_feeds, ttrss_feeds.site_url AS site_url FROM ttrss_user_entries, ttrss_feeds,
ttrss_entries ttrss_entries
WHERE feed_id = ttrss_feeds.id AND ref_id = '$id' AND WHERE feed_id = ttrss_feeds.id AND ref_id = '$id' AND
ttrss_entries.id = ref_id AND ttrss_entries.id = ref_id AND
ttrss_user_entries.owner_uid = ".$_SESSION["uid"]); ttrss_user_entries.owner_uid = ".$_SESSION["uid"]);
if (db_num_rows($result) != 0) { if (db_num_rows($result) != 0) {
$line = db_fetch_assoc($result); $line = db_fetch_assoc($result);
$article_content = sanitize_rss($link, $line["content"], $article_content = sanitize_rss($link, $line["content"],
false, false, $line['site_url']); false, false, $line['site_url']);
} else { } else {
$article_content = ''; $article_content = '';
} }
@ -841,7 +841,7 @@
} else { } else {
$message = __("Category update has been scheduled."); $message = __("Category update has been scheduled.");
if ($feed_id) if ($feed_id)
$cat_query = "cat_id = '$feed_id'"; $cat_query = "cat_id = '$feed_id'";
else else
$cat_query = "cat_id IS NULL"; $cat_query = "cat_id IS NULL";
@ -863,7 +863,7 @@
header("Content-Type: text/plain"); header("Content-Type: text/plain");
$id = db_escape_string($_REQUEST['id']); $id = db_escape_string($_REQUEST['id']);
$result = db_query($link, "SELECT title, link $result = db_query($link, "SELECT title, link
FROM ttrss_entries, ttrss_user_entries FROM ttrss_entries, ttrss_user_entries
WHERE id = '$id' AND ref_id = id AND owner_uid = " .$_SESSION['uid']); WHERE id = '$id' AND ref_id = id AND owner_uid = " .$_SESSION['uid']);

@ -52,7 +52,7 @@ function setActiveFeedId(id, is_cat) {
function updateFeedList() { function updateFeedList() {
try { try {
// $("feeds-holder").innerHTML = "<div id=\"feedlistLoading\">" + // $("feeds-holder").innerHTML = "<div id=\"feedlistLoading\">" +
// __("Loading, please wait...") + "</div>"; // __("Loading, please wait...") + "</div>";
Element.show("feedlistLoading"); Element.show("feedlistLoading");
@ -81,16 +81,16 @@ function updateFeedList() {
var id = String(item.id); var id = String(item.id);
var cat_id = id.substr(id.indexOf(":")+1); var cat_id = id.substr(id.indexOf(":")+1);
new Ajax.Request("backend.php", new Ajax.Request("backend.php",
{ parameters: "backend.php?op=feeds&subop=collapse&cid=" + { parameters: "backend.php?op=feeds&subop=collapse&cid=" +
param_escape(cat_id) + "&mode=0" } ); param_escape(cat_id) + "&mode=0" } );
}, },
onClose: function (item, node) { onClose: function (item, node) {
var id = String(item.id); var id = String(item.id);
var cat_id = id.substr(id.indexOf(":")+1); var cat_id = id.substr(id.indexOf(":")+1);
new Ajax.Request("backend.php", new Ajax.Request("backend.php",
{ parameters: "backend.php?op=feeds&subop=collapse&cid=" + { parameters: "backend.php?op=feeds&subop=collapse&cid=" +
param_escape(cat_id) + "&mode=1" } ); param_escape(cat_id) + "&mode=1" } );
}, },
@ -107,14 +107,14 @@ function updateFeedList() {
}, "feedTree"); }, "feedTree");
/* var menu = new dijit.Menu({id: 'feedMenu'}); /* var menu = new dijit.Menu({id: 'feedMenu'});
menu.addChild(new dijit.MenuItem({ menu.addChild(new dijit.MenuItem({
label: "Simple menu item" label: "Simple menu item"
})); }));
// menu.bindDomNode(tree.domNode); */ // menu.bindDomNode(tree.domNode); */
var tmph = dojo.connect(dijit.byId('feedMenu'), '_openMyself', function (event) { var tmph = dojo.connect(dijit.byId('feedMenu'), '_openMyself', function (event) {
console.log(dijit.getEnclosingWidget(event.target)); console.log(dijit.getEnclosingWidget(event.target));
dojo.disconnect(tmph); dojo.disconnect(tmph);
}); });
@ -156,8 +156,8 @@ function catchupAllFeeds() {
new Ajax.Request("backend.php", { new Ajax.Request("backend.php", {
parameters: query_str, parameters: query_str,
onComplete: function(transport) { onComplete: function(transport) {
feedlist_callback2(transport); feedlist_callback2(transport);
} }); } });
global_unread = 0; global_unread = 0;
@ -185,28 +185,28 @@ function timeout() {
//console.log("timeout()"); //console.log("timeout()");
window.clearTimeout(counter_timeout_id); window.clearTimeout(counter_timeout_id);
var query_str = "?op=rpc&subop=getAllCounters&seq=" + next_seq(); var query_str = "?op=rpc&subop=getAllCounters&seq=" + next_seq();
var omode; var omode;
if (firsttime_update && !navigator.userAgent.match("Opera")) { if (firsttime_update && !navigator.userAgent.match("Opera")) {
firsttime_update = false; firsttime_update = false;
omode = "T"; omode = "T";
} else { } else {
omode = "flc"; omode = "flc";
} }
query_str = query_str + "&omode=" + omode; query_str = query_str + "&omode=" + omode;
if (!_force_scheduled_update) if (!_force_scheduled_update)
query_str = query_str + "&last_article_id=" + getInitParam("last_article_id"); query_str = query_str + "&last_article_id=" + getInitParam("last_article_id");
//console.log("[timeout]" + query_str); //console.log("[timeout]" + query_str);
new Ajax.Request("backend.php", { new Ajax.Request("backend.php", {
parameters: query_str, parameters: query_str,
onComplete: function(transport) { onComplete: function(transport) {
handle_rpc_json(transport, !_force_scheduled_update); handle_rpc_json(transport, !_force_scheduled_update);
_force_scheduled_update = false; _force_scheduled_update = false;
} }); } });
@ -264,7 +264,7 @@ function updateTitle() {
function genericSanityCheck() { function genericSanityCheck() {
setCookie("ttrss_test", "TEST"); setCookie("ttrss_test", "TEST");
if (getCookie("ttrss_test") != "TEST") { if (getCookie("ttrss_test") != "TEST") {
return fatalError(2); return fatalError(2);
} }
@ -317,7 +317,7 @@ function init() {
}); });
if (!genericSanityCheck()) if (!genericSanityCheck())
return false; return false;
loading_set_progress(20); loading_set_progress(20);
@ -343,10 +343,10 @@ function init_second_stage() {
var toolbar = document.forms["main_toolbar_form"]; var toolbar = document.forms["main_toolbar_form"];
dijit.getEnclosingWidget(toolbar.view_mode).attr('value', dijit.getEnclosingWidget(toolbar.view_mode).attr('value',
getInitParam("default_view_mode")); getInitParam("default_view_mode"));
dijit.getEnclosingWidget(toolbar.order_by).attr('value', dijit.getEnclosingWidget(toolbar.order_by).attr('value',
getInitParam("default_view_order_by")); getInitParam("default_view_order_by"));
feeds_sort_by_unread = getInitParam("feeds_sort_by_unread") == 1; feeds_sort_by_unread = getInitParam("feeds_sort_by_unread") == 1;
@ -368,7 +368,7 @@ function quickMenuGo(opid) {
if (opid == "qmcPrefs") { if (opid == "qmcPrefs") {
gotoPreferences(); gotoPreferences();
} }
if (opid == "qmcTagCloud") { if (opid == "qmcTagCloud") {
displayDlg("printTagCloud"); displayDlg("printTagCloud");
} }
@ -377,7 +377,7 @@ function quickMenuGo(opid) {
search(); search();
return; return;
} }
if (opid == "qmcAddFeed") { if (opid == "qmcAddFeed") {
quickAddFeed(); quickAddFeed();
return; return;
@ -395,14 +395,14 @@ function quickMenuGo(opid) {
editFeed(getActiveFeedId()); editFeed(getActiveFeedId());
return; return;
} }
if (opid == "qmcRemoveFeed") { if (opid == "qmcRemoveFeed") {
var actid = getActiveFeedId(); var actid = getActiveFeedId();
if (activeFeedIsCat()) { if (activeFeedIsCat()) {
alert(__("You can't unsubscribe from the category.")); alert(__("You can't unsubscribe from the category."));
return; return;
} }
if (!actid) { if (!actid) {
alert(__("Please select some feed first.")); alert(__("Please select some feed first."));
@ -416,7 +416,7 @@ function quickMenuGo(opid) {
if (confirm(pr)) { if (confirm(pr)) {
unsubscribeFeed(actid); unsubscribeFeed(actid);
} }
return; return;
} }
@ -424,12 +424,12 @@ function quickMenuGo(opid) {
catchupAllFeeds(); catchupAllFeeds();
return; return;
} }
if (opid == "qmcShowOnlyUnread") { if (opid == "qmcShowOnlyUnread") {
toggleDispRead(); toggleDispRead();
return; return;
} }
if (opid == "qmcAddFilter") { if (opid == "qmcAddFilter") {
quickAddFilter(); quickAddFilter();
return; return;
@ -462,16 +462,16 @@ function toggleDispRead() {
hideOrShowFeeds(hide); hideOrShowFeeds(hide);
var query = "?op=rpc&subop=setpref&key=HIDE_READ_FEEDS&value=" + var query = "?op=rpc&subop=setpref&key=HIDE_READ_FEEDS&value=" +
param_escape(hide); param_escape(hide);
setInitParam("hide_read_feeds", hide); setInitParam("hide_read_feeds", hide);
new Ajax.Request("backend.php", { new Ajax.Request("backend.php", {
parameters: query, parameters: query,
onComplete: function(transport) { onComplete: function(transport) {
} }); } });
} catch (e) { } catch (e) {
exception_error("toggleDispRead", e); exception_error("toggleDispRead", e);
} }
@ -517,7 +517,7 @@ function parse_runtime_info(data) {
} }
} }
init_params[k] = v; init_params[k] = v;
notify(''); notify('');
} }
} }
@ -525,7 +525,7 @@ function parse_runtime_info(data) {
function catchupCurrentFeed() { function catchupCurrentFeed() {
var fn = getFeedName(getActiveFeedId(), activeFeedIsCat()); var fn = getFeedName(getActiveFeedId(), activeFeedIsCat());
var str = __("Mark all articles in %s as read?").replace("%s", fn); var str = __("Mark all articles in %s as read?").replace("%s", fn);
if (getInitParam("confirm_feed_catchup") != 1 || confirm(str)) { if (getInitParam("confirm_feed_catchup") != 1 || confirm(str)) {
@ -610,7 +610,7 @@ function rescoreCurrentFeed() {
if (activeFeedIsCat() || actid < 0) { if (activeFeedIsCat() || actid < 0) {
alert(__("You can't rescore this kind of feed.")); alert(__("You can't rescore this kind of feed."));
return; return;
} }
if (!actid) { if (!actid) {
alert(__("Please select some feed first.")); alert(__("Please select some feed first."));
@ -648,7 +648,7 @@ function hotkey_handler(e) {
} catch (e) { } catch (e) {
} }
if (window.event) { if (window.event) {
keycode = window.event.keyCode; keycode = window.event.keyCode;
} else if (e) { } else if (e) {
@ -662,12 +662,12 @@ function hotkey_handler(e) {
Element.hide("hotkey_help_overlay"); Element.hide("hotkey_help_overlay");
} }
hotkey_prefix = false; hotkey_prefix = false;
} }
if (keycode == 16) return; // ignore lone shift if (keycode == 16) return; // ignore lone shift
if (keycode == 17) return; // ignore lone ctrl if (keycode == 17) return; // ignore lone ctrl
if ((keycode == 70 || keycode == 67 || keycode == 71) if ((keycode == 70 || keycode == 67 || keycode == 71)
&& !hotkey_prefix) { && !hotkey_prefix) {
var date = new Date(); var date = new Date();
@ -715,7 +715,7 @@ function hotkey_handler(e) {
return; return;
} }
if (keycode == 75) { // k if (keycode == 75) { // k
var rv = dijit.byId("feedTree").getNextFeed( var rv = dijit.byId("feedTree").getNextFeed(
getActiveFeedId(), activeFeedIsCat()); getActiveFeedId(), activeFeedIsCat());
@ -736,12 +736,12 @@ function hotkey_handler(e) {
} }
if (shift_key && keycode == 78) { // N if (shift_key && keycode == 78) { // N
scrollArticle(50); scrollArticle(50);
return; return;
} }
if (shift_key && keycode == 80) { // P if (shift_key && keycode == 80) { // P
scrollArticle(-50); scrollArticle(-50);
return; return;
} }
@ -761,7 +761,7 @@ function hotkey_handler(e) {
return false; return false;
} }
} }
if (keycode == 80 || keycode == 38) { // p, up if (keycode == 80 || keycode == 38) { // p, up
if (typeof moveToPost != 'undefined') { if (typeof moveToPost != 'undefined') {
moveToPost('prev'); moveToPost('prev');
@ -795,7 +795,7 @@ function hotkey_handler(e) {
if (keycode == 9) { // tab if (keycode == 9) { // tab
var id = getArticleUnderPointer(); var id = getArticleUnderPointer();
if (id) { if (id) {
var cb = $("RCHK-" + id); var cb = $("RCHK-" + id);
if (cb) { if (cb) {
@ -830,7 +830,7 @@ function hotkey_handler(e) {
/* Prefix f */ /* Prefix f */
if (hotkey_prefix == 70) { // f if (hotkey_prefix == 70) { // f
hotkey_prefix = false; hotkey_prefix = false;
@ -981,7 +981,7 @@ function hotkey_handler(e) {
/* Cmd */ /* Cmd */
if (hotkey_prefix == 224 || hotkey_prefix == 91) { // f if (hotkey_prefix == 224 || hotkey_prefix == 91) { // f
hotkey_prefix = false; hotkey_prefix = false;
return; return;
} }
@ -1009,7 +1009,7 @@ function reverseHeadlineOrder() {
new Ajax.Request("backend.php", { new Ajax.Request("backend.php", {
parameters: query_str, parameters: query_str,
onComplete: function(transport) { onComplete: function(transport) {
viewCurrentFeed(); viewCurrentFeed();
} }); } });
@ -1052,7 +1052,7 @@ function handle_rpc_reply(transport, scheduled_call) {
} }
var counters = transport.responseXML.getElementsByTagName("counters")[0]; var counters = transport.responseXML.getElementsByTagName("counters")[0];
if (counters) if (counters)
parse_counters(JSON.parse(counters.firstChild.nodeValue), scheduled_call); parse_counters(JSON.parse(counters.firstChild.nodeValue), scheduled_call);
@ -1086,7 +1086,7 @@ function scheduleFeedUpdate(id, is_cat) {
return; return;
} }
var query = "?op=rpc&subop=scheduleFeedUpdate&id=" + var query = "?op=rpc&subop=scheduleFeedUpdate&id=" +
param_escape(id) + param_escape(id) +
"&is_cat=" + param_escape(is_cat); "&is_cat=" + param_escape(is_cat);
@ -1094,7 +1094,7 @@ function scheduleFeedUpdate(id, is_cat) {
new Ajax.Request("backend.php", { new Ajax.Request("backend.php", {
parameters: query, parameters: query,
onComplete: function(transport) { onComplete: function(transport) {
handle_rpc_json(transport); handle_rpc_json(transport);
var reply = JSON.parse(transport.responseText); var reply = JSON.parse(transport.responseText);
@ -1145,6 +1145,9 @@ function handle_rpc_json(transport, scheduled_call) {
if (error) { if (error) {
var code = error['code']; var code = error['code'];
var msg = error['msg']; var msg = error['msg'];
console.warn("[handle_rpc_json] received fatal error " + code + "/" + msg);
if (code != 0) { if (code != 0) {
fatalError(code, msg); fatalError(code, msg);
return false; return false;
@ -1155,7 +1158,7 @@ function handle_rpc_json(transport, scheduled_call) {
if (seq) { if (seq) {
if (get_seq() != seq) { if (get_seq() != seq) {
console.log("[handle_rpc_json] sequence mismatch: " + seq + console.log("[handle_rpc_json] sequence mismatch: " + seq +
" (want: " + get_seq() + ")"); " (want: " + get_seq() + ")");
return true; return true;
} }
@ -1172,7 +1175,7 @@ function handle_rpc_json(transport, scheduled_call) {
} }
var counters = reply['counters']; var counters = reply['counters'];
if (counters) if (counters)
parse_counters(counters, scheduled_call); parse_counters(counters, scheduled_call);

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save