aboutsummaryrefslogtreecommitdiff
path: root/app/Controllers/feedController.php
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2024-02-26 09:01:25 +0100
committerGravatar GitHub <noreply@github.com> 2024-02-26 09:01:25 +0100
commitbfd277065c7bfd28779c585549dd9e9e577eabdf (patch)
tree15cca303b1a7627686e4107a678391dda9803f13 /app/Controllers/feedController.php
parent39cc1c11ec596176e842cc98e6a54337e3c04d7e (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.php24
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);