kopia lustrzana https://github.com/ryukoposting/Signal-Android
Be more direct with AccountRecord updates.
rodzic
37596320e8
commit
1fb3290038
|
@ -928,13 +928,13 @@ public class RecipientDatabase extends Database {
|
||||||
recipient.live().refresh();
|
recipient.live().refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void applyStorageSyncAccountUpdate(@NonNull StorageId storageId, SignalAccountRecord update) {
|
public void applyStorageSyncAccountUpdate(@NonNull StorageRecordUpdate<SignalAccountRecord> update) {
|
||||||
SQLiteDatabase db = databaseHelper.getWritableDatabase();
|
SQLiteDatabase db = databaseHelper.getWritableDatabase();
|
||||||
|
|
||||||
ContentValues values = new ContentValues();
|
ContentValues values = new ContentValues();
|
||||||
ProfileName profileName = ProfileName.fromParts(update.getGivenName().orNull(), update.getFamilyName().orNull());
|
ProfileName profileName = ProfileName.fromParts(update.getNew().getGivenName().orNull(), update.getNew().getFamilyName().orNull());
|
||||||
Optional<ProfileKey> localKey = ProfileKeyUtil.profileKeyOptional(Recipient.self().getProfileKey());
|
Optional<ProfileKey> localKey = ProfileKeyUtil.profileKeyOptional(update.getOld().getProfileKey().orNull());
|
||||||
Optional<ProfileKey> remoteKey = ProfileKeyUtil.profileKeyOptional(update.getProfileKey().orNull());
|
Optional<ProfileKey> remoteKey = ProfileKeyUtil.profileKeyOptional(update.getNew().getProfileKey().orNull());
|
||||||
String profileKey = remoteKey.or(localKey).transform(ProfileKey::serialize).transform(Base64::encodeBytes).orNull();
|
String profileKey = remoteKey.or(localKey).transform(ProfileKey::serialize).transform(Base64::encodeBytes).orNull();
|
||||||
|
|
||||||
if (!remoteKey.isPresent()) {
|
if (!remoteKey.isPresent()) {
|
||||||
|
@ -945,15 +945,15 @@ public class RecipientDatabase extends Database {
|
||||||
values.put(PROFILE_FAMILY_NAME, profileName.getFamilyName());
|
values.put(PROFILE_FAMILY_NAME, profileName.getFamilyName());
|
||||||
values.put(PROFILE_JOINED_NAME, profileName.toString());
|
values.put(PROFILE_JOINED_NAME, profileName.toString());
|
||||||
values.put(PROFILE_KEY, profileKey);
|
values.put(PROFILE_KEY, profileKey);
|
||||||
values.put(STORAGE_SERVICE_ID, Base64.encodeBytes(update.getId().getRaw()));
|
values.put(STORAGE_SERVICE_ID, Base64.encodeBytes(update.getNew().getId().getRaw()));
|
||||||
|
|
||||||
if (update.hasUnknownFields()) {
|
if (update.getNew().hasUnknownFields()) {
|
||||||
values.put(STORAGE_PROTO, Base64.encodeBytes(update.serializeUnknownFields()));
|
values.put(STORAGE_PROTO, Base64.encodeBytes(Objects.requireNonNull(update.getNew().serializeUnknownFields())));
|
||||||
} else {
|
} else {
|
||||||
values.putNull(STORAGE_PROTO);
|
values.putNull(STORAGE_PROTO);
|
||||||
}
|
}
|
||||||
|
|
||||||
int updateCount = db.update(TABLE_NAME, values, STORAGE_SERVICE_ID + " = ?", new String[]{Base64.encodeBytes(storageId.getRaw())});
|
int updateCount = db.update(TABLE_NAME, values, STORAGE_SERVICE_ID + " = ?", new String[]{Base64.encodeBytes(update.getOld().getId().getRaw())});
|
||||||
if (updateCount < 1) {
|
if (updateCount < 1) {
|
||||||
throw new AssertionError("Account update didn't match any rows!");
|
throw new AssertionError("Account update didn't match any rows!");
|
||||||
}
|
}
|
||||||
|
@ -962,7 +962,7 @@ public class RecipientDatabase extends Database {
|
||||||
ApplicationDependencies.getJobManager().add(new RefreshAttributesJob());
|
ApplicationDependencies.getJobManager().add(new RefreshAttributesJob());
|
||||||
}
|
}
|
||||||
|
|
||||||
DatabaseFactory.getThreadDatabase(context).applyStorageSyncUpdate(Recipient.self().getId(), update);
|
DatabaseFactory.getThreadDatabase(context).applyStorageSyncUpdate(Recipient.self().getId(), update.getNew());
|
||||||
|
|
||||||
Recipient.self().live().refresh();
|
Recipient.self().live().refresh();
|
||||||
}
|
}
|
||||||
|
@ -1460,7 +1460,6 @@ public class RecipientDatabase extends Database {
|
||||||
ContentValues values = new ContentValues(1);
|
ContentValues values = new ContentValues(1);
|
||||||
values.put(UNIDENTIFIED_ACCESS_MODE, unidentifiedAccessMode.getMode());
|
values.put(UNIDENTIFIED_ACCESS_MODE, unidentifiedAccessMode.getMode());
|
||||||
if (update(id, values)) {
|
if (update(id, values)) {
|
||||||
rotateStorageId(id);
|
|
||||||
Recipient.live(id).refresh();
|
Recipient.live(id).refresh();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -276,6 +276,8 @@ public class StorageSyncJob extends BaseJob {
|
||||||
|
|
||||||
db.beginTransaction();
|
db.beginTransaction();
|
||||||
try {
|
try {
|
||||||
|
self = Recipient.self().fresh();
|
||||||
|
|
||||||
new ContactRecordProcessor(context, self).process(remoteContacts, StorageSyncHelper.KEY_GENERATOR);
|
new ContactRecordProcessor(context, self).process(remoteContacts, StorageSyncHelper.KEY_GENERATOR);
|
||||||
new GroupV1RecordProcessor(context).process(remoteGv1, StorageSyncHelper.KEY_GENERATOR);
|
new GroupV1RecordProcessor(context).process(remoteGv1, StorageSyncHelper.KEY_GENERATOR);
|
||||||
new GroupV2RecordProcessor(context).process(remoteGv2, StorageSyncHelper.KEY_GENERATOR);
|
new GroupV2RecordProcessor(context).process(remoteGv2, StorageSyncHelper.KEY_GENERATOR);
|
||||||
|
|
|
@ -127,7 +127,7 @@ public class AccountRecordProcessor extends DefaultStorageRecordProcessor<Signal
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void updateLocal(@NonNull StorageRecordUpdate<SignalAccountRecord> update) {
|
void updateLocal(@NonNull StorageRecordUpdate<SignalAccountRecord> update) {
|
||||||
StorageSyncHelper.applyAccountStorageSyncUpdates(context, self, update.getNew(), true);
|
StorageSyncHelper.applyAccountStorageSyncUpdates(context, self, update, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -139,20 +139,25 @@ public final class StorageSyncHelper {
|
||||||
return SignalStorageRecord.forAccount(account);
|
return SignalStorageRecord.forAccount(account);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void applyAccountStorageSyncUpdates(@NonNull Context context, @NonNull Recipient self, @NonNull SignalAccountRecord update, boolean fetchProfile) {
|
public static void applyAccountStorageSyncUpdates(@NonNull Context context, @NonNull Recipient self, @NonNull SignalAccountRecord updatedRecord, boolean fetchProfile) {
|
||||||
DatabaseFactory.getRecipientDatabase(context).applyStorageSyncAccountUpdate(StorageId.forAccount(self.getStorageServiceId()), update);
|
SignalAccountRecord localRecord = buildAccountRecord(context, self).getAccount().get();
|
||||||
|
applyAccountStorageSyncUpdates(context, self, new StorageRecordUpdate<>(localRecord, updatedRecord), fetchProfile);
|
||||||
|
}
|
||||||
|
|
||||||
TextSecurePreferences.setReadReceiptsEnabled(context, update.isReadReceiptsEnabled());
|
public static void applyAccountStorageSyncUpdates(@NonNull Context context, @NonNull Recipient self, @NonNull StorageRecordUpdate<SignalAccountRecord> update, boolean fetchProfile) {
|
||||||
TextSecurePreferences.setTypingIndicatorsEnabled(context, update.isTypingIndicatorsEnabled());
|
DatabaseFactory.getRecipientDatabase(context).applyStorageSyncAccountUpdate(update);
|
||||||
TextSecurePreferences.setShowUnidentifiedDeliveryIndicatorsEnabled(context, update.isSealedSenderIndicatorsEnabled());
|
|
||||||
SignalStore.settings().setLinkPreviewsEnabled(update.isLinkPreviewsEnabled());
|
|
||||||
SignalStore.phoneNumberPrivacy().setPhoneNumberListingMode(update.isPhoneNumberUnlisted() ? PhoneNumberPrivacyValues.PhoneNumberListingMode.UNLISTED : PhoneNumberPrivacyValues.PhoneNumberListingMode.LISTED);
|
|
||||||
SignalStore.phoneNumberPrivacy().setPhoneNumberSharingMode(StorageSyncModels.remoteToLocalPhoneNumberSharingMode(update.getPhoneNumberSharingMode()));
|
|
||||||
SignalStore.settings().setPreferSystemContactPhotos(update.isPreferContactAvatars());
|
|
||||||
SignalStore.paymentsValues().setEnabledAndEntropy(update.getPayments().isEnabled(), Entropy.fromBytes(update.getPayments().getEntropy().orNull()));
|
|
||||||
|
|
||||||
if (fetchProfile && update.getAvatarUrlPath().isPresent()) {
|
TextSecurePreferences.setReadReceiptsEnabled(context, update.getNew().isReadReceiptsEnabled());
|
||||||
ApplicationDependencies.getJobManager().add(new RetrieveProfileAvatarJob(self, update.getAvatarUrlPath().get()));
|
TextSecurePreferences.setTypingIndicatorsEnabled(context, update.getNew().isTypingIndicatorsEnabled());
|
||||||
|
TextSecurePreferences.setShowUnidentifiedDeliveryIndicatorsEnabled(context, update.getNew().isSealedSenderIndicatorsEnabled());
|
||||||
|
SignalStore.settings().setLinkPreviewsEnabled(update.getNew().isLinkPreviewsEnabled());
|
||||||
|
SignalStore.phoneNumberPrivacy().setPhoneNumberListingMode(update.getNew().isPhoneNumberUnlisted() ? PhoneNumberPrivacyValues.PhoneNumberListingMode.UNLISTED : PhoneNumberPrivacyValues.PhoneNumberListingMode.LISTED);
|
||||||
|
SignalStore.phoneNumberPrivacy().setPhoneNumberSharingMode(StorageSyncModels.remoteToLocalPhoneNumberSharingMode(update.getNew().getPhoneNumberSharingMode()));
|
||||||
|
SignalStore.settings().setPreferSystemContactPhotos(update.getNew().isPreferContactAvatars());
|
||||||
|
SignalStore.paymentsValues().setEnabledAndEntropy(update.getNew().getPayments().isEnabled(), Entropy.fromBytes(update.getNew().getPayments().getEntropy().orNull()));
|
||||||
|
|
||||||
|
if (fetchProfile && update.getNew().getAvatarUrlPath().isPresent()) {
|
||||||
|
ApplicationDependencies.getJobManager().add(new RetrieveProfileAvatarJob(self, update.getNew().getAvatarUrlPath().get()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue