diff --git a/app/src/main/java/eu/kanade/domain/history/interactor/GetNextChapter.kt b/app/src/main/java/eu/kanade/domain/history/interactor/GetNextChapter.kt index 53e21323e..602a73281 100644 --- a/app/src/main/java/eu/kanade/domain/history/interactor/GetNextChapter.kt +++ b/app/src/main/java/eu/kanade/domain/history/interactor/GetNextChapter.kt @@ -21,8 +21,8 @@ class GetNextChapter( } suspend fun await(mangaId: Long, chapterId: Long): Chapter? { - val chapter = getChapter.await(chapterId)!! - val manga = getManga.await(mangaId)!! + val chapter = getChapter.await(chapterId) ?: return null + val manga = getManga.await(mangaId) ?: return null if (!chapter.read) return chapter diff --git a/app/src/main/java/eu/kanade/presentation/browse/BrowseSourceScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/BrowseSourceScreen.kt index b9dc6ce61..887901ece 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/BrowseSourceScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/BrowseSourceScreen.kt @@ -94,7 +94,7 @@ fun BrowseSourceScreen( Column(modifier = Modifier.background(MaterialTheme.colorScheme.surface)) { BrowseSourceToolbar( state = presenter, - source = presenter.source!!, + source = presenter.source, displayMode = presenter.displayMode.takeUnless { presenter.source!!.isEhBasedSource() && presenter.ehentaiBrowseDisplayMode }, onDisplayModeChange = { presenter.displayMode = it }, navigateUp = navigateUp, diff --git a/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceToolbar.kt b/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceToolbar.kt index c32e500ed..6692b6300 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceToolbar.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceToolbar.kt @@ -36,7 +36,7 @@ import exh.source.anyIs @Composable fun BrowseSourceToolbar( state: BrowseSourceState, - source: CatalogueSource, + source: CatalogueSource?, displayMode: LibraryDisplayMode?, onDisplayModeChange: (LibraryDisplayMode) -> Unit, navigateUp: () -> Unit, @@ -50,7 +50,7 @@ fun BrowseSourceToolbar( ) { if (state.searchQuery == null) { BrowseSourceRegularToolbar( - title = if (state.isUserQuery) state.currentFilter.query else source.name, + title = if (state.isUserQuery) state.currentFilter.query else source?.name.orEmpty(), isLocalSource = source is LocalSource, // SY --> isConfigurableSource = source.anyIs(), diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionFilterPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionFilterPresenter.kt index 41f132a29..3328ec062 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionFilterPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionFilterPresenter.kt @@ -13,6 +13,7 @@ import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.receiveAsFlow +import kotlinx.coroutines.flow.stateIn import logcat.LogPriority import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -35,6 +36,7 @@ class ExtensionFilterPresenter( logcat(LogPriority.ERROR, exception) _events.send(Event.FailedFetchingLanguages) } + .stateIn(presenterScope) .collectLatest(::collectLatestSourceLangMap) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/SourceSearchController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/SourceSearchController.kt index c841dc88e..2cbc76112 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/SourceSearchController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/SourceSearchController.kt @@ -31,10 +31,6 @@ class SourceSearchController( @Composable override fun ComposeContent() { - // LocalContext is not a first available to us when we try access it - // Decoupling from BrowseSourceController is needed - val context = applicationContext!! - SourceSearchScreen( presenter = presenter, navigateUp = { router.popCurrentController() }, @@ -50,8 +46,10 @@ class SourceSearchController( // SY <-- onWebViewClick = f@{ val source = presenter.source as? HttpSource ?: return@f - val intent = WebViewActivity.newIntent(context, source.baseUrl, source.id, source.name) - context.startActivity(intent) + activity?.let { context -> + val intent = WebViewActivity.newIntent(context, source.baseUrl, source.id, source.name) + context.startActivity(intent) + } }, ) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesFilterPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesFilterPresenter.kt index a13bab6f7..1be76e3ea 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesFilterPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesFilterPresenter.kt @@ -16,6 +16,7 @@ import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.receiveAsFlow +import kotlinx.coroutines.flow.stateIn import logcat.LogPriority import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -43,6 +44,7 @@ class SourcesFilterPresenter( logcat(LogPriority.ERROR, exception) _events.send(Event.FailedFetchingLanguages) } + .stateIn(presenterScope) .collectLatest(::collectLatestSourceLangMap) } }