]> uap-core.de Git - rssreader.git/commitdiff
implement sourcelist contextmenu items reload/mark as read
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Tue, 4 Nov 2025 19:20:19 +0000 (20:20 +0100)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Tue, 4 Nov 2025 19:20:19 +0000 (20:20 +0100)
rss-application/src/main/kotlin/de/unixwork/rssreader/FeedCollection.kt
rss-application/src/main/kotlin/de/unixwork/rssreader/MainWindow.kt

index f7704f1258024e525d421441443995bb16cf2d79..3362279092f2845d9e4fcbaf26d524adb33f2044 100644 (file)
@@ -13,4 +13,8 @@ class FeedCollection(id: Int, name: String)  {
     var items = mutableListOf<Item>()
     var itemsLoaded = false
     var itemsLoading = false
+
+    fun updateReadStatus(isRead: Boolean) {
+        items.forEach { it.isRead = isRead }
+    }
 }
\ No newline at end of file
index 5497ceeeb0fcadb5b00b8eb23b2132cc1b7de981..32c821bffa7cc4d82039631d2422a85bbc49d8f4 100644 (file)
@@ -18,6 +18,9 @@ import de.unixwork.ui.kotlin.openFileDialog
 import de.unixwork.ui.kotlin.separator
 import de.unixwork.ui.kotlin.setDefaultWindowSize
 import de.unixwork.ui.kotlin.splitViewWindow
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.GlobalScope
+import kotlinx.coroutines.launch
 import java.time.LocalDate
 import java.time.ZoneId
 import java.time.format.DateTimeFormatter
@@ -40,26 +43,52 @@ class MainWindow() {
     var currentSublistIndex = -1
     var currentFeedIndex = -1
 
+    var buttonCurrentSublistIndex = -1
+    var buttonCurrentFeedIndex = -1
+
     val contextMenu = menuBuilder {
         menuItem("Reload") {
-
+            if(buttonCurrentFeedIndex >= 0 && buttonCurrentSublistIndex >= 0) {
+                val feed = sourceList.groups[buttonCurrentSublistIndex].feeds[buttonCurrentFeedIndex]
+                SyncJob({ Database.getCollectionFeeds(feed)}).sync() {
+                    App.window?.reload()
+                }
+            }
+            contextMenuReset()
         }
         menuItem("Mark as read") {
-
+            if(buttonCurrentFeedIndex >= 0 && buttonCurrentSublistIndex >= 0) {
+                try {
+                    val feed = sourceList.groups[buttonCurrentSublistIndex].feeds[buttonCurrentFeedIndex]
+                    feed.unreadItemsCount = 0
+                    feed.updateReadStatus(true)
+                    if(buttonCurrentSublistIndex == currentSublistIndex && buttonCurrentFeedIndex == currentFeedIndex) {
+                        feedList.reloadCurrentFeed()
+                    }
+                    GlobalScope.launch(Dispatchers.IO) {
+                        Database.updateFeedReadState(feed, true)
+                    }
+                } catch (e: Exception) {
+                    e.printStackTrace()
+                }
+                sourceList.feeds.update()
+            }
+            contextMenuReset()
         }
         separator()
         menuItem("Move Up") {
 
+            contextMenuReset()
         }
         menuItem("Move Down") {
-
+            contextMenuReset()
         }
         menuItem("Delete") {
-
+            contextMenuReset()
         }
         separator()
         menuItem("Settings") {
-
+            contextMenuReset()
         }
     }
 
@@ -93,6 +122,11 @@ class MainWindow() {
                             } catch (e: Exception) {
                                 e.printStackTrace()
                             }
+                        },
+                        onButtonClick = { event ->
+                            val evt = event.subListEventData
+                            buttonCurrentSublistIndex = evt.sublistIndex
+                            buttonCurrentFeedIndex = evt.rowIndex
                         }
                     )
                     { elm: FeedCollection?, i, sublist ->
@@ -228,6 +262,11 @@ class MainWindow() {
         window.ui.attach(feedList)
     }
 
+    fun contextMenuReset() {
+        buttonCurrentFeedIndex = -1
+        buttonCurrentSublistIndex = -1
+    }
+
     fun reload() {
         sourceList.invalidateCache()
         sourceList.reloadStatus()