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,15 +136,16 @@ 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) }
} }
} }

View file

@ -102,25 +102,27 @@ 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 }
val downloaded = downloadManager.isChapterDownloaded( .map {
update.chapterName, val activeDownload = downloadManager.queue.find { download -> it.chapterId == download.chapter.id }
update.scanlator, val downloaded = downloadManager.isChapterDownloaded(
update.mangaTitle, it.chapterName,
update.sourceId, it.scanlator,
) it.mangaTitle,
val downloadState = when { it.sourceId,
activeDownload != null -> activeDownload.status )
downloaded -> Download.State.DOWNLOADED val downloadState = when {
else -> Download.State.NOT_DOWNLOADED activeDownload != null -> activeDownload.status
downloaded -> Download.State.DOWNLOADED
else -> Download.State.NOT_DOWNLOADED
}
UpdatesItem(
update = it,
downloadStateProvider = { downloadState },
downloadProgressProvider = { activeDownload?.progress ?: 0 },
)
} }
UpdatesItem(
update = update,
downloadStateProvider = { downloadState },
downloadProgressProvider = { activeDownload?.progress ?: 0 },
)
}
} }
private suspend fun observeDownloads() { private suspend fun observeDownloads() {