diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java index 8b85b83e8a..9edb14d7fd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java @@ -30,6 +30,7 @@ import org.thoughtcrime.securesms.migrations.AvatarIdRemovalMigrationJob; import org.thoughtcrime.securesms.migrations.AvatarMigrationJob; import org.thoughtcrime.securesms.migrations.CachedAttachmentsMigrationJob; import org.thoughtcrime.securesms.migrations.DatabaseMigrationJob; +import org.thoughtcrime.securesms.migrations.DirectoryRefreshMigrationJob; import org.thoughtcrime.securesms.migrations.KbsEnclaveMigrationJob; import org.thoughtcrime.securesms.migrations.LegacyMigrationJob; import org.thoughtcrime.securesms.migrations.MigrationCompleteJob; @@ -135,6 +136,7 @@ public final class JobManagerFactories { put(AvatarMigrationJob.KEY, new AvatarMigrationJob.Factory()); put(CachedAttachmentsMigrationJob.KEY, new CachedAttachmentsMigrationJob.Factory()); put(DatabaseMigrationJob.KEY, new DatabaseMigrationJob.Factory()); + put(DirectoryRefreshMigrationJob.KEY, new DirectoryRefreshMigrationJob.Factory()); put(KbsEnclaveMigrationJob.KEY, new KbsEnclaveMigrationJob.Factory()); put(LegacyMigrationJob.KEY, new LegacyMigrationJob.Factory()); put(MigrationCompleteJob.KEY, new MigrationCompleteJob.Factory()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplicationMigrations.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplicationMigrations.java index b2de54ba98..21e1881f6f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplicationMigrations.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplicationMigrations.java @@ -39,7 +39,7 @@ public class ApplicationMigrations { private static final int LEGACY_CANONICAL_VERSION = 455; - public static final int CURRENT_VERSION = 21; + public static final int CURRENT_VERSION = 22; private static final class Version { static final int LEGACY = 1; @@ -63,6 +63,7 @@ public class ApplicationMigrations { static final int THUMBNAIL_CLEANUP = 19; static final int GV2 = 20; static final int GV2_2 = 21; + static final int CDS = 22; } /** @@ -262,6 +263,10 @@ public class ApplicationMigrations { jobs.put(Version.GV2_2, new AttributesMigrationJob()); } + if (lastSeenVersion < Version.CDS) { + jobs.put(Version.CDS, new DirectoryRefreshMigrationJob()); + } + return jobs; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/DirectoryRefreshMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/DirectoryRefreshMigrationJob.java new file mode 100644 index 0000000000..3a5cd25cc3 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/DirectoryRefreshMigrationJob.java @@ -0,0 +1,68 @@ +package org.thoughtcrime.securesms.migrations; + +import androidx.annotation.NonNull; + +import org.thoughtcrime.securesms.contacts.sync.DirectoryHelper; +import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; +import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.Job; +import org.thoughtcrime.securesms.jobs.RefreshAttributesJob; +import org.thoughtcrime.securesms.jobs.RefreshOwnProfileJob; +import org.thoughtcrime.securesms.keyvalue.SignalStore; +import org.thoughtcrime.securesms.logging.Log; +import org.thoughtcrime.securesms.util.TextSecurePreferences; + +import java.io.IOException; + +/** + * Does a full directory refresh. + */ +public final class DirectoryRefreshMigrationJob extends MigrationJob { + + private static final String TAG = Log.tag(DirectoryRefreshMigrationJob.class); + + public static final String KEY = "DirectoryRefreshMigrationJob"; + + DirectoryRefreshMigrationJob() { + this(new Parameters.Builder().build()); + } + + private DirectoryRefreshMigrationJob(@NonNull Parameters parameters) { + super(parameters); + } + + @Override + public boolean isUiBlocking() { + return false; + } + + @Override + public @NonNull String getFactoryKey() { + return KEY; + } + + @Override + public void performMigration() throws IOException { + if (!TextSecurePreferences.isPushRegistered(context) || + !SignalStore.registrationValues().isRegistrationComplete() || + TextSecurePreferences.getLocalUuid(context) == null) + { + Log.w(TAG, "Not registered! Skipping."); + return; + } + + DirectoryHelper.refreshDirectory(context, true); + } + + @Override + boolean shouldRetry(@NonNull Exception e) { + return e instanceof IOException; + } + + public static class Factory implements Job.Factory { + @Override + public @NonNull DirectoryRefreshMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + return new DirectoryRefreshMigrationJob(parameters); + } + } +}