feat: add basic last sent legacy message DB migration and creation for banner

This commit is contained in:
0x330a 2023-11-13 08:38:33 +11:00
parent 806cb216ae
commit d12bce54bd
4 changed files with 43 additions and 1 deletions

View File

@ -698,7 +698,7 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe
private fun setUpOutdatedClientBanner() {
val recipient = viewModel.recipient?.takeIf { !it.isLocalNumber } ?: return
if (ExpirationConfiguration.isNewConfigEnabled && recipient.isContactRecipient &&
if (ExpirationConfiguration.isNewConfigEnabled &&
recipient.disappearingState == DisappearingState.LEGACY &&
viewModel.expirationConfiguration?.isEnabled == true
) {

View File

@ -97,6 +97,16 @@ class LokiAPIDatabase(context: Context, helper: SQLCipherOpenHelper) : Database(
public val groupPublicKey = "group_public_key"
@JvmStatic
val createClosedGroupPublicKeysTable = "CREATE TABLE $closedGroupPublicKeysTable ($groupPublicKey STRING PRIMARY KEY)"
private const val LAST_LEGACY_MESSAGE_TABLE = "last_legacy_messages"
// The overall "thread recipient
private const val LAST_LEGACY_THREAD_RECIPIENT = "last_legacy_thread_recipient"
// The individual 'last' person who sent the message with legacy expiration attached
private const val LAST_LEGACY_SENDER_RECIPIENT = "last_legacy_sender_recipient"
private const val LEGACY_THREAD_RECIPIENT_QUERY = "$LAST_LEGACY_THREAD_RECIPIENT = ?"
const val CREATE_LAST_LEGACY_MESSAGE_TABLE = "CREATE TABLE $LAST_LEGACY_MESSAGE_TABLE ($LAST_LEGACY_THREAD_RECIPIENT STRING PRIMARY KEY, $LAST_LEGACY_SENDER_RECIPIENT STRING NOT NULL);"
// Hard fork service node info
const val FORK_INFO_TABLE = "fork_info"
const val DUMMY_KEY = "dummy_key"
@ -415,6 +425,33 @@ class LokiAPIDatabase(context: Context, helper: SQLCipherOpenHelper) : Database(
database.endTransaction()
}
override fun getLastLegacySenderAddress(threadRecipientAddress: String): String? {
val database = databaseHelper.readableDatabase
return database.get(LAST_LEGACY_MESSAGE_TABLE, LEGACY_THREAD_RECIPIENT_QUERY, wrap(threadRecipientAddress)) { cursor ->
cursor.getString(LAST_LEGACY_SENDER_RECIPIENT)
}
}
override fun setLastLegacySenderAddress(
threadRecipientAddress: String,
senderRecipientAddress: String?
) {
val database = databaseHelper.writableDatabase
if (senderRecipientAddress == null) {
// delete
database.delete(LAST_LEGACY_MESSAGE_TABLE, LEGACY_THREAD_RECIPIENT_QUERY, wrap(threadRecipientAddress))
} else {
// just update the value to a new one
val values = wrap(
mapOf(
LAST_LEGACY_THREAD_RECIPIENT to threadRecipientAddress,
LAST_LEGACY_SENDER_RECIPIENT to senderRecipientAddress
)
)
database.insertOrUpdate(LAST_LEGACY_MESSAGE_TABLE, values, LEGACY_THREAD_RECIPIENT_QUERY, wrap(threadRecipientAddress))
}
}
fun getUserCount(room: String, server: String): Int? {
val database = databaseHelper.readableDatabase
val index = "$server.$room"

View File

@ -366,6 +366,7 @@ public class SQLCipherOpenHelper extends SQLiteOpenHelper {
executeStatements(db, ReactionDatabase.CREATE_REACTION_TRIGGERS);
db.execSQL(RecipientDatabase.getAddWrapperHash());
db.execSQL(RecipientDatabase.getAddBlocksCommunityMessageRequests());
db.execSQL(LokiAPIDatabase.CREATE_LAST_LEGACY_MESSAGE_TABLE);
}
@Override
@ -629,6 +630,7 @@ public class SQLCipherOpenHelper extends SQLiteOpenHelper {
if (oldVersion < lokiV46) {
executeStatements(db, SmsDatabase.ADD_AUTOINCREMENT);
executeStatements(db, MmsDatabase.ADD_AUTOINCREMENT);
db.execSQL(LokiAPIDatabase.CREATE_LAST_LEGACY_MESSAGE_TABLE);
}
db.setTransactionSuccessful();

View File

@ -38,4 +38,7 @@ interface LokiAPIDatabaseProtocol {
fun getForkInfo(): ForkInfo
fun setForkInfo(forkInfo: ForkInfo)
fun migrateLegacyOpenGroup(legacyServerId: String, newServerId: String)
fun getLastLegacySenderAddress(threadRecipientAddress: String): String?
fun setLastLegacySenderAddress(threadRecipientAddress: String, senderRecipientAddress: String?)
}