import de.unixwork.ui.Document
import de.unixwork.ui.UiLinkData
+import de.unixwork.ui.kotlin.ToolkitDispatcher
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.GlobalScope
+import kotlinx.coroutines.IO
+import kotlinx.coroutines.launch
class FeedList : Document() {
val items = list<Item>("items")
val webview = webview("webview")
val tabview = integer("tabview")
+ // Feed that is currently shown
var currentFeed: FeedCollection? = null
+ // Currently requested feed
+ var showFeed: FeedCollection? = null
fun loadFeed(feed: FeedCollection) {
- items.clear()
+ showFeed = feed
if(!feed.itemsLoaded) {
- feed.items = Database.getItems(feed, 10000)
- feed.itemsLoaded = true
+ if(feed.itemsLoading) {
+ return // another loading job already in progress for this feed
+ }
+
+ feed.itemsLoading = true
+ GlobalScope.launch(Dispatchers.IO) {
+ feed.items = Database.getItems(feed, 10000)
+ feed.itemsLoaded = true
+ // notify UI
+ GlobalScope.launch(ToolkitDispatcher) {
+ feed.itemsLoading = false
+ feed.itemsLoaded = true
+ if(showFeed == feed) {
+ loadFeed(feed)
+ }
+ }
+ }
+ return
+
}
+
+ // Update item list
+ items.clear()
feed.items.forEach { item ->
items.add(item)
}