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

View file

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