1 package org
.asamk
.signal
;
3 import org
.asamk
.Signal
;
4 import org
.asamk
.signal
.manager
.Manager
;
5 import org
.freedesktop
.dbus
.DBusConnection
;
6 import org
.freedesktop
.dbus
.exceptions
.DBusException
;
7 import org
.whispersystems
.signalservice
.api
.messages
.*;
9 import java
.util
.ArrayList
;
10 import java
.util
.List
;
12 class JsonDbusReceiveMessageHandler
extends JsonReceiveMessageHandler
{
14 private final DBusConnection conn
;
16 private final String objectPath
;
18 JsonDbusReceiveMessageHandler(Manager m
, DBusConnection conn
, final String objectPath
) {
21 this.objectPath
= objectPath
;
24 static void sendReceivedMessageToDbus(SignalServiceEnvelope envelope
, SignalServiceContent content
, DBusConnection conn
, final String objectPath
, Manager m
) {
25 if (envelope
.isReceipt()) {
27 conn
.sendSignal(new Signal
.ReceiptReceived(
29 envelope
.getTimestamp(),
32 } catch (DBusException e
) {
35 } else if (content
!= null && content
.getDataMessage().isPresent()) {
36 SignalServiceDataMessage message
= content
.getDataMessage().get();
38 if (!message
.isEndSession() &&
39 !(message
.getGroupInfo().isPresent() &&
40 message
.getGroupInfo().get().getType() != SignalServiceGroup
.Type
.DELIVER
)) {
41 List
<String
> attachments
= new ArrayList
<>();
42 if (message
.getAttachments().isPresent()) {
43 for (SignalServiceAttachment attachment
: message
.getAttachments().get()) {
44 if (attachment
.isPointer()) {
45 attachments
.add(m
.getAttachmentFile(attachment
.asPointer().getId()).getAbsolutePath());
51 conn
.sendSignal(new Signal
.MessageReceived(
53 message
.getTimestamp(),
55 message
.getGroupInfo().isPresent() ? message
.getGroupInfo().get().getGroupId() : new byte[0],
56 message
.getBody().isPresent() ? message
.getBody().get() : "",
58 } catch (DBusException e
) {
66 public void handleMessage(SignalServiceEnvelope envelope
, SignalServiceContent content
, Throwable exception
) {
67 super.handleMessage(envelope
, content
, exception
);
69 sendReceivedMessageToDbus(envelope
, content
, conn
, objectPath
, m
);