Create ScriptsInitializer PoC
This commit is contained in:
@@ -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)
|
||||
}
|
||||
@@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
2
app/src/main/res/raw/config.lua
Normal file
2
app/src/main/res/raw/config.lua
Normal file
@@ -0,0 +1,2 @@
|
||||
return {
|
||||
}
|
||||
9
app/src/main/res/raw/say.lua
Normal file
9
app/src/main/res/raw/say.lua
Normal file
@@ -0,0 +1,9 @@
|
||||
return {
|
||||
uri = "/say",
|
||||
method = Method.POST,
|
||||
queued = true,
|
||||
accepts = "application/json",
|
||||
consumer = function()
|
||||
tts.say("Hello, world!", "en")
|
||||
end
|
||||
}
|
||||
Reference in New Issue
Block a user