mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 14:27:57 +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