From 45f3618fb9cde3031f106582f2e8d6d317397a48 Mon Sep 17 00:00:00 2001 From: Stavros Korokithakis Date: Fri, 7 Dec 2018 16:49:14 +0200 Subject: Add optional non-blocking --- signald/main.py | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/signald/main.py b/signald/main.py index 2c07d39..2c12322 100644 --- a/signald/main.py +++ b/signald/main.py @@ -36,13 +36,16 @@ class Signal: s.connect(self.socket_path) return s - def _send_command(self, payload: dict): + def _send_command(self, payload: dict, block: bool = False): s = self._get_socket() msg_id = self._get_id() payload["id"] = msg_id s.recv(1024) # Flush the buffer. s.send(json.dumps(payload).encode("utf8") + b"\n") + if not block: + return + response = s.recv(4 * 1024) for line in response.split(b"\n"): if msg_id.encode("utf8") not in line: @@ -57,10 +60,20 @@ class Signal: raise ValueError("unexpected error occurred") def register(self, voice=False): + """ + Register the given number. + + voice: Whether to receive a voice call or an SMS for verification. + """ payload = {"type": "register", "username": self.username, "voice": voice} self._send_command(payload) def verify(self, code: str): + """ + Verify the given number by entering the code you received. + + code: The code Signal sent you. + """ payload = {"type": "verify", "username": self.username, "code": code} self._send_command(payload) @@ -99,6 +112,14 @@ class Signal: ], ) - def send_message(self, recipient: str, message: str) -> None: + def send_message(self, recipient: str, message: str, block: bool = True) -> None: + """ + Send a message. + + recipient: The recipient's phone number, in E.123 format. + message: The message to send. + block: Whether to block while sending. If you choose not to block, you won't get an exception if there + are any errors. + """ payload = {"type": "send", "username": self.username, "recipientNumber": recipient, "messageBody": message} - self._send_command(payload) + self._send_command(payload, block) -- cgit v1.2.3-54-g00ecf