]> uap-core.de Git - rssreader.git/commitdiff
implement feed deletion
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Fri, 14 Nov 2025 19:06:39 +0000 (20:06 +0100)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Fri, 14 Nov 2025 19:06:39 +0000 (20:06 +0100)
rss-application/src/main/kotlin/de/unixwork/rssreader/Database.kt
rss-application/src/main/kotlin/de/unixwork/rssreader/MainWindow.kt

index ea7e136e7f5b9e9fe2ba81ffab8735f4680c0f48..22380bb76c7f28ab1d8532449318bc35df06854c 100644 (file)
@@ -86,7 +86,7 @@ object Database {
                 createStmt.addBatch("""
                     CREATE TABLE items (
                         item_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
-                        feed_id INT NOT NULL REFERENCES feeds(feed_id),
+                        feed_id INT NOT NULL REFERENCES feeds(feed_id) ON DELETE CASCADE,
                         title VARCHAR NOT NULL,
                         link VARCHAR NOT NULL,
                         category VARCHAR,
@@ -402,6 +402,17 @@ object Database {
         return feeds
     }
 
+    public fun deleteFeedCollection(feedCollection: FeedCollection) {
+        dataSource.connection.use { conn ->
+            conn.prepareStatement("""
+                delete from feedcollections where feedcollection_id = ?
+            """.trimIndent()).use { stmt ->
+                stmt.setInt(1, feedCollection.id)
+                stmt.execute()
+            }
+        }
+    }
+
     public fun getPendingFeeds(defaultInterval: Int) : MutableList<Feed> {
         val feeds = mutableListOf<Feed>()
 
index 46258bb2e0d9a0793f19c6090b0eaf9658f31ffe..21a7d74a2aa214d4b4ca7e4782873193057b0618 100644 (file)
@@ -11,6 +11,7 @@ import de.unixwork.ui.UiList
 import de.unixwork.ui.UiString
 import de.unixwork.ui.UiText
 import de.unixwork.ui.kotlin.Toplevel
+import de.unixwork.ui.kotlin.dialog
 import de.unixwork.ui.kotlin.dialogWindow
 import de.unixwork.ui.kotlin.menuBuilder
 import de.unixwork.ui.kotlin.menuItem
@@ -103,6 +104,26 @@ class MainWindow() {
         }
         menuItem("Delete") { event ->
             val evt = event.subListEventData
+            if(evt.sublistIndex >= 0 && evt.rowIndex >= 0) {
+                val feedCollection = sourceList.groups[evt.sublistIndex].feeds[evt.rowIndex]
+                dialog(
+                    parent = window.ui,
+                    title = "Delete Feed",
+                    content = "Delete ${feedCollection.name}?",
+                    button1Label = "Cancel",
+                    button2Label = "Delete")
+                { event ->
+                    if(event.intValue == 2) {
+                        GlobalScope.launch(Dispatchers.IO) {
+                            Database.deleteFeedCollection(feedCollection)
+                        }
+                        sourceList.groups[evt.sublistIndex].feeds.remove(feedCollection)
+                        sourceList.groups[evt.sublistIndex].feeds.update()
+                    }
+                }
+            } else {
+                // TODO
+            }
         }
         separator()
         menuItem("Settings") { event ->