]> uap-core.de Git - rssreader.git/commitdiff
extended database model
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Fri, 29 Aug 2025 19:16:21 +0000 (21:16 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Fri, 29 Aug 2025 19:16:21 +0000 (21:16 +0200)
rss-application/src/main/kotlin/de/unixwork/rssreader/Database.kt
rss-application/src/main/kotlin/de/unixwork/rssreader/Feed.kt
rss-application/src/main/kotlin/de/unixwork/rssreader/FeedCollection.kt
rss-application/src/main/kotlin/de/unixwork/rssreader/Item.kt
rss-application/src/main/kotlin/de/unixwork/rssreader/SyncJob.kt

index c8e6a673bf306e0c22126087dbca06fd0e0da132..204dae277d62c04213831da0605d55855ac88f91 100644 (file)
@@ -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<Item>) {
         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()
index 7109d0ae222605e5c2db5c997e59e9c8d633bb13..d6e7db2074e4d292723a970e8c89e1487d887d0c 100644 (file)
@@ -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
 }
index 022d9a546f3593cccb6d44b28e19cded09f188f8..49ec7be4ec6d56bec3833b3e1db2a0928e3bd737 100644 (file)
@@ -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<Item>()
     var itemsLoaded = false
     var itemsLoading = false
index efd50eea01e12bb1e5e4c77e19e376caace29175..4f70c484cfc832349b68ddd52017d2cf699f9be2 100644 (file)
@@ -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
index eda5d9aef64863c92e941cff8409fc35cd555599..57e7ee32b19a16b9640e7b3b3a1b4386c3567bd2 100644 (file)
@@ -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 {