mirror of
				https://github.com/oxen-io/session-android.git
				synced 2025-10-30 23:09:20 +00:00 
			
		
		
		
	Do not unnecessarily refresh known-unregistered users during migration.
This commit is contained in:
		| @@ -96,12 +96,15 @@ public final class GroupsV1MigrationUtil { | ||||
|           throw new InvalidMigrationStateException(); | ||||
|         } | ||||
|  | ||||
|         RecipientUtil.ensureUuidsAreAvailable(context, groupRecipient.getParticipants()); | ||||
|         groupRecipient = groupRecipient.fresh(); | ||||
|  | ||||
|         List<Recipient> registeredMembers = RecipientUtil.getEligibleForSending(groupRecipient.getParticipants()); | ||||
|         List<Recipient> possibleMembers   = forced ? getMigratableManualMigrationMembers(registeredMembers) | ||||
|                                                    : getMigratableAutoMigrationMembers(registeredMembers); | ||||
|  | ||||
|         if (RecipientUtil.ensureUuidsAreAvailable(context, registeredMembers)) { | ||||
|           Log.i(TAG, "Newly-discovered UUIDs. Getting fresh recipients."); | ||||
|           registeredMembers = Stream.of(registeredMembers).map(Recipient::fresh).toList(); | ||||
|         } | ||||
|  | ||||
|         List<Recipient> possibleMembers = forced ? getMigratableManualMigrationMembers(registeredMembers) | ||||
|                                                  : getMigratableAutoMigrationMembers(registeredMembers); | ||||
|  | ||||
|         if (!forced && possibleMembers.size() != registeredMembers.size()) { | ||||
|           Log.w(TAG, "Not allowed to invite or leave registered users behind in an auto-migration! Skipping."); | ||||
|   | ||||
| @@ -61,6 +61,11 @@ public class GroupV1MigrationJob extends BaseJob { | ||||
|   } | ||||
|  | ||||
|   public static void enqueuePossibleAutoMigrate(@NonNull RecipientId recipientId) { | ||||
|     if (!FeatureFlags.groupsV1MigrationJob()) { | ||||
|       Log.w(TAG, "Migration job is disabled."); | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|     SignalExecutors.BOUNDED.execute(() -> { | ||||
|       if (Recipient.resolved(recipientId).isPushV1Group()) { | ||||
|         ApplicationDependencies.getJobManager().add(new GroupV1MigrationJob(recipientId)); | ||||
| @@ -69,6 +74,11 @@ public class GroupV1MigrationJob extends BaseJob { | ||||
|   } | ||||
|  | ||||
|   public static void enqueueRoutineMigrationsIfNecessary(@NonNull Application application) { | ||||
|     if (!FeatureFlags.groupsV1MigrationJob()) { | ||||
|       Log.w(TAG, "Migration job is disabled."); | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|     if (!SignalStore.registrationValues().isRegistrationComplete() || | ||||
|         !TextSecurePreferences.isPushRegistered(application)       || | ||||
|         TextSecurePreferences.getLocalUuid(application) == null) | ||||
| @@ -82,12 +92,15 @@ public class GroupV1MigrationJob extends BaseJob { | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|     long timeSinceRefresh = System.currentTimeMillis() - SignalStore.misc().getLastProfileRefreshTime(); | ||||
|     long timeSinceRefresh = System.currentTimeMillis() - SignalStore.misc().getLastGv1RoutineMigrationTime(); | ||||
|  | ||||
|     if (timeSinceRefresh < REFRESH_INTERVAL) { | ||||
|       Log.i(TAG, "Too soon to refresh. Did the last refresh " + timeSinceRefresh + " ms ago."); | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|     SignalStore.misc().setLastGv1RoutineMigrationTime(System.currentTimeMillis()); | ||||
|  | ||||
|     SignalExecutors.BOUNDED.execute(() -> { | ||||
|       JobManager         jobManager   = ApplicationDependencies.getJobManager(); | ||||
|       List<ThreadRecord> threads      = DatabaseFactory.getThreadDatabase(application).getRecentV1Groups(ROUTINE_LIMIT); | ||||
|   | ||||
| @@ -93,7 +93,7 @@ public class RecipientUtil { | ||||
|                  .toList(); | ||||
|   } | ||||
|  | ||||
|   public static void ensureUuidsAreAvailable(@NonNull Context context, @NonNull Collection<Recipient> recipients) | ||||
|   public static boolean ensureUuidsAreAvailable(@NonNull Context context, @NonNull Collection<Recipient> recipients) | ||||
|       throws IOException | ||||
|   { | ||||
|     List<Recipient> recipientsWithoutUuids = Stream.of(recipients) | ||||
| @@ -103,6 +103,9 @@ public class RecipientUtil { | ||||
|  | ||||
|     if (recipientsWithoutUuids.size() > 0) { | ||||
|       DirectoryHelper.refreshDirectoryFor(context, recipientsWithoutUuids, false); | ||||
|       return true; | ||||
|     } else { | ||||
|       return false; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   | ||||
| @@ -64,6 +64,7 @@ public final class FeatureFlags { | ||||
|   private static final String GV1_AUTO_MIGRATE             = "android.groupsV1Migration.auto.4"; | ||||
|   private static final String GV1_MANUAL_MIGRATE           = "android.groupsV1Migration.manual"; | ||||
|   private static final String GV1_FORCED_MIGRATE           = "android.groupsV1Migration.forced"; | ||||
|   private static final String GV1_MIGRATION_JOB            = "android.groupsV1Migration.job"; | ||||
|   private static final String SEND_VIEWED_RECEIPTS         = "android.sendViewedReceipts"; | ||||
|  | ||||
|   /** | ||||
| @@ -81,6 +82,7 @@ public final class FeatureFlags { | ||||
|       DONATE_MEGAPHONE, | ||||
|       VIEWED_RECEIPTS, | ||||
|       GV1_AUTO_MIGRATE, | ||||
|       GV1_MIGRATION_JOB, | ||||
|       GV1_MANUAL_MIGRATE, | ||||
|       GV1_FORCED_MIGRATE, | ||||
|       GROUP_CALLING, | ||||
| @@ -107,7 +109,8 @@ public final class FeatureFlags { | ||||
|   private static final Set<String> HOT_SWAPPABLE = SetUtil.newHashSet( | ||||
|       VERIFY_V2, | ||||
|       CLIENT_EXPIRATION, | ||||
|       GROUP_CALLING | ||||
|       GROUP_CALLING, | ||||
|       GV1_MIGRATION_JOB | ||||
|   ); | ||||
|  | ||||
|   /** | ||||
| @@ -238,6 +241,11 @@ public final class FeatureFlags { | ||||
|     return getBoolean(GV1_AUTO_MIGRATE, false); | ||||
|   } | ||||
|  | ||||
|   /** Whether or not we should run the job to proactively migrate groups. */ | ||||
|   public static boolean groupsV1MigrationJob() { | ||||
|     return getBoolean(GV1_MIGRATION_JOB, false); | ||||
|   } | ||||
|  | ||||
|   /** Whether or not manual migration from GV1->GV2 is enabled. */ | ||||
|   public static boolean groupsV1ManualMigration() { | ||||
|     return getBoolean(GV1_MANUAL_MIGRATE, false) && groupsV1AutoMigration(); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Greyson Parrelli
					Greyson Parrelli