From 0db9881d092e271962a89cadbf42d93bac7c7fdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Reuh=20Fildadut?= Date: Sat, 18 Oct 2025 15:39:28 +0200 Subject: [PATCH] fix: mark-as-read articles that were read on the server when only_sync_unread_articles = true --- src/feather/app.py | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/feather/app.py b/src/feather/app.py index 3ef5697..22cde0a 100755 --- a/src/feather/app.py +++ b/src/feather/app.py @@ -160,20 +160,26 @@ class FeatherApp: article.write() updated_articles += 1 - # Remove articles that we didn't get from the server but are in the JSON directory + # Remove or mark-as-read articles that we didn't get from the server but are in the JSON directory removed_articles = 0 article_cutoff_timestamp = ( datetime.now().timestamp() - config.keep_read_articles_for ) for article in self.iter_articles(): - if ( - # we sync all articles: remove all articles that aren't on the server - not config.only_sync_unread_articles - # we only sync unread: only remove articles that are too old - or article.last_write < article_cutoff_timestamp - ) and article.id not in grabbed_article_paths: - article.delete() - removed_articles += 1 + if article.id not in grabbed_article_paths: + # we only sync unread: articles we didn't get from the server were read or purged + if config.only_sync_unread_articles: + if article.last_write < article_cutoff_timestamp: + article.delete() + removed_articles += 1 + elif article.unread: + article.unread = False + article.regenerate() + updated_articles += 1 + # we sync all articles: articles we didn't get from the server were purged + else: + article.delete() + removed_articles += 1 print( f"Synchronization successful ({new_articles} new articles, {updated_articles} updated, {removed_articles} removed)"