kopia lustrzana https://github.com/ryukoposting/Signal-Android
Support syncing dontNotifyIfMuted on GV2Records.
rodzic
b91a2e1450
commit
80a2e1e3cc
|
@ -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()))
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Ładowanie…
Reference in New Issue