Support syncing dontNotifyIfMuted on GV2Records.

fork-5.53.8
Greyson Parrelli 2022-02-09 10:03:31 -05:00 zatwierdzone przez GitHub
rodzic b91a2e1450
commit 80a2e1e3cc
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
5 zmienionych plików z 39 dodań i 17 usunięć

Wyświetl plik

@ -899,7 +899,7 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) :
fun applyStorageSyncGroupV2Update(update: StorageRecordUpdate<SignalGroupV2Record>) { fun applyStorageSyncGroupV2Update(update: StorageRecordUpdate<SignalGroupV2Record>) {
val values = getValuesForStorageGroupV2(update.new, false) val values = getValuesForStorageGroupV2(update.new, false)
val updateCount = writableDatabase.update(TABLE_NAME, values, STORAGE_SERVICE_ID + " = ?", arrayOf(Base64.encodeBytes(update.old.id.raw))) val updateCount = writableDatabase.update(TABLE_NAME, values, "$STORAGE_SERVICE_ID = ?", arrayOf(Base64.encodeBytes(update.old.id.raw)))
if (updateCount < 1) { if (updateCount < 1) {
throw AssertionError("Had an update, but it didn't match any rows!") throw AssertionError("Had an update, but it didn't match any rows!")
} }
@ -1386,7 +1386,9 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) :
put(MENTION_SETTING, mentionSetting.id) put(MENTION_SETTING, mentionSetting.id)
} }
if (update(id, values)) { if (update(id, values)) {
rotateStorageId(id)
Recipient.live(id).refresh() Recipient.live(id).refresh()
StorageSyncHelper.scheduleSyncForDataChange()
} }
} }
@ -2763,6 +2765,7 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) :
put(BLOCKED, if (groupV2.isBlocked) "1" else "0") put(BLOCKED, if (groupV2.isBlocked) "1" else "0")
put(MUTE_UNTIL, groupV2.muteUntil) put(MUTE_UNTIL, groupV2.muteUntil)
put(STORAGE_SERVICE_ID, Base64.encodeBytes(groupV2.id.raw)) put(STORAGE_SERVICE_ID, Base64.encodeBytes(groupV2.id.raw))
put(MENTION_SETTING, if (groupV2.notifyForMentionsWhenMuted()) MentionSetting.ALWAYS_NOTIFY.id else MentionSetting.DO_NOT_NOTIFY.id)
if (groupV2.hasUnknownFields()) { if (groupV2.hasUnknownFields()) {
put(STORAGE_PROTO, Base64.encodeBytes(groupV2.serializeUnknownFields())) put(STORAGE_PROTO, Base64.encodeBytes(groupV2.serializeUnknownFields()))

Wyświetl plik

@ -66,15 +66,16 @@ public final class GroupV2RecordProcessor extends DefaultStorageRecordProcessor<
@Override @Override
@NonNull SignalGroupV2Record merge(@NonNull SignalGroupV2Record remote, @NonNull SignalGroupV2Record local, @NonNull StorageKeyGenerator keyGenerator) { @NonNull SignalGroupV2Record merge(@NonNull SignalGroupV2Record remote, @NonNull SignalGroupV2Record local, @NonNull StorageKeyGenerator keyGenerator) {
byte[] unknownFields = remote.serializeUnknownFields(); byte[] unknownFields = remote.serializeUnknownFields();
boolean blocked = remote.isBlocked(); boolean blocked = remote.isBlocked();
boolean profileSharing = remote.isProfileSharingEnabled(); boolean profileSharing = remote.isProfileSharingEnabled();
boolean archived = remote.isArchived(); boolean archived = remote.isArchived();
boolean forcedUnread = remote.isForcedUnread(); boolean forcedUnread = remote.isForcedUnread();
long muteUntil = remote.getMuteUntil(); long muteUntil = remote.getMuteUntil();
boolean notifyForMentionsWhenMuted = remote.notifyForMentionsWhenMuted();
boolean matchesRemote = doParamsMatch(remote, unknownFields, blocked, profileSharing, archived, forcedUnread, muteUntil); boolean matchesRemote = doParamsMatch(remote, unknownFields, blocked, profileSharing, archived, forcedUnread, muteUntil, notifyForMentionsWhenMuted);
boolean matchesLocal = doParamsMatch(local, unknownFields, blocked, profileSharing, archived, forcedUnread, muteUntil); boolean matchesLocal = doParamsMatch(local, unknownFields, blocked, profileSharing, archived, forcedUnread, muteUntil, notifyForMentionsWhenMuted);
if (matchesRemote) { if (matchesRemote) {
return remote; return remote;
@ -87,6 +88,7 @@ public final class GroupV2RecordProcessor extends DefaultStorageRecordProcessor<
.setArchived(archived) .setArchived(archived)
.setForcedUnread(forcedUnread) .setForcedUnread(forcedUnread)
.setMuteUntil(muteUntil) .setMuteUntil(muteUntil)
.setNotifyForMentionsWhenMuted(notifyForMentionsWhenMuted)
.build(); .build();
} }
} }
@ -133,13 +135,15 @@ public final class GroupV2RecordProcessor extends DefaultStorageRecordProcessor<
boolean profileSharing, boolean profileSharing,
boolean archived, boolean archived,
boolean forcedUnread, boolean forcedUnread,
long muteUntil) long muteUntil,
boolean notifyForMentionsWhenMuted)
{ {
return Arrays.equals(unknownFields, group.serializeUnknownFields()) && return Arrays.equals(unknownFields, group.serializeUnknownFields()) &&
blocked == group.isBlocked() && blocked == group.isBlocked() &&
profileSharing == group.isProfileSharingEnabled() && profileSharing == group.isProfileSharingEnabled() &&
archived == group.isArchived() && archived == group.isArchived() &&
forcedUnread == group.isForcedUnread() && forcedUnread == group.isForcedUnread() &&
muteUntil == group.getMuteUntil(); muteUntil == group.getMuteUntil() &&
notifyForMentionsWhenMuted == group.notifyForMentionsWhenMuted();
} }
} }

Wyświetl plik

@ -152,6 +152,7 @@ public final class StorageSyncModels {
.setArchived(recipient.getSyncExtras().isArchived()) .setArchived(recipient.getSyncExtras().isArchived())
.setForcedUnread(recipient.getSyncExtras().isForcedUnread()) .setForcedUnread(recipient.getSyncExtras().isForcedUnread())
.setMuteUntil(recipient.getMuteUntil()) .setMuteUntil(recipient.getMuteUntil())
.setNotifyForMentionsWhenMuted(recipient.getMentionSetting() == RecipientDatabase.MentionSetting.ALWAYS_NOTIFY)
.build(); .build();
} }

Wyświetl plik

@ -74,6 +74,10 @@ public final class SignalGroupV2Record implements SignalRecord {
diff.add("MuteUntil"); diff.add("MuteUntil");
} }
if (!Objects.equals(this.notifyForMentionsWhenMuted(), that.notifyForMentionsWhenMuted())) {
diff.add("NotifyForMentionsWhenMuted");
}
if (!Objects.equals(this.hasUnknownFields(), that.hasUnknownFields())) { if (!Objects.equals(this.hasUnknownFields(), that.hasUnknownFields())) {
diff.add("UnknownFields"); diff.add("UnknownFields");
} }
@ -124,6 +128,10 @@ public final class SignalGroupV2Record implements SignalRecord {
return proto.getMutedUntilTimestamp(); return proto.getMutedUntilTimestamp();
} }
public boolean notifyForMentionsWhenMuted() {
return !proto.getDontNotifyForMentionsIfMuted();
}
GroupV2Record toProto() { GroupV2Record toProto() {
return proto; return proto;
@ -188,6 +196,11 @@ public final class SignalGroupV2Record implements SignalRecord {
return this; return this;
} }
public Builder setNotifyForMentionsWhenMuted(boolean value) {
builder.setDontNotifyForMentionsIfMuted(!value);
return this;
}
private static GroupV2Record.Builder parseUnknowns(byte[] serializedUnknowns) { private static GroupV2Record.Builder parseUnknowns(byte[] serializedUnknowns) {
try { try {
return GroupV2Record.parseFrom(serializedUnknowns).toBuilder(); return GroupV2Record.parseFrom(serializedUnknowns).toBuilder();

Wyświetl plik

@ -94,12 +94,13 @@ message GroupV1Record {
} }
message GroupV2Record { message GroupV2Record {
bytes masterKey = 1; bytes masterKey = 1;
bool blocked = 2; bool blocked = 2;
bool whitelisted = 3; bool whitelisted = 3;
bool archived = 4; bool archived = 4;
bool markedUnread = 5; bool markedUnread = 5;
uint64 mutedUntilTimestamp = 6; uint64 mutedUntilTimestamp = 6;
bool dontNotifyForMentionsIfMuted = 7;
} }
message Payments { message Payments {