diff options
| author | 2024-02-26 09:01:25 +0100 | |
|---|---|---|
| committer | 2024-02-26 09:01:25 +0100 | |
| commit | bfd277065c7bfd28779c585549dd9e9e577eabdf (patch) | |
| tree | 15cca303b1a7627686e4107a678391dda9803f13 /app/Controllers/feedController.php | |
| parent | 39cc1c11ec596176e842cc98e6a54337e3c04d7e (diff) | |
Improve feed refresh (#6117)
* Improve feed refresh
Better account for some edge cases for cron and automatic labels
fix https://github.com/FreshRSS/FreshRSS/issues/6089
fix https://github.com/FreshRSS/FreshRSS/issues/6109
* Apply labels also to new entries already marked as read
* Add case most relevant for cron
Diffstat (limited to 'app/Controllers/feedController.php')
| -rw-r--r-- | app/Controllers/feedController.php | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/app/Controllers/feedController.php b/app/Controllers/feedController.php index 63c358da7..4ec4b5a55 100644 --- a/app/Controllers/feedController.php +++ b/app/Controllers/feedController.php @@ -742,11 +742,12 @@ class FreshRSS_feed_Controller extends FreshRSS_ActionController { } /** - * @param array<int,int> $newUnreadEntriesPerFeed * @return int|false The number of articles marked as read, of false if error */ - private static function keepMaxUnreads(array $newUnreadEntriesPerFeed) { + private static function keepMaxUnreads() { $affected = 0; + $entryDAO = FreshRSS_Factory::createEntryDao(); + $newUnreadEntriesPerFeed = $entryDAO->newUnreadEntriesPerFeed(); $feedDAO = FreshRSS_Factory::createFeedDao(); $feeds = $feedDAO->listFeedsOrderUpdate(-1); foreach ($feeds as $feed) { @@ -801,26 +802,23 @@ class FreshRSS_feed_Controller extends FreshRSS_ActionController { return $tagDAO->tagEntries($applyLabels); } - public static function commitNewEntries(): bool { + public static function commitNewEntries(): void { $entryDAO = FreshRSS_Factory::createEntryDao(); - $newUnreadEntriesPerFeed = $entryDAO->newUnreadEntriesPerFeed(); - $nbNewEntries = array_sum($newUnreadEntriesPerFeed); + ['all' => $nbNewEntries, 'unread' => $nbNewUnreadEntries] = $entryDAO->countNewEntries(); if ($nbNewEntries > 0) { if (!$entryDAO->inTransaction()) { $entryDAO->beginTransaction(); } if ($entryDAO->commitNewEntries()) { - self::keepMaxUnreads($newUnreadEntriesPerFeed); self::applyLabelActions($nbNewEntries); + if ($nbNewUnreadEntries > 0) { + self::keepMaxUnreads(); + } } if ($entryDAO->inTransaction()) { $entryDAO->commit(); } } - - $databaseDAO = FreshRSS_Factory::createDatabaseDAO(); - $databaseDAO->minorDbMaintenance(); - return true; } /** @@ -846,6 +844,12 @@ class FreshRSS_feed_Controller extends FreshRSS_ActionController { self::commitNewEntries(); } else { if ($id === 0 && $url === '') { + // Case of a batch refresh (e.g. cron) + $databaseDAO = FreshRSS_Factory::createDatabaseDAO(); + $databaseDAO->minorDbMaintenance(); + Minz_ExtensionManager::callHookVoid('freshrss_user_maintenance'); + + FreshRSS_feed_Controller::commitNewEntries(); FreshRSS_category_Controller::refreshDynamicOpmls(); } [$updated_feeds, $feed, $nbNewArticles] = self::actualizeFeeds($id, $url, $maxFeeds); |
