mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 08:08:55 +01:00 
			
		
		
		
	Fix issues related to Manga screen slow load (#7708)
* Fix back handling when manga is still loading * MangaPresenter: Show what we have earlier to reduce percepted slowness
This commit is contained in:
		@@ -150,8 +150,13 @@ class MangaController :
 | 
			
		||||
 | 
			
		||||
    // Let compose view handle this
 | 
			
		||||
    override fun handleBack(): Boolean {
 | 
			
		||||
        (activity as? OnBackPressedDispatcherOwner)?.onBackPressedDispatcher?.onBackPressed()
 | 
			
		||||
        return true
 | 
			
		||||
        val dispatcher = (activity as? OnBackPressedDispatcherOwner)?.onBackPressedDispatcher ?: return false
 | 
			
		||||
        return if (dispatcher.hasEnabledCallbacks()) {
 | 
			
		||||
            dispatcher.onBackPressed()
 | 
			
		||||
            true
 | 
			
		||||
        } else {
 | 
			
		||||
            false
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup, savedViewState: Bundle?): View {
 | 
			
		||||
 
 | 
			
		||||
@@ -166,10 +166,28 @@ class MangaPresenter(
 | 
			
		||||
        // Manga info - start
 | 
			
		||||
 | 
			
		||||
        presenterScope.launchIO {
 | 
			
		||||
            if (!getMangaAndChapters.awaitManga(mangaId).favorite) {
 | 
			
		||||
            val manga = getMangaAndChapters.awaitManga(mangaId)
 | 
			
		||||
 | 
			
		||||
            if (!manga.favorite) {
 | 
			
		||||
                ChapterSettingsHelper.applySettingDefaults(mangaId)
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Show what we have earlier.
 | 
			
		||||
            // Defaults set by the block above won't apply until next update but it doesn't matter
 | 
			
		||||
            // since we don't have any chapter yet.
 | 
			
		||||
            _state.update {
 | 
			
		||||
                MangaScreenState.Success(
 | 
			
		||||
                    manga = manga,
 | 
			
		||||
                    source = Injekt.get<SourceManager>().getOrStub(manga.source),
 | 
			
		||||
                    isFromSource = isFromSource,
 | 
			
		||||
                    trackingAvailable = trackManager.hasLoggedServices(),
 | 
			
		||||
                    chapters = emptyList(),
 | 
			
		||||
                    isRefreshingChapter = true,
 | 
			
		||||
                    isIncognitoMode = incognitoMode,
 | 
			
		||||
                    isDownloadedOnlyMode = downloadedOnlyMode,
 | 
			
		||||
                )
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            getMangaAndChapters.subscribe(mangaId)
 | 
			
		||||
                .distinctUntilChanged()
 | 
			
		||||
                .collectLatest { (manga, chapters) ->
 | 
			
		||||
@@ -179,22 +197,13 @@ class MangaPresenter(
 | 
			
		||||
                        dateRelativeTime = preferences.relativeTime().get(),
 | 
			
		||||
                        dateFormat = preferences.dateFormat(),
 | 
			
		||||
                    )
 | 
			
		||||
                    _state.update { currentState ->
 | 
			
		||||
                        when (currentState) {
 | 
			
		||||
                            // Initialize success state
 | 
			
		||||
                            MangaScreenState.Loading -> MangaScreenState.Success(
 | 
			
		||||
                                manga = manga,
 | 
			
		||||
                                source = Injekt.get<SourceManager>().getOrStub(manga.source),
 | 
			
		||||
                                isFromSource = isFromSource,
 | 
			
		||||
                                trackingAvailable = trackManager.hasLoggedServices(),
 | 
			
		||||
                                chapters = chapterItems,
 | 
			
		||||
                                isIncognitoMode = incognitoMode,
 | 
			
		||||
                                isDownloadedOnlyMode = downloadedOnlyMode,
 | 
			
		||||
                            )
 | 
			
		||||
 | 
			
		||||
                            // Update state
 | 
			
		||||
                            is MangaScreenState.Success -> currentState.copy(manga = manga, chapters = chapterItems)
 | 
			
		||||
                        }
 | 
			
		||||
                    updateSuccessState {
 | 
			
		||||
                        it.copy(
 | 
			
		||||
                            manga = manga,
 | 
			
		||||
                            chapters = chapterItems,
 | 
			
		||||
                            isRefreshingChapter = false,
 | 
			
		||||
                            isRefreshingInfo = false,
 | 
			
		||||
                        )
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    observeTrackers()
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user