fix defects found in testing

This commit is contained in:
Aidan 2020-11-25 23:19:42 -08:00
parent 60580189ae
commit 85b3346f5d
No known key found for this signature in database
GPG key ID: 327711E983899316
2 changed files with 39 additions and 17 deletions

View file

@ -12,23 +12,21 @@
[whisper.signald])) [whisper.signald]))
(def sockpath "/var/run/signald/signald.sock") (def sockpath "/var/run/signald/signald.sock")
(def user (atom {"username" "" "filename" ""})) (def user (atom {}))
;; TODO: handle multi users (with list ui) ;; TODO: handle multi users (with list ui)
(defn handle-users (defn handle-users
[data] [data]
(let [users (get-in data ["data" "accounts"])] (let [users (get-in data ["data" "accounts"])]
(if (> (count users) 1) (if (> (count users) 1)
(log/info "Alert, multi account not supported yet. picking first on list")) (log/info "Alert, multi account not supported yet. picking first on list"))
(swap! user (first users)))) (reset! user (first users)))
(disassoc-callback-type "account_list"))
(defn -main (defn -main
"packs and shows main window with signald version string" "packs and shows main window with signald version string"
[& args] [& args]
;; TODO: removeme
(add-str-flag (json/read-str "\"loading....\""))
;; paint main chat window ;; paint main chat window
(paint-main) (paint-main)
@ -39,11 +37,17 @@
(assoc-callback-type "linking_error" (fn [_] (assoc-callback-type "linking_error" (fn [_]
(paint-linking nil) (paint-linking nil)
(add-str-flag "Linking returned Error"))) (add-str-flag "Linking returned Error")))
(assoc-callback-type "unexpected_error" (fn [x] (add-str-flag (str "Unexpected error: "
(get-in x ["data" "message"])))))
(assoc-callback-type "contacts_list" (fn [x] (let [contacts (get x "data")]
;; Should we iter in a background thread?
(doseq [contact contacts]
;; TODO: sync with storage
(add-json-contact contact)))))
;; update ui loop ;; prep to read signald
(let [sigd (get-signald-sock sockpath)] (let [sigd (get-signald-sock sockpath)]
(if (nil? sigd) (if (nil? sigd)
;; TODO: change this to call add-json-flag
(add-str-flag "No signald connection.") (add-str-flag "No signald connection.")
;; else, we have connection to signald ;; else, we have connection to signald
@ -56,10 +60,15 @@
(fn [x] (fn [x]
(if (< (count (get-in x ["data" "accounts"])) 1) (if (< (count (get-in x ["data" "accounts"])) 1)
(do (make-link-data-req sigd-input) (do (make-link-data-req sigd-input)
(make-list-accounts-req sigd-input) ;; recur via callback
(handle-users x))))) (make-list-accounts-req sigd-input))
(handle-users x))))
;; log in every time username changes ;; log in every time user state changes
;; another way we could do this is to have a callback triggered on a
;; signald message type of "subscribed"
;; but I thought it would be more efficient to just watch for results
;; from the call to handle-users
(add-watch user :login-manager (add-watch user :login-manager
(fn [key atom old-state new-state] (fn [key atom old-state new-state]
(let [old-user (get old-state "username") (let [old-user (get old-state "username")
@ -76,8 +85,10 @@
;; sub to new account ;; sub to new account
(if (some? new-user) (if (some? new-user)
(make-subscribe-req sigd-input new-user) (do
(make-contact-sync-req sigd-input new-user))))) (make-subscribe-req sigd-input new-user)
(make-contact-sync-req sigd-input new-user)
(make-contact-list-req sigd-input new-user))))))
;; find avail accounts ;; find avail accounts
(make-list-accounts-req sigd-input) (make-list-accounts-req sigd-input)

View file

@ -21,6 +21,10 @@
[callback-token callback] [callback-token callback]
(swap! callback-table assoc callback-token callback)) (swap! callback-table assoc callback-token callback))
(defn disassoc-callback-type
[callback-token]
(swap! callback-table dissoc callback-token))
;; TODO wrap attempt to call callback func in try catch ;; TODO wrap attempt to call callback func in try catch
(defn callback-loop (defn callback-loop
[BufferedReader] [BufferedReader]
@ -40,18 +44,20 @@
(get data "version") " " (get data "version") " "
(get data "branch")))) (get data "branch"))))
;; sends data to signal socket
;; adds a newline
(defn -make-req (defn -make-req
[output-stream data] [output-stream data]
(try (.write output-stream data) (.flush output-stream) (try (.write output-stream (str data "\n")) (.flush output-stream)
(catch Exception e (log/error e "Error sending to signald")))) (catch Exception e (log/error e "Error sending to signald"))))
(defn make-link-data-req (defn make-link-data-req
[output-stream] [output-stream]
(-make-req output-stream "{\"type\": \"link\"}\n")) (-make-req output-stream "{\"type\": \"link\"}"))
(defn make-list-accounts-req (defn make-list-accounts-req
[output-stream] [output-stream]
(-make-req output-stream "{\"type\": \"list_accounts\"}\n")) (-make-req output-stream "{\"type\": \"list_accounts\"}"))
(defn make-subscribe-req (defn make-subscribe-req
[output-stream username] [output-stream username]
@ -70,3 +76,8 @@
(-make-req output-stream (-make-req output-stream
(json/write-str {"type" "sync_contacts" (json/write-str {"type" "sync_contacts"
"username" username}))) "username" username})))
(defn make-contact-list-req
[output-stream username]
(-make-req output-stream
(json/write-str {"type" "list_contacts"
"username" username})))