summaryrefslogtreecommitdiffhomepage
path: root/net/signel.org
diff options
context:
space:
mode:
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))