feat(incognito): Add incognito mode for EH based sources (#901)
* Add incognito mode for eh based sources (cherry picked from commit bdf848ebb721394ff1b7b7006e538f6f60056b76) * simplify GetIncognitoState parameters and logic --------- Co-authored-by: Cuong-Tran <cuongtran.tm@gmail.com>
This commit is contained in:
parent
ee1418c7fc
commit
a862bda9d5
5 changed files with 49 additions and 15 deletions
|
|
@ -2,22 +2,23 @@ package eu.kanade.domain.source.interactor
|
||||||
|
|
||||||
import eu.kanade.domain.base.BasePreferences
|
import eu.kanade.domain.base.BasePreferences
|
||||||
import eu.kanade.domain.source.service.SourcePreferences
|
import eu.kanade.domain.source.service.SourcePreferences
|
||||||
import eu.kanade.tachiyomi.extension.ExtensionManager
|
import eu.kanade.tachiyomi.source.isIncognitoModeEnabled
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.combine
|
import kotlinx.coroutines.flow.combine
|
||||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||||
|
import tachiyomi.domain.source.service.SourceManager
|
||||||
|
|
||||||
class GetIncognitoState(
|
class GetIncognitoState(
|
||||||
private val basePreferences: BasePreferences,
|
private val basePreferences: BasePreferences,
|
||||||
private val sourcePreferences: SourcePreferences,
|
private val sourcePreferences: SourcePreferences,
|
||||||
private val extensionManager: ExtensionManager,
|
private val sourceManager: SourceManager,
|
||||||
) {
|
) {
|
||||||
fun await(sourceId: Long?): Boolean {
|
fun await(sourceId: Long?): Boolean {
|
||||||
if (basePreferences.incognitoMode().get()) return true
|
if (basePreferences.incognitoMode().get()) return true
|
||||||
if (sourceId == null) return false
|
if (sourceId == null) return false
|
||||||
val extensionPackage = extensionManager.getExtensionPackage(sourceId) ?: return false
|
// KMK -->
|
||||||
|
return sourceManager.get(sourceId)?.isIncognitoModeEnabled() == true
|
||||||
return extensionPackage in sourcePreferences.incognitoExtensions().get()
|
// KMK <--
|
||||||
}
|
}
|
||||||
|
|
||||||
fun subscribe(sourceId: Long?): Flow<Boolean> {
|
fun subscribe(sourceId: Long?): Flow<Boolean> {
|
||||||
|
|
@ -26,9 +27,10 @@ class GetIncognitoState(
|
||||||
return combine(
|
return combine(
|
||||||
basePreferences.incognitoMode().changes(),
|
basePreferences.incognitoMode().changes(),
|
||||||
sourcePreferences.incognitoExtensions().changes(),
|
sourcePreferences.incognitoExtensions().changes(),
|
||||||
extensionManager.getExtensionPackageAsFlow(sourceId),
|
) { incognito, incognitoExtensions ->
|
||||||
) { incognito, incognitoExtensions, extensionPackage ->
|
// KMK -->
|
||||||
incognito || (extensionPackage in incognitoExtensions)
|
incognito || sourceManager.get(sourceId)?.isIncognitoModeEnabled(incognitoExtensions) == true
|
||||||
|
// KMK <--
|
||||||
}
|
}
|
||||||
.distinctUntilChanged()
|
.distinctUntilChanged()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.window.Dialog
|
import androidx.compose.ui.window.Dialog
|
||||||
import androidx.compose.ui.window.DialogProperties
|
import androidx.compose.ui.window.DialogProperties
|
||||||
import androidx.core.content.ContextCompat.startActivity
|
import eu.kanade.domain.source.interactor.ToggleIncognito
|
||||||
import eu.kanade.presentation.library.components.SyncFavoritesWarningDialog
|
import eu.kanade.presentation.library.components.SyncFavoritesWarningDialog
|
||||||
import eu.kanade.presentation.more.settings.Preference
|
import eu.kanade.presentation.more.settings.Preference
|
||||||
import eu.kanade.tachiyomi.ui.webview.WebViewActivity
|
import eu.kanade.tachiyomi.ui.webview.WebViewActivity
|
||||||
|
|
@ -52,6 +52,7 @@ import exh.eh.EHentaiUpdateWorker
|
||||||
import exh.eh.EHentaiUpdateWorkerConstants
|
import exh.eh.EHentaiUpdateWorkerConstants
|
||||||
import exh.eh.EHentaiUpdaterStats
|
import exh.eh.EHentaiUpdaterStats
|
||||||
import exh.metadata.metadata.EHentaiSearchMetadata
|
import exh.metadata.metadata.EHentaiSearchMetadata
|
||||||
|
import exh.source.EH_PACKAGE
|
||||||
import exh.ui.login.EhLoginActivity
|
import exh.ui.login.EhLoginActivity
|
||||||
import exh.util.nullIfBlank
|
import exh.util.nullIfBlank
|
||||||
import kotlinx.collections.immutable.persistentListOf
|
import kotlinx.collections.immutable.persistentListOf
|
||||||
|
|
@ -139,6 +140,14 @@ object SettingsEhScreen : SearchableSettings {
|
||||||
ConfigureExhDialog(run = runConfigureDialog, onRunning = { runConfigureDialog = false })
|
ConfigureExhDialog(run = runConfigureDialog, onRunning = { runConfigureDialog = false })
|
||||||
|
|
||||||
return listOf(
|
return listOf(
|
||||||
|
// KMK -->
|
||||||
|
Preference.PreferenceGroup(
|
||||||
|
stringResource(MR.strings.source_settings),
|
||||||
|
preferenceItems = persistentListOf(
|
||||||
|
ehIncognitoMode(unsortedPreferences),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
// KMK <--
|
||||||
Preference.PreferenceGroup(
|
Preference.PreferenceGroup(
|
||||||
stringResource(SYMR.strings.ehentai_prefs_account_settings),
|
stringResource(SYMR.strings.ehentai_prefs_account_settings),
|
||||||
preferenceItems = persistentListOf(
|
preferenceItems = persistentListOf(
|
||||||
|
|
@ -180,6 +189,24 @@ object SettingsEhScreen : SearchableSettings {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// KMK -->
|
||||||
|
@Composable
|
||||||
|
fun ehIncognitoMode(
|
||||||
|
unsortedPreferences: UnsortedPreferences,
|
||||||
|
): Preference.PreferenceItem.SwitchPreference {
|
||||||
|
return Preference.PreferenceItem.SwitchPreference(
|
||||||
|
preference = unsortedPreferences.ehIncognitoMode(),
|
||||||
|
title = stringResource(MR.strings.pref_incognito_mode),
|
||||||
|
subtitle = stringResource(MR.strings.pref_incognito_mode_summary),
|
||||||
|
onValueChanged = { newVal ->
|
||||||
|
val toggleIncognito = Injekt.get<ToggleIncognito>()
|
||||||
|
toggleIncognito.await(EH_PACKAGE, newVal)
|
||||||
|
newVal
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
// KMK <--
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun getLoginPreference(
|
fun getLoginPreference(
|
||||||
unsortedPreferences: UnsortedPreferences,
|
unsortedPreferences: UnsortedPreferences,
|
||||||
|
|
@ -275,14 +302,12 @@ object SettingsEhScreen : SearchableSettings {
|
||||||
subtitle = stringResource(SYMR.strings.watched_tags_summary),
|
subtitle = stringResource(SYMR.strings.watched_tags_summary),
|
||||||
enabled = exhentaiEnabled,
|
enabled = exhentaiEnabled,
|
||||||
onClick = {
|
onClick = {
|
||||||
startActivity(
|
context.startActivity(
|
||||||
context,
|
|
||||||
WebViewActivity.newIntent(
|
WebViewActivity.newIntent(
|
||||||
context,
|
context,
|
||||||
url = "https://exhentai.org/mytags",
|
url = "https://exhentai.org/mytags",
|
||||||
title = context.stringResource(SYMR.strings.watched_tags_exh),
|
title = context.stringResource(SYMR.strings.watched_tags_exh),
|
||||||
),
|
),
|
||||||
null,
|
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,8 @@ 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.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
|
||||||
import tachiyomi.source.local.isLocal
|
import tachiyomi.source.local.isLocal
|
||||||
|
|
@ -80,8 +82,8 @@ private fun getMergedSourcesString(
|
||||||
fun Source.isLocalOrStub(): Boolean = isLocal() || this is StubSource
|
fun Source.isLocalOrStub(): Boolean = isLocal() || this is StubSource
|
||||||
|
|
||||||
// KMK -->
|
// KMK -->
|
||||||
fun Source.isIncognitoModeEnabled(): Boolean {
|
fun Source.isIncognitoModeEnabled(incognitoExtensions: Set<String>? = null): Boolean {
|
||||||
val extensionPackage = Injekt.get<ExtensionManager>().getExtensionPackage(id)
|
val extensionPackage = if (isEhBasedSource()) EH_PACKAGE else Injekt.get<ExtensionManager>().getExtensionPackage(id)
|
||||||
return extensionPackage in Injekt.get<SourcePreferences>().incognitoExtensions().get()
|
return extensionPackage in (incognitoExtensions ?: Injekt.get<SourcePreferences>().incognitoExtensions().get())
|
||||||
}
|
}
|
||||||
// KMK <--
|
// KMK <--
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,10 @@ class UnsortedPreferences(
|
||||||
|
|
||||||
fun isHentaiEnabled() = preferenceStore.getBoolean("eh_is_hentai_enabled", false)
|
fun isHentaiEnabled() = preferenceStore.getBoolean("eh_is_hentai_enabled", false)
|
||||||
|
|
||||||
|
// KMK -->
|
||||||
|
fun ehIncognitoMode() = preferenceStore.getBoolean("eh_incognito_mode", false)
|
||||||
|
// KMK <--
|
||||||
|
|
||||||
fun enableExhentai() = preferenceStore.getBoolean(Preference.privateKey("enable_exhentai"), false)
|
fun enableExhentai() = preferenceStore.getBoolean(Preference.privateKey("enable_exhentai"), false)
|
||||||
|
|
||||||
fun imageQuality() = preferenceStore.getString("ehentai_quality", "auto")
|
fun imageQuality() = preferenceStore.getString("ehentai_quality", "auto")
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ const val LEWD_SOURCE_SERIES = 6900L
|
||||||
// KMK -->
|
// KMK -->
|
||||||
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"
|
||||||
// KMK <--
|
// KMK <--
|
||||||
|
|
||||||
const val NHENTAI_SOURCE_ID = 7309872737163460316L
|
const val NHENTAI_SOURCE_ID = 7309872737163460316L
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue