From: Olaf Wintermann Date: Wed, 27 Aug 2025 17:31:26 +0000 (+0200) Subject: reload feed after sync X-Git-Url: https://uap-core.de/gitweb/?a=commitdiff_plain;h=c08b7a40db4852bd1f84c4358c9368764a6eb5dc;p=rssreader.git reload feed after sync --- diff --git a/rss-application/src/main/kotlin/de/unixwork/rssreader/App.kt b/rss-application/src/main/kotlin/de/unixwork/rssreader/App.kt index a1c52ba..9a68cba 100644 --- a/rss-application/src/main/kotlin/de/unixwork/rssreader/App.kt +++ b/rss-application/src/main/kotlin/de/unixwork/rssreader/App.kt @@ -12,8 +12,12 @@ class App : Application { } fun initToolbar() { - toolbarItem(name = "reload", icon = "view-refresh") { - SyncJob().sync() + toolbarItem(name = "reload", icon = "view-refresh") { event -> + val window = event.windowData as MainWindow + SyncJob().sync() { + window.sourceList.invalidateCache() + window.feedList.reloadCurrentFeed() + } } addToolbarDefault("reload", ToolbarPosition.LEFT) 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 77125e9..fb9c3a3 100644 --- a/rss-application/src/main/kotlin/de/unixwork/rssreader/Database.kt +++ b/rss-application/src/main/kotlin/de/unixwork/rssreader/Database.kt @@ -249,28 +249,26 @@ object Database { } public fun addItems(items: Collection) { - GlobalScope.launch(Dispatchers.IO) { - dataSource.connection.use { conn -> - conn.prepareStatement(""" + dataSource.connection.use { conn -> + conn.prepareStatement(""" insert into items (feed_id, title, link, 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.from(it.toInstant()) }) - stmt.setString(7, item.guid) - stmt.setString(8, item.contentText) - stmt.setString(9, item.contentHtml) - stmt.setString(10, item.guid) - stmt.addBatch() - } - stmt.executeBatch() + 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.from(it.toInstant()) }) + stmt.setString(7, item.guid) + stmt.setString(8, item.contentText) + stmt.setString(9, item.contentHtml) + stmt.setString(10, item.guid) + stmt.addBatch() } + stmt.executeBatch() } } } diff --git a/rss-application/src/main/kotlin/de/unixwork/rssreader/FeedList.kt b/rss-application/src/main/kotlin/de/unixwork/rssreader/FeedList.kt index af1644e..211ab59 100644 --- a/rss-application/src/main/kotlin/de/unixwork/rssreader/FeedList.kt +++ b/rss-application/src/main/kotlin/de/unixwork/rssreader/FeedList.kt @@ -11,16 +11,23 @@ class FeedList : Document() { val link = UiLinkData(linkstr) val webview = webview("webview") + var currentFeed: FeedCollection? = null + fun loadFeed(feed: FeedCollection) { items.clear() if(!feed.itemsLoaded) { - feed.items = Database.getItems(feed, 100) + feed.items = Database.getItems(feed, 10000) feed.itemsLoaded = true } feed.items.forEach { item -> items.add(item) } items.update() + currentFeed = feed + } + + fun reloadCurrentFeed() { + currentFeed?.let { loadFeed(it) } } fun selectItem(item: Item) { diff --git a/rss-application/src/main/kotlin/de/unixwork/rssreader/FeedSourceList.kt b/rss-application/src/main/kotlin/de/unixwork/rssreader/FeedSourceList.kt index e19d291..36c68d9 100644 --- a/rss-application/src/main/kotlin/de/unixwork/rssreader/FeedSourceList.kt +++ b/rss-application/src/main/kotlin/de/unixwork/rssreader/FeedSourceList.kt @@ -18,4 +18,12 @@ class FeedSourceList : Document() { feeds.add(sublist) } } + + fun invalidateCache() { + groups.forEach { + it.feeds.forEach { feed -> + feed.itemsLoaded = false + } + } + } } \ 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 83209e0..fc7726f 100644 --- a/rss-application/src/main/kotlin/de/unixwork/rssreader/MainWindow.kt +++ b/rss-application/src/main/kotlin/de/unixwork/rssreader/MainWindow.kt @@ -99,6 +99,8 @@ class MainWindow { } + window.ui.windowData = this + window.ui.attach(sourceList) window.ui.attach(feedList) } diff --git a/rss-application/src/main/kotlin/de/unixwork/rssreader/SyncJob.kt b/rss-application/src/main/kotlin/de/unixwork/rssreader/SyncJob.kt index f4b5d59..2281450 100644 --- a/rss-application/src/main/kotlin/de/unixwork/rssreader/SyncJob.kt +++ b/rss-application/src/main/kotlin/de/unixwork/rssreader/SyncJob.kt @@ -2,6 +2,7 @@ package de.unixwork.rssreader import com.rometools.rome.io.SyndFeedInput import com.rometools.rome.io.XmlReader +import de.unixwork.ui.kotlin.ToolkitDispatcher import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.IO @@ -15,12 +16,13 @@ import java.net.http.HttpResponse class SyncJob { val feeds: List + var completionContext = ToolkitDispatcher init { feeds = Database.getAllFeeds() } - fun sync() { + fun sync(completion: () -> Unit = {}) { GlobalScope.launch(Dispatchers.IO) { val client = HttpClient.newBuilder().build() val jobs = feeds.map { feed -> @@ -73,6 +75,10 @@ class SyncJob { } } jobs.awaitAll() + + GlobalScope.launch(completionContext) { + completion() + } } } } \ No newline at end of file