From d785ddde2a00a9eadd38c45c528f2d2f6d1c356a Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 25 Jun 2022 11:15:51 +0200 Subject: New option to automatically mark as read gone articles (#4426) * New option to automatically mark as read gone articles Option to automatically and immediately mark as read entries / articles that are no longer provided in their upstream RSS / ATOM / XPath feed * Reduce SQL queries Optimisation: Perform cache update only once --- app/Models/Feed.php | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) (limited to 'app/Models/Feed.php') diff --git a/app/Models/Feed.php b/app/Models/Feed.php index 1fc2eebf4..6f6b83af0 100644 --- a/app/Models/Feed.php +++ b/app/Models/Feed.php @@ -649,15 +649,37 @@ class FreshRSS_Feed extends Minz_Model { $this->nbPendingNotRead += $n; } + /** + * Remember to call updateCachedValue($id_feed) or updateCachedValues() just after. + * @return int|false the number of lines affected, or false if not applicable + */ public function keepMaxUnread() { $keepMaxUnread = $this->attributes('keep_max_n_unread'); - if ($keepMaxUnread == false) { + if ($keepMaxUnread === null) { $keepMaxUnread = FreshRSS_Context::$user_conf->mark_when['max_n_unread']; } if ($keepMaxUnread > 0 && $this->nbNotRead(false) + $this->nbPendingNotRead > $keepMaxUnread) { $feedDAO = FreshRSS_Factory::createFeedDao(); - $feedDAO->keepMaxUnread($this->id(), max(0, $keepMaxUnread - $this->nbPendingNotRead)); + return $feedDAO->keepMaxUnread($this->id(), max(0, $keepMaxUnread - $this->nbPendingNotRead)); } + return false; + } + + /** + * Applies the *mark as read upon gone* policy, if enabled. + * Remember to call updateCachedValue($id_feed) or updateCachedValues() just after. + * @return int|false the number of lines affected, or false if not applicable + */ + public function markAsReadUponGone() { + $readUponGone = $this->attributes('read_upon_gone'); + if ($readUponGone === null) { + $readUponGone = FreshRSS_Context::$user_conf->mark_when['gone']; + } + if ($readUponGone) { + $feedDAO = FreshRSS_Factory::createFeedDao(); + return $feedDAO->markAsReadUponGone($this->id()); + } + return false; } /** -- cgit v1.2.3