mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-03 23:58:55 +01:00 
			
		
		
		
	@@ -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,15 +136,16 @@ 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) }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -102,25 +102,27 @@ class UpdatesPresenter(
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun List<UpdatesWithRelations>.toUpdateItems(): List<UpdatesItem> {
 | 
			
		||||
        return this.map { update ->
 | 
			
		||||
            val activeDownload = downloadManager.queue.find { update.chapterId == it.chapter.id }
 | 
			
		||||
            val downloaded = downloadManager.isChapterDownloaded(
 | 
			
		||||
                update.chapterName,
 | 
			
		||||
                update.scanlator,
 | 
			
		||||
                update.mangaTitle,
 | 
			
		||||
                update.sourceId,
 | 
			
		||||
            )
 | 
			
		||||
            val downloadState = when {
 | 
			
		||||
                activeDownload != null -> activeDownload.status
 | 
			
		||||
                downloaded -> Download.State.DOWNLOADED
 | 
			
		||||
                else -> Download.State.NOT_DOWNLOADED
 | 
			
		||||
        return this
 | 
			
		||||
            .distinctBy { it.chapterId }
 | 
			
		||||
            .map {
 | 
			
		||||
                val activeDownload = downloadManager.queue.find { download -> it.chapterId == download.chapter.id }
 | 
			
		||||
                val downloaded = downloadManager.isChapterDownloaded(
 | 
			
		||||
                    it.chapterName,
 | 
			
		||||
                    it.scanlator,
 | 
			
		||||
                    it.mangaTitle,
 | 
			
		||||
                    it.sourceId,
 | 
			
		||||
                )
 | 
			
		||||
                val downloadState = when {
 | 
			
		||||
                    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() {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user