|
|
@ -7,6 +7,8 @@ import org.thoughtcrime.securesms.database.Database
|
|
|
|
import org.thoughtcrime.securesms.database.DatabaseFactory
|
|
|
|
import org.thoughtcrime.securesms.database.DatabaseFactory
|
|
|
|
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper
|
|
|
|
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper
|
|
|
|
import org.thoughtcrime.securesms.recipients.Recipient
|
|
|
|
import org.thoughtcrime.securesms.recipients.Recipient
|
|
|
|
|
|
|
|
import org.whispersystems.signalservice.internal.util.JsonUtil
|
|
|
|
|
|
|
|
import org.whispersystems.signalservice.loki.api.LokiGroupChat
|
|
|
|
import org.whispersystems.signalservice.loki.messaging.LokiThreadDatabaseProtocol
|
|
|
|
import org.whispersystems.signalservice.loki.messaging.LokiThreadDatabaseProtocol
|
|
|
|
import org.whispersystems.signalservice.loki.messaging.LokiThreadFriendRequestStatus
|
|
|
|
import org.whispersystems.signalservice.loki.messaging.LokiThreadFriendRequestStatus
|
|
|
|
import org.whispersystems.signalservice.loki.messaging.LokiThreadSessionResetStatus
|
|
|
|
import org.whispersystems.signalservice.loki.messaging.LokiThreadSessionResetStatus
|
|
|
@ -17,11 +19,14 @@ class LokiThreadDatabase(context: Context, helper: SQLCipherOpenHelper) : Databa
|
|
|
|
companion object {
|
|
|
|
companion object {
|
|
|
|
private val friendRequestTableName = "loki_thread_friend_request_database"
|
|
|
|
private val friendRequestTableName = "loki_thread_friend_request_database"
|
|
|
|
private val sessionResetTableName = "loki_thread_session_reset_database"
|
|
|
|
private val sessionResetTableName = "loki_thread_session_reset_database"
|
|
|
|
|
|
|
|
private val groupChatMappingTableName = "loki_group_chat_mapping_database"
|
|
|
|
private val threadID = "thread_id"
|
|
|
|
private val threadID = "thread_id"
|
|
|
|
private val friendRequestStatus = "friend_request_status"
|
|
|
|
private val friendRequestStatus = "friend_request_status"
|
|
|
|
private val sessionResetStatus = "session_reset_status"
|
|
|
|
private val sessionResetStatus = "session_reset_status"
|
|
|
|
|
|
|
|
private val groupChatJSON = "group_chat_json"
|
|
|
|
@JvmStatic val createFriendRequestTableCommand = "CREATE TABLE $friendRequestTableName ($threadID INTEGER PRIMARY KEY, $friendRequestStatus INTEGER DEFAULT 0);"
|
|
|
|
@JvmStatic val createFriendRequestTableCommand = "CREATE TABLE $friendRequestTableName ($threadID INTEGER PRIMARY KEY, $friendRequestStatus INTEGER DEFAULT 0);"
|
|
|
|
@JvmStatic val createSessionResetTableCommand = "CREATE TABLE $sessionResetTableName ($threadID INTEGER PRIMARY KEY, $sessionResetStatus INTEGER DEFAULT 0);"
|
|
|
|
@JvmStatic val createSessionResetTableCommand = "CREATE TABLE $sessionResetTableName ($threadID INTEGER PRIMARY KEY, $sessionResetStatus INTEGER DEFAULT 0);"
|
|
|
|
|
|
|
|
@JvmStatic val createGroupChatMappingTableCommand = "CREATE TABLE $groupChatMappingTableName ($threadID INTEGER PRIMARY KEY, $groupChatJSON TEXT);"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
override fun getThreadID(hexEncodedPublicKey: String): Long {
|
|
|
|
override fun getThreadID(hexEncodedPublicKey: String): Long {
|
|
|
@ -30,7 +35,7 @@ class LokiThreadDatabase(context: Context, helper: SQLCipherOpenHelper) : Databa
|
|
|
|
return DatabaseFactory.getThreadDatabase(context).getThreadIdFor(recipient)
|
|
|
|
return DatabaseFactory.getThreadDatabase(context).getThreadIdFor(recipient)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
override fun getThreadID(messageID: Long): Long {
|
|
|
|
fun getThreadID(messageID: Long): Long {
|
|
|
|
return DatabaseFactory.getSmsDatabase(context).getThreadIdForMessage(messageID)
|
|
|
|
return DatabaseFactory.getSmsDatabase(context).getThreadIdForMessage(messageID)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -84,4 +89,24 @@ class LokiThreadDatabase(context: Context, helper: SQLCipherOpenHelper) : Databa
|
|
|
|
notifyConversationListListeners()
|
|
|
|
notifyConversationListListeners()
|
|
|
|
notifyConversationListeners(threadID)
|
|
|
|
notifyConversationListeners(threadID)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override fun getGroupChat(threadID: Long): LokiGroupChat? {
|
|
|
|
|
|
|
|
val database = databaseHelper.readableDatabase
|
|
|
|
|
|
|
|
return database.get(groupChatMappingTableName, "${Companion.threadID} = ?", arrayOf( threadID.toString() )) { cursor ->
|
|
|
|
|
|
|
|
val string = cursor.getString(groupChatJSON)
|
|
|
|
|
|
|
|
LokiGroupChat.fromJSON(string)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override fun setGroupChat(groupChat: LokiGroupChat, threadID: Long) {
|
|
|
|
|
|
|
|
val database = databaseHelper.writableDatabase
|
|
|
|
|
|
|
|
val contentValues = ContentValues(2)
|
|
|
|
|
|
|
|
contentValues.put(Companion.threadID, threadID)
|
|
|
|
|
|
|
|
contentValues.put(Companion.groupChatJSON, JsonUtil.toJson(groupChat.toJSON()))
|
|
|
|
|
|
|
|
database.insertOrUpdate(groupChatMappingTableName, contentValues, "${Companion.threadID} = ?", arrayOf( threadID.toString() ))
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override fun removeGroupChat(threadID: Long) {
|
|
|
|
|
|
|
|
databaseHelper.writableDatabase.delete(groupChatMappingTableName, "${Companion.threadID} = ?", arrayOf( threadID.toString() ))
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|