yayan 1 ano atrás
pai
commit
6912dac9bd

+ 35 - 2
cpaas-lite/src/main/java/io/nexilis/service/core/Incoming.kt

@@ -9,6 +9,7 @@ import io.nexilis.service.data.entities.Buddy
 import io.nexilis.service.data.entities.Group
 import io.nexilis.service.data.entities.GroupMember
 import io.nexilis.service.data.entities.Message
+import io.nexilis.service.data.entities.MessageStatus
 import io.nexilis.service.data.rooms.ApiRoomDatabase
 import io.nexilis.service.pass
 import io.nexilis.service.tag
@@ -377,12 +378,14 @@ class Incoming private constructor() {
             val fPin = data.bodies["A00"] ?: ""
             val lPin = data.bodies["A01"] ?: ""
             val opposite = if (me == fPin) lPin else fPin
+            val scope = data.bodies["A06"] ?: "3"
+            val chatId = data.bodies["BA"] ?: ""
             ApiRoomDatabase.getDatabase(context).messageDao().insert(
                 Message(
                     messageId,
                     fPin,
                     lPin,
-                    data.bodies["A06"] ?: "",
+                    scope,
                     data.bodies["A19"]?.toLong() ?: System.currentTimeMillis(),
                     data.bodies["A15"] ?: "",
                     data.bodies["A07"]?.toNormalString() ?: "",
@@ -398,7 +401,7 @@ class Incoming private constructor() {
                     data.bodies["B8"] ?: "",
                     data.bodies["B9"] ?: "",
                     data.bodies["Bf"]?.toInt() ?: 0,
-                    data.bodies["BA"] ?: "",
+                    chatId,
                     data.bodies["BN"] ?: "",
                     0,
                     data.bodies["A117"] ?: "1",
@@ -434,6 +437,36 @@ class Incoming private constructor() {
                     data.bodies["ccid"] ?: ""
                 )
             )
+            if (scope == "4") {
+                val id = chatId.ifEmpty { lPin }
+                ApiRoomDatabase.getDatabase(context).groupMemberDao().get(id).value?.let {
+                    it.forEach { member ->
+                        ApiRoomDatabase.getDatabase(context).messageStatusDao().insert(
+                            MessageStatus(
+                                message_id = messageId,
+                                f_pin = member.f_pin,
+                                user_id = member.f_pin,
+                                last_update = System.currentTimeMillis(),
+                                time_delivered = 0,
+                                time_read = 0,
+                                time_ack = 0,
+                            )
+                        )
+                    }
+                }
+            } else {
+                ApiRoomDatabase.getDatabase(context).messageStatusDao().insert(
+                    MessageStatus(
+                        message_id = messageId,
+                        f_pin = opposite,
+                        user_id = opposite,
+                        last_update = System.currentTimeMillis(),
+                        time_delivered = 0,
+                        time_read = 0,
+                        time_ack = 0,
+                    )
+                )
+            }
             Service.sendAck(me, data.status)
         } catch (e: Exception) {
             Log.e(tag, e.message, e)

+ 0 - 14
cpaas-lite/src/main/java/io/nexilis/service/data/daos/MessageDao.kt

@@ -25,26 +25,12 @@ abstract class MessageDao {
     @Insert(onConflict = OnConflictStrategy.REPLACE)
     abstract suspend fun _insertSummary(entity: MessageSummary)
 
-    @Insert(onConflict = OnConflictStrategy.REPLACE)
-    abstract suspend fun _insertStatus(entity: MessageStatus)
-
     @Query("delete from Message")
     abstract suspend fun deleteAll()
 
     suspend fun insert(entity: Message) {
         _insert(entity)
         _insertSummary(MessageSummary(entity.opposite_pin, entity.message_id))
-        _insertStatus(
-            MessageStatus(
-                message_id = entity.message_id,
-                f_pin = entity.opposite_pin,
-                user_id = entity.opposite_pin,
-                last_update = System.currentTimeMillis(),
-                time_delivered = 0,
-                time_read = 0,
-                time_ack = 0,
-            )
-        )
     }
 
 }

+ 37 - 12
cpaas-lite/src/main/java/io/nexilis/service/data/repositories/MessageRepository.kt

@@ -4,6 +4,7 @@ import androidx.lifecycle.LiveData
 import io.nexilis.service.Service
 import io.nexilis.service.core.Data
 import io.nexilis.service.core.toStupidString
+import io.nexilis.service.data.daos.GroupMemberDao
 import io.nexilis.service.data.daos.MessageDao
 import io.nexilis.service.data.daos.MessageStatusDao
 import io.nexilis.service.data.entities.MainEntity
@@ -13,7 +14,8 @@ import javax.inject.Inject
 
 class MessageRepository @Inject constructor(
     private val dao: MessageDao,
-    private val daoStatus: MessageStatusDao
+    private val messageStatusDao: MessageStatusDao,
+    private val groupMemberDao: GroupMemberDao
 ) : Repository {
 
     val all: LiveData<List<Message>> = dao.getAll()
@@ -33,6 +35,36 @@ class MessageRepository @Inject constructor(
     suspend fun send(entity: MainEntity) {
         val message = entity as Message
         dao.insert(message)
+        if (message.message_scope_id == "4") {
+            val id = message.chat_id.ifEmpty { message.l_pin }
+            groupMemberDao.get(id).value?.let {
+                it.forEach { member ->
+                    messageStatusDao.insert(
+                        MessageStatus(
+                            message_id = message.message_id,
+                            f_pin = member.f_pin,
+                            user_id = member.f_pin,
+                            last_update = System.currentTimeMillis(),
+                            time_delivered = 0,
+                            time_read = 0,
+                            time_ack = 0,
+                        )
+                    )
+                }
+            }
+        } else {
+            messageStatusDao.insert(
+                MessageStatus(
+                    message_id = message.message_id,
+                    f_pin = message.opposite_pin,
+                    user_id = message.opposite_pin,
+                    last_update = System.currentTimeMillis(),
+                    time_delivered = 0,
+                    time_read = 0,
+                    time_ack = 0,
+                )
+            )
+        }
         val bodies = mutableMapOf(
             "A18" to message.message_id,
             "A00" to message.f_pin,
@@ -90,17 +122,10 @@ class MessageRepository @Inject constructor(
                 bodies = bodies
             )
         )?.let {
-            daoStatus.insert(
-                MessageStatus(
-                    message_id = message.message_id,
-                    status = it.bodies["A15"]?.toInt() ?: 2, // delivering
-                    f_pin = message.opposite_pin,
-                    user_id = message.opposite_pin,
-                    last_update = System.currentTimeMillis(),
-                    time_delivered = 0,
-                    time_read = 0,
-                    time_ack = 0,
-                )
+            messageStatusDao.updateStatus(
+                status = it.bodies["A15"]?.toInt() ?: 2, // delivering
+                messageId = message.message_id,
+                pin = message.opposite_pin
             )
         }