diff --git a/app/src/main/java/com/bartlomiejpluta/ttsserver/core/lua/loader/EndpointLoader.kt b/app/src/main/java/com/bartlomiejpluta/ttsserver/core/lua/loader/EndpointLoader.kt index 66dbe4b..65348da 100644 --- a/app/src/main/java/com/bartlomiejpluta/ttsserver/core/lua/loader/EndpointLoader.kt +++ b/app/src/main/java/com/bartlomiejpluta/ttsserver/core/lua/loader/EndpointLoader.kt @@ -62,6 +62,7 @@ class EndpointLoader( ) private fun createQueuedEndpoint(luaTable: LuaTable): Endpoint = QueuedEndpoint( + context = context, uri = parseUri(luaTable), method = parseMethod(luaTable), accepts = parseAccepts(luaTable), diff --git a/app/src/main/java/com/bartlomiejpluta/ttsserver/core/web/endpoint/QueuedEndpoint.kt b/app/src/main/java/com/bartlomiejpluta/ttsserver/core/web/endpoint/QueuedEndpoint.kt index 2238b6f..6a4d291 100644 --- a/app/src/main/java/com/bartlomiejpluta/ttsserver/core/web/endpoint/QueuedEndpoint.kt +++ b/app/src/main/java/com/bartlomiejpluta/ttsserver/core/web/endpoint/QueuedEndpoint.kt @@ -1,5 +1,6 @@ package com.bartlomiejpluta.ttsserver.core.web.endpoint +import android.content.Context import com.bartlomiejpluta.ttsserver.core.web.dto.Request import com.bartlomiejpluta.ttsserver.core.web.uri.UriTemplate import com.bartlomiejpluta.ttsserver.core.web.worker.Worker @@ -9,19 +10,14 @@ import org.luaj.vm2.LuaClosure import java.util.concurrent.LinkedBlockingQueue class QueuedEndpoint( + context: Context, uri: UriTemplate, accepts: String?, method: NanoHTTPD.Method, consumer: LuaClosure ) : AbstractEndpoint(uri, accepts, method) { private val queue = LinkedBlockingQueue() - private val worker = Thread( - Worker( - queue, - consumer - ) - ).also { it.name = uri.template } - + private val worker = Thread(Worker(context, queue, consumer)).also { it.name = uri.template } override fun safeHit(request: Request): NanoHTTPD.Response? { diff --git a/app/src/main/java/com/bartlomiejpluta/ttsserver/core/web/worker/Worker.kt b/app/src/main/java/com/bartlomiejpluta/ttsserver/core/web/worker/Worker.kt index 1312e7a..234ca75 100644 --- a/app/src/main/java/com/bartlomiejpluta/ttsserver/core/web/worker/Worker.kt +++ b/app/src/main/java/com/bartlomiejpluta/ttsserver/core/web/worker/Worker.kt @@ -1,15 +1,21 @@ package com.bartlomiejpluta.ttsserver.core.web.worker +import android.content.Context +import android.content.Intent +import androidx.localbroadcastmanager.content.LocalBroadcastManager import com.bartlomiejpluta.ttsserver.core.web.dto.Request import com.bartlomiejpluta.ttsserver.service.foreground.ForegroundService import com.bartlomiejpluta.ttsserver.service.state.ServiceState +import com.bartlomiejpluta.ttsserver.ui.main.MainActivity import org.luaj.vm2.LuaClosure +import org.luaj.vm2.LuaError import org.luaj.vm2.LuaInteger import org.luaj.vm2.LuaValue import org.luaj.vm2.lib.ZeroArgFunction import java.util.concurrent.BlockingQueue class Worker( + private val context: Context, private val queue: BlockingQueue, private val consumer: LuaClosure ) : Runnable { @@ -21,7 +27,19 @@ class Worker( Thread.currentThread().interrupt() } - private fun consume(request: Request) = consumer.call(request.luaTable, QueueSizeFunction(queue)) + private fun consume(request: Request) = try { + consumer.call(request.luaTable, QueueSizeFunction(queue)) + } catch (e: LuaError) { + handleLuaError(e) + } + + private fun handleLuaError(exception: LuaError) { + LocalBroadcastManager + .getInstance(context) + .sendBroadcast(Intent(MainActivity.LUA_ERROR).also { + it.putExtra(MainActivity.MESSAGE, exception.message) + }) + } class QueueSizeFunction(private val queue: BlockingQueue) : ZeroArgFunction() { override fun call(): LuaInteger = LuaValue.valueOf(queue.size)