Create Sonos library

This commit is contained in:
2020-07-02 19:07:52 +02:00
parent 61b8327a20
commit 3f0f30fee3
5 changed files with 51 additions and 3 deletions

View File

@@ -0,0 +1,37 @@
package com.bartlomiejpluta.ttsserver.core.lua.lib
import com.vmichalak.sonoscontroller.SonosDevice
import com.vmichalak.sonoscontroller.SonosDiscovery
import org.luaj.vm2.LuaTable
import org.luaj.vm2.LuaValue
import org.luaj.vm2.lib.OneArgFunction
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 {
val sonos = LuaValue.tableOf().also {
it.set("discover", DiscoverFunction())
it.set("of", OfFunction())
}
env.set("sonos", sonos)
return LuaValue.NIL
}
}

View File

@@ -1,6 +1,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 org.luaj.vm2.Globals
import org.luaj.vm2.LoadState
@@ -14,7 +15,8 @@ import org.luaj.vm2.lib.jse.JseOsLib
class SandboxFactory(
private val httpLibrary: HTTPLibrary,
private val ttsLibrary: TTSLibrary
private val ttsLibrary: TTSLibrary,
private val sonosLibrary: SonosLibrary
) {
fun createSandbox() = Globals().also {
it.load(JseBaseLib())
@@ -25,6 +27,7 @@ class SandboxFactory(
it.load(JseOsLib())
it.load(httpLibrary)
it.load(ttsLibrary)
it.load(sonosLibrary)
LoadState.install(it)
LuaC.install(it)
}

View File

@@ -81,4 +81,5 @@ class DefaultEndpoint(
private fun getData(response: LuaTable) = response.get("data").checkstring().tojstring()
override fun toString() = "D[${uri.template}]"
}

View File

@@ -45,4 +45,6 @@ class QueuedEndpoint(
fun runWorker() = worker.start()
fun stopWorker() = worker.interrupt()
override fun toString() = "Q[${uri.template}]"
}

View File

@@ -2,6 +2,7 @@ package com.bartlomiejpluta.ttsserver.di.module
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.loader.EndpointLoader
import com.bartlomiejpluta.ttsserver.core.lua.sandbox.SandboxFactory
@@ -20,8 +21,8 @@ class LuaModule {
@Provides
@Singleton
fun sandboxFactory(httpLibrary: HTTPLibrary, ttsLibrary: TTSLibrary) =
SandboxFactory(httpLibrary, ttsLibrary)
fun sandboxFactory(httpLibrary: HTTPLibrary, ttsLibrary: TTSLibrary, sonosLibrary: SonosLibrary) =
SandboxFactory(httpLibrary, ttsLibrary, sonosLibrary)
@Provides
@Singleton
@@ -30,4 +31,8 @@ class LuaModule {
@Provides
@Singleton
fun ttsLibrary(ttsEngine: TTSEngine) = TTSLibrary(ttsEngine)
@Provides
@Singleton
fun sonosLibrary() = SonosLibrary()
}