From 31e5ba4caf0cdef0d368a7764ef3345d47585c0a Mon Sep 17 00:00:00 2001 From: Jobobby04 Date: Fri, 15 Mar 2024 19:51:56 -0400 Subject: [PATCH] Fix multiple issues regarding sources loading too late --- .../tachiyomi/data/download/DownloadCache.kt | 19 +++++------ .../tachiyomi/extension/ExtensionManager.kt | 11 +++--- .../tachiyomi/source/AndroidSourceManager.kt | 6 ++++ .../details/SourcePreferencesScreen.kt | 10 ++++-- .../migration/search/SourceSearchScreen.kt | 7 ++++ .../source/browse/BrowseSourceScreen.kt | 7 ++++ .../ui/browse/source/feed/SourceFeedScreen.kt | 7 ++++ .../source/globalsearch/GlobalSearchScreen.kt | 6 ++++ .../kanade/tachiyomi/ui/manga/MangaScreen.kt | 6 ++++ .../tachiyomi/ui/reader/ReaderActivity.kt | 5 +++ .../tachiyomi/ui/reader/ReaderViewModel.kt | 2 ++ .../exh/md/follows/MangaDexFollowsScreen.kt | 7 ++++ .../exh/md/similar/MangaDexSimilarScreen.kt | 7 ++++ .../main/java/exh/recs/RecommendsScreen.kt | 7 ++++ app/src/main/java/exh/ui/SourceUtil.kt | 13 +++++++ .../exh/ui/intercept/InterceptActivity.kt | 34 +++++++++++-------- .../domain/source/service/SourceManager.kt | 3 ++ 17 files changed, 126 insertions(+), 31 deletions(-) create mode 100644 app/src/main/java/exh/ui/SourceUtil.kt diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadCache.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadCache.kt index ec052d3c0..452b21706 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadCache.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadCache.kt @@ -18,6 +18,7 @@ import kotlinx.coroutines.ensureActive import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.debounce +import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.onStart @@ -336,19 +337,15 @@ class DownloadCache( } // Try to wait until extensions and sources have loaded - var sources = getSources() - if (sources.isEmpty()) { - withTimeoutOrNull(30.seconds) { - while (!extensionManager.isInitialized) { - delay(2.seconds) - } + // SY --> + var sources = emptyList() + withTimeoutOrNull(30.seconds) { + extensionManager.isInitialized.first { it } + sourceManager.isInitialized.first { it } - while (extensionManager.availableExtensionsFlow.value.isNotEmpty() && sources.isEmpty()) { - delay(2.seconds) - sources = getSources() - } - } + sources = getSources() } + // SY <-- val sourceMap = sources.associate { provider.getSourceDirName(it).lowercase() to it.id } diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt index 302d269a4..588dd98c5 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt @@ -26,6 +26,7 @@ import kotlinx.coroutines.async import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.emptyFlow import kotlinx.coroutines.flow.map @@ -53,8 +54,10 @@ class ExtensionManager( private val trustExtension: TrustExtension = Injekt.get(), ) { - var isInitialized = false - private set + // SY --> + private val _isInitialized = MutableStateFlow(false) + val isInitialized: StateFlow = _isInitialized.asStateFlow() + // SY <-- /** * API where all the available extensions can be found. @@ -135,9 +138,9 @@ class ExtensionManager( .map { it.extension } // SY --> .filterNotBlacklisted() - // SY <-- - isInitialized = true + _isInitialized.value = true + // SY <-- } // EXH --> diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/AndroidSourceManager.kt b/app/src/main/java/eu/kanade/tachiyomi/source/AndroidSourceManager.kt index 1c0f131ac..139034770 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/source/AndroidSourceManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/AndroidSourceManager.kt @@ -29,6 +29,8 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.map @@ -103,6 +105,7 @@ class AndroidSourceManager( } } sourcesMapFlow.value = mutableMap + _isInitialized.value = true } } @@ -186,6 +189,9 @@ class AndroidSourceManager( } // SY --> + private val _isInitialized = MutableStateFlow(false) + override val isInitialized: StateFlow = _isInitialized.asStateFlow() + override fun getVisibleOnlineSources() = sourcesMapFlow.value.values .filterIsInstance() .filter { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/SourcePreferencesScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/SourcePreferencesScreen.kt index 9d5b8c759..2f08f074e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/SourcePreferencesScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/SourcePreferencesScreen.kt @@ -39,8 +39,10 @@ import eu.kanade.tachiyomi.source.ConfigurableSource import eu.kanade.tachiyomi.source.sourcePreferences import eu.kanade.tachiyomi.widget.TachiyomiTextInputEditText.Companion.setIncognito import exh.source.EnhancedHttpSource +import exh.ui.ifSourcesLoaded import tachiyomi.domain.source.service.SourceManager import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.screens.LoadingScreen import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -48,6 +50,11 @@ class SourcePreferencesScreen(val sourceId: Long) : Screen() { @Composable override fun Content() { + if (!ifSourcesLoaded()) { + LoadingScreen() + return + } + val context = LocalContext.current val navigator = LocalNavigator.currentOrThrow @@ -130,7 +137,7 @@ class SourcePreferencesFragment : PreferenceFragmentCompat() { // SY --> val source = Injekt.get() .getOrStub(sourceId) - ?.let { source -> + .let { source -> if (source is EnhancedHttpSource) { if (source.enhancedSource is ConfigurableSource) { source.source() @@ -141,7 +148,6 @@ class SourcePreferencesFragment : PreferenceFragmentCompat() { source } } - ?: throw NullPointerException("source = null, SOURCE_ID = $SOURCE_ID") // SY <-- val sourceScreen = preferenceManager.createPreferenceScreen(requireContext()) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/SourceSearchScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/SourceSearchScreen.kt index 1537b2dab..1886d5849 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/SourceSearchScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/SourceSearchScreen.kt @@ -22,10 +22,12 @@ import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceScreenModel import eu.kanade.tachiyomi.ui.browse.source.browse.SourceFilterDialog import eu.kanade.tachiyomi.ui.manga.MangaScreen import eu.kanade.tachiyomi.ui.webview.WebViewScreen +import exh.ui.ifSourcesLoaded import kotlinx.collections.immutable.persistentListOf import tachiyomi.core.common.Constants import tachiyomi.domain.manga.model.Manga import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.screens.LoadingScreen import tachiyomi.source.local.LocalSource data class SourceSearchScreen( @@ -36,6 +38,11 @@ data class SourceSearchScreen( @Composable override fun Content() { + if (!ifSourcesLoaded()) { + LoadingScreen() + return + } + val uriHandler = LocalUriHandler.current val navigator = LocalNavigator.currentOrThrow diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreen.kt index 543a4720e..d5ce76220 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreen.kt @@ -56,6 +56,7 @@ import eu.kanade.tachiyomi.ui.manga.MangaScreen import eu.kanade.tachiyomi.ui.webview.WebViewScreen import eu.kanade.tachiyomi.util.system.toast import exh.md.follows.MangaDexFollowsScreen +import exh.ui.ifSourcesLoaded import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.receiveAsFlow @@ -66,6 +67,7 @@ import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource +import tachiyomi.presentation.core.screens.LoadingScreen import tachiyomi.source.local.LocalSource data class BrowseSourceScreen( @@ -84,6 +86,11 @@ data class BrowseSourceScreen( @Composable override fun Content() { + if (!ifSourcesLoaded()) { + LoadingScreen() + return + } + val screenModel = rememberScreenModel { BrowseSourceScreenModel( sourceId = sourceId, diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedScreen.kt index 8c7821b43..a976bd64d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedScreen.kt @@ -19,15 +19,22 @@ import eu.kanade.tachiyomi.ui.browse.source.browse.SourceFilterDialog import eu.kanade.tachiyomi.ui.manga.MangaScreen import eu.kanade.tachiyomi.util.system.toast import exh.md.follows.MangaDexFollowsScreen +import exh.ui.ifSourcesLoaded import exh.util.nullIfBlank import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.source.interactor.GetRemoteManga import tachiyomi.domain.source.model.SavedSearch +import tachiyomi.presentation.core.screens.LoadingScreen class SourceFeedScreen(val sourceId: Long) : Screen() { @Composable override fun Content() { + if (!ifSourcesLoaded()) { + LoadingScreen() + return + } + val screenModel = rememberScreenModel { SourceFeedScreenModel(sourceId) } val state by screenModel.state.collectAsState() val navigator = LocalNavigator.currentOrThrow diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchScreen.kt index a09595c4d..b6181ef01 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchScreen.kt @@ -14,6 +14,7 @@ import eu.kanade.presentation.browse.GlobalSearchScreen import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceScreen import eu.kanade.tachiyomi.ui.manga.MangaScreen +import exh.ui.ifSourcesLoaded import tachiyomi.presentation.core.screens.LoadingScreen class GlobalSearchScreen( @@ -23,6 +24,11 @@ class GlobalSearchScreen( @Composable override fun Content() { + if (!ifSourcesLoaded()) { + LoadingScreen() + return + } + val navigator = LocalNavigator.currentOrThrow val screenModel = rememberScreenModel { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreen.kt index 4c4e0a5f2..b4bfba757 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreen.kt @@ -64,6 +64,7 @@ import exh.recs.RecommendsScreen import exh.source.MERGED_SOURCE_ID import exh.source.getMainSource import exh.source.isMdBasedSource +import exh.ui.ifSourcesLoaded import exh.ui.metadata.MetadataViewScreen import kotlinx.coroutines.CancellationException import kotlinx.coroutines.flow.launchIn @@ -98,6 +99,11 @@ class MangaScreen( @Composable override fun Content() { + if (!ifSourcesLoaded()) { + LoadingScreen() + return + } + val navigator = LocalNavigator.currentOrThrow val context = LocalContext.current val haptic = LocalHapticFeedback.current diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt index f1313527c..d25e731fc 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt @@ -91,6 +91,7 @@ import eu.kanade.tachiyomi.util.system.toShareIntent import eu.kanade.tachiyomi.util.system.toast import eu.kanade.tachiyomi.util.view.setComposeContent import exh.source.isEhBasedSource +import exh.ui.ifSourcesLoaded import exh.util.defaultReaderType import exh.util.mangaType import kotlinx.collections.immutable.persistentSetOf @@ -391,6 +392,10 @@ class ReaderActivity : BaseActivity() { ) } + if (!ifSourcesLoaded()) { + return@setComposeContent + } + val isHttpSource = viewModel.getSource() is HttpSource val isFullscreen by readerPreferences.fullscreen().collectAsState() val flashOnPageChange by readerPreferences.flashOnPageChange().collectAsState() diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt index e37870783..7188bd39f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt @@ -63,6 +63,7 @@ import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.drop import kotlinx.coroutines.flow.filterNotNull +import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.mapLatest @@ -336,6 +337,7 @@ class ReaderViewModel @JvmOverloads constructor( val manga = getManga.await(mangaId) if (manga != null) { // SY --> + sourceManager.isInitialized.first { it } val source = sourceManager.getOrStub(manga.source) val metadataSource = source.getMainSource>() val metadata = if (metadataSource != null) { diff --git a/app/src/main/java/exh/md/follows/MangaDexFollowsScreen.kt b/app/src/main/java/exh/md/follows/MangaDexFollowsScreen.kt index 6fbf6c376..ad93b5a57 100644 --- a/app/src/main/java/exh/md/follows/MangaDexFollowsScreen.kt +++ b/app/src/main/java/exh/md/follows/MangaDexFollowsScreen.kt @@ -23,15 +23,22 @@ import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceScreenModel import eu.kanade.tachiyomi.ui.category.CategoryScreen import eu.kanade.tachiyomi.ui.manga.MangaScreen +import exh.ui.ifSourcesLoaded import tachiyomi.core.common.util.lang.launchIO import tachiyomi.i18n.sy.SYMR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.i18n.stringResource +import tachiyomi.presentation.core.screens.LoadingScreen class MangaDexFollowsScreen(private val sourceId: Long) : Screen() { @Composable override fun Content() { + if (!ifSourcesLoaded()) { + LoadingScreen() + return + } + val navigator = LocalNavigator.currentOrThrow val scope = rememberCoroutineScope() val haptic = LocalHapticFeedback.current diff --git a/app/src/main/java/exh/md/similar/MangaDexSimilarScreen.kt b/app/src/main/java/exh/md/similar/MangaDexSimilarScreen.kt index 62394333b..ad90fdb78 100644 --- a/app/src/main/java/exh/md/similar/MangaDexSimilarScreen.kt +++ b/app/src/main/java/exh/md/similar/MangaDexSimilarScreen.kt @@ -15,15 +15,22 @@ import eu.kanade.presentation.browse.BrowseSourceContent import eu.kanade.presentation.browse.components.BrowseSourceSimpleToolbar import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.ui.manga.MangaScreen +import exh.ui.ifSourcesLoaded import tachiyomi.domain.manga.model.Manga import tachiyomi.i18n.sy.SYMR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.i18n.stringResource +import tachiyomi.presentation.core.screens.LoadingScreen class MangaDexSimilarScreen(val mangaId: Long, val sourceId: Long) : Screen() { @Composable override fun Content() { + if (!ifSourcesLoaded()) { + LoadingScreen() + return + } + val screenModel = rememberScreenModel { MangaDexSimilarScreenModel(mangaId, sourceId) } val state by screenModel.state.collectAsState() val navigator = LocalNavigator.currentOrThrow diff --git a/app/src/main/java/exh/recs/RecommendsScreen.kt b/app/src/main/java/exh/recs/RecommendsScreen.kt index 39cec8033..d7e01273a 100644 --- a/app/src/main/java/exh/recs/RecommendsScreen.kt +++ b/app/src/main/java/exh/recs/RecommendsScreen.kt @@ -16,13 +16,20 @@ import eu.kanade.presentation.browse.BrowseSourceContent import eu.kanade.presentation.browse.components.BrowseSourceSimpleToolbar import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.ui.browse.source.SourcesScreen +import exh.ui.ifSourcesLoaded import tachiyomi.domain.manga.model.Manga import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.screens.LoadingScreen class RecommendsScreen(val mangaId: Long, val sourceId: Long) : Screen() { @Composable override fun Content() { + if (!ifSourcesLoaded()) { + LoadingScreen() + return + } + val screenModel = rememberScreenModel { RecommendsScreenModel(mangaId, sourceId) } val state by screenModel.state.collectAsState() val navigator = LocalNavigator.currentOrThrow diff --git a/app/src/main/java/exh/ui/SourceUtil.kt b/app/src/main/java/exh/ui/SourceUtil.kt new file mode 100644 index 000000000..653ea61d2 --- /dev/null +++ b/app/src/main/java/exh/ui/SourceUtil.kt @@ -0,0 +1,13 @@ +package exh.ui + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.remember +import tachiyomi.domain.source.service.SourceManager +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get + +@Composable +fun ifSourcesLoaded(): Boolean { + return remember { Injekt.get().isInitialized }.collectAsState().value +} diff --git a/app/src/main/java/exh/ui/intercept/InterceptActivity.kt b/app/src/main/java/exh/ui/intercept/InterceptActivity.kt index a9341acf7..ba6c2d145 100755 --- a/app/src/main/java/exh/ui/intercept/InterceptActivity.kt +++ b/app/src/main/java/exh/ui/intercept/InterceptActivity.kt @@ -28,19 +28,22 @@ import eu.kanade.tachiyomi.ui.reader.ReaderActivity import eu.kanade.tachiyomi.util.view.setComposeContent import exh.GalleryAddEvent import exh.GalleryAdder -import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach -import kotlinx.coroutines.launch import tachiyomi.core.common.Constants import tachiyomi.core.common.i18n.stringResource +import tachiyomi.core.common.util.lang.launchIO import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.manga.model.Manga +import tachiyomi.domain.source.service.SourceManager import tachiyomi.i18n.MR import tachiyomi.i18n.sy.SYMR import tachiyomi.presentation.core.components.material.Scaffold +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get class InterceptActivity : BaseActivity() { private var statusJob: Job? = null @@ -108,7 +111,11 @@ class InterceptActivity : BaseActivity() { private fun processLink() { if (Intent.ACTION_VIEW == intent.action) { - loadGallery(intent.dataString!!) + lifecycleScope.launchIO { + // wait for sources to load + Injekt.get().isInitialized.first { it } + loadGallery(intent.dataString!!) + } } } @@ -167,8 +174,7 @@ class InterceptActivity : BaseActivity() { private val galleryAdder = GalleryAdder() - @Synchronized - fun loadGallery(gallery: String) { + suspend fun loadGallery(gallery: String) { // Do not load gallery if already loading if (status.value is InterceptResult.Idle) { status.value = InterceptResult.Loading @@ -178,7 +184,10 @@ class InterceptActivity : BaseActivity() { .setTitle(MR.strings.label_sources.getString(this)) .setSingleChoiceItems(sources.map { it.toString() }.toTypedArray(), 0) { dialog, index -> dialog.dismiss() - loadGalleryEnd(gallery, sources[index]) + lifecycleScope.launchIO { + loadGalleryEnd(gallery, sources[index]) + } + } .show() } else { @@ -187,15 +196,12 @@ class InterceptActivity : BaseActivity() { } } - private fun loadGalleryEnd(gallery: String, source: UrlImportableSource? = null) { - // Load gallery async - lifecycleScope.launch(Dispatchers.IO) { - val result = galleryAdder.addGallery(this@InterceptActivity, gallery, forceSource = source) + private suspend fun loadGalleryEnd(gallery: String, source: UrlImportableSource? = null) { + val result = galleryAdder.addGallery(this@InterceptActivity, gallery, forceSource = source) - status.value = when (result) { - is GalleryAddEvent.Success -> InterceptResult.Success(result.manga.id, result.manga, result.chapter) - is GalleryAddEvent.Fail -> InterceptResult.Failure(result.logMessage) - } + status.value = when (result) { + is GalleryAddEvent.Success -> InterceptResult.Success(result.manga.id, result.manga, result.chapter) + is GalleryAddEvent.Fail -> InterceptResult.Failure(result.logMessage) } } diff --git a/domain/src/main/java/tachiyomi/domain/source/service/SourceManager.kt b/domain/src/main/java/tachiyomi/domain/source/service/SourceManager.kt index ee5727173..349506ee7 100644 --- a/domain/src/main/java/tachiyomi/domain/source/service/SourceManager.kt +++ b/domain/src/main/java/tachiyomi/domain/source/service/SourceManager.kt @@ -4,6 +4,7 @@ import eu.kanade.tachiyomi.source.CatalogueSource import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.online.HttpSource import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.StateFlow import tachiyomi.domain.source.model.StubSource interface SourceManager { @@ -19,6 +20,8 @@ interface SourceManager { fun getCatalogueSources(): List // SY --> + val isInitialized: StateFlow + fun getVisibleOnlineSources(): List fun getVisibleCatalogueSources(): List