feat(incognito): add incognito mode for local sources (#903)

This commit is contained in:
Cuong-Tran 2025-05-11 16:07:36 +07:00 committed by GitHub
parent 8a2b063cd9
commit 615c9fa259
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 22 additions and 26 deletions

View file

@ -2,7 +2,6 @@ package eu.kanade.presentation.browse.components
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ViewList import androidx.compose.material.icons.automirrored.filled.ViewList
import androidx.compose.material.icons.automirrored.outlined.Help
import androidx.compose.material.icons.filled.ViewModule import androidx.compose.material.icons.filled.ViewModule
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.material3.TopAppBarScrollBehavior
@ -17,9 +16,7 @@ import eu.kanade.presentation.components.AppBarTitle
import eu.kanade.presentation.components.DropdownMenu import eu.kanade.presentation.components.DropdownMenu
import eu.kanade.presentation.components.RadioMenuItem import eu.kanade.presentation.components.RadioMenuItem
import eu.kanade.presentation.components.SearchToolbar import eu.kanade.presentation.components.SearchToolbar
import eu.kanade.tachiyomi.source.ConfigurableSource
import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.Source
import exh.source.anyIs
import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.persistentListOf
import tachiyomi.domain.library.model.LibraryDisplayMode import tachiyomi.domain.library.model.LibraryDisplayMode
import tachiyomi.i18n.MR import tachiyomi.i18n.MR
@ -51,7 +48,6 @@ fun BrowseSourceToolbar(
// Avoid capturing unstable source in actions lambda // Avoid capturing unstable source in actions lambda
val title = source?.name val title = source?.name
val isLocalSource = source is LocalSource val isLocalSource = source is LocalSource
val isConfigurableSource = source?.anyIs<ConfigurableSource>() == true
var selectingDisplayMode by remember { mutableStateOf(false) } var selectingDisplayMode by remember { mutableStateOf(false) }
@ -81,26 +77,6 @@ fun BrowseSourceToolbar(
} }
// KMK --> // KMK -->
add(bulkSelectionButton(isRunning, toggleSelectionMode)) add(bulkSelectionButton(isRunning, toggleSelectionMode))
// KMK <--
if (isLocalSource) {
if (isConfigurableSource && displayMode != null) {
add(
AppBar.OverflowAction(
title = stringResource(MR.strings.label_help),
onClick = onHelpClick,
),
)
} else {
add(
AppBar.Action(
title = stringResource(MR.strings.label_help),
icon = Icons.AutoMirrored.Outlined.Help,
onClick = onHelpClick,
),
)
}
} else {
// KMK -->
add( add(
AppBar.OverflowAction( AppBar.OverflowAction(
title = stringResource(MR.strings.pref_incognito_mode), title = stringResource(MR.strings.pref_incognito_mode),
@ -108,6 +84,14 @@ fun BrowseSourceToolbar(
), ),
) )
// KMK <-- // KMK <--
if (isLocalSource) {
add(
AppBar.OverflowAction(
title = stringResource(MR.strings.label_help),
onClick = onHelpClick,
),
)
} else {
add( add(
AppBar.OverflowAction( AppBar.OverflowAction(
title = stringResource(MR.strings.action_web_view), title = stringResource(MR.strings.action_web_view),

View file

@ -3,6 +3,7 @@ package eu.kanade.tachiyomi.source
import eu.kanade.domain.source.service.SourcePreferences import eu.kanade.domain.source.service.SourcePreferences
import eu.kanade.tachiyomi.extension.ExtensionManager import eu.kanade.tachiyomi.extension.ExtensionManager
import exh.source.EH_PACKAGE import exh.source.EH_PACKAGE
import exh.source.LOCAL_SOURCE_PACKAGE
import exh.source.isEhBasedSource import exh.source.isEhBasedSource
import tachiyomi.domain.source.model.StubSource import tachiyomi.domain.source.model.StubSource
import tachiyomi.presentation.core.icons.FlagEmoji import tachiyomi.presentation.core.icons.FlagEmoji
@ -83,7 +84,11 @@ fun Source.isLocalOrStub(): Boolean = isLocal() || this is StubSource
// KMK --> // KMK -->
fun Source.isIncognitoModeEnabled(incognitoExtensions: Set<String>? = null): Boolean { fun Source.isIncognitoModeEnabled(incognitoExtensions: Set<String>? = null): Boolean {
val extensionPackage = if (isEhBasedSource()) EH_PACKAGE else Injekt.get<ExtensionManager>().getExtensionPackage(id) val extensionPackage = when {
isLocal() -> LOCAL_SOURCE_PACKAGE
isEhBasedSource() -> EH_PACKAGE
else -> Injekt.get<ExtensionManager>().getExtensionPackage(id)
}
return extensionPackage in (incognitoExtensions ?: Injekt.get<SourcePreferences>().incognitoExtensions().get()) return extensionPackage in (incognitoExtensions ?: Injekt.get<SourcePreferences>().incognitoExtensions().get())
} }
// KMK <-- // KMK <--

View file

@ -33,6 +33,7 @@ import eu.kanade.tachiyomi.source.online.all.MangaDex
import eu.kanade.tachiyomi.util.removeCovers import eu.kanade.tachiyomi.util.removeCovers
import exh.metadata.metadata.RaisedSearchMetadata import exh.metadata.metadata.RaisedSearchMetadata
import exh.source.EH_PACKAGE import exh.source.EH_PACKAGE
import exh.source.LOCAL_SOURCE_PACKAGE
import exh.source.getMainSource import exh.source.getMainSource
import exh.source.isEhBasedSource import exh.source.isEhBasedSource
import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.ImmutableList
@ -81,6 +82,7 @@ import tachiyomi.domain.source.model.StubSource
import tachiyomi.domain.source.repository.SourcePagingSource import tachiyomi.domain.source.repository.SourcePagingSource
import tachiyomi.domain.source.service.SourceManager import tachiyomi.domain.source.service.SourceManager
import tachiyomi.i18n.sy.SYMR import tachiyomi.i18n.sy.SYMR
import tachiyomi.source.local.isLocal
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
import xyz.nulldev.ts.api.http.serializer.FilterSerializer import xyz.nulldev.ts.api.http.serializer.FilterSerializer
@ -215,6 +217,7 @@ open class BrowseSourceScreenModel(
fun toggleIncognitoMode() { fun toggleIncognitoMode() {
val packageName = when { val packageName = when {
source is StubSource -> null source is StubSource -> null
source.isLocal() -> LOCAL_SOURCE_PACKAGE
source.isEhBasedSource() -> EH_PACKAGE source.isEhBasedSource() -> EH_PACKAGE
else -> extensionManager.getExtensionPackage(sourceId) else -> extensionManager.getExtensionPackage(sourceId)
} }

View file

@ -22,6 +22,7 @@ import eu.kanade.tachiyomi.source.model.FilterList
import eu.kanade.tachiyomi.source.online.all.MangaDex import eu.kanade.tachiyomi.source.online.all.MangaDex
import eu.kanade.tachiyomi.ui.browse.feed.MaxFeedItems import eu.kanade.tachiyomi.ui.browse.feed.MaxFeedItems
import exh.source.EH_PACKAGE import exh.source.EH_PACKAGE
import exh.source.LOCAL_SOURCE_PACKAGE
import exh.source.getMainSource import exh.source.getMainSource
import exh.source.isEhBasedSource import exh.source.isEhBasedSource
import exh.source.mangaDexSourceIds import exh.source.mangaDexSourceIds
@ -60,6 +61,7 @@ import tachiyomi.domain.source.model.StubSource
import tachiyomi.domain.source.service.SourceManager import tachiyomi.domain.source.service.SourceManager
import tachiyomi.i18n.kmk.KMR import tachiyomi.i18n.kmk.KMR
import tachiyomi.i18n.sy.SYMR import tachiyomi.i18n.sy.SYMR
import tachiyomi.source.local.isLocal
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
import xyz.nulldev.ts.api.http.serializer.FilterSerializer import xyz.nulldev.ts.api.http.serializer.FilterSerializer
@ -141,6 +143,7 @@ open class SourceFeedScreenModel(
fun toggleIncognitoMode() { fun toggleIncognitoMode() {
val packageName = when { val packageName = when {
source is StubSource -> null source is StubSource -> null
source.isLocal() -> LOCAL_SOURCE_PACKAGE
source.isEhBasedSource() -> EH_PACKAGE source.isEhBasedSource() -> EH_PACKAGE
else -> extensionManager.getExtensionPackage(sourceId) else -> extensionManager.getExtensionPackage(sourceId)
} }

View file

@ -7,6 +7,7 @@ const val LEWD_SOURCE_SERIES = 6900L
const val EH_SOURCE_ID = 1713178126840476467 // LEWD_SOURCE_SERIES + 1 const val EH_SOURCE_ID = 1713178126840476467 // LEWD_SOURCE_SERIES + 1
const val EXH_SOURCE_ID = 6225928719850211219 // LEWD_SOURCE_SERIES + 2 const val EXH_SOURCE_ID = 6225928719850211219 // LEWD_SOURCE_SERIES + 2
const val EH_PACKAGE = "eu.kanade.tachiyomi.extension.all.ehentai" const val EH_PACKAGE = "eu.kanade.tachiyomi.extension.all.ehentai"
const val LOCAL_SOURCE_PACKAGE = "tachiyomi.source.local"
// KMK <-- // KMK <--
const val NHENTAI_SOURCE_ID = 7309872737163460316L const val NHENTAI_SOURCE_ID = 7309872737163460316L