- public void receiveMessages(int timeoutSeconds, boolean returnOnTimeout, ReceiveMessageHandler handler) throws IOException {
- final SignalServiceMessageReceiver messageReceiver = new SignalServiceMessageReceiver(URL, TRUST_STORE, username, password, deviceId, signalingKey, USER_AGENT);
- SignalServiceMessagePipe messagePipe = null;
+ public void retryFailedReceivedMessages(ReceiveMessageHandler handler, boolean ignoreAttachments) {
+ final File cachePath = new File(getMessageCachePath());
+ if (!cachePath.exists()) {
+ return;
+ }
+ for (final File dir : cachePath.listFiles()) {
+ if (!dir.isDirectory()) {
+ continue;
+ }
+
+ for (final File fileEntry : dir.listFiles()) {
+ if (!fileEntry.isFile()) {
+ continue;
+ }
+ SignalServiceEnvelope envelope;
+ try {
+ envelope = loadEnvelope(fileEntry);
+ if (envelope == null) {
+ continue;
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ continue;
+ }
+ SignalServiceContent content = null;
+ if (!envelope.isReceipt()) {
+ try {
+ content = decryptMessage(envelope);
+ } catch (Exception e) {
+ continue;
+ }
+ handleMessage(envelope, content, ignoreAttachments);
+ }
+ save();
+ handler.handleMessage(envelope, content, null);
+ try {
+ Files.delete(fileEntry.toPath());
+ } catch (IOException e) {
+ System.out.println("Failed to delete cached message file “" + fileEntry + "”: " + e.getMessage());
+ }
+ }
+ }
+ }
+
+ public void receiveMessages(long timeout, TimeUnit unit, boolean returnOnTimeout, boolean ignoreAttachments, ReceiveMessageHandler handler) throws IOException {
+ retryFailedReceivedMessages(handler, ignoreAttachments);
+ final SignalServiceMessageReceiver messageReceiver = new SignalServiceMessageReceiver(serviceUrls, username, password, deviceId, signalingKey, USER_AGENT);