From: John Freed Date: Mon, 4 Oct 2021 06:48:56 +0000 (+0200) Subject: Dbus get/setConfiguration methods X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/8416d4a?hp=26594dd0eed44225d7d4a17571597a81e4e3b58a Dbus get/setConfiguration methods implement: - getConfiguration() -> [readReceipts, unidentifiedDeliveryIndicators, typingIndicators, linkPreviews] -> <>:: - setConfiguration(readReceipts, unidentifiedDeliveryIndicators, typingIndicators, linkPreviews) -> <>:: Update documentation --- 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 e7cd083f..56b28ddf 100755 --- a/man/signal-cli-dbus.5.adoc +++ b/man/signal-cli-dbus.5.adoc @@ -263,7 +263,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 @@ -361,7 +361,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 == Signals diff --git a/src/main/java/org/asamk/Signal.java b/src/main/java/org/asamk/Signal.java index b8800085..cf909fa0 100644 --- a/src/main/java/org/asamk/Signal.java +++ b/src/main/java/org/asamk/Signal.java @@ -141,6 +141,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(); + class MessageReceived extends DBusSignal { private final long timestamp; @@ -317,5 +321,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 3124a5b0..bfd7fde9 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 ab9c89b2..55f99475 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java @@ -1,6 +1,7 @@ package org.asamk.signal.dbus; import org.asamk.Signal; +import org.asamk.Signal.Error; import org.asamk.signal.BaseConfig; import org.asamk.signal.manager.AttachmentInvalidException; import org.asamk.signal.manager.Manager; @@ -683,12 +684,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);