X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/a9f1944636534d293f3bde3e1a2cce00eef69d32..1bbfa74b3f9807404d10df18ca8265e216fb0f14:/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java diff --git a/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java b/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java index a4b1a48b..a5f28c67 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java @@ -21,6 +21,7 @@ import org.asamk.signal.manager.api.Message; import org.asamk.signal.manager.api.NotAGroupMemberException; import org.asamk.signal.manager.api.NotPrimaryDeviceException; import org.asamk.signal.manager.api.PendingAdminApprovalException; +import org.asamk.signal.manager.api.RateLimitException; import org.asamk.signal.manager.api.RecipientAddress; import org.asamk.signal.manager.api.RecipientIdentifier; import org.asamk.signal.manager.api.SendMessageResult; @@ -31,6 +32,7 @@ import org.asamk.signal.manager.api.UnregisteredRecipientException; import org.asamk.signal.manager.api.UpdateGroup; import org.asamk.signal.manager.api.UpdateProfile; import org.asamk.signal.manager.api.UserStatus; +import org.asamk.signal.util.DateUtils; import org.asamk.signal.util.SendMessageResultUtils; import org.freedesktop.dbus.DBusPath; import org.freedesktop.dbus.connections.impl.DBusConnection; @@ -349,26 +351,16 @@ public class DbusSignalImpl implements Signal { public void sendReadReceipt( final String recipient, final List messageIds ) throws Error.Failure, Error.UntrustedIdentity { - try { - final var results = m.sendReadReceipt(getSingleRecipientIdentifier(recipient, m.getSelfNumber()), - messageIds); - checkSendMessageResults(results); - } catch (IOException e) { - throw new Error.Failure(e.getMessage()); - } + final var results = m.sendReadReceipt(getSingleRecipientIdentifier(recipient, m.getSelfNumber()), messageIds); + checkSendMessageResults(results); } @Override public void sendViewedReceipt( final String recipient, final List messageIds ) throws Error.Failure, Error.UntrustedIdentity { - try { - final var results = m.sendViewedReceipt(getSingleRecipientIdentifier(recipient, m.getSelfNumber()), - messageIds); - checkSendMessageResults(results); - } catch (IOException e) { - throw new Error.Failure(e.getMessage()); - } + final var results = m.sendViewedReceipt(getSingleRecipientIdentifier(recipient, m.getSelfNumber()), messageIds); + checkSendMessageResults(results); } @Override @@ -530,8 +522,6 @@ public class DbusSignalImpl implements Signal { m.setContactName(getSingleRecipientIdentifier(number, m.getSelfNumber()), name, ""); } catch (NotPrimaryDeviceException e) { throw new Error.Failure("This command doesn't work on linked devices."); - } catch (IOException e) { - throw new Error.Failure("Contact is not registered."); } catch (UnregisteredRecipientException e) { throw new Error.UntrustedIdentity(e.getSender().getIdentifier() + " is not registered."); } @@ -562,6 +552,7 @@ public class DbusSignalImpl implements Signal { } @Override + @Deprecated public void setGroupBlocked(final byte[] groupId, final boolean blocked) { try { m.setGroupsBlocked(List.of(getGroupId(groupId)), blocked); @@ -575,6 +566,7 @@ public class DbusSignalImpl implements Signal { } @Override + @Deprecated public List getGroupIds() { var groups = m.getGroups(); return groups.stream().map(g -> g.groupId().serialize()).toList(); @@ -597,6 +589,7 @@ public class DbusSignalImpl implements Signal { } @Override + @Deprecated public String getGroupName(final byte[] groupId) { var group = m.getGroup(getGroupId(groupId)); if (group == null || group.title() == null) { @@ -607,6 +600,7 @@ public class DbusSignalImpl implements Signal { } @Override + @Deprecated public List getGroupMembers(final byte[] groupId) { var group = m.getGroup(getGroupId(groupId)); if (group == null) { @@ -621,11 +615,16 @@ public class DbusSignalImpl implements Signal { public byte[] createGroup( final String name, final List members, final String avatar ) throws Error.AttachmentInvalid, Error.Failure, Error.InvalidNumber { - return updateGroup(new byte[0], name, members, avatar); + return updateGroupInternal(new byte[0], name, members, avatar); } @Override + @Deprecated public byte[] updateGroup(byte[] groupId, String name, List members, String avatar) { + return updateGroupInternal(groupId, name, members, avatar); + } + + public byte[] updateGroupInternal(byte[] groupId, String name, List members, String avatar) { try { groupId = nullIfEmpty(groupId); name = nullIfEmpty(name); @@ -660,6 +659,7 @@ public class DbusSignalImpl implements Signal { } @Override + @Deprecated public boolean isRegistered() { return true; } @@ -681,6 +681,10 @@ public class DbusSignalImpl implements Signal { registered = m.getUserStatus(new HashSet<>(numbers)); } catch (IOException e) { throw new Error.Failure(e.getMessage()); + } catch (RateLimitException e) { + throw new Error.Failure(e.getMessage() + + ", retry at " + + DateUtils.formatTimestamp(e.getNextAttemptTimestamp())); } return numbers.stream().map(number -> registered.get(number).uuid() != null).toList(); @@ -776,6 +780,7 @@ public class DbusSignalImpl implements Signal { } @Override + @Deprecated public void quitGroup(final byte[] groupId) { var group = getGroupId(groupId); try { @@ -815,6 +820,7 @@ public class DbusSignalImpl implements Signal { } @Override + @Deprecated public boolean isGroupBlocked(final byte[] groupId) { var group = m.getGroup(getGroupId(groupId)); if (group == null) { @@ -825,6 +831,7 @@ public class DbusSignalImpl implements Signal { } @Override + @Deprecated public boolean isMember(final byte[] groupId) { var group = m.getGroup(getGroupId(groupId)); if (group == null) { @@ -893,7 +900,7 @@ public class DbusSignalImpl implements Signal { } var errors = SendMessageResultUtils.getErrorMessagesFromSendMessageResults(results); - if (errors.size() == 0 || errors.size() < results.size()) { + if (errors.isEmpty() || errors.size() < results.size()) { return; } @@ -1032,7 +1039,7 @@ public class DbusSignalImpl implements Signal { connection.exportObject(object); logger.debug("Exported dbus object: " + object.getObjectPath()); } catch (DBusException e) { - e.printStackTrace(); + logger.warn("Failed to export dbus object (" + object.getObjectPath() + "): " + e.getMessage()); } } @@ -1100,7 +1107,8 @@ public class DbusSignalImpl implements Signal { @Override public String getObjectPath() { - return getIdentityObjectPath(objectPath, identity.recipient().getLegacyIdentifier()); + return getIdentityObjectPath(objectPath, + identity.recipient().getLegacyIdentifier() + "_" + identity.recipient().getIdentifier()); } @Override @@ -1231,8 +1239,6 @@ public class DbusSignalImpl implements Signal { Optional.ofNullable(unidentifiedDeliveryIndicators), Optional.ofNullable(typingIndicators), Optional.ofNullable(linkPreviews))); - } catch (IOException e) { - throw new Error.Failure("UpdateAccount error: " + e.getMessage()); } catch (NotPrimaryDeviceException e) { throw new Error.Failure("This command doesn't work on linked devices."); }