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
This commit is contained in:
Alexandre Alapetite
2022-06-25 11:15:51 +02:00
committed by GitHub
parent 07a52137a9
commit d785ddde2a
26 changed files with 143 additions and 64 deletions

View File

@@ -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;
}
/**