Create ScriptsInitializer PoC
This commit is contained in:
@@ -1,12 +1,14 @@
|
|||||||
package com.bartlomiejpluta.ttsserver.di.module
|
package com.bartlomiejpluta.ttsserver.di.module
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.content.SharedPreferences
|
||||||
import com.bartlomiejpluta.ttsserver.core.lua.lib.*
|
import com.bartlomiejpluta.ttsserver.core.lua.lib.*
|
||||||
import com.bartlomiejpluta.ttsserver.core.lua.loader.ConfigLoader
|
import com.bartlomiejpluta.ttsserver.core.lua.loader.ConfigLoader
|
||||||
import com.bartlomiejpluta.ttsserver.core.lua.loader.EndpointLoader
|
import com.bartlomiejpluta.ttsserver.core.lua.loader.EndpointLoader
|
||||||
import com.bartlomiejpluta.ttsserver.core.lua.sandbox.SandboxFactory
|
import com.bartlomiejpluta.ttsserver.core.lua.sandbox.SandboxFactory
|
||||||
import com.bartlomiejpluta.ttsserver.core.tts.engine.TTSEngine
|
import com.bartlomiejpluta.ttsserver.core.tts.engine.TTSEngine
|
||||||
import com.bartlomiejpluta.ttsserver.core.util.NetworkUtil
|
import com.bartlomiejpluta.ttsserver.core.util.NetworkUtil
|
||||||
|
import com.bartlomiejpluta.ttsserver.initializer.ScriptsInitializer
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
@@ -61,4 +63,9 @@ class LuaModule {
|
|||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
fun sonosLibrary() = SonosLibrary()
|
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 androidx.localbroadcastmanager.content.LocalBroadcastManager
|
||||||
import com.bartlomiejpluta.R
|
import com.bartlomiejpluta.R
|
||||||
import com.bartlomiejpluta.ttsserver.core.util.NetworkUtil
|
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.foreground.ForegroundService
|
||||||
import com.bartlomiejpluta.ttsserver.service.state.ServiceState
|
import com.bartlomiejpluta.ttsserver.service.state.ServiceState
|
||||||
import com.bartlomiejpluta.ttsserver.ui.help.HelpActivity
|
import com.bartlomiejpluta.ttsserver.ui.help.HelpActivity
|
||||||
@@ -34,16 +35,19 @@ class MainActivity : DaggerAppCompatActivity() {
|
|||||||
@Inject
|
@Inject
|
||||||
lateinit var networkUtil: NetworkUtil
|
lateinit var networkUtil: NetworkUtil
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
lateinit var scriptsInitializer: ScriptsInitializer
|
||||||
|
|
||||||
private val receiver = object : BroadcastReceiver() {
|
private val receiver = object : BroadcastReceiver() {
|
||||||
override fun onReceive(context: Context?, intent: Intent?) = when(intent?.action) {
|
override fun onReceive(context: Context?, intent: Intent?) = when (intent?.action) {
|
||||||
MainActivity.CHANGE_STATE -> dispatchChangeStateIntent(intent)
|
CHANGE_STATE -> dispatchChangeStateIntent(intent)
|
||||||
LUA_ERROR -> dispatchLuaErrorIntent(intent)
|
LUA_ERROR -> dispatchLuaErrorIntent(intent)
|
||||||
else -> throw UnsupportedOperationException("This action is not supported")
|
else -> throw UnsupportedOperationException("This action is not supported")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun dispatchChangeStateIntent(intent: Intent) {
|
private fun dispatchChangeStateIntent(intent: Intent) {
|
||||||
(intent.getStringExtra(MainActivity.STATE) ?: ServiceState.STOPPED.name)
|
(intent.getStringExtra(STATE) ?: ServiceState.STOPPED.name)
|
||||||
.let { ServiceState.valueOf(it) }
|
.let { ServiceState.valueOf(it) }
|
||||||
.let { updateViewAccordingToServiceState(it) }
|
.let { updateViewAccordingToServiceState(it) }
|
||||||
}
|
}
|
||||||
@@ -92,12 +96,13 @@ class MainActivity : DaggerAppCompatActivity() {
|
|||||||
serverControlButton = findViewById(R.id.server_control_button)
|
serverControlButton = findViewById(R.id.server_control_button)
|
||||||
serverStatus = findViewById(R.id.server_status)
|
serverStatus = findViewById(R.id.server_status)
|
||||||
promptText = findViewById(R.id.prompt_text)
|
promptText = findViewById(R.id.prompt_text)
|
||||||
|
scriptsInitializer.initializeOnce()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
val filter = IntentFilter().apply {
|
val filter = IntentFilter().apply {
|
||||||
addAction(MainActivity.CHANGE_STATE)
|
addAction(CHANGE_STATE)
|
||||||
addAction(LUA_ERROR)
|
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