Option to hide NSFW extensions (closes #1312)

This commit is contained in:
arkon
2020-08-08 16:27:55 -04:00
parent 8bab1d9798
commit abaca6e676
8 changed files with 34 additions and 10 deletions

View File

@@ -64,9 +64,10 @@ internal class ExtensionGithubApi {
val versionName = element["version"].string
val versionCode = element["code"].int
val lang = element["lang"].string
val nsfw = element["nsfw"].int == 1
val icon = "$REPO_URL_PREFIX/icon/${apkName.replace(".apk", ".png")}"
Extension.Available(name, pkgName, versionName, versionCode, lang, apkName, icon)
Extension.Available(name, pkgName, versionName, versionCode, lang, nsfw, apkName, icon)
}
}

View File

@@ -9,14 +9,16 @@ sealed class Extension {
abstract val versionName: String
abstract val versionCode: Int
abstract val lang: String?
abstract val isNsfw: Boolean
data class Installed(
override val name: String,
override val pkgName: String,
override val versionName: String,
override val versionCode: Int,
val sources: List<Source>,
override val lang: String,
override val isNsfw: Boolean,
val sources: List<Source>,
val hasUpdate: Boolean = false,
val isObsolete: Boolean = false,
val isUnofficial: Boolean = false
@@ -28,6 +30,7 @@ sealed class Extension {
override val versionName: String,
override val versionCode: Int,
override val lang: String,
override val isNsfw: Boolean,
val apkName: String,
val iconUrl: String
) : Extension()
@@ -38,6 +41,7 @@ sealed class Extension {
override val versionName: String,
override val versionCode: Int,
val signatureHash: String,
override val lang: String? = null
override val lang: String? = null,
override val isNsfw: Boolean = false
) : Extension()
}

View File

@@ -15,8 +15,8 @@ import eu.kanade.tachiyomi.util.lang.Hash
import kotlinx.coroutines.async
import kotlinx.coroutines.runBlocking
import timber.log.Timber
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import uy.kohesive.injekt.injectLazy
/**
* Class that handles the loading of the extensions installed in the system.
@@ -24,8 +24,11 @@ import uy.kohesive.injekt.api.get
@SuppressLint("PackageManagerGetSignatures")
internal object ExtensionLoader {
private val preferences: PreferencesHelper by injectLazy()
private const val EXTENSION_FEATURE = "tachiyomi.extension"
private const val METADATA_SOURCE_CLASS = "tachiyomi.extension.class"
private const val METADATA_NSFW = "tachiyomi.extension.nsfw"
const val LIB_VERSION_MIN = 1.2
const val LIB_VERSION_MAX = 1.2
@@ -36,8 +39,7 @@ internal object ExtensionLoader {
/**
* List of the trusted signatures.
*/
var trustedSignatures = mutableSetOf<String>() +
Injekt.get<PreferencesHelper>().trustedSignatures().get() + officialSignature
var trustedSignatures = mutableSetOf<String>() + preferences.trustedSignatures().get() + officialSignature
/**
* Return a list of all the installed extensions initialized concurrently.
@@ -125,6 +127,11 @@ internal object ExtensionLoader {
return LoadResult.Untrusted(extension)
}
val isNsfw = appInfo.metaData.getInt(METADATA_NSFW) == 1
if (!preferences.allowNsfwSources() && isNsfw) {
return LoadResult.Error("NSFW extension $pkgName not allowed")
}
val classLoader = PathClassLoader(appInfo.sourceDir, null, context.classLoader)
val sources = appInfo.metaData.getString(METADATA_SOURCE_CLASS)!!
@@ -160,7 +167,7 @@ internal object ExtensionLoader {
}
val extension = Extension.Installed(
extName, pkgName, versionName, versionCode, sources, lang,
extName, pkgName, versionName, versionCode, lang, isNsfw, sources,
isUnofficial = signatureHash != officialSignature
)
return LoadResult.Success(extension)