|
@@ -1,8 +1,16 @@
|
|
package io.nexilis.service.data.repositories
|
|
package io.nexilis.service.data.repositories
|
|
|
|
|
|
|
|
+import android.content.Context
|
|
|
|
+import android.util.Log
|
|
|
|
+import androidx.activity.ComponentActivity
|
|
import androidx.lifecycle.LiveData
|
|
import androidx.lifecycle.LiveData
|
|
-import io.nexilis.service.Service
|
|
|
|
|
|
+import androidx.work.OneTimeWorkRequestBuilder
|
|
|
|
+import androidx.work.OutOfQuotaPolicy
|
|
|
|
+import androidx.work.WorkManager
|
|
|
|
+import androidx.work.WorkRequest
|
|
|
|
+import androidx.work.workDataOf
|
|
import io.nexilis.service.core.Data
|
|
import io.nexilis.service.core.Data
|
|
|
|
+import io.nexilis.service.core.Outgoing
|
|
import io.nexilis.service.core.toStupidString
|
|
import io.nexilis.service.core.toStupidString
|
|
import io.nexilis.service.data.daos.GroupMemberDao
|
|
import io.nexilis.service.data.daos.GroupMemberDao
|
|
import io.nexilis.service.data.daos.MessageDao
|
|
import io.nexilis.service.data.daos.MessageDao
|
|
@@ -10,8 +18,12 @@ import io.nexilis.service.data.daos.MessageStatusDao
|
|
import io.nexilis.service.data.entities.MainEntity
|
|
import io.nexilis.service.data.entities.MainEntity
|
|
import io.nexilis.service.data.entities.Message
|
|
import io.nexilis.service.data.entities.Message
|
|
import io.nexilis.service.data.entities.MessageStatus
|
|
import io.nexilis.service.data.entities.MessageStatus
|
|
|
|
+import kotlinx.coroutines.Dispatchers
|
|
|
|
+import kotlinx.coroutines.withContext
|
|
|
|
+import java.util.UUID
|
|
import javax.inject.Inject
|
|
import javax.inject.Inject
|
|
|
|
|
|
|
|
+
|
|
class MessageRepository @Inject constructor(
|
|
class MessageRepository @Inject constructor(
|
|
private val dao: MessageDao,
|
|
private val dao: MessageDao,
|
|
private val messageStatusDao: MessageStatusDao,
|
|
private val messageStatusDao: MessageStatusDao,
|
|
@@ -32,7 +44,11 @@ class MessageRepository @Inject constructor(
|
|
dao.insert(entity as Message)
|
|
dao.insert(entity as Message)
|
|
}
|
|
}
|
|
|
|
|
|
- suspend fun send(entity: MainEntity) {
|
|
|
|
|
|
+ suspend fun send(
|
|
|
|
+ context: Context,
|
|
|
|
+ entity: MainEntity,
|
|
|
|
+ completion: (String, String, Int) -> Unit
|
|
|
|
+ ) {
|
|
val message = entity as Message
|
|
val message = entity as Message
|
|
dao.insert(message)
|
|
dao.insert(message)
|
|
if (message.message_scope_id == "4") {
|
|
if (message.message_scope_id == "4") {
|
|
@@ -113,20 +129,39 @@ class MessageRepository @Inject constructor(
|
|
if (message.broadcast_flag > 0) {
|
|
if (message.broadcast_flag > 0) {
|
|
bodies["B4"] = message.broadcast_flag.toString()
|
|
bodies["B4"] = message.broadcast_flag.toString()
|
|
}
|
|
}
|
|
- Service.sendSync(
|
|
|
|
- Data(
|
|
|
|
- code = "S0",
|
|
|
|
- status = message.message_id,
|
|
|
|
- f_pin = message.f_pin,
|
|
|
|
- bodies = bodies
|
|
|
|
- )
|
|
|
|
- )?.let {
|
|
|
|
- messageStatusDao.updateStatus(
|
|
|
|
- status = it.bodies["A15"]?.toInt() ?: 2, // delivering
|
|
|
|
- messageId = message.message_id,
|
|
|
|
- pin = message.opposite_pin
|
|
|
|
- )
|
|
|
|
|
|
+ val data = Data(
|
|
|
|
+ code = "S0",
|
|
|
|
+ status = message.message_id,
|
|
|
|
+ f_pin = message.f_pin,
|
|
|
|
+ bodies = bodies
|
|
|
|
+ )
|
|
|
|
+ val id = UUID.randomUUID()
|
|
|
|
+ val workRequest: WorkRequest =
|
|
|
|
+ OneTimeWorkRequestBuilder<Outgoing>()
|
|
|
|
+ .setId(id)
|
|
|
|
+ .setInputData(
|
|
|
|
+ workDataOf(
|
|
|
|
+ "data" to data.toString()
|
|
|
|
+ )
|
|
|
|
+ )
|
|
|
|
+ .setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
|
|
|
|
+ .build()
|
|
|
|
+ WorkManager.getInstance(context).enqueue(workRequest)
|
|
|
|
+ withContext(Dispatchers.Main) {
|
|
|
|
+ WorkManager.getInstance(context).getWorkInfoByIdLiveData(id).observe(context as ComponentActivity) { workInfo ->
|
|
|
|
+ if (workInfo.state.isFinished) {
|
|
|
|
+ Log.d(
|
|
|
|
+ "SAPI",
|
|
|
|
+ "update from work:${workInfo.outputData.getString("message_id")}:${
|
|
|
|
+ workInfo.outputData.getString("opposite_pin")
|
|
|
|
+ }:${workInfo.outputData.getInt("status", 0)}"
|
|
|
|
+ )
|
|
|
|
+ completion(workInfo.outputData.getString("message_id") ?: "",
|
|
|
|
+ workInfo.outputData.getString("opposite_pin") ?: "",
|
|
|
|
+ workInfo.outputData.getInt("status", 0)
|
|
|
|
+ )
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
-
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|