feat(scripting): module data folder

This commit is contained in:
rhunk
2023-09-18 00:18:06 +02:00
parent 86cc8238ef
commit df0e085bfa

View File

@@ -40,21 +40,30 @@ class RemoteScriptManager(
} }
sync() sync()
enabledScripts.forEach { path -> enabledScripts.forEach { name ->
val content = getScriptContent(path) ?: return@forEach if (getModuleDataFolder(name) == null) {
runtime.load(path, content) 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 { 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) 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> { 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> { override fun getEnabledScripts(): List<String> {
@@ -67,8 +76,8 @@ class RemoteScriptManager(
}.getOrDefault(emptyList()) }.getOrDefault(emptyList())
} }
override fun getScriptContent(name: String): String? { override fun getScriptContent(moduleName: String): String? {
return getScriptInputStream(name) { it?.bufferedReader()?.readText() } return getScriptInputStream(moduleName) { it?.bufferedReader()?.readText() }
} }
override fun registerReloadListener(listener: ReloadListener) { override fun registerReloadListener(listener: ReloadListener) {