From b228f0713af59b8276500c830f5b2872ef39b4dd Mon Sep 17 00:00:00 2001 From: Olaf Wintermann Date: Fri, 15 Aug 2025 18:18:06 +0200 Subject: [PATCH] implement adding new feeds --- .../kotlin/de/unixwork/rssreader/Database.kt | 42 +++++++++++++++++++ .../main/kotlin/de/unixwork/rssreader/Feed.kt | 7 +++- .../de/unixwork/rssreader/MainWindow.kt | 8 +++- .../src/main/java/de/unixwork/ui/UiList.java | 8 ++++ .../kotlin/de/unixwork/ui/kotlin/Toplevel.kt | 1 - 5 files changed, 62 insertions(+), 4 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 9927d65..5d7603a 100644 --- a/rss-application/src/main/kotlin/de/unixwork/rssreader/Database.kt +++ b/rss-application/src/main/kotlin/de/unixwork/rssreader/Database.kt @@ -134,4 +134,46 @@ object Database { } return FeedGroup(groupId, name) } + + public fun newFeeds( + parent: FeedGroup, + name: String, + uris: Collection, + user: String? = null, + password: String? = null, + cert: String? = null) + { + var feedcollectionId = -1 + connection.prepareStatement(""" + insert into feedcollections (group_id, pos, name) select ?, max(pos)+1, ? from groups + """.trimIndent()).use { stmt -> + stmt.setInt(1, parent.id) + stmt.setString(2, name) + stmt.execute() + stmt.generatedKeys.use { rs -> + if(rs.next()) { + feedcollectionId = rs.getInt(1) + } else { + throw Exception("Insert FeedCollection failed") + } + } + } + + uris.forEach { uri -> + connection.prepareStatement(""" + insert into feeds (feedcollection_id, url, user, password, certpath) + select ?, ?, ?, ?, ? + from dual + where not exists (select 1 from feeds where url = ?) + """.trimIndent()).use { stmt -> + stmt.setInt(1, feedcollectionId) + stmt.setString(2, uri) + stmt.setString(3, user) + stmt.setString(4, password) + stmt.setString(5, cert) + + stmt.execute() + } + } + } } 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 a098c69..7109d0a 100644 --- a/rss-application/src/main/kotlin/de/unixwork/rssreader/Feed.kt +++ b/rss-application/src/main/kotlin/de/unixwork/rssreader/Feed.kt @@ -1,6 +1,11 @@ package de.unixwork.rssreader -class Feed(uri: String) { +class Feed(id: Int, feedCollectionId: Int, uri: String) { + val id = id + val feedCollectionId = feedCollectionId val uri = uri + var user: String? = null + var password: String? = null + var certpath: 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 f41f3fe..a827416 100644 --- a/rss-application/src/main/kotlin/de/unixwork/rssreader/MainWindow.kt +++ b/rss-application/src/main/kotlin/de/unixwork/rssreader/MainWindow.kt @@ -67,10 +67,14 @@ class MainWindow { showCloseButton = false, onClick = { ev -> if(ev.intValue == 1) { - val groupSel = groups?.selectedIndex + val parent = groups?.selected val feedName = name.toString() val urlStr = urls.toString() - println("groupSel: $groupSel, feedName: $feedName, urlStr: $urlStr") + val uris = urlStr.split("\n").map { it.trim() }.filter { it.isNotBlank() } + println("groupSel: ${groups?.selectedIndex}, feedName: $feedName, urlStr: $urlStr") + parent?.let { + Database.newFeeds(it, feedName, uris, user.toString(), password.toString(), cert.toString()) + } } ev.`object`.close() }) diff --git a/ui-java/src/main/java/de/unixwork/ui/UiList.java b/ui-java/src/main/java/de/unixwork/ui/UiList.java index 0fdce38..104d7f0 100644 --- a/ui-java/src/main/java/de/unixwork/ui/UiList.java +++ b/ui-java/src/main/java/de/unixwork/ui/UiList.java @@ -101,6 +101,14 @@ public class UiList extends ArrayList { return selection[0]; } + public T getSelected() { + int index = getSelectedIndex(); + if(index == -1) { + return null; + } + return get(index); + } + public void free() { ToolkitFuncs tk = ToolkitFuncs.getInstance(); try { diff --git a/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Toplevel.kt b/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Toplevel.kt index a2ec59a..bccd7f2 100644 --- a/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Toplevel.kt +++ b/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Toplevel.kt @@ -1329,7 +1329,6 @@ class Toplevel(obj: UiObject) { rowspan: Int = -1, name: String? = null, styleClass: String? = null, - ): UiWidget { labelStr?.let { label.label(it) -- 2.47.3