Add migration to fix registration state of some users.

This commit is contained in:
Greyson Parrelli 2023-11-10 10:02:25 -05:00
parent 6528b34152
commit e9bd35619d
3 changed files with 57 additions and 1 deletions

View file

@ -68,6 +68,7 @@ import org.thoughtcrime.securesms.migrations.ProfileSharingUpdateMigrationJob;
import org.thoughtcrime.securesms.migrations.RebuildMessageSearchIndexMigrationJob;
import org.thoughtcrime.securesms.migrations.RecheckPaymentsMigrationJob;
import org.thoughtcrime.securesms.migrations.RecipientSearchMigrationJob;
import org.thoughtcrime.securesms.migrations.SelfRegisteredStateMigrationJob;
import org.thoughtcrime.securesms.migrations.StickerAdditionMigrationJob;
import org.thoughtcrime.securesms.migrations.StickerDayByDayMigrationJob;
import org.thoughtcrime.securesms.migrations.StickerLaunchMigrationJob;
@ -253,6 +254,7 @@ public final class JobManagerFactories {
put(RebuildMessageSearchIndexMigrationJob.KEY, new RebuildMessageSearchIndexMigrationJob.Factory());
put(RecheckPaymentsMigrationJob.KEY, new RecheckPaymentsMigrationJob.Factory());
put(RecipientSearchMigrationJob.KEY, new RecipientSearchMigrationJob.Factory());
put(SelfRegisteredStateMigrationJob.KEY, new SelfRegisteredStateMigrationJob.Factory());
put(StickerLaunchMigrationJob.KEY, new StickerLaunchMigrationJob.Factory());
put(StickerAdditionMigrationJob.KEY, new StickerAdditionMigrationJob.Factory());
put(StickerDayByDayMigrationJob.KEY, new StickerDayByDayMigrationJob.Factory());

View file

@ -140,9 +140,10 @@ public class ApplicationMigrations {
static final int RECHECK_PAYMENTS = 96;
static final int THREAD_COUNT_DB_MIGRATION = 97;
static final int SYNC_KEYS_MIGRATION = 98;
static final int SELF_REGISTERTED_STATE = 99;
}
public static final int CURRENT_VERSION = 98;
public static final int CURRENT_VERSION = 99;
/**
* This *must* be called after the {@link JobManager} has been instantiated, but *before* the call
@ -637,6 +638,10 @@ public class ApplicationMigrations {
jobs.put(Version.SYNC_KEYS_MIGRATION, new SyncKeysMigrationJob());
}
if (lastSeenVersion < Version.SELF_REGISTERTED_STATE) {
jobs.put(Version.SELF_REGISTERTED_STATE, new SelfRegisteredStateMigrationJob());
}
return jobs;
}

View file

@ -0,0 +1,49 @@
package org.thoughtcrime.securesms.migrations
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.database.RecipientTable
import org.thoughtcrime.securesms.database.SignalDatabase
import org.thoughtcrime.securesms.jobmanager.Job
import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.recipients.Recipient
/**
* There was a bug where some users had their own recipient entry marked unregistered. This fixes that.
*/
internal class SelfRegisteredStateMigrationJob(
parameters: Parameters = Parameters.Builder().build()
) : MigrationJob(parameters) {
companion object {
const val KEY = "SelfRegisteredStateMigrationJob"
val TAG = Log.tag(SelfRegisteredStateMigrationJob::class.java)
}
override fun getFactoryKey(): String = KEY
override fun isUiBlocking(): Boolean = false
override fun performMigration() {
if (SignalStore.account().isRegistered && SignalStore.account().aci != null) {
val record = SignalDatabase.recipients.getRecord(Recipient.self().id)
if (record.registered != RecipientTable.RegisteredState.REGISTERED) {
Log.w(TAG, "Inconsistent registered state! Fixing...")
SignalDatabase.recipients.markRegistered(Recipient.self().id, SignalStore.account().aci!!)
} else {
Log.d(TAG, "Local user is already registered.")
}
} else {
Log.d(TAG, "Not registered. Skipping.")
}
}
override fun shouldRetry(e: Exception): Boolean = false
class Factory : Job.Factory<SelfRegisteredStateMigrationJob> {
override fun create(parameters: Parameters, serializedData: ByteArray?): SelfRegisteredStateMigrationJob {
return SelfRegisteredStateMigrationJob(parameters)
}
}
}