From c8b693cf7f8616e4dc37ee2f370a01b6642ac7f5 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Sun, 31 Mar 2013 12:37:42 +0400 Subject: implement catchup with selectable updated criteria --- include/functions.php | 121 +++++++++++++++++++++++++++++--------------------- 1 file changed, 70 insertions(+), 51 deletions(-) (limited to 'include/functions.php') diff --git a/include/functions.php b/include/functions.php index 307f66200..33014e2df 100644 --- a/include/functions.php +++ b/include/functions.php @@ -1003,12 +1003,42 @@ } } - function catchup_feed($link, $feed, $cat_view, $owner_uid = false, $max_id = false) { + function catchup_feed($link, $feed, $cat_view, $owner_uid = false, $max_id = false, $mode = 'all') { if (!$owner_uid) $owner_uid = $_SESSION['uid']; //if (preg_match("/^-?[0-9][0-9]*$/", $feed) != false) { + // Todo: all this interval stuff needs some generic generator function + + $date_qpart = "false"; + + switch ($mode) { + case "1day": + if (DB_TYPE == "pgsql") { + $date_qpart = "updated < NOW() - INTERVAL '1 day' "; + } else { + $date_qpart = "updated < DATE_SUB(NOW(), INTERVAL 1 WEEK) "; + } + break; + case "1week": + if (DB_TYPE == "pgsql") { + $date_qpart = "updated < NOW() - INTERVAL '1 week' "; + } else { + $date_qpart = "updated < DATE_SUB(NOW(), INTERVAL 1 WEEK) "; + } + break; + case "2weeks": + if (DB_TYPE == "pgsql") { + $date_qpart = "updated < NOW() - INTERVAL '2 week' "; + } else { + $date_qpart = "updated < DATE_SUB(NOW(), INTERVAL 2 WEEK) "; + } + break; + default: + $date_qpart = "true"; + } + if (is_numeric($feed)) { if ($cat_view) { @@ -1026,43 +1056,44 @@ } db_query($link, "UPDATE ttrss_user_entries - SET unread = false,last_read = NOW() - WHERE feed_id IN (SELECT id FROM ttrss_feeds WHERE $cat_qpart) - AND unread = true - AND owner_uid = $owner_uid"); + SET unread = false, last_read = NOW() WHERE ref_id IN + (SELECT id FROM + (SELECT id FROM ttrss_entries, ttrss_user_entries WHERE ref_id = id + AND owner_uid = $owner_uid AND unread = true AND feed_id IN + (SELECT id FROM ttrss_feeds WHERE $cat_qpart) AND $date_qpart) as tmp)"); } else if ($feed == -2) { db_query($link, "UPDATE ttrss_user_entries SET unread = false,last_read = NOW() WHERE (SELECT COUNT(*) FROM ttrss_user_labels2 WHERE article_id = ref_id) > 0 - AND unread = true AND owner_uid = $owner_uid"); + AND unread = true AND $date_qpart AND owner_uid = $owner_uid"); } } else if ($feed > 0) { db_query($link, "UPDATE ttrss_user_entries - SET unread = false,last_read = NOW() - WHERE feed_id = '$feed' - AND unread = true - AND owner_uid = $owner_uid"); + SET unread = false, last_read = NOW() WHERE ref_id IN + (SELECT id FROM + (SELECT id FROM ttrss_entries, ttrss_user_entries WHERE ref_id = id + AND owner_uid = $owner_uid AND unread = true AND feed_id = $feed AND $date_qpart) as tmp)"); } else if ($feed < 0 && $feed > LABEL_BASE_INDEX) { // special, like starred if ($feed == -1) { db_query($link, "UPDATE ttrss_user_entries - SET unread = false,last_read = NOW() - WHERE marked = true - AND unread = true - AND owner_uid = $owner_uid"); + SET unread = false, last_read = NOW() WHERE ref_id IN + (SELECT id FROM + (SELECT id FROM ttrss_entries, ttrss_user_entries WHERE ref_id = id + AND owner_uid = $owner_uid AND unread = true AND marked = true AND $date_qpart) as tmp)"); } if ($feed == -2) { db_query($link, "UPDATE ttrss_user_entries - SET unread = false,last_read = NOW() - WHERE published = true - AND unread = true - AND owner_uid = $owner_uid"); + SET unread = false, last_read = NOW() WHERE ref_id IN + (SELECT id FROM + (SELECT id FROM ttrss_entries, ttrss_user_entries WHERE ref_id = id + AND owner_uid = $owner_uid AND unread = true AND published = true AND $date_qpart) as tmp)"); } if ($feed == -3) { @@ -1076,56 +1107,44 @@ INTERVAL $intl HOUR) "; } - $result = db_query($link, "SELECT id FROM ttrss_entries, - ttrss_user_entries WHERE $match_part AND - unread = true AND - ttrss_user_entries.ref_id = ttrss_entries.id AND - owner_uid = $owner_uid"); - - $affected_ids = array(); - - while ($line = db_fetch_assoc($result)) { - array_push($affected_ids, $line["id"]); - } - - catchupArticlesById($link, $affected_ids, 0); + db_query($link, "UPDATE ttrss_user_entries + SET unread = false, last_read = NOW() WHERE ref_id IN + (SELECT id FROM + (SELECT id FROM ttrss_entries, ttrss_user_entries WHERE ref_id = id + AND owner_uid = $owner_uid AND unread = true AND feed_id = $feed AND $date_qpart AND $match_part) as tmp)"); } if ($feed == -4) { db_query($link, "UPDATE ttrss_user_entries - SET unread = false,last_read = NOW() - WHERE unread = true AND - owner_uid = $owner_uid"); + SET unread = false, last_read = NOW() WHERE ref_id IN + (SELECT id FROM + (SELECT id FROM ttrss_entries, ttrss_user_entries WHERE ref_id = id + AND owner_uid = $owner_uid AND unread = true AND $date_qpart) as tmp)"); } } else if ($feed < LABEL_BASE_INDEX) { // label $label_id = feed_to_label_id($feed); - db_query($link, "UPDATE ttrss_user_entries, ttrss_user_labels2 - SET unread = false, last_read = NOW() - WHERE label_id = '$label_id' AND unread = true - AND owner_uid = '$owner_uid' AND ref_id = article_id"); + db_query($link, "UPDATE ttrss_user_entries + SET unread = false, last_read = NOW() WHERE ref_id IN + (SELECT id FROM + (SELECT ttrss_entries.id FROM ttrss_entries, ttrss_user_entries, ttrss_user_labels2 WHERE ref_id = id + AND label_id = '$label_id' AND ref_id = article_id + AND owner_uid = $owner_uid AND unread = true AND $date_qpart) as tmp)"); } ccache_update($link, $feed, $owner_uid, $cat_view); } else { // tag - db_query($link, "BEGIN"); + db_query($link, "UPDATE ttrss_user_entries + SET unread = false, last_read = NOW() WHERE ref_id IN + (SELECT id FROM + (SELECT ttrss_entries.id FROM ttrss_entries, ttrss_user_entries, ttrss_tags WHERE ref_id = ttrss_entries.id + AND post_int_id = int_id AND tag_name = '$feed' + AND ttrss_user_entries.owner_uid = $owner_uid AND unread = true AND $date_qpart) as tmp)"); - $tag_name = db_escape_string($link, $feed); - - $result = db_query($link, "SELECT post_int_id FROM ttrss_tags - WHERE tag_name = '$tag_name' AND owner_uid = $owner_uid"); - - while ($line = db_fetch_assoc($result)) { - db_query($link, "UPDATE ttrss_user_entries SET - unread = false, last_read = NOW() - WHERE unread = true - AND int_id = " . $line["post_int_id"]); - } - db_query($link, "COMMIT"); } } -- cgit v1.2.3