Session reset handling.
parent
e626e09a45
commit
61622fbd3d
@ -0,0 +1,79 @@
|
|||||||
|
package org.thoughtcrime.securesms.loki
|
||||||
|
|
||||||
|
import android.content.ContentValues
|
||||||
|
import android.content.Context
|
||||||
|
import org.thoughtcrime.securesms.database.Database
|
||||||
|
import org.thoughtcrime.securesms.database.DatabaseFactory
|
||||||
|
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper
|
||||||
|
import org.whispersystems.signalservice.loki.messaging.LokiThreadDatabaseProtocol
|
||||||
|
import org.whispersystems.signalservice.loki.messaging.LokiThreadFriendRequestStatus
|
||||||
|
import org.whispersystems.signalservice.loki.messaging.LokiThreadSessionResetState
|
||||||
|
|
||||||
|
class LokiThreadDatabase(context: Context, helper: SQLCipherOpenHelper) : Database(context, helper), LokiThreadDatabaseProtocol {
|
||||||
|
var delegate: LokiThreadDatabaseDelegate? = null
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private val sessionResetTableName = "loki_thread_session_reset_database"
|
||||||
|
private val friendRequestTableName = "loki_thread_friend_request_database"
|
||||||
|
private val threadID = "thread_id"
|
||||||
|
private val friendRequestStatus = "friend_request_status"
|
||||||
|
private val sessionResetState = "session_reset_state"
|
||||||
|
@JvmStatic val createFriendRequestTableCommand = "CREATE TABLE $friendRequestTableName ($threadID INTEGER PRIMARY KEY, $friendRequestStatus INTEGER DEFAULT 0);"
|
||||||
|
@JvmStatic val createSessionResetTableCommand = "CREATE TABLE $sessionResetTableName ($threadID INTEGER PRIMARY KEY, $sessionResetState INTEGER DEFAULT 0);"
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getThreadID(messageID: Long): Long {
|
||||||
|
return DatabaseFactory.getSmsDatabase(context).getThreadIdForMessage(messageID)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getFriendRequestStatus(threadID: Long): LokiThreadFriendRequestStatus {
|
||||||
|
val database = databaseHelper.readableDatabase
|
||||||
|
val result = database.get(friendRequestTableName, "${Companion.threadID} = ?", arrayOf( threadID.toString() )) { cursor ->
|
||||||
|
cursor.getInt(friendRequestStatus)
|
||||||
|
}
|
||||||
|
return if (result != null) {
|
||||||
|
LokiThreadFriendRequestStatus.values().first { it.rawValue == result }
|
||||||
|
} else {
|
||||||
|
LokiThreadFriendRequestStatus.NONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun setFriendRequestStatus(threadID: Long, friendRequestStatus: LokiThreadFriendRequestStatus) {
|
||||||
|
val database = databaseHelper.writableDatabase
|
||||||
|
val contentValues = ContentValues(2)
|
||||||
|
contentValues.put(Companion.threadID, threadID)
|
||||||
|
contentValues.put(Companion.friendRequestStatus, friendRequestStatus.rawValue)
|
||||||
|
database.insertOrUpdate(friendRequestTableName, contentValues, "${Companion.threadID} = ?", arrayOf( threadID.toString() ))
|
||||||
|
notifyConversationListListeners()
|
||||||
|
notifyConversationListeners(threadID)
|
||||||
|
delegate?.handleThreadFriendRequestStatusChanged(threadID)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun hasPendingFriendRequest(threadID: Long): Boolean {
|
||||||
|
val friendRequestStatus = getFriendRequestStatus(threadID)
|
||||||
|
return friendRequestStatus == LokiThreadFriendRequestStatus.REQUEST_SENDING || friendRequestStatus == LokiThreadFriendRequestStatus.REQUEST_SENT
|
||||||
|
|| friendRequestStatus == LokiThreadFriendRequestStatus.REQUEST_RECEIVED
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getSessionResetState(threadID: Long): LokiThreadSessionResetState {
|
||||||
|
val database = databaseHelper.readableDatabase
|
||||||
|
val result = database.get(sessionResetTableName, "${Companion.threadID} = ?", arrayOf( threadID.toString() )) { cursor ->
|
||||||
|
cursor.getInt(sessionResetState)
|
||||||
|
}
|
||||||
|
return if (result != null) {
|
||||||
|
LokiThreadSessionResetState.values().first { it.rawValue == result }
|
||||||
|
} else {
|
||||||
|
LokiThreadSessionResetState.NONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun setSessionResetState(threadID: Long, sessionResetState: LokiThreadSessionResetState) {
|
||||||
|
val database = databaseHelper.writableDatabase
|
||||||
|
val contentValues = ContentValues(2)
|
||||||
|
contentValues.put(Companion.threadID, threadID)
|
||||||
|
contentValues.put(Companion.sessionResetState, sessionResetState.rawValue)
|
||||||
|
database.insertOrUpdate(sessionResetTableName, contentValues, "${Companion.threadID} = ?", arrayOf( threadID.toString() ))
|
||||||
|
notifyConversationListListeners()
|
||||||
|
notifyConversationListeners(threadID)
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,6 @@
|
|||||||
package org.thoughtcrime.securesms.loki
|
package org.thoughtcrime.securesms.loki
|
||||||
|
|
||||||
interface LokiThreadFriendRequestDatabaseDelegate {
|
interface LokiThreadDatabaseDelegate {
|
||||||
|
|
||||||
fun handleThreadFriendRequestStatusChanged(threadID: Long)
|
fun handleThreadFriendRequestStatusChanged(threadID: Long)
|
||||||
}
|
}
|
@ -1,53 +0,0 @@
|
|||||||
package org.thoughtcrime.securesms.loki
|
|
||||||
|
|
||||||
import android.content.ContentValues
|
|
||||||
import android.content.Context
|
|
||||||
import org.thoughtcrime.securesms.database.Database
|
|
||||||
import org.thoughtcrime.securesms.database.DatabaseFactory
|
|
||||||
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper
|
|
||||||
import org.whispersystems.signalservice.loki.messaging.LokiThreadDatabaseProtocol
|
|
||||||
import org.whispersystems.signalservice.loki.messaging.LokiThreadFriendRequestStatus
|
|
||||||
|
|
||||||
class LokiThreadFriendRequestDatabase(context: Context, helper: SQLCipherOpenHelper) : Database(context, helper), LokiThreadDatabaseProtocol {
|
|
||||||
var delegate: LokiThreadFriendRequestDatabaseDelegate? = null
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
private val tableName = "loki_thread_friend_request_database"
|
|
||||||
private val threadID = "thread_id"
|
|
||||||
private val friendRequestStatus = "friend_request_status"
|
|
||||||
@JvmStatic val createTableCommand = "CREATE TABLE $tableName ($threadID INTEGER PRIMARY KEY, $friendRequestStatus INTEGER DEFAULT 0);"
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getThreadID(messageID: Long): Long {
|
|
||||||
return DatabaseFactory.getSmsDatabase(context).getThreadIdForMessage(messageID)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getFriendRequestStatus(threadID: Long): LokiThreadFriendRequestStatus {
|
|
||||||
val database = databaseHelper.readableDatabase
|
|
||||||
val result = database.get(tableName, "${Companion.threadID} = ?", arrayOf( threadID.toString() )) { cursor ->
|
|
||||||
cursor.getInt(friendRequestStatus)
|
|
||||||
}
|
|
||||||
return if (result != null) {
|
|
||||||
LokiThreadFriendRequestStatus.values().first { it.rawValue == result }
|
|
||||||
} else {
|
|
||||||
LokiThreadFriendRequestStatus.NONE
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun setFriendRequestStatus(threadID: Long, friendRequestStatus: LokiThreadFriendRequestStatus) {
|
|
||||||
val database = databaseHelper.writableDatabase
|
|
||||||
val contentValues = ContentValues(2)
|
|
||||||
contentValues.put(Companion.threadID, threadID)
|
|
||||||
contentValues.put(Companion.friendRequestStatus, friendRequestStatus.rawValue)
|
|
||||||
database.insertOrUpdate(tableName, contentValues, "${Companion.threadID} = ?", arrayOf( threadID.toString() ))
|
|
||||||
notifyConversationListListeners()
|
|
||||||
notifyConversationListeners(threadID)
|
|
||||||
delegate?.handleThreadFriendRequestStatusChanged(threadID)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun hasPendingFriendRequest(threadID: Long): Boolean {
|
|
||||||
val friendRequestStatus = getFriendRequestStatus(threadID)
|
|
||||||
return friendRequestStatus == LokiThreadFriendRequestStatus.REQUEST_SENDING || friendRequestStatus == LokiThreadFriendRequestStatus.REQUEST_SENT
|
|
||||||
|| friendRequestStatus == LokiThreadFriendRequestStatus.REQUEST_RECEIVED
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue