commit dca811daf4ba9f3194999494ddf184c5d4ccb31b
parent f5ce6e9d5c18a07abb863f3a758092ef1954978d
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date:   Fri, 28 Jun 2024 00:47:35 +0200

feat(scripting): custom module execution sides

Signed-off-by: rhunk <101876869+rhunk@users.noreply.github.com>

Diffstat:
Mapp/src/main/kotlin/me/rhunk/snapenhance/scripting/RemoteScriptManager.kt | 14+++++++++-----
Mcommon/src/main/kotlin/me/rhunk/snapenhance/common/scripting/type/ModuleInfo.kt | 2++
2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/scripting/RemoteScriptManager.kt b/app/src/main/kotlin/me/rhunk/snapenhance/scripting/RemoteScriptManager.kt @@ -86,7 +86,7 @@ class RemoteScriptManager( } sync() - enabledScripts.forEach { name -> + getEnabledScripts(listOf(BindingSide.MANAGER.key)).forEach { name -> runCatching { loadScript(name) }.onFailure { @@ -181,17 +181,21 @@ class RemoteScriptManager( }.getOrNull() } - - override fun getEnabledScripts(): List<String> { + private fun getEnabledScripts(sides: List<String>): List<String> { return runCatching { - getScriptFileNames().filter { - context.database.isScriptEnabled(cachedModuleInfo[it]?.name ?: return@filter false) + getScriptFileNames().filter { name -> + cachedModuleInfo[name]?.executionSides?.any { it in sides } ?: true && + context.database.isScriptEnabled(cachedModuleInfo[name]?.name ?: return@filter false) } }.onFailure { context.log.error("Failed to get enabled scripts", it) }.getOrDefault(emptyList()) } + override fun getEnabledScripts(): List<String> { + return getEnabledScripts(listOf(BindingSide.CORE.key)) + } + override fun getScriptContent(moduleName: String): ParcelFileDescriptor? { return getScriptInputStream(moduleName) { it?.toParcelFileDescriptor(context.coroutineScope) } } diff --git a/common/src/main/kotlin/me/rhunk/snapenhance/common/scripting/type/ModuleInfo.kt b/common/src/main/kotlin/me/rhunk/snapenhance/common/scripting/type/ModuleInfo.kt @@ -12,6 +12,7 @@ data class ModuleInfo( val minSnapchatVersion: Long? = null, val minSEVersion: Long? = null, val grantedPermissions: List<String>, + val executionSides: List<String>? = null, ) { fun ensurePermissionGranted(permission: Permissions) { if (!grantedPermissions.contains(permission.key)) { @@ -53,5 +54,6 @@ fun BufferedReader.readModuleInfo(): ModuleInfo { minSnapchatVersion = properties["minSnapchatVersion"]?.toLongOrNull(), minSEVersion = properties["minSEVersion"]?.toLongOrNull(), grantedPermissions = properties["permissions"]?.split(",")?.map { it.trim() } ?: emptyList(), + executionSides = properties["executionSides"]?.lowercase()?.split(",")?.map { it.trim() }, ) }