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
.freedesktop
.dbus
.exceptions
.DBusExecutionException
;
10 import org
.whispersystems
.signalservice
.api
.crypto
.UntrustedIdentityException
;
11 import org
.whispersystems
.signalservice
.api
.push
.exceptions
.EncapsulatedExceptions
;
12 import org
.whispersystems
.signalservice
.api
.push
.exceptions
.NetworkFailureException
;
13 import org
.whispersystems
.signalservice
.api
.push
.exceptions
.UnregisteredUserException
;
14 import org
.whispersystems
.signalservice
.api
.util
.InvalidNumberException
;
16 import java
.io
.IOException
;
17 import java
.util
.ArrayList
;
18 import java
.util
.Collections
;
19 import java
.util
.List
;
21 public class DbusSignalImpl
implements Signal
{
23 private final Manager m
;
25 public DbusSignalImpl(final Manager m
) {
30 public boolean isRemote() {
35 public String
getObjectPath() {
40 public long sendMessage(final String message
, final List
<String
> attachments
, final String recipient
) {
41 List
<String
> recipients
= new ArrayList
<>(1);
42 recipients
.add(recipient
);
43 return sendMessage(message
, attachments
, recipients
);
46 private static DBusExecutionException
convertEncapsulatedExceptions(EncapsulatedExceptions e
) {
47 if (e
.getNetworkExceptions().size() + e
.getUnregisteredUserExceptions().size() + e
.getUntrustedIdentityExceptions().size() == 1) {
48 if (e
.getNetworkExceptions().size() == 1) {
49 NetworkFailureException n
= e
.getNetworkExceptions().get(0);
50 return new Error
.Failure("Network failure for \"" + n
.getE164number() + "\": " + n
.getMessage());
51 } else if (e
.getUnregisteredUserExceptions().size() == 1) {
52 UnregisteredUserException n
= e
.getUnregisteredUserExceptions().get(0);
53 return new Error
.UnregisteredUser("Unregistered user \"" + n
.getE164Number() + "\": " + n
.getMessage());
54 } else if (e
.getUntrustedIdentityExceptions().size() == 1) {
55 UntrustedIdentityException n
= e
.getUntrustedIdentityExceptions().get(0);
56 return new Error
.UntrustedIdentity("Untrusted Identity for \"" + n
.getIdentifier() + "\": " + n
.getMessage());
60 StringBuilder message
= new StringBuilder();
61 message
.append("Failed to send (some) messages:").append('\n');
62 for (NetworkFailureException n
: e
.getNetworkExceptions()) {
63 message
.append("Network failure for \"").append(n
.getE164number()).append("\": ").append(n
.getMessage()).append('\n');
65 for (UnregisteredUserException n
: e
.getUnregisteredUserExceptions()) {
66 message
.append("Unregistered user \"").append(n
.getE164Number()).append("\": ").append(n
.getMessage()).append('\n');
68 for (UntrustedIdentityException n
: e
.getUntrustedIdentityExceptions()) {
69 message
.append("Untrusted Identity for \"").append(n
.getIdentifier()).append("\": ").append(n
.getMessage()).append('\n');
72 return new Error
.Failure(message
.toString());
76 public long sendMessage(final String message
, final List
<String
> attachments
, final List
<String
> recipients
) {
78 return m
.sendMessage(message
, attachments
, recipients
);
79 } catch (EncapsulatedExceptions e
) {
80 throw convertEncapsulatedExceptions(e
);
81 } catch (InvalidNumberException e
) {
82 throw new Error
.InvalidNumber(e
.getMessage());
83 } catch (AttachmentInvalidException e
) {
84 throw new Error
.AttachmentInvalid(e
.getMessage());
85 } catch (IOException e
) {
86 throw new Error
.Failure(e
.getMessage());
91 public void sendEndSessionMessage(final List
<String
> recipients
) {
93 m
.sendEndSessionMessage(recipients
);
94 } catch (IOException e
) {
95 throw new Error
.Failure(e
.getMessage());
96 } catch (EncapsulatedExceptions e
) {
97 throw convertEncapsulatedExceptions(e
);
98 } catch (InvalidNumberException e
) {
99 throw new Error
.InvalidNumber(e
.getMessage());
104 public long sendGroupMessage(final String message
, final List
<String
> attachments
, final byte[] groupId
) {
106 return m
.sendGroupMessage(message
, attachments
, groupId
);
107 } catch (IOException e
) {
108 throw new Error
.Failure(e
.getMessage());
109 } catch (EncapsulatedExceptions e
) {
110 throw convertEncapsulatedExceptions(e
);
111 } catch (GroupNotFoundException
| NotAGroupMemberException e
) {
112 throw new Error
.GroupNotFound(e
.getMessage());
113 } catch (AttachmentInvalidException e
) {
114 throw new Error
.AttachmentInvalid(e
.getMessage());
119 public String
getContactName(final String number
) {
121 return m
.getContactName(number
);
122 } catch (InvalidNumberException e
) {
123 throw new Error
.InvalidNumber(e
.getMessage());
128 public void setContactName(final String number
, final String name
) {
130 m
.setContactName(number
, name
);
131 } catch (InvalidNumberException e
) {
132 throw new Error
.InvalidNumber(e
.getMessage());
137 public void setContactBlocked(final String number
, final boolean blocked
) {
139 m
.setContactBlocked(number
, blocked
);
140 } catch (InvalidNumberException e
) {
141 throw new Error
.InvalidNumber(e
.getMessage());
146 public void setGroupBlocked(final byte[] groupId
, final boolean blocked
) {
148 m
.setGroupBlocked(groupId
, blocked
);
149 } catch (GroupNotFoundException e
) {
150 throw new Error
.GroupNotFound(e
.getMessage());
155 public List
<byte[]> getGroupIds() {
156 List
<GroupInfo
> groups
= m
.getGroups();
157 List
<byte[]> ids
= new ArrayList
<>(groups
.size());
158 for (GroupInfo group
: groups
) {
159 ids
.add(group
.groupId
);
165 public String
getGroupName(final byte[] groupId
) {
166 GroupInfo group
= m
.getGroup(groupId
);
175 public List
<String
> getGroupMembers(final byte[] groupId
) {
176 GroupInfo group
= m
.getGroup(groupId
);
178 return Collections
.emptyList();
180 return new ArrayList
<>(group
.getMembersE164());
185 public byte[] updateGroup(final byte[] groupId
, final String name
, final List
<String
> members
, final String avatar
) {
187 return m
.updateGroup(groupId
, name
, members
, avatar
);
188 } catch (IOException e
) {
189 throw new Error
.Failure(e
.getMessage());
190 } catch (EncapsulatedExceptions e
) {
191 throw convertEncapsulatedExceptions(e
);
192 } catch (GroupNotFoundException
| NotAGroupMemberException e
) {
193 throw new Error
.GroupNotFound(e
.getMessage());
194 } catch (InvalidNumberException e
) {
195 throw new Error
.InvalidNumber(e
.getMessage());
196 } catch (AttachmentInvalidException e
) {
197 throw new Error
.AttachmentInvalid(e
.getMessage());
202 public boolean isRegistered() {