From 38e63efb16c179ecc10c68a2458ca6c1d4cfecb4 Mon Sep 17 00:00:00 2001 From: Olaf Wintermann Date: Sat, 30 Aug 2025 10:43:54 +0200 Subject: [PATCH] use item updated date as primary date, use pubDate as fallback --- .../main/kotlin/de/unixwork/rssreader/Database.kt | 15 +++++++++------ .../src/main/kotlin/de/unixwork/rssreader/Item.kt | 1 + .../kotlin/de/unixwork/rssreader/MainWindow.kt | 4 +--- .../main/kotlin/de/unixwork/rssreader/SyncJob.kt | 3 +++ 4 files changed, 14 insertions(+), 9 deletions(-) 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 ef3d368..543787d 100644 --- a/rss-application/src/main/kotlin/de/unixwork/rssreader/Database.kt +++ b/rss-application/src/main/kotlin/de/unixwork/rssreader/Database.kt @@ -80,6 +80,7 @@ object Database { description CLOB, author VARCHAR, pub_date TIMESTAMP, + updated TIMESTAMP, guid VARCHAR UNIQUE, contentText CLOB, contentHTML CLOB, @@ -227,6 +228,7 @@ object Database { item.description = rs.getString("description") item.author = rs.getString("author") item.pubDate = rs.getObject("pub_date", java.time.LocalDateTime::class.java) + item.updated = rs.getObject("updated", java.time.LocalDateTime::class.java) item.guid = rs.getString("guid") item.contentText = rs.getString("contentText") item.contentHtml = rs.getString("contentHTML") @@ -270,8 +272,8 @@ object Database { public fun addItems(items: Collection) { dataSource.connection.use { conn -> conn.prepareStatement(""" - insert into items (feed_id, title, link, category, description, author, pub_date, guid, contentText, contentHTML) - select ?, ?, ?, ?, ?, ?, ?, ?, ?, ? + insert into items (feed_id, title, link, category, description, author, pub_date, updated, guid, contentText, contentHTML) + select ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? where ? not in (select guid from items) """.trimIndent()).use { stmt -> items.forEach { item -> @@ -282,10 +284,11 @@ object Database { stmt.setString(5, item.description) stmt.setString(6, item.author) stmt.setTimestamp(7, item.pubDate?.let { java.sql.Timestamp.valueOf(it) }) - stmt.setString(8, item.guid) - stmt.setString(9, item.contentText) - stmt.setString(10, item.contentHtml) - stmt.setString(11, item.guid) + stmt.setTimestamp(8, item.updated?.let { java.sql.Timestamp.valueOf(it) }) + stmt.setString(9, item.guid) + stmt.setString(10, item.contentText) + stmt.setString(11, item.contentHtml) + stmt.setString(12, item.guid) stmt.addBatch() } stmt.executeBatch() diff --git a/rss-application/src/main/kotlin/de/unixwork/rssreader/Item.kt b/rss-application/src/main/kotlin/de/unixwork/rssreader/Item.kt index 4f70c48..33758ed 100644 --- a/rss-application/src/main/kotlin/de/unixwork/rssreader/Item.kt +++ b/rss-application/src/main/kotlin/de/unixwork/rssreader/Item.kt @@ -12,6 +12,7 @@ class Item(id: Int) { var description: String? = null var author: String? = null var pubDate: LocalDateTime? = null + var updated: LocalDateTime? = null var guid: String? = null var contentText: String? = null var contentHtml: String? = null 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 be8be02..3ea9eed 100644 --- a/rss-application/src/main/kotlin/de/unixwork/rssreader/MainWindow.kt +++ b/rss-application/src/main/kotlin/de/unixwork/rssreader/MainWindow.kt @@ -77,9 +77,7 @@ class MainWindow { var result: String? = null when(col) { 0 -> result = elm.title - 1 -> { - result = elm.pubDate?.format(formatter) - } + 1 -> result = elm.updated?.format(formatter) ?: elm.pubDate?.format(formatter) } result } 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 57e7ee3..35c1fc8 100644 --- a/rss-application/src/main/kotlin/de/unixwork/rssreader/SyncJob.kt +++ b/rss-application/src/main/kotlin/de/unixwork/rssreader/SyncJob.kt @@ -60,6 +60,9 @@ class SyncJob { entry.publishedDate?.let { item.pubDate = it.toInstant().atZone(java.time.ZoneId.systemDefault()).toLocalDateTime() } + entry.updatedDate?.let { + item.updated = it.toInstant().atZone(java.time.ZoneId.systemDefault()).toLocalDateTime() + } item.guid = entry.uri val contents = entry.contents contents.forEach { content -> -- 2.47.3