diff --git a/app/src/main/java/com/bartlomiejpluta/ttsserver/core/lua/lib/SonosLibrary.kt b/app/src/main/java/com/bartlomiejpluta/ttsserver/core/lua/lib/SonosLibrary.kt index 31cc4e2..4fe214d 100644 --- a/app/src/main/java/com/bartlomiejpluta/ttsserver/core/lua/lib/SonosLibrary.kt +++ b/app/src/main/java/com/bartlomiejpluta/ttsserver/core/lua/lib/SonosLibrary.kt @@ -9,19 +9,6 @@ import org.luaj.vm2.lib.TwoArgFunction import org.luaj.vm2.lib.ZeroArgFunction import org.luaj.vm2.lib.jse.CoerceJavaToLua -class OfFunction : OneArgFunction() { - override fun call(ip: LuaValue): LuaValue = - CoerceJavaToLua.coerce(SonosDevice(ip.checkjstring())) -} - -class DiscoverFunction : ZeroArgFunction() { - override fun call(): LuaTable = LuaValue.tableOf().also { devices -> - SonosDiscovery.discover() - .map { CoerceJavaToLua.coerce(it) } - .forEachIndexed { i, device -> devices.set(i + 1, device) } - } -} - class SonosLibrary : TwoArgFunction() { override fun call(modname: LuaValue, env: LuaValue): LuaValue { @@ -34,4 +21,17 @@ class SonosLibrary : TwoArgFunction() { return LuaValue.NIL } + + class OfFunction : OneArgFunction() { + override fun call(ip: LuaValue): LuaValue = + CoerceJavaToLua.coerce(SonosDevice(ip.checkjstring())) + } + + class DiscoverFunction : ZeroArgFunction() { + override fun call(): LuaTable = LuaValue.tableOf().also { devices -> + SonosDiscovery.discover() + .map { CoerceJavaToLua.coerce(it) } + .forEachIndexed { i, device -> devices.set(i + 1, device) } + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/bartlomiejpluta/ttsserver/core/lua/lib/UtilLibrary.kt b/app/src/main/java/com/bartlomiejpluta/ttsserver/core/lua/lib/UtilLibrary.kt new file mode 100644 index 0000000..a0e88cf --- /dev/null +++ b/app/src/main/java/com/bartlomiejpluta/ttsserver/core/lua/lib/UtilLibrary.kt @@ -0,0 +1,20 @@ +package com.bartlomiejpluta.ttsserver.core.lua.lib + +import org.luaj.vm2.LuaValue +import org.luaj.vm2.lib.OneArgFunction +import org.luaj.vm2.lib.TwoArgFunction + +class UtilLibrary : TwoArgFunction() { + override fun call(modname: LuaValue, env: LuaValue): LuaValue { + env.set("sleep", SleepFunction()) + + return LuaValue.NIL + } + + class SleepFunction : OneArgFunction() { + override fun call(ms: LuaValue): LuaValue { + Thread.sleep(ms.checklong()) + return LuaValue.NIL + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/bartlomiejpluta/ttsserver/core/lua/sandbox/SandboxFactory.kt b/app/src/main/java/com/bartlomiejpluta/ttsserver/core/lua/sandbox/SandboxFactory.kt index 16cec1e..2a16077 100644 --- a/app/src/main/java/com/bartlomiejpluta/ttsserver/core/lua/sandbox/SandboxFactory.kt +++ b/app/src/main/java/com/bartlomiejpluta/ttsserver/core/lua/sandbox/SandboxFactory.kt @@ -3,6 +3,7 @@ package com.bartlomiejpluta.ttsserver.core.lua.sandbox import com.bartlomiejpluta.ttsserver.core.lua.lib.HTTPLibrary import com.bartlomiejpluta.ttsserver.core.lua.lib.SonosLibrary import com.bartlomiejpluta.ttsserver.core.lua.lib.TTSLibrary +import com.bartlomiejpluta.ttsserver.core.lua.lib.UtilLibrary import org.luaj.vm2.Globals import org.luaj.vm2.LoadState import org.luaj.vm2.compiler.LuaC @@ -14,6 +15,7 @@ import org.luaj.vm2.lib.jse.JseMathLib import org.luaj.vm2.lib.jse.JseOsLib class SandboxFactory( + private val utilLibrary: UtilLibrary, private val httpLibrary: HTTPLibrary, private val ttsLibrary: TTSLibrary, private val sonosLibrary: SonosLibrary @@ -25,6 +27,7 @@ class SandboxFactory( it.load(StringLib()) it.load(JseMathLib()) it.load(JseOsLib()) + it.load(utilLibrary) it.load(httpLibrary) it.load(ttsLibrary) it.load(sonosLibrary) diff --git a/app/src/main/java/com/bartlomiejpluta/ttsserver/di/module/LuaModule.kt b/app/src/main/java/com/bartlomiejpluta/ttsserver/di/module/LuaModule.kt index 04288be..ce14347 100644 --- a/app/src/main/java/com/bartlomiejpluta/ttsserver/di/module/LuaModule.kt +++ b/app/src/main/java/com/bartlomiejpluta/ttsserver/di/module/LuaModule.kt @@ -4,6 +4,7 @@ import android.content.Context import com.bartlomiejpluta.ttsserver.core.lua.lib.HTTPLibrary import com.bartlomiejpluta.ttsserver.core.lua.lib.SonosLibrary import com.bartlomiejpluta.ttsserver.core.lua.lib.TTSLibrary +import com.bartlomiejpluta.ttsserver.core.lua.lib.UtilLibrary import com.bartlomiejpluta.ttsserver.core.lua.loader.EndpointLoader import com.bartlomiejpluta.ttsserver.core.lua.sandbox.SandboxFactory import com.bartlomiejpluta.ttsserver.core.tts.engine.TTSEngine @@ -21,8 +22,17 @@ class LuaModule { @Provides @Singleton - fun sandboxFactory(httpLibrary: HTTPLibrary, ttsLibrary: TTSLibrary, sonosLibrary: SonosLibrary) = - SandboxFactory(httpLibrary, ttsLibrary, sonosLibrary) + fun sandboxFactory( + utilLibrary: UtilLibrary, + httpLibrary: HTTPLibrary, + ttsLibrary: TTSLibrary, + sonosLibrary: SonosLibrary + ) = + SandboxFactory(utilLibrary, httpLibrary, ttsLibrary, sonosLibrary) + + @Provides + @Singleton + fun extraLibrary() = UtilLibrary() @Provides @Singleton diff --git a/app/src/main/java/com/bartlomiejpluta/ttsserver/ui/main/MainActivity.kt b/app/src/main/java/com/bartlomiejpluta/ttsserver/ui/main/MainActivity.kt index c16b797..1e107e3 100644 --- a/app/src/main/java/com/bartlomiejpluta/ttsserver/ui/main/MainActivity.kt +++ b/app/src/main/java/com/bartlomiejpluta/ttsserver/ui/main/MainActivity.kt @@ -114,4 +114,4 @@ class MainActivity : DaggerAppCompatActivity() { startService(it) } } -} +} \ No newline at end of file