diff options
author | Daniel Schaal <daniel@schaal.email> | 2021-07-14 08:08:20 +0300 |
---|---|---|
committer | Daniel Schaal <daniel@schaal.email> | 2021-07-25 10:10:47 +0300 |
commit | 9c1fa5513e8cd04e8d91db23abc55f9beedbf9e2 (patch) | |
tree | 8792236576e7ac4925d91722ccf13ae9cc385d57 | |
parent | 72320cac79c9d3dcdeed804f01482ac509fb3db2 (diff) |
Directly emit Insertables
-rw-r--r-- | app/src/main/java/email/schaal/ocreader/api/API.kt | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/app/src/main/java/email/schaal/ocreader/api/API.kt b/app/src/main/java/email/schaal/ocreader/api/API.kt index 8e62e5a2..2d9737fc 100644 --- a/app/src/main/java/email/schaal/ocreader/api/API.kt +++ b/app/src/main/java/email/schaal/ocreader/api/API.kt @@ -190,11 +190,13 @@ class API { ALL(3) } - private suspend fun batchedItemLoad(collector: FlowCollector<List<Insertable>>, queryType: QueryType, getRead: Boolean = false) { + private suspend fun batchedItemLoad(collector: FlowCollector<Insertable>, queryType: QueryType, getRead: Boolean = false) { var offset = 0L do { val resultCount = api?.items(BATCH_SIZE, offset, queryType.type, 0L, getRead = getRead, oldestFirst = true)?.items?.let { - collector.emit(it) + for (insertable in it) { + collector.emit(insertable) + } offset = it.firstOrNull()?.id ?: 0L it.size.toLong() } @@ -218,16 +220,20 @@ class API { val folders = api?.folders()?.folders val feeds = api?.feeds()?.feeds - val insertFlow = flow<List<Insertable>> { + val insertFlow = flow { username?.let { - ocsapi?.user(username)?.let { emit(listOf(it))} + ocsapi?.user(username)?.let { emit(it)} } if(lastSync == 0L) { batchedItemLoad(this, QueryType.STARRED, true) batchedItemLoad(this, QueryType.ALL, false) } else { - api?.updatedItems(lastSync, QueryType.ALL.type, 0L)?.items?.let { emit(it) } + api?.updatedItems(lastSync, QueryType.ALL.type, 0L)?.items?.let { + for (insertable in it) { + emit(insertable) + } + } } } @@ -257,10 +263,7 @@ class API { feed.delete(realm) } - insertFlow.collect { - for(insertable in it) - insertable.insert(realm) - } + insertFlow.collect { it.insert(realm) } for (feed in dbFeeds) { feed.starredCount = realm.where<Item>() |