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.automirrored.filled.ViewList
import androidx.compose.material.icons.automirrored.outlined.Help
import androidx.compose.material.icons.filled.ViewModule
import androidx.compose.material3.Text
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.RadioMenuItem
import eu.kanade.presentation.components.SearchToolbar
import eu.kanade.tachiyomi.source.ConfigurableSource
import eu.kanade.tachiyomi.source.Source
import exh.source.anyIs
import kotlinx.collections.immutable.persistentListOf
import tachiyomi.domain.library.model.LibraryDisplayMode
import tachiyomi.i18n.MR
@ -51,7 +48,6 @@ fun BrowseSourceToolbar(
// Avoid capturing unstable source in actions lambda
val title = source?.name
val isLocalSource = source is LocalSource
val isConfigurableSource = source?.anyIs<ConfigurableSource>() == true
var selectingDisplayMode by remember { mutableStateOf(false) }
@ -81,33 +77,21 @@ fun BrowseSourceToolbar(
}
// KMK -->
add(bulkSelectionButton(isRunning, toggleSelectionMode))
add(
AppBar.OverflowAction(
title = stringResource(MR.strings.pref_incognito_mode),
onClick = onToggleIncognito,
),
)
// 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(
AppBar.OverflowAction(
title = stringResource(MR.strings.pref_incognito_mode),
onClick = onToggleIncognito,
title = stringResource(MR.strings.label_help),
onClick = onHelpClick,
),
)
// KMK <--
} else {
add(
AppBar.OverflowAction(
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.tachiyomi.extension.ExtensionManager
import exh.source.EH_PACKAGE
import exh.source.LOCAL_SOURCE_PACKAGE
import exh.source.isEhBasedSource
import tachiyomi.domain.source.model.StubSource
import tachiyomi.presentation.core.icons.FlagEmoji
@ -83,7 +84,11 @@ fun Source.isLocalOrStub(): Boolean = isLocal() || this is StubSource
// KMK -->
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())
}
// KMK <--

View file

@ -33,6 +33,7 @@ import eu.kanade.tachiyomi.source.online.all.MangaDex
import eu.kanade.tachiyomi.util.removeCovers
import exh.metadata.metadata.RaisedSearchMetadata
import exh.source.EH_PACKAGE
import exh.source.LOCAL_SOURCE_PACKAGE
import exh.source.getMainSource
import exh.source.isEhBasedSource
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.service.SourceManager
import tachiyomi.i18n.sy.SYMR
import tachiyomi.source.local.isLocal
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import xyz.nulldev.ts.api.http.serializer.FilterSerializer
@ -215,6 +217,7 @@ open class BrowseSourceScreenModel(
fun toggleIncognitoMode() {
val packageName = when {
source is StubSource -> null
source.isLocal() -> LOCAL_SOURCE_PACKAGE
source.isEhBasedSource() -> EH_PACKAGE
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.ui.browse.feed.MaxFeedItems
import exh.source.EH_PACKAGE
import exh.source.LOCAL_SOURCE_PACKAGE
import exh.source.getMainSource
import exh.source.isEhBasedSource
import exh.source.mangaDexSourceIds
@ -60,6 +61,7 @@ import tachiyomi.domain.source.model.StubSource
import tachiyomi.domain.source.service.SourceManager
import tachiyomi.i18n.kmk.KMR
import tachiyomi.i18n.sy.SYMR
import tachiyomi.source.local.isLocal
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import xyz.nulldev.ts.api.http.serializer.FilterSerializer
@ -141,6 +143,7 @@ open class SourceFeedScreenModel(
fun toggleIncognitoMode() {
val packageName = when {
source is StubSource -> null
source.isLocal() -> LOCAL_SOURCE_PACKAGE
source.isEhBasedSource() -> EH_PACKAGE
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 EXH_SOURCE_ID = 6225928719850211219 // LEWD_SOURCE_SERIES + 2
const val EH_PACKAGE = "eu.kanade.tachiyomi.extension.all.ehentai"
const val LOCAL_SOURCE_PACKAGE = "tachiyomi.source.local"
// KMK <--
const val NHENTAI_SOURCE_ID = 7309872737163460316L