-
-
Notifications
You must be signed in to change notification settings - Fork 6k
/
SenderKeyDistributionSendJobRecipientMigration.java
67 lines (54 loc) · 2.31 KB
/
SenderKeyDistributionSendJobRecipientMigration.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package org.thoughtcrime.securesms.jobmanager.migrations;
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.database.GroupDatabase;
import org.thoughtcrime.securesms.database.GroupDatabase.GroupRecord;
import org.thoughtcrime.securesms.database.SignalDatabase;
import org.thoughtcrime.securesms.groups.GroupId;
import org.thoughtcrime.securesms.jobmanager.Data;
import org.thoughtcrime.securesms.jobmanager.JobMigration;
import org.thoughtcrime.securesms.jobs.FailingJob;
import java.util.Optional;
/**
* We removed the messageId property from the job data and replaced it with a serialized envelope,
* so we need to take jobs that referenced an ID and replace it with the envelope instead.
*/
public class SenderKeyDistributionSendJobRecipientMigration extends JobMigration {
private static final String TAG = Log.tag(SenderKeyDistributionSendJobRecipientMigration.class);
private final GroupDatabase groupDatabase;
public SenderKeyDistributionSendJobRecipientMigration() {
this(SignalDatabase.groups());
}
@VisibleForTesting
SenderKeyDistributionSendJobRecipientMigration(GroupDatabase groupDatabase) {
super(9);
this.groupDatabase = groupDatabase;
}
@Override
protected @NonNull JobData migrate(@NonNull JobData jobData) {
if ("SenderKeyDistributionSendJob".equals(jobData.getFactoryKey())) {
return migrateJob(jobData, groupDatabase);
} else {
return jobData;
}
}
private static @NonNull JobData migrateJob(@NonNull JobData jobData, @NonNull GroupDatabase groupDatabase) {
Data data = jobData.getData();
if (data.hasString("group_id")) {
GroupId groupId = GroupId.pushOrThrow(data.getStringAsBlob("group_id"));
Optional<GroupRecord> group = groupDatabase.getGroup(groupId);
if (group.isPresent()) {
return jobData.withData(data.buildUpon()
.putString("thread_recipient_id", group.get().getRecipientId().serialize())
.build());
} else {
return jobData.withFactoryKey(FailingJob.KEY);
}
} else if (!data.hasString("thread_recipient_id")) {
return jobData.withFactoryKey(FailingJob.KEY);
} else {
return jobData;
}
}
}