From: John Freed Date: Sat, 9 Oct 2021 12:08:08 +0000 (+0200) Subject: Merge branch master into dbus_updateConfiguration X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/3c40b11?hp=cadcc6c8ef13b679d6a542b0712aad202d4a64a7 Merge branch master into dbus_updateConfiguration --- diff --git a/lib/src/main/java/org/asamk/signal/manager/Manager.java b/lib/src/main/java/org/asamk/signal/manager/Manager.java index 7a421966..943b5e75 100644 --- a/lib/src/main/java/org/asamk/signal/manager/Manager.java +++ b/lib/src/main/java/org/asamk/signal/manager/Manager.java @@ -105,6 +105,8 @@ public interface Manager extends Closeable { final Boolean linkPreviews ) throws IOException, NotMasterDeviceException; + List getConfiguration() throws IOException, NotMasterDeviceException; + void setProfile( String givenName, String familyName, String about, String aboutEmoji, Optional avatar ) throws IOException; diff --git a/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java b/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java index 0fd1eb33..b8414329 100644 --- a/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java +++ b/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java @@ -347,6 +347,19 @@ public class ManagerImpl implements Manager { syncHelper.sendConfigurationMessage(); } + @Override + public List getConfiguration() throws IOException, NotMasterDeviceException { + if (!account.isMasterDevice()) { + throw new NotMasterDeviceException(); + } + final var configurationStore = account.getConfigurationStore(); + final Boolean readReceipts = configurationStore.getReadReceipts(); + final Boolean unidentifiedDeliveryIndicators = configurationStore.getUnidentifiedDeliveryIndicators(); + final Boolean typingIndicators = configurationStore.getTypingIndicators(); + final Boolean linkPreviews = configurationStore.getLinkPreviews(); + return List.of(readReceipts, unidentifiedDeliveryIndicators, typingIndicators, linkPreviews); + } + /** * @param givenName if null, the previous givenName will be kept * @param familyName if null, the previous familyName will be kept diff --git a/man/signal-cli-dbus.5.adoc b/man/signal-cli-dbus.5.adoc index 8168c421..508a7881 100755 --- a/man/signal-cli-dbus.5.adoc +++ b/man/signal-cli-dbus.5.adoc @@ -29,7 +29,7 @@ method(arg1, arg2, ...) -> return Where is according to DBus specification: -* : Array of ... (comma-separated list) +* : Array of ... (comma-separated list, array:) * (...) : Struct (cannot be sent via `dbus-send`) * : Boolean (false|true) (boolean:) * : Signed 32-bit (int) integer (int32:) @@ -266,7 +266,7 @@ Exceptions: Failure, InvalidNumber getContactName(number) -> name:: * number : Phone number -* name : Contact's name in local storage (from the master device for a linked account, or the one set with setContactName); if not set, contact's profile name is used +* name : Contact's name in local storage (from the primary device for a linked account, or the one set with setContactName); if not set, contact's profile name is used setContactName(number,name<>) -> <>:: * number : Phone number @@ -367,7 +367,27 @@ uploadStickerPack(stickerPackPath) -> url:: * stickerPackPath : Path to the manifest.json file or a zip file in the same directory * url : URL of sticker pack after successful upload -Exception: Failure +Exception: Failure, IOError + +getConfiguration() -> [readReceipts, unidentifiedDeliveryIndicators, typingIndicators, linkPreviews] -> <>:: +* readReceipts : Should Signal send read receipts (true/false). +* unidentifiedDeliveryIndicators : Should Signal show unidentified delivery indicators (true/false). +* typingIndicators : Should Signal send/show typing indicators (true/false). +* linkPreviews : Should Signal generate link previews (true/false). + +Gets an array of four booleans as indicated. Only works from primary device. + +Exceptions: IOError, UserError + +setConfiguration(readReceipts, unidentifiedDeliveryIndicators, typingIndicators, linkPreviews) -> <>:: +* readReceipts : Should Signal send read receipts (true/false). +* unidentifiedDeliveryIndicators : Should Signal show unidentified delivery indicators (true/false). +* typingIndicators : Should Signal send/show typing indicators (true/false). +* linkPreviews : Should Signal generate link previews (true/false). + +Update Signal configurations and sync them to linked devices. Only works from primary device. + +Exceptions: IOError, UserError submitRateLimitChallenge(challenge, captcha) -> <>:: * challenge : The challenge token taken from the proof required error. diff --git a/src/main/java/org/asamk/Signal.java b/src/main/java/org/asamk/Signal.java index 2f81c196..865db815 100644 --- a/src/main/java/org/asamk/Signal.java +++ b/src/main/java/org/asamk/Signal.java @@ -145,6 +145,10 @@ public interface Signal extends DBusInterface { String uploadStickerPack(String stickerPackPath) throws Error.Failure; + void setConfiguration(boolean readReceipts, boolean unidentifiedDeliveryIndicators, boolean typingIndicators, boolean linkPreviews) throws Error.IOError, Error.UserError; + + List getConfiguration(); + void submitRateLimitChallenge(String challenge, String captchaString) throws IOErrorException; class MessageReceived extends DBusSignal { @@ -353,5 +357,19 @@ public interface Signal extends DBusInterface { super(message); } } + + class IOError extends DBusExecutionException { + + public IOError(final String message) { + super(message); + } + } + + class UserError extends DBusExecutionException { + + public UserError(final String message) { + super(message); + } + } } } diff --git a/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java b/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java index 53148c01..226402dd 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java @@ -108,7 +108,17 @@ public class DbusManagerImpl implements Manager { final Boolean typingIndicators, final Boolean linkPreviews ) throws IOException { - throw new UnsupportedOperationException(); + signal.setConfiguration( + readReceipts, + unidentifiedDeliveryIndicators, + typingIndicators, + linkPreviews + ); + } + + @Override + public List getConfiguration() { + return signal.getConfiguration(); } @Override diff --git a/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java b/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java index d0e33a40..41eca5da 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java @@ -667,12 +667,36 @@ public class DbusSignalImpl implements Signal { try { return m.uploadStickerPack(path).toString(); } catch (IOException e) { - throw new Error.Failure("Upload error (maybe image size is too large):" + e.getMessage()); + throw new Error.IOError("Upload error (maybe image size is too large):" + e.getMessage()); } catch (StickerPackInvalidException e) { throw new Error.Failure("Invalid sticker pack: " + e.getMessage()); } } + @Override + public void setConfiguration(boolean readReceipts, boolean unidentifiedDeliveryIndicators, boolean typingIndicators, boolean linkPreviews) { + try { + m.updateConfiguration(readReceipts, unidentifiedDeliveryIndicators, typingIndicators, linkPreviews); + } catch (IOException e) { + throw new Error.IOError("UpdateAccount error: " + e.getMessage()); + } catch (NotMasterDeviceException e) { + throw new Error.UserError("This command doesn't work on linked devices."); + } + } + + @Override + public List getConfiguration() { + List config = new ArrayList<>(4); + try { + config = m.getConfiguration(); + } catch (IOException e) { + throw new Error.IOError("Configuration storage error: " + e.getMessage()); + } catch (NotMasterDeviceException e) { + throw new Error.UserError("This command doesn't work on linked devices."); + } + return config; + } + private static void checkSendMessageResult(long timestamp, SendMessageResult result) throws DBusExecutionException { var error = ErrorUtils.getErrorMessageFromSendMessageResult(result);