X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/a7b414a8703d27a012811f5621ecab28b329351f..a96bd91770880fc53e279f8a0a75e90cd32d078a:/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 24a90662..f50363cb 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java @@ -8,6 +8,7 @@ import org.asamk.signal.manager.groups.GroupId; import org.asamk.signal.manager.groups.GroupInviteLinkUrl; import org.asamk.signal.manager.groups.GroupNotFoundException; import org.asamk.signal.manager.groups.NotAGroupMemberException; +import org.asamk.signal.manager.storage.identities.IdentityInfo; import org.asamk.signal.util.ErrorUtils; import org.freedesktop.dbus.exceptions.DBusExecutionException; import org.whispersystems.libsignal.util.guava.Optional; @@ -103,6 +104,77 @@ public class DbusSignalImpl implements Signal { } } + @Override + public long sendRemoteDeleteMessage( + final long targetSentTimestamp, final String recipient + ) { + var recipients = new ArrayList(1); + recipients.add(recipient); + return sendRemoteDeleteMessage(targetSentTimestamp, recipients); + } + + @Override + public long sendRemoteDeleteMessage( + final long targetSentTimestamp, final List recipients + ) { + try { + final var results = m.sendRemoteDeleteMessage(targetSentTimestamp, recipients); + checkSendMessageResults(results.first(), results.second()); + return results.first(); + } catch (IOException e) { + throw new Error.Failure(e.getMessage()); + } catch (InvalidNumberException e) { + throw new Error.InvalidNumber(e.getMessage()); + } + } + + @Override + public long sendGroupRemoteDeleteMessage( + final long targetSentTimestamp, final byte[] groupId + ) { + try { + final var results = m.sendGroupRemoteDeleteMessage(targetSentTimestamp, GroupId.unknownVersion(groupId)); + checkSendMessageResults(results.first(), results.second()); + return results.first(); + } catch (IOException e) { + throw new Error.Failure(e.getMessage()); + } catch (GroupNotFoundException | NotAGroupMemberException e) { + throw new Error.GroupNotFound(e.getMessage()); + } + } + + @Override + public long sendMessageReaction( + final String emoji, + final boolean remove, + final String targetAuthor, + final long targetSentTimestamp, + final String recipient + ) { + var recipients = new ArrayList(1); + recipients.add(recipient); + return sendMessageReaction(emoji, remove, targetAuthor, targetSentTimestamp, recipients); + } + + @Override + public long sendMessageReaction( + final String emoji, + final boolean remove, + final String targetAuthor, + final long targetSentTimestamp, + final List recipients + ) { + try { + final var results = m.sendMessageReaction(emoji, remove, targetAuthor, targetSentTimestamp, recipients); + checkSendMessageResults(results.first(), results.second()); + return results.first(); + } catch (InvalidNumberException e) { + throw new Error.InvalidNumber(e.getMessage()); + } catch (IOException e) { + throw new Error.Failure(e.getMessage()); + } + } + @Override public long sendNoteToSelfMessage( final String message, final List attachments @@ -145,6 +217,31 @@ public class DbusSignalImpl implements Signal { } } + @Override + public long sendGroupMessageReaction( + final String emoji, + final boolean remove, + final String targetAuthor, + final long targetSentTimestamp, + final byte[] groupId + ) { + try { + final var results = m.sendGroupMessageReaction(emoji, + remove, + targetAuthor, + targetSentTimestamp, + GroupId.unknownVersion(groupId)); + checkSendMessageResults(results.first(), results.second()); + return results.first(); + } catch (IOException e) { + throw new Error.Failure(e.getMessage()); + } catch (InvalidNumberException e) { + throw new Error.InvalidNumber(e.getMessage()); + } catch (GroupNotFoundException | NotAGroupMemberException e) { + throw new Error.GroupNotFound(e.getMessage()); + } + } + // Since contact names might be empty if not defined, also potentially return // the profile name @Override @@ -286,8 +383,11 @@ public class DbusSignalImpl implements Signal { // all numbers the system knows @Override public List listNumbers() { - return Stream.concat(m.getIdentities().stream().map(i -> i.getAddress().getNumber().orNull()), - m.getContacts().stream().map(c -> c.number)) + return Stream.concat(m.getIdentities() + .stream() + .map(IdentityInfo::getRecipientId) + .map(m::resolveSignalServiceAddress) + .map(a -> a.getNumber().orNull()), m.getContacts().stream().map(c -> c.number)) .filter(Objects::nonNull) .distinct() .collect(Collectors.toList()); @@ -305,7 +405,8 @@ public class DbusSignalImpl implements Signal { } // Try profiles if no contact name was found for (var identity : m.getIdentities()) { - final var address = identity.getAddress(); + final var recipientId = identity.getRecipientId(); + final var address = m.resolveSignalServiceAddress(recipientId); var number = address.getNumber().orNull(); if (number != null) { var profile = m.getRecipientProfile(address);