Create ScriptsInitializer PoC

This commit is contained in:
2020-07-03 12:40:00 +02:00
parent 864dd3bf00
commit 9de5ea7150
5 changed files with 82 additions and 4 deletions

View File

@@ -1,12 +1,14 @@
package com.bartlomiejpluta.ttsserver.di.module
import android.content.Context
import android.content.SharedPreferences
import com.bartlomiejpluta.ttsserver.core.lua.lib.*
import com.bartlomiejpluta.ttsserver.core.lua.loader.ConfigLoader
import com.bartlomiejpluta.ttsserver.core.lua.loader.EndpointLoader
import com.bartlomiejpluta.ttsserver.core.lua.sandbox.SandboxFactory
import com.bartlomiejpluta.ttsserver.core.tts.engine.TTSEngine
import com.bartlomiejpluta.ttsserver.core.util.NetworkUtil
import com.bartlomiejpluta.ttsserver.initializer.ScriptsInitializer
import dagger.Module
import dagger.Provides
import javax.inject.Singleton
@@ -61,4 +63,9 @@ class LuaModule {
@Provides
@Singleton
fun sonosLibrary() = SonosLibrary()
@Provides
@Singleton
fun scriptsInitializer(context: Context, preferences: SharedPreferences) =
ScriptsInitializer(context, preferences)
}

View File

@@ -0,0 +1,55 @@
package com.bartlomiejpluta.ttsserver.initializer
import android.content.Context
import android.content.SharedPreferences
import com.bartlomiejpluta.R
import java.io.BufferedInputStream
import java.io.File
import java.io.FileOutputStream
class ScriptsInitializer(private val context: Context, private val preferences: SharedPreferences) {
private val endpointsDirectory: File?
get() = context.getExternalFilesDir("endpoints")
private val configDirectory: File?
get() = context.getExternalFilesDir("config")
fun initializeOnce() {
if(!preferences.getBoolean(INITIALIZED_FLAG, false)) {
initialize()
preferences.edit().apply {
putBoolean(INITIALIZED_FLAG, true)
apply()
}
}
}
fun initialize() {
endpointsDirectory?.listFiles()?.forEach { it.delete() }
configDirectory?.listFiles()?.forEach { it.delete() }
initializeConfig()
initializeEndpoints()
}
private fun initializeConfig() =
saveToFile("config.lua", configDirectory, R.raw.config)
private fun initializeEndpoints() =
endpoints.forEach { saveToFile(it.key, endpointsDirectory, it.value) }
private fun saveToFile(fileName: String, directory: File?, resourceId: Int) {
BufferedInputStream(context.resources.openRawResource(resourceId)).use { input ->
FileOutputStream(File(directory, fileName)).use { output ->
input.copyTo(output)
}
}
}
companion object {
private const val INITIALIZED_FLAG = "flag_initialized"
private val endpoints = mapOf(
"say.lua" to R.raw.say
)
}
}

View File

@@ -12,6 +12,7 @@ import androidx.appcompat.widget.AppCompatImageButton
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import com.bartlomiejpluta.R
import com.bartlomiejpluta.ttsserver.core.util.NetworkUtil
import com.bartlomiejpluta.ttsserver.initializer.ScriptsInitializer
import com.bartlomiejpluta.ttsserver.service.foreground.ForegroundService
import com.bartlomiejpluta.ttsserver.service.state.ServiceState
import com.bartlomiejpluta.ttsserver.ui.help.HelpActivity
@@ -34,16 +35,19 @@ class MainActivity : DaggerAppCompatActivity() {
@Inject
lateinit var networkUtil: NetworkUtil
@Inject
lateinit var scriptsInitializer: ScriptsInitializer
private val receiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) = when(intent?.action) {
MainActivity.CHANGE_STATE -> dispatchChangeStateIntent(intent)
override fun onReceive(context: Context?, intent: Intent?) = when (intent?.action) {
CHANGE_STATE -> dispatchChangeStateIntent(intent)
LUA_ERROR -> dispatchLuaErrorIntent(intent)
else -> throw UnsupportedOperationException("This action is not supported")
}
}
private fun dispatchChangeStateIntent(intent: Intent) {
(intent.getStringExtra(MainActivity.STATE) ?: ServiceState.STOPPED.name)
(intent.getStringExtra(STATE) ?: ServiceState.STOPPED.name)
.let { ServiceState.valueOf(it) }
.let { updateViewAccordingToServiceState(it) }
}
@@ -92,12 +96,13 @@ class MainActivity : DaggerAppCompatActivity() {
serverControlButton = findViewById(R.id.server_control_button)
serverStatus = findViewById(R.id.server_status)
promptText = findViewById(R.id.prompt_text)
scriptsInitializer.initializeOnce()
}
override fun onResume() {
super.onResume()
val filter = IntentFilter().apply {
addAction(MainActivity.CHANGE_STATE)
addAction(CHANGE_STATE)
addAction(LUA_ERROR)
}

View File

@@ -0,0 +1,2 @@
return {
}

View File

@@ -0,0 +1,9 @@
return {
uri = "/say",
method = Method.POST,
queued = true,
accepts = "application/json",
consumer = function()
tts.say("Hello, world!", "en")
end
}