mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-30 22:07:57 +01:00 
			
		
		
		
	Option to hide NSFW extensions (closes #1312)
This commit is contained in:
		| @@ -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) | ||||
|             } | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -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() | ||||
| } | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user