From a66857a7ccbc12e0c1a7f734e65f7d3d704c73fb Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Wed, 26 Jun 2024 11:30:33 -0400 Subject: [PATCH] Fix incorrect local group state bug. --- .../helpers/SignalDatabaseMigrations.kt | 6 ++++-- .../V237_ResetGroupForceUpdateTimestamps.kt | 19 +++++++++++++++++++ .../v2/processing/GroupsV2StateProcessor.kt | 8 ++------ .../internal/push/PushServiceSocket.java | 2 +- 4 files changed, 26 insertions(+), 9 deletions(-) create mode 100644 app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V237_ResetGroupForceUpdateTimestamps.kt diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SignalDatabaseMigrations.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SignalDatabaseMigrations.kt index e66751ceb9..b2196ed161 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SignalDatabaseMigrations.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SignalDatabaseMigrations.kt @@ -94,6 +94,7 @@ import org.thoughtcrime.securesms.database.helpers.migration.V233_FixInAppPaymen import org.thoughtcrime.securesms.database.helpers.migration.V234_ThumbnailRestoreStateColumn import org.thoughtcrime.securesms.database.helpers.migration.V235_AttachmentUuidColumn import org.thoughtcrime.securesms.database.helpers.migration.V236_FixInAppSubscriberCurrencyIfAble +import org.thoughtcrime.securesms.database.helpers.migration.V237_ResetGroupForceUpdateTimestamps /** * Contains all of the database migrations for [SignalDatabase]. Broken into a separate file for cleanliness. @@ -190,10 +191,11 @@ object SignalDatabaseMigrations { 233 to V233_FixInAppPaymentTableDefaultNotifiedValue, 234 to V234_ThumbnailRestoreStateColumn, 235 to V235_AttachmentUuidColumn, - 236 to V236_FixInAppSubscriberCurrencyIfAble + 236 to V236_FixInAppSubscriberCurrencyIfAble, + 237 to V237_ResetGroupForceUpdateTimestamps ) - const val DATABASE_VERSION = 236 + const val DATABASE_VERSION = 237 @JvmStatic fun migrate(context: Application, db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V237_ResetGroupForceUpdateTimestamps.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V237_ResetGroupForceUpdateTimestamps.kt new file mode 100644 index 0000000000..45f8209b87 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V237_ResetGroupForceUpdateTimestamps.kt @@ -0,0 +1,19 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.database.helpers.migration + +import android.app.Application +import net.zetetic.database.sqlcipher.SQLiteDatabase + +/** + * Reset last forced update timestamp for groups to fix a local group state bug. + */ +@Suppress("ClassName") +object V237_ResetGroupForceUpdateTimestamps : SignalDatabaseMigration { + override fun migrate(context: Application, db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { + db.execSQL("UPDATE groups SET last_force_update_timestamp = 0") + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessor.kt index 445338c1cb..d75d5f7e56 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessor.kt @@ -158,7 +158,7 @@ class GroupsV2StateProcessor private constructor( when (serverUpdateResult) { InternalUpdateResult.NoUpdateNeeded -> return GroupUpdateResult.CONSISTENT_OR_AHEAD is InternalUpdateResult.Updated -> return GroupUpdateResult.updated(serverUpdateResult.updatedLocalState) - is InternalUpdateResult.UpdateFailed, + is InternalUpdateResult.UpdateFailed -> throw serverUpdateResult.throwable is InternalUpdateResult.NotAMember -> Unit } @@ -184,11 +184,7 @@ class GroupsV2StateProcessor private constructor( profileAndMessageHelper.leaveGroupLocally(serviceIds) } - throw when (serverUpdateResult) { - is InternalUpdateResult.NotAMember -> GroupNotAMemberException(serverUpdateResult.exception) - is InternalUpdateResult.UpdateFailed -> throw serverUpdateResult.throwable - else -> AssertionError("Should not reach here with ${serverUpdateResult::class.java.simpleName}") - } + throw GroupNotAMemberException(serverUpdateResult.exception) } private fun canApplyP2pChange( diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/PushServiceSocket.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/PushServiceSocket.java index ded25a4ddb..e83538fd55 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/PushServiceSocket.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/PushServiceSocket.java @@ -2921,7 +2921,7 @@ public class PushServiceSocket { GROUPSV2_JOINED_AT, "GET", null, - NO_HANDLER)) + GROUPS_V2_GET_CURRENT_HANDLER)) { return Member.ADAPTER.decode(readBodyBytes(response)).joinedAtRevision; }