aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStavros Korokithakis <hi@stavros.io>2018-12-06 17:14:15 +0200
committerStavros Korokithakis <hi@stavros.io>2018-12-06 17:14:15 +0200
commitebcdbfa987cfd0434a0915e22905a471d7fbd31b (patch)
treef8ebd1b5f7a43b09f7a5c2a43c36cd070d9cc24c
parent4770bd2f277eac1a11ae3cfbe5757f5ce67b1982 (diff)
downloadpysignald-ebcdbfa987cfd0434a0915e22905a471d7fbd31b.tar.gz
pysignald-ebcdbfa987cfd0434a0915e22905a471d7fbd31b.zip
Add message type
-rw-r--r--signald/main.py23
-rw-r--r--signald/types.py18
-rw-r--r--tests/test_signald.py9
3 files changed, 44 insertions, 6 deletions
diff --git a/signald/main.py b/signald/main.py
index 61ae1a5..2c07d39 100644
--- a/signald/main.py
+++ b/signald/main.py
@@ -3,7 +3,7 @@ import random
import socket
from typing import Iterator, List # noqa
-from .types import Message
+from .types import Attachment, Message
def readlines(s: socket.socket) -> Iterator[bytes]:
@@ -78,7 +78,26 @@ class Signal:
if message.get("type") != "message":
continue
- yield message
+ message = message["data"]
+
+ yield Message(
+ username=message["username"],
+ source=message["source"],
+ message=message["dataMessage"]["message"],
+ source_device=message["sourceDevice"],
+ timestamp=message["dataMessage"]["timestamp"],
+ timestamp_iso=message["timestampISO"],
+ expiration_secs=message["dataMessage"]["expiresInSeconds"],
+ attachments=[
+ Attachment(
+ content_type=attachment["contentType"],
+ id=attachment["id"],
+ size=attachment["size"],
+ stored_filename=attachment["storedFilename"],
+ )
+ for attachment in message["dataMessage"]["attachments"]
+ ],
+ )
def send_message(self, recipient: str, message: str) -> None:
payload = {"type": "send", "username": self.username, "recipientNumber": recipient, "messageBody": message}
diff --git a/signald/types.py b/signald/types.py
index 814b967..75cdcbd 100644
--- a/signald/types.py
+++ b/signald/types.py
@@ -2,5 +2,21 @@ import attr
@attr.s
+class Attachment:
+ content_type = attr.ib(type=str)
+ id = attr.ib(type=str)
+ size = attr.ib(type=int)
+ stored_filename = attr.ib(type=str)
+
+
+@attr.s
class Message:
- pass
+ username = attr.ib(type=str)
+ source = attr.ib(type=str)
+ message = attr.ib(type=str)
+ source_device = attr.ib(type=int, default=0)
+ timestamp = attr.ib(type=int, default=None)
+ timestamp_iso = attr.ib(type=str, default=None)
+ expiration_secs = attr.ib(type=int, default=0)
+ attachments = attr.ib(type=list, default=[])
+ quote = attr.ib(type=str, default=None)
diff --git a/tests/test_signald.py b/tests/test_signald.py
index 8824272..801192b 100644
--- a/tests/test_signald.py
+++ b/tests/test_signald.py
@@ -1,5 +1,8 @@
-from signald import Signal
-
-
def test_signal():
+ from signald import Signal
+ from signald.types import Message, Attachment
+
+ # Smoke tests.
Signal("+1234567890")
+ Message("+1234567890", "+1234567891", "Hello!")
+ Attachment("application/json", "123", 123, "/var/123")