From 564cfb9ca7ec37a38077a4952586b090f55c37bf Mon Sep 17 00:00:00 2001 From: Olaf Wintermann Date: Sun, 31 May 2026 12:48:29 +0200 Subject: [PATCH] don't insert items when they are older than the max item age --- .../main/kotlin/de/unixwork/rssreader/App.kt | 6 +++--- .../kotlin/de/unixwork/rssreader/Database.kt | 6 ++++++ .../kotlin/de/unixwork/rssreader/MainWindow.kt | 2 +- .../kotlin/de/unixwork/rssreader/SyncJob.kt | 18 +++++++++++++++++- 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/rss-application/src/main/kotlin/de/unixwork/rssreader/App.kt b/rss-application/src/main/kotlin/de/unixwork/rssreader/App.kt index 6b0bb04..de021aa 100644 --- a/rss-application/src/main/kotlin/de/unixwork/rssreader/App.kt +++ b/rss-application/src/main/kotlin/de/unixwork/rssreader/App.kt @@ -31,14 +31,14 @@ object App : Application { } fun syncAll() { - SyncJob({ Database.getAllFeeds()}).sync() { + SyncJob(settings, { Database.getAllFeeds()}).sync() { window?.reload() } } fun syncCurrent() { window?.feedList?.currentFeed?.let { - SyncJob({ Database.getFeed(it.id)?.let { mutableListOf(it)} ?: mutableListOf() }).sync() { + SyncJob(settings, { Database.getFeed(it.id)?.let { mutableListOf(it)} ?: mutableListOf() }).sync() { window?.reload() } } @@ -246,7 +246,7 @@ object App : Application { try { val pending = Database.getPendingFeeds(settings.defaultRefreshInterval) if(!pending.isEmpty()) { - SyncJob { pending }.syncBlocking() + SyncJob(settings, { pending }).syncBlocking() GlobalScope.launch(ToolkitDispatcher) { window!!.sourceList.invalidateCache() window!!.sourceList.reloadStatus() diff --git a/rss-application/src/main/kotlin/de/unixwork/rssreader/Database.kt b/rss-application/src/main/kotlin/de/unixwork/rssreader/Database.kt index d1b0087..ade3705 100644 --- a/rss-application/src/main/kotlin/de/unixwork/rssreader/Database.kt +++ b/rss-application/src/main/kotlin/de/unixwork/rssreader/Database.kt @@ -352,10 +352,12 @@ object Database { val id = rs.getInt("feed_id") val name = rs.getString("name") val url = rs.getString("url") + val maxItemAge = rs.getInt("max_item_age") val authUser = rs.getString("auth_user") val authPassword = rs.getString("auth_password") val certPath = rs.getString("certpath") val feed = Feed(id, name, url) + feed.maxItemAge = maxItemAge feed.user = authUser feed.password = authPassword feed.certpath = certPath @@ -381,10 +383,12 @@ object Database { val id = rs.getInt("feed_id") val name = rs.getString("name") val url = rs.getString("url") + val maxItemAge = rs.getInt("max_item_age") val authUser = rs.getString("auth_user") val authPassword = rs.getString("auth_password") val certPath = rs.getString("certpath") feed = Feed(id, name, url) + feed.maxItemAge = maxItemAge feed.user = authUser feed.password = authPassword feed.certpath = certPath @@ -411,6 +415,7 @@ object Database { val id = rs.getInt("feed_id") val name = rs.getString("name") val url = rs.getString("url") + val maxItemAge = rs.getInt("max_item_age") val authUser = rs.getString("auth_user") val authPassword = rs.getString("auth_password") val certPath = rs.getString("certpath") @@ -418,6 +423,7 @@ object Database { feed.user = authUser feed.password = authPassword feed.certpath = certPath + feed.maxItemAge = maxItemAge feeds.add(feed) } } diff --git a/rss-application/src/main/kotlin/de/unixwork/rssreader/MainWindow.kt b/rss-application/src/main/kotlin/de/unixwork/rssreader/MainWindow.kt index acc616c..60c4f03 100644 --- a/rss-application/src/main/kotlin/de/unixwork/rssreader/MainWindow.kt +++ b/rss-application/src/main/kotlin/de/unixwork/rssreader/MainWindow.kt @@ -59,7 +59,7 @@ class MainWindow() { val evt = event.subListEventData val feedIndex = evt.rowIndex if(evt.sublistIndex >= 0) { - SyncJob({ + SyncJob(App.settings,{ if(feedIndex >= 0) { val feed = Database.getFeed(sourceList.groups[evt.sublistIndex].feeds[feedIndex].id) feed?.let { mutableListOf(it)} ?: mutableListOf() diff --git a/rss-application/src/main/kotlin/de/unixwork/rssreader/SyncJob.kt b/rss-application/src/main/kotlin/de/unixwork/rssreader/SyncJob.kt index 51932fa..62506fe 100644 --- a/rss-application/src/main/kotlin/de/unixwork/rssreader/SyncJob.kt +++ b/rss-application/src/main/kotlin/de/unixwork/rssreader/SyncJob.kt @@ -15,8 +15,11 @@ import java.net.URI import java.net.http.HttpClient import java.net.http.HttpRequest import java.net.http.HttpResponse +import java.time.Duration +import java.time.Instant -class SyncJob(feeds: () -> List) { +class SyncJob(settings: Settings, feeds: () -> List) { + val settings = settings val getFeeds: () -> List = feeds var completionContext = ToolkitDispatcher @@ -65,6 +68,19 @@ class SyncJob(feeds: () -> List) { println("Fetched feed: ${syndFeed.title}") syndFeed.entries.forEach { entry -> //println(" ${entry.title} - ${entry.link}") + if(feed.maxItemAge >= 0) { + val max_age = if(feed.maxItemAge == 0) settings.maxItemAge else feed.maxItemAge + if(max_age > 0) { + val date = entry.updatedDate ?: entry.publishedDate + date?.let { + val age = Duration.between(it.toInstant(), Instant.now()).toDays() + if(age > max_age) { + //println("Item too old, skipping: ${entry.title} date: ${it}") + return@forEach + } + } + } + } val item = Item(0) item.feedId = feed.id -- 2.47.3