From da4cc7dc6be69491c51d0f414a109b8914d7b291 Mon Sep 17 00:00:00 2001 From: AsamK Date: Sun, 16 Apr 2023 21:17:22 +0200 Subject: [PATCH] Announce support for gift badges if linked device Fixes #1226 --- .../manager/ProvisioningManagerImpl.java | 4 +-- .../signal/manager/config/ServiceConfig.java | 29 ++++++++++--------- .../signal/manager/helper/IdentityHelper.java | 4 +-- .../helper/IncomingMessageHandler.java | 7 +++++ .../signal/manager/storage/SignalAccount.java | 8 +++-- 5 files changed, 31 insertions(+), 21 deletions(-) diff --git a/lib/src/main/java/org/asamk/signal/manager/ProvisioningManagerImpl.java b/lib/src/main/java/org/asamk/signal/manager/ProvisioningManagerImpl.java index 8ae9bb26..544032da 100644 --- a/lib/src/main/java/org/asamk/signal/manager/ProvisioningManagerImpl.java +++ b/lib/src/main/java/org/asamk/signal/manager/ProvisioningManagerImpl.java @@ -41,7 +41,7 @@ import java.nio.channels.OverlappingFileLockException; import java.util.concurrent.TimeoutException; import java.util.function.Consumer; -import static org.asamk.signal.manager.config.ServiceConfig.capabilities; +import static org.asamk.signal.manager.config.ServiceConfig.getCapabilities; class ProvisioningManagerImpl implements ProvisioningManager { @@ -132,7 +132,7 @@ class ProvisioningManagerImpl implements ProvisioningManager { registrationId, pniRegistrationId, encryptedDeviceName, - capabilities)); + getCapabilities(false))); // Create new account with the synced identity var profileKey = ret.getProfileKey() == null ? KeyUtils.createProfileKey() : ret.getProfileKey(); diff --git a/lib/src/main/java/org/asamk/signal/manager/config/ServiceConfig.java b/lib/src/main/java/org/asamk/signal/manager/config/ServiceConfig.java index 36bbdb7e..c56d9e86 100644 --- a/lib/src/main/java/org/asamk/signal/manager/config/ServiceConfig.java +++ b/lib/src/main/java/org/asamk/signal/manager/config/ServiceConfig.java @@ -28,21 +28,7 @@ public class ServiceConfig { private final static KeyStore iasKeyStore; - public static final AccountAttributes.Capabilities capabilities; - static { - capabilities = new AccountAttributes.Capabilities(false, - true, - false, - true, - true, - true, - true, - true, - false, - false, - false); - try { TrustStore contactTrustStore = new IasTrustStore(); @@ -56,6 +42,21 @@ public class ServiceConfig { } } + public static AccountAttributes.Capabilities getCapabilities(boolean isPrimaryDevice) { + final var giftBadges = !isPrimaryDevice; + return new AccountAttributes.Capabilities(false, + true, + false, + true, + true, + true, + true, + true, + giftBadges, + false, + false); + } + public static boolean isSignalClientAvailable() { try { try { diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/IdentityHelper.java b/lib/src/main/java/org/asamk/signal/manager/helper/IdentityHelper.java index df762c91..c9cfaedc 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/IdentityHelper.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/IdentityHelper.java @@ -18,8 +18,6 @@ import java.io.IOException; import java.util.Arrays; import java.util.function.BiFunction; -import static org.asamk.signal.manager.config.ServiceConfig.capabilities; - public class IdentityHelper { private final static Logger logger = LoggerFactory.getLogger(IdentityHelper.class); @@ -75,7 +73,7 @@ public class IdentityHelper { final var recipientId = account.getRecipientResolver().resolveRecipient(serviceId); final var address = account.getRecipientAddressResolver().resolveRecipientAddress(recipientId); - if (capabilities.getUuid()) { + if (account.getAccountCapabilities().getUuid()) { if (serviceId.isUnknown()) { return null; } diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/IncomingMessageHandler.java b/lib/src/main/java/org/asamk/signal/manager/helper/IncomingMessageHandler.java index 3a834a70..4e171326 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/IncomingMessageHandler.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/IncomingMessageHandler.java @@ -817,6 +817,9 @@ public final class IncomingMessageHandler { } } } + if (message.getGiftBadge().isPresent()) { + handleIncomingGiftBadge(message.getGiftBadge().get()); + } if (message.getProfileKey().isPresent()) { handleIncomingProfileKey(message.getProfileKey().get(), source.recipientId()); } @@ -833,6 +836,10 @@ public final class IncomingMessageHandler { return actions; } + private void handleIncomingGiftBadge(final SignalServiceDataMessage.GiftBadge giftBadge) { + // TODO + } + private List handleSignalServiceStoryMessage( SignalServiceStoryMessage message, RecipientId source, boolean ignoreAttachments ) { diff --git a/lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java b/lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java index bd892c5d..5014ab6d 100644 --- a/lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java +++ b/lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java @@ -98,7 +98,7 @@ import java.util.List; import java.util.Optional; import java.util.function.Supplier; -import static org.asamk.signal.manager.config.ServiceConfig.capabilities; +import static org.asamk.signal.manager.config.ServiceConfig.getCapabilities; public class SignalAccount implements Closeable { @@ -1328,13 +1328,17 @@ public class SignalAccount implements Closeable { registrationLock != null ? registrationLock : getRegistrationLock(), getSelfUnidentifiedAccessKey(), isUnrestrictedUnidentifiedAccess(), - capabilities, + getAccountCapabilities(), isDiscoverableByPhoneNumber(), encryptedDeviceName, getLocalPniRegistrationId(), null); // TODO recoveryPassword? } + public AccountAttributes.Capabilities getAccountCapabilities() { + return getCapabilities(isPrimaryDevice()); + } + public ServiceId getAccountId(ServiceIdType serviceIdType) { return serviceIdType.equals(ServiceIdType.ACI) ? aci : pni; } -- 2.50.1