mirror of
https://github.com/FreshRSS/FreshRSS.git
synced 2026-04-18 05:17:17 -04:00
Category autoread by guid (#8673)
* Add configuration to mark same GUID as read in category. Implement suggestion mentioned in #8641 Changes proposed in this pull request: - Add a configuration to the categories to automatically mark entries as read if the same GUID is present in recent entries. How to test the feature manually: 1. Create a category. Check the option "Mark an article as read… if an identical GUID already exists [...]" 2. Enable debug logs, or add an extension which registers to the hook `Minz_HookType::EntryAutoRead`. 3. Add feeds which might have the same GUID. For example: https://www.reddit.com/r/technology/hot.rss, https://www.reddit.com/r/technology/rising.rss, https://www.reddit.com/r/technology/best.rss, and https://www.reddit.com/r/technology/new.rss 4. See the logs "Mark GUID as read[...]", or the effect of the extension. * Implement behavior to mark same GUID as read in category. * Update documentation * Update i18n * Fix PHP CS report * Fix missing argument * Fixes --------- Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
This commit is contained in:
@@ -468,6 +468,8 @@ class FreshRSS_feed_Controller extends FreshRSS_ActionController {
|
||||
$feedsCacheToRefresh = [];
|
||||
/** @var array<int,array<string,true>> */
|
||||
$categoriesEntriesTitle = [];
|
||||
/** @var array<int,array<string,true>> */
|
||||
$categoriesEntriesGuid = [];
|
||||
|
||||
$feeds = Minz_ExtensionManager::callHook(Minz_HookType::FeedsListBeforeActualize, $feeds);
|
||||
if (is_array($feeds)) {
|
||||
@@ -601,6 +603,12 @@ class FreshRSS_feed_Controller extends FreshRSS_ActionController {
|
||||
true
|
||||
);
|
||||
}
|
||||
if (!isset($categoriesEntriesGuid[$feed->categoryId()]) && $category !== null && $category->hasAttribute('read_when_same_guid_in_category')) {
|
||||
$categoriesEntriesGuid[$feed->categoryId()] = array_fill_keys(
|
||||
$catDAO->listGuids($feed->categoryId(), $category->attributeInt('read_when_same_guid_in_category') ?? 0),
|
||||
true
|
||||
);
|
||||
}
|
||||
|
||||
$mark_updated_article_unread = $feed->attributeBoolean('mark_updated_article_unread') ?? FreshRSS_Context::userConf()->mark_updated_article_unread;
|
||||
|
||||
@@ -646,6 +654,9 @@ class FreshRSS_feed_Controller extends FreshRSS_ActionController {
|
||||
if (isset($categoriesEntriesTitle[$feed->categoryId()])) {
|
||||
$categoriesEntriesTitle[$feed->categoryId()][$entry->title()] = true;
|
||||
}
|
||||
if (isset($categoriesEntriesGuid[$feed->categoryId()])) {
|
||||
$categoriesEntriesGuid[$feed->categoryId()][$entry->guid()] = true;
|
||||
}
|
||||
|
||||
if (!$entry->isRead()) {
|
||||
$needFeedCacheRefresh = true; //Maybe
|
||||
@@ -674,13 +685,17 @@ class FreshRSS_feed_Controller extends FreshRSS_ActionController {
|
||||
continue;
|
||||
}
|
||||
|
||||
$entry->applyFilterActions(array_merge($titlesAsRead, $categoriesEntriesTitle[$feed->categoryId()] ?? []));
|
||||
$entry->applyFilterActions(array_merge($titlesAsRead, $categoriesEntriesTitle[$feed->categoryId()] ?? []),
|
||||
$categoriesEntriesGuid[$feed->categoryId()] ?? []);
|
||||
if ($readWhenSameTitleInFeed > 0) {
|
||||
$titlesAsRead[$entry->title()] = true;
|
||||
}
|
||||
if (isset($categoriesEntriesTitle[$feed->categoryId()])) {
|
||||
$categoriesEntriesTitle[$feed->categoryId()][$entry->title()] = true;
|
||||
}
|
||||
if (isset($categoriesEntriesGuid[$feed->categoryId()])) {
|
||||
$categoriesEntriesGuid[$feed->categoryId()][$entry->guid()] = true;
|
||||
}
|
||||
|
||||
$needFeedCacheRefresh = true;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user