dbusjava = "com.github.hypfvieh:dbus-java-transport-native-unixsocket:5.0.0"
slf4j-api = { module = "org.slf4j:slf4j-api", version.ref = "slf4j" }
slf4j-jul = { module = "org.slf4j:jul-to-slf4j", version.ref = "slf4j" }
-logback = "ch.qos.logback:logback-classic:1.5.15"
+logback = "ch.qos.logback:logback-classic:1.5.16"
-signalservice = "com.github.turasa:signal-service-java:2.15.3_unofficial_114"
-sqlite = "org.xerial:sqlite-jdbc:3.47.1.0"
+signalservice = "com.github.turasa:signal-service-java:2.15.3_unofficial_115"
+sqlite = "org.xerial:sqlite-jdbc:3.47.2.0"
hikari = "com.zaxxer:HikariCP:6.2.1"
junit-jupiter = "org.junit.jupiter:junit-jupiter:5.11.4"
junit-launcher = "org.junit.platform:junit-platform-launcher:1.11.4"
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.whispersystems.signalservice.api.push.UsernameLinkComponents;
+import org.whispersystems.signalservice.api.storage.IAPSubscriptionId;
import org.whispersystems.signalservice.api.storage.SignalAccountRecord;
import org.whispersystems.signalservice.api.storage.StorageId;
import org.whispersystems.signalservice.api.util.UuidUtil;
import java.util.Arrays;
import java.util.Optional;
+import okio.ByteString;
+
import static org.asamk.signal.manager.util.Utils.firstNonEmpty;
-import static org.asamk.signal.manager.util.Utils.firstNonNull;
+import static org.whispersystems.signalservice.api.storage.AccountRecordExtensionsKt.safeSetBackupsSubscriber;
+import static org.whispersystems.signalservice.api.storage.AccountRecordExtensionsKt.safeSetPayments;
+import static org.whispersystems.signalservice.api.storage.AccountRecordExtensionsKt.safeSetSubscriber;
/**
* Processes {@link SignalAccountRecord}s.
familyName = local.familyName;
}
+ final var payments = remote.payments != null && remote.payments.entropy.size() > 0
+ ? remote.payments
+ : local.payments;
+
+ final ByteString donationSubscriberId;
+ final String donationSubscriberCurrencyCode;
+
+ if (remote.subscriberId.size() > 0) {
+ donationSubscriberId = remote.subscriberId;
+ donationSubscriberCurrencyCode = remote.subscriberCurrencyCode;
+ } else {
+ donationSubscriberId = local.subscriberId;
+ donationSubscriberCurrencyCode = local.subscriberCurrencyCode;
+ }
+
+ final ByteString backupsSubscriberId;
+ final IAPSubscriptionId backupsPurchaseToken;
+
+ final var remoteBackupSubscriberData = remote.backupSubscriberData;
+ if (remoteBackupSubscriberData != null && remoteBackupSubscriberData.subscriberId.size() > 0) {
+ backupsSubscriberId = remoteBackupSubscriberData.subscriberId;
+ backupsPurchaseToken = IAPSubscriptionId.Companion.from(remoteBackupSubscriberData);
+ } else {
+ backupsSubscriberId = local.backupSubscriberData != null
+ ? local.backupSubscriberData.subscriberId
+ : ByteString.EMPTY;
+ backupsPurchaseToken = IAPSubscriptionId.Companion.from(local.backupSubscriberData);
+ }
+
final var mergedBuilder = SignalAccountRecord.Companion.newBuilder(remote.unknownFields().toByteArray())
.givenName(givenName)
.familyName(familyName)
.preferredReactionEmoji(firstNonEmpty(remote.preferredReactionEmoji, local.preferredReactionEmoji))
.subscriberId(firstNonEmpty(remote.subscriberId, local.subscriberId))
.subscriberCurrencyCode(firstNonEmpty(remote.subscriberCurrencyCode, local.subscriberCurrencyCode))
- .backupsSubscriberId(firstNonEmpty(remote.backupsSubscriberId, local.backupsSubscriberId))
- .backupsSubscriberCurrencyCode(firstNonEmpty(remote.backupsSubscriberCurrencyCode,
- local.backupsSubscriberCurrencyCode))
.displayBadgesOnProfile(remote.displayBadgesOnProfile)
.subscriptionManuallyCancelled(remote.subscriptionManuallyCancelled)
.keepMutedChatsArchived(remote.keepMutedChatsArchived)
.username(remote.username)
.usernameLink(remote.usernameLink)
.e164(account.isPrimaryDevice() ? local.e164 : remote.e164);
- if (firstNonNull(remote.payments, local.payments) != null) {
- mergedBuilder.payments(firstNonNull(remote.payments, local.payments));
- }
+ safeSetPayments(mergedBuilder,
+ payments != null && payments.enabled,
+ payments == null ? null : payments.entropy.toByteArray());
+ safeSetSubscriber(mergedBuilder, donationSubscriberId, donationSubscriberCurrencyCode);
+ safeSetBackupsSubscriber(mergedBuilder, backupsSubscriberId, backupsPurchaseToken);
+
final var merged = mergedBuilder.build();
final var matchesRemote = doProtosMatch(merged, remote);