From: Olaf Wintermann Date: Fri, 29 Aug 2025 19:16:21 +0000 (+0200) Subject: extended database model X-Git-Url: https://uap-core.de/gitweb/?a=commitdiff_plain;h=7bc71e5b3fe54447e9eae9b4155e73beaecc6543;p=rssreader.git extended database model --- 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 c8e6a67..204dae2 100644 --- a/rss-application/src/main/kotlin/de/unixwork/rssreader/Database.kt +++ b/rss-application/src/main/kotlin/de/unixwork/rssreader/Database.kt @@ -53,7 +53,8 @@ object Database { group_id INT NOT NULL REFERENCES groups(group_id) ON DELETE CASCADE, pos INT default 0, name VARCHAR, - update_interval INT + update_interval INT, + auto_mark_read BOOLEAN DEFAULT FALSE ) """.trimIndent()) @@ -75,12 +76,15 @@ object Database { feed_id INT NOT NULL REFERENCES feeds(feed_id), title VARCHAR NOT NULL, link VARCHAR NOT NULL, + category VARCHAR, description CLOB, author VARCHAR, pub_date TIMESTAMP, guid VARCHAR UNIQUE, contentText CLOB, - contentHTML CLOB + contentHTML CLOB, + is_read BOOLEAN DEFAULT FALSE, + is_bookmarked BOOLEAN DEFAULT FALSE ) """.trimIndent()) @@ -100,7 +104,9 @@ object Database { g.group_id, g.name as group_name, f.feedcollection_id, - f.name as feed_name + f.name as feed_name, + f.update_interval, + f.auto_mark_read from groups g left join feedcollections f on g.group_id = f.group_id order by g.pos, f.pos @@ -112,6 +118,8 @@ object Database { val groupName = rs.getString("group_name") val feedId = rs.getInt("feedcollection_id") val feedName = rs.getString("feed_name") + val updateInterval = rs.getLong("update_interval") + val autoMarkRead = rs.getBoolean("auto_mark_read") if(currentGroup == null || currentGroup.id != groupId) { currentGroup = FeedGroup(context, groupId, groupName) @@ -119,7 +127,10 @@ object Database { } if(feedId != null && feedName != null) { - currentGroup.feeds.add(FeedCollection(feedId, feedName)) + val feed = FeedCollection(feedId, feedName) + feed.updateInterval = updateInterval + feed.autoMarkRead = autoMarkRead + currentGroup.feeds.add(feed) } } @@ -208,6 +219,7 @@ object Database { item.feedId = rs.getInt("feed_id") item.title = rs.getString("title") item.link = rs.getString("link") + item.category = rs.getString("category") item.description = rs.getString("description") item.author = rs.getString("author") item.pubDate = rs.getObject("pub_date", java.time.LocalDateTime::class.java) @@ -216,6 +228,8 @@ object Database { item.contentHtml = rs.getString("contentHTML") item.feedName = feedCollection.name item.feedUrl = rs.getString("URL") + item.isRead = rs.getBoolean("is_read") + item.isBookmark = rs.getBoolean("is_bookmarked") items.add(item) } } @@ -252,21 +266,22 @@ object Database { public fun addItems(items: Collection) { dataSource.connection.use { conn -> conn.prepareStatement(""" - insert into items (feed_id, title, link, description, author, pub_date, guid, contentText, contentHTML) - select ?, ?, ?, ?, ?, ?, ?, ?, ? + insert into items (feed_id, title, link, category, description, author, pub_date, guid, contentText, contentHTML) + select ?, ?, ?, ?, ?, ?, ?, ?, ?, ? where ? not in (select guid from items) """.trimIndent()).use { stmt -> items.forEach { item -> stmt.setInt(1, item.feedId) stmt.setString(2, item.title) stmt.setString(3, item.link) - stmt.setString(4, item.description) - stmt.setString(5, item.author) - stmt.setTimestamp(6, item.pubDate?.let { java.sql.Timestamp.valueOf(it) }) - stmt.setString(7, item.guid) - stmt.setString(8, item.contentText) - stmt.setString(9, item.contentHtml) - stmt.setString(10, item.guid) + stmt.setString(4, item.category) + 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.addBatch() } stmt.executeBatch() diff --git a/rss-application/src/main/kotlin/de/unixwork/rssreader/Feed.kt b/rss-application/src/main/kotlin/de/unixwork/rssreader/Feed.kt index 7109d0a..d6e7db2 100644 --- a/rss-application/src/main/kotlin/de/unixwork/rssreader/Feed.kt +++ b/rss-application/src/main/kotlin/de/unixwork/rssreader/Feed.kt @@ -1,5 +1,7 @@ package de.unixwork.rssreader +import java.time.LocalDateTime + class Feed(id: Int, feedCollectionId: Int, uri: String) { val id = id @@ -8,4 +10,5 @@ class Feed(id: Int, feedCollectionId: Int, uri: String) { var user: String? = null var password: String? = null var certpath: String? = null + var lastUpdate: LocalDateTime? = null } diff --git a/rss-application/src/main/kotlin/de/unixwork/rssreader/FeedCollection.kt b/rss-application/src/main/kotlin/de/unixwork/rssreader/FeedCollection.kt index 022d9a5..49ec7be 100644 --- a/rss-application/src/main/kotlin/de/unixwork/rssreader/FeedCollection.kt +++ b/rss-application/src/main/kotlin/de/unixwork/rssreader/FeedCollection.kt @@ -5,6 +5,9 @@ import de.unixwork.ui.Document class FeedCollection(id: Int, name: String) { val id = id val name = name + var updateInterval: Long = 0 + var autoMarkRead = false + var items = mutableListOf() var itemsLoaded = false var itemsLoading = false 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 efd50ee..4f70c48 100644 --- a/rss-application/src/main/kotlin/de/unixwork/rssreader/Item.kt +++ b/rss-application/src/main/kotlin/de/unixwork/rssreader/Item.kt @@ -8,12 +8,15 @@ class Item(id: Int) { var feedId = -1 var title: String? = null var link: String? = null + var category: String? = null var description: String? = null var author: String? = null var pubDate: LocalDateTime? = null var guid: String? = null var contentText: String? = null var contentHtml: String? = null + var isRead = false + var isBookmark = false var feedName: String? = null var feedUrl: String? = null 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 eda5d9a..57e7ee3 100644 --- a/rss-application/src/main/kotlin/de/unixwork/rssreader/SyncJob.kt +++ b/rss-application/src/main/kotlin/de/unixwork/rssreader/SyncJob.kt @@ -54,6 +54,7 @@ class SyncJob { item.feedId = feed.id item.title = entry.title item.link = entry.link + item.category = entry.categories.firstOrNull()?.name item.description = entry.description?.value item.author = entry.author entry.publishedDate?.let {