From: John Freed Date: Thu, 14 Oct 2021 13:24:07 +0000 (+0200) Subject: Merge branch master into dbus_updateConfiguration X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/09da3aae62d34de33b73dc53870090c23efe078a?hp=18ad9fbb4ec06b20be9043ae462997b266b8de1e 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 733e3dcc..93afd9a6 100644 --- a/lib/src/main/java/org/asamk/signal/manager/Manager.java +++ b/lib/src/main/java/org/asamk/signal/manager/Manager.java @@ -103,6 +103,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 d2ffaaab..a4121e29 100644 --- a/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java +++ b/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java @@ -344,6 +344,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 55058580..1a0fbfaa 100755 --- a/man/signal-cli-dbus.5.adoc +++ b/man/signal-cli-dbus.5.adoc @@ -529,7 +529,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 -Exceptions: 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 version() -> version:: * version : Version string of signal-cli diff --git a/src/main/java/org/asamk/Signal.java b/src/main/java/org/asamk/Signal.java index 349671b3..28c192a0 100644 --- a/src/main/java/org/asamk/Signal.java +++ b/src/main/java/org/asamk/Signal.java @@ -160,6 +160,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 { @@ -447,5 +451,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 59422e69..a8f071f7 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java @@ -107,7 +107,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 2cf3c813..c6e3273a 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java @@ -696,12 +696,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);