commit df0e085bfa10ae1d7a30ced10a2f2e4ee004ca50
parent 86cc8238efd26c1d08703ce077162075e63b9763
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date:   Mon, 18 Sep 2023 00:18:06 +0200

feat(scripting): module data folder

Diffstat:
Mapp/src/main/kotlin/me/rhunk/snapenhance/scripting/RemoteScriptManager.kt | 25+++++++++++++++++--------
1 file changed, 17 insertions(+), 8 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 @@ -40,21 +40,30 @@ class RemoteScriptManager( } sync() - enabledScripts.forEach { path -> - val content = getScriptContent(path) ?: return@forEach - runtime.load(path, content) + enabledScripts.forEach { name -> + if (getModuleDataFolder(name) == null) { + context.log.warn("Module data folder not found for $name") + } + val content = getScriptContent(name) ?: return@forEach + runtime.load(name, content) } } private fun <R> getScriptInputStream(name: String, callback: (InputStream?) -> R): R { - val file = getScriptFolder()?.findFile(name) ?: return callback(null) + val file = getScriptsFolder()?.findFile(name) ?: return callback(null) return context.androidContext.contentResolver.openInputStream(file.uri)?.use(callback) ?: callback(null) } - private fun getScriptFolder() = DocumentFile.fromTreeUri(context.androidContext, Uri.parse(context.config.root.scripting.moduleFolder.get())) + private fun getModuleDataFolder(moduleFileName: String): DocumentFile? { + val folderName = moduleFileName.substringBeforeLast(".js") + val folder = getScriptsFolder() ?: return null + return folder.findFile(folderName) ?: folder.createDirectory(folderName) + } + + private fun getScriptsFolder() = DocumentFile.fromTreeUri(context.androidContext, Uri.parse(context.config.root.scripting.moduleFolder.get())) private fun getScriptFileNames(): List<String> { - return (getScriptFolder() ?: return emptyList()).listFiles().filter { it.name?.endsWith(".js") ?: false }.map { it.name!! } + return (getScriptsFolder() ?: return emptyList()).listFiles().filter { it.name?.endsWith(".js") ?: false }.map { it.name!! } } override fun getEnabledScripts(): List<String> { @@ -67,8 +76,8 @@ class RemoteScriptManager( }.getOrDefault(emptyList()) } - override fun getScriptContent(name: String): String? { - return getScriptInputStream(name) { it?.bufferedReader()?.readText() } + override fun getScriptContent(moduleName: String): String? { + return getScriptInputStream(moduleName) { it?.bufferedReader()?.readText() } } override fun registerReloadListener(listener: ReloadListener) {