Attempt to avoid duplicate update rows

Related to #7713
This commit is contained in:
arkon 2022-10-14 15:43:27 -04:00
parent e1adb89ff8
commit 7e92921f84
2 changed files with 32 additions and 30 deletions

View File

@ -22,7 +22,6 @@ import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.flow.update import kotlinx.coroutines.flow.update
import rx.Observable import rx.Observable
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
@ -78,9 +77,9 @@ class ExtensionsPresenter(
presenterScope.launchIO { presenterScope.launchIO {
combine( combine(
_query, _query,
getExtensions.subscribe().stateIn(presenterScope),
_currentDownloads, _currentDownloads,
) { query, (_updates, _installed, _available, _untrusted), downloads -> getExtensions.subscribe(),
) { query, downloads, (_updates, _installed, _available, _untrusted) ->
val searchQuery = query ?: "" val searchQuery = query ?: ""
val languagesWithExtensions = _available val languagesWithExtensions = _available
@ -137,16 +136,17 @@ class ExtensionsPresenter(
fun updateAllExtensions() { fun updateAllExtensions() {
presenterScope.launchIO { presenterScope.launchIO {
if (state.isEmpty) return@launchIO if (state.isEmpty) return@launchIO
val items = state.items state.items
items.mapNotNull { .mapNotNull {
if (it !is ExtensionUiModel.Item) return@mapNotNull null when {
if (it.extension !is Extension.Installed) return@mapNotNull null it !is ExtensionUiModel.Item -> null
if (it.extension.hasUpdate.not()) return@mapNotNull null it.extension !is Extension.Installed -> null
it.extension !it.extension.hasUpdate -> null
}.forEach { else -> it.extension
updateExtension(it)
} }
} }
.forEach { updateExtension(it) }
}
} }
fun installExtension(extension: Extension.Available) { fun installExtension(extension: Extension.Available) {

View File

@ -102,13 +102,15 @@ class UpdatesPresenter(
} }
private fun List<UpdatesWithRelations>.toUpdateItems(): List<UpdatesItem> { private fun List<UpdatesWithRelations>.toUpdateItems(): List<UpdatesItem> {
return this.map { update -> return this
val activeDownload = downloadManager.queue.find { update.chapterId == it.chapter.id } .distinctBy { it.chapterId }
.map {
val activeDownload = downloadManager.queue.find { download -> it.chapterId == download.chapter.id }
val downloaded = downloadManager.isChapterDownloaded( val downloaded = downloadManager.isChapterDownloaded(
update.chapterName, it.chapterName,
update.scanlator, it.scanlator,
update.mangaTitle, it.mangaTitle,
update.sourceId, it.sourceId,
) )
val downloadState = when { val downloadState = when {
activeDownload != null -> activeDownload.status activeDownload != null -> activeDownload.status
@ -116,7 +118,7 @@ class UpdatesPresenter(
else -> Download.State.NOT_DOWNLOADED else -> Download.State.NOT_DOWNLOADED
} }
UpdatesItem( UpdatesItem(
update = update, update = it,
downloadStateProvider = { downloadState }, downloadStateProvider = { downloadState },
downloadProgressProvider = { activeDownload?.progress ?: 0 }, downloadProgressProvider = { activeDownload?.progress ?: 0 },
) )