From eab7eac24ecdc3a134c3a9f3b59b0d0dc000ae2a Mon Sep 17 00:00:00 2001 From: Olaf Wintermann Date: Tue, 4 Nov 2025 20:20:19 +0100 Subject: [PATCH] implement sourcelist contextmenu items reload/mark as read --- .../de/unixwork/rssreader/FeedCollection.kt | 4 ++ .../de/unixwork/rssreader/MainWindow.kt | 49 +++++++++++++++++-- 2 files changed, 48 insertions(+), 5 deletions(-) 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 f7704f1..3362279 100644 --- a/rss-application/src/main/kotlin/de/unixwork/rssreader/FeedCollection.kt +++ b/rss-application/src/main/kotlin/de/unixwork/rssreader/FeedCollection.kt @@ -13,4 +13,8 @@ class FeedCollection(id: Int, name: String) { var items = mutableListOf() var itemsLoaded = false var itemsLoading = false + + fun updateReadStatus(isRead: Boolean) { + items.forEach { it.isRead = isRead } + } } \ No newline at end of file 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 5497cee..32c821b 100644 --- a/rss-application/src/main/kotlin/de/unixwork/rssreader/MainWindow.kt +++ b/rss-application/src/main/kotlin/de/unixwork/rssreader/MainWindow.kt @@ -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() -- 2.47.3