]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java
Update codestyle
[signal-cli] / src / main / java / org / asamk / signal / dbus / DbusSignalImpl.java
1 package org.asamk.signal.dbus;
2
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;
14
15 import java.io.IOException;
16 import java.util.ArrayList;
17 import java.util.Collections;
18 import java.util.List;
19
20 public class DbusSignalImpl implements Signal {
21
22 private final Manager m;
23
24 public DbusSignalImpl(final Manager m) {
25 this.m = m;
26 }
27
28 @Override
29 public boolean isRemote() {
30 return false;
31 }
32
33 @Override
34 public String getObjectPath() {
35 return null;
36 }
37
38 @Override
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);
43 }
44
45 private static void checkSendMessageResults(long timestamp, List<SendMessageResult> results) throws DBusExecutionException {
46 List<String> errors = ErrorUtils.getErrorMessagesFromSendMessageResults(results);
47 if (errors.size() == 0) {
48 return;
49 }
50
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');
56 }
57
58 throw new Error.Failure(message.toString());
59 }
60
61 @Override
62 public long sendMessage(final String message, final List<String> attachments, final List<String> recipients) {
63 try {
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());
73 }
74 }
75
76 @Override
77 public void sendEndSessionMessage(final List<String> recipients) {
78 try {
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());
85 }
86 }
87
88 @Override
89 public long sendGroupMessage(final String message, final List<String> attachments, final byte[] groupId) {
90 try {
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());
100 }
101 }
102
103 @Override
104 public String getContactName(final String number) {
105 try {
106 return m.getContactName(number);
107 } catch (InvalidNumberException e) {
108 throw new Error.InvalidNumber(e.getMessage());
109 }
110 }
111
112 @Override
113 public void setContactName(final String number, final String name) {
114 try {
115 m.setContactName(number, name);
116 } catch (InvalidNumberException e) {
117 throw new Error.InvalidNumber(e.getMessage());
118 }
119 }
120
121 @Override
122 public void setContactBlocked(final String number, final boolean blocked) {
123 try {
124 m.setContactBlocked(number, blocked);
125 } catch (InvalidNumberException e) {
126 throw new Error.InvalidNumber(e.getMessage());
127 }
128 }
129
130 @Override
131 public void setGroupBlocked(final byte[] groupId, final boolean blocked) {
132 try {
133 m.setGroupBlocked(groupId, blocked);
134 } catch (GroupNotFoundException e) {
135 throw new Error.GroupNotFound(e.getMessage());
136 }
137 }
138
139 @Override
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);
145 }
146 return ids;
147 }
148
149 @Override
150 public String getGroupName(final byte[] groupId) {
151 GroupInfo group = m.getGroup(groupId);
152 if (group == null) {
153 return "";
154 } else {
155 return group.name;
156 }
157 }
158
159 @Override
160 public List<String> getGroupMembers(final byte[] groupId) {
161 GroupInfo group = m.getGroup(groupId);
162 if (group == null) {
163 return Collections.emptyList();
164 } else {
165 return new ArrayList<>(group.getMembersE164());
166 }
167 }
168
169 @Override
170 public byte[] updateGroup(final byte[] groupId, final String name, final List<String> members, final String avatar) {
171 try {
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());
183 }
184 }
185
186 @Override
187 public boolean isRegistered() {
188 return true;
189 }
190 }