1 package org
.asamk
.signal
.dbus
;
3 import org
.asamk
.Signal
;
4 import org
.asamk
.signal
.manager
.AttachmentInvalidException
;
5 import org
.asamk
.signal
.manager
.GroupNotFoundException
;
6 import org
.asamk
.signal
.manager
.Manager
;
7 import org
.asamk
.signal
.manager
.NotAGroupMemberException
;
8 import org
.asamk
.signal
.storage
.groups
.GroupInfo
;
9 import org
.asamk
.signal
.util
.ErrorUtils
;
10 import org
.freedesktop
.dbus
.exceptions
.DBusExecutionException
;
11 import org
.whispersystems
.libsignal
.util
.Pair
;
12 import org
.whispersystems
.signalservice
.api
.messages
.SendMessageResult
;
13 import org
.whispersystems
.signalservice
.api
.util
.InvalidNumberException
;
15 import java
.io
.IOException
;
16 import java
.util
.ArrayList
;
17 import java
.util
.Collections
;
18 import java
.util
.List
;
20 public class DbusSignalImpl
implements Signal
{
22 private final Manager m
;
24 public DbusSignalImpl(final Manager m
) {
29 public boolean isRemote() {
34 public String
getObjectPath() {
39 public long sendMessage(final String message
, final List
<String
> attachments
, final String recipient
) {
40 List
<String
> recipients
= new ArrayList
<>(1);
41 recipients
.add(recipient
);
42 return sendMessage(message
, attachments
, recipients
);
45 private static void checkSendMessageResults(long timestamp
, List
<SendMessageResult
> results
) throws DBusExecutionException
{
46 List
<String
> errors
= ErrorUtils
.getErrorMessagesFromSendMessageResults(results
);
47 if (errors
.size() == 0) {
51 StringBuilder message
= new StringBuilder();
52 message
.append(timestamp
).append('\n');
53 message
.append("Failed to send (some) messages:\n");
54 for (String error
: errors
) {
55 message
.append(error
).append('\n');
58 throw new Error
.Failure(message
.toString());
62 public long sendMessage(final String message
, final List
<String
> attachments
, final List
<String
> recipients
) {
64 final Pair
<Long
, List
<SendMessageResult
>> results
= m
.sendMessage(message
, attachments
, recipients
);
65 checkSendMessageResults(results
.first(), results
.second());
66 return results
.first();
67 } catch (InvalidNumberException e
) {
68 throw new Error
.InvalidNumber(e
.getMessage());
69 } catch (AttachmentInvalidException e
) {
70 throw new Error
.AttachmentInvalid(e
.getMessage());
71 } catch (IOException e
) {
72 throw new Error
.Failure(e
.getMessage());
77 public void sendEndSessionMessage(final List
<String
> recipients
) {
79 final Pair
<Long
, List
<SendMessageResult
>> results
= m
.sendEndSessionMessage(recipients
);
80 checkSendMessageResults(results
.first(), results
.second());
81 } catch (IOException e
) {
82 throw new Error
.Failure(e
.getMessage());
83 } catch (InvalidNumberException e
) {
84 throw new Error
.InvalidNumber(e
.getMessage());
89 public long sendGroupMessage(final String message
, final List
<String
> attachments
, final byte[] groupId
) {
91 Pair
<Long
, List
<SendMessageResult
>> results
= m
.sendGroupMessage(message
, attachments
, groupId
);
92 checkSendMessageResults(results
.first(), results
.second());
93 return results
.first();
94 } catch (IOException e
) {
95 throw new Error
.Failure(e
.getMessage());
96 } catch (GroupNotFoundException
| NotAGroupMemberException e
) {
97 throw new Error
.GroupNotFound(e
.getMessage());
98 } catch (AttachmentInvalidException e
) {
99 throw new Error
.AttachmentInvalid(e
.getMessage());
104 public String
getContactName(final String number
) {
106 return m
.getContactName(number
);
107 } catch (InvalidNumberException e
) {
108 throw new Error
.InvalidNumber(e
.getMessage());
113 public void setContactName(final String number
, final String name
) {
115 m
.setContactName(number
, name
);
116 } catch (InvalidNumberException e
) {
117 throw new Error
.InvalidNumber(e
.getMessage());
122 public void setContactBlocked(final String number
, final boolean blocked
) {
124 m
.setContactBlocked(number
, blocked
);
125 } catch (InvalidNumberException e
) {
126 throw new Error
.InvalidNumber(e
.getMessage());
131 public void setGroupBlocked(final byte[] groupId
, final boolean blocked
) {
133 m
.setGroupBlocked(groupId
, blocked
);
134 } catch (GroupNotFoundException e
) {
135 throw new Error
.GroupNotFound(e
.getMessage());
140 public List
<byte[]> getGroupIds() {
141 List
<GroupInfo
> groups
= m
.getGroups();
142 List
<byte[]> ids
= new ArrayList
<>(groups
.size());
143 for (GroupInfo group
: groups
) {
144 ids
.add(group
.groupId
);
150 public String
getGroupName(final byte[] groupId
) {
151 GroupInfo group
= m
.getGroup(groupId
);
160 public List
<String
> getGroupMembers(final byte[] groupId
) {
161 GroupInfo group
= m
.getGroup(groupId
);
163 return Collections
.emptyList();
165 return new ArrayList
<>(group
.getMembersE164());
170 public byte[] updateGroup(final byte[] groupId
, final String name
, final List
<String
> members
, final String avatar
) {
172 final Pair
<byte[], List
<SendMessageResult
>> results
= m
.updateGroup(groupId
, name
, members
, avatar
);
173 checkSendMessageResults(0, results
.second());
174 return results
.first();
175 } catch (IOException e
) {
176 throw new Error
.Failure(e
.getMessage());
177 } catch (GroupNotFoundException
| NotAGroupMemberException e
) {
178 throw new Error
.GroupNotFound(e
.getMessage());
179 } catch (InvalidNumberException e
) {
180 throw new Error
.InvalidNumber(e
.getMessage());
181 } catch (AttachmentInvalidException e
) {
182 throw new Error
.AttachmentInvalid(e
.getMessage());
187 public boolean isRegistered() {