fix defects found in testing
This commit is contained in:
parent
60580189ae
commit
85b3346f5d
2 changed files with 39 additions and 17 deletions
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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})))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue