summaryrefslogtreecommitdiffhomepage
path: root/net/signel.org
diff options
context:
space:
mode:
authorjao <jao@gnu.org>2020-02-23 17:17:30 +0000
committerjao <jao@gnu.org>2020-02-23 17:17:30 +0000
commit7af28751f0088e2ba99b70e2a7d291309ed50919 (patch)
tree9b3909d4a204aed0aa8b95348864e016b7c1137a /net/signel.org
parentc4f1c41cd6e4d32561f224b885898126f25607d7 (diff)
downloadelibs-7af28751f0088e2ba99b70e2a7d291309ed50919.tar.gz
elibs-7af28751f0088e2ba99b70e2a7d291309ed50919.tar.bz2
signel: fixes for receipts reception
Diffstat (limited to 'net/signel.org')
-rw-r--r--net/signel.org37
1 files changed, 28 insertions, 9 deletions
diff --git a/net/signel.org b/net/signel.org
index 274ad5b..7a85397 100644
--- a/net/signel.org
+++ b/net/signel.org
@@ -146,9 +146,24 @@ received or read; e.g.:
#+end_src
A bit confusingly, that delivery notification has a ~receiptMessage~,
-but its ~isReceipt~ flag is set to ~false~. Oh well, i'm sure there's a
-reason, but for now, we're going to ignore that flag.
+but its ~isReceipt~ flag is set to ~false~. At other times, we get
+~isReceipt~ but no ~receiptMessage~:
+#+begin_src json :tangle no
+{
+ "envelope": {
+ "source": "+346xxxxxxxx",
+ "sourceDevice": 1,
+ "relay": null,
+ "timestamp": 1582476539281,
+ "isReceipt": true,
+ "dataMessage": null,
+ "syncMessage": null,
+ "callMessage": null,
+ "receiptMessage": null
+ }
+}
+#+end_src
It is very easy to parse JSON in emacs and extract signal-cli's
envelopes:
@@ -186,9 +201,12 @@ boring) to get into its components:
(defun signel--msg-receipt (msg)
(cdr (assoc 'receiptMessage msg)))
+(defun signel--msg-is-receipt (msg)
+ (cdr (assoc 'isReceipt msg)))
+
(defun signel--msg-receipt-timestamp (msg)
- (when-let (secs (cdr (assoc 'when (signel--msg-receipt msg))))
- (format-time-string "%H:%M" secs)))
+ (when-let (msecs (cdr (assoc 'when (signel--msg-receipt msg))))
+ (format-time-string "%H:%M" (/ msecs 1000))))
(defun signel--msg-is-delivery (msg)
(when-let ((receipt (signel--msg-receipt msg)))
@@ -221,7 +239,7 @@ Or, in elisp:
(stamp (signel--msg-timestamp msg))
(data (signel--msg-data msg))
(rec-stamp (signel--msg-receipt-timestamp msg)))
- (when (and source (or data rec-stamp))
+ (when source
(signel--update-chat-buffer source data stamp rec-stamp msg)))))
#+end_src
@@ -231,7 +249,7 @@ reasonable implementation, which i just copied:
#+begin_src emacs-lisp
(defun signel--ordinary-insertion-filter (proc string)
- (when (buffer-live-p (process-buffer proc))
+ (when (and proc (buffer-live-p (process-buffer proc)))
(with-current-buffer (process-buffer proc)
(let ((moving (= (point) (process-mark proc))))
(save-excursion
@@ -307,10 +325,11 @@ buffer:
data
"\n")
(fill-region p (point)))
- (let ((is-delivery (signel--msg-is-delivery msg))
+ (let ((is-delivery (or (signel--msg-is-delivery msg)
+ (signel--msg-is-receipt msg)))
(is-read (signel--msg-is-read msg)))
- (when rec-stamp
- (insert "[" rec-stamp "] "
+ (when (or rec-stamp stamp)
+ (insert "[" (or rec-stamp stamp) "] "
(if is-read "(read)" "(delivered)")
"\n"))))
(insert signel-prompt))