From fc9a40571d9f4beeb43194f3162b8b2423047349 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Tue, 7 Jul 2020 16:23:21 +0200 Subject: [PATCH] Enable Sonos devices discovering in config.lua | Allow networking in config.lua --- app/build.gradle | 2 ++ .../ttsserver/core/lua/sandbox/SandboxFactory.kt | 11 ++++++++++- app/src/main/res/raw/config.lua | 16 ++++++++++++++-- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 68e3258..cb80a23 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -29,6 +29,8 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.7" + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.7" implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'androidx.core:core-ktx:1.2.0' implementation 'org.nanohttpd:nanohttpd:2.2.0' 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 71e2557..a15a4f2 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,9 @@ package com.bartlomiejpluta.ttsserver.core.lua.sandbox import android.content.Context import com.bartlomiejpluta.ttsserver.core.lua.lib.* import com.bartlomiejpluta.ttsserver.core.lua.loader.ConfigLoader +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.withContext import org.luaj.vm2.Globals import org.luaj.vm2.LoadState import org.luaj.vm2.compiler.LuaC @@ -23,7 +26,13 @@ class SandboxFactory( private val ttsLibrary: TTSLibrary, private val sonosLibrary: SonosLibrary ) { - fun createSandbox() = Globals().also { sandbox -> + fun createSandbox() = runBlocking { + withContext(Dispatchers.Default) { + createLuaGlobals() + } + } + + private fun createLuaGlobals() = Globals().also { sandbox -> loadStandardLibraries(sandbox) loadApplicationLibraries(sandbox) install(sandbox) diff --git a/app/src/main/res/raw/config.lua b/app/src/main/res/raw/config.lua index 06c44b6..2ee9097 100644 --- a/app/src/main/res/raw/config.lua +++ b/app/src/main/res/raw/config.lua @@ -14,6 +14,18 @@ function silenceMode() else return from <= now or now <= to end end +function discoverSonosDevices() + local output = {} + local devices = sonos.discover() + + for _, device in ipairs(devices) do + output[device:getZoneGroupState():getName()] = device + end + + return output +end + return { - silenceMode = silenceMode -} \ No newline at end of file + silenceMode = silenceMode, + sonosDevices = discoverSonosDevices() +}