Handle only last requested command
This commit is contained in:
parent
2c8cfa8212
commit
c08acdf24a
|
@ -27,4 +27,6 @@
|
||||||
[:chats chat-id :command-input :command])
|
[:chats chat-id :command-input :command])
|
||||||
(defn chat-command-content-path [chat-id]
|
(defn chat-command-content-path [chat-id]
|
||||||
[:chats chat-id :command-input :content])
|
[:chats chat-id :command-input :content])
|
||||||
|
(defn chat-command-request-path [chat-id]
|
||||||
|
[:chats chat-id :command-request])
|
||||||
(def new-group-path [:new-group])
|
(def new-group-path [:new-group])
|
||||||
|
|
|
@ -12,10 +12,12 @@
|
||||||
[syng-im.models.messages :refer [save-message
|
[syng-im.models.messages :refer [save-message
|
||||||
update-message!
|
update-message!
|
||||||
message-by-id]]
|
message-by-id]]
|
||||||
|
[syng-im.models.commands :refer [set-chat-command
|
||||||
|
set-chat-command-content
|
||||||
|
set-chat-command-request]]
|
||||||
[syng-im.handlers.server :as server]
|
[syng-im.handlers.server :as server]
|
||||||
[syng-im.handlers.contacts :as contacts-service]
|
[syng-im.handlers.contacts :as contacts-service]
|
||||||
[syng-im.handlers.commands :refer [set-chat-command
|
|
||||||
set-chat-command-content]]
|
|
||||||
[syng-im.handlers.sign-up :as sign-up-service]
|
[syng-im.handlers.sign-up :as sign-up-service]
|
||||||
|
|
||||||
[syng-im.models.chats :refer [create-chat]]
|
[syng-im.models.chats :refer [create-chat]]
|
||||||
|
@ -146,7 +148,7 @@
|
||||||
(log/debug action "chat-id" chat-id "command" command "content" content)
|
(log/debug action "chat-id" chat-id "command" command "content" content)
|
||||||
(let [db (set-chat-input-text db nil)
|
(let [db (set-chat-input-text db nil)
|
||||||
msg (if (= chat-id "console")
|
msg (if (= chat-id "console")
|
||||||
(sign-up-service/send-console-command command content)
|
(sign-up-service/send-console-command db command content)
|
||||||
;; TODO handle command, now sends as plain message
|
;; TODO handle command, now sends as plain message
|
||||||
(let [{msg-id :msg-id
|
(let [{msg-id :msg-id
|
||||||
{from :from
|
{from :from
|
||||||
|
@ -242,6 +244,10 @@
|
||||||
(fn [db [_ content]]
|
(fn [db [_ content]]
|
||||||
(set-chat-command-content db content)))
|
(set-chat-command-content db content)))
|
||||||
|
|
||||||
|
(register-handler :set-chat-command-request
|
||||||
|
(fn [db [_ handler]]
|
||||||
|
(set-chat-command-request db handler)))
|
||||||
|
|
||||||
(register-handler :show-contacts
|
(register-handler :show-contacts
|
||||||
(fn [db [action navigator]]
|
(fn [db [action navigator]]
|
||||||
(log/debug action)
|
(log/debug action)
|
||||||
|
|
|
@ -1,16 +0,0 @@
|
||||||
(ns syng-im.handlers.commands
|
|
||||||
(:require [re-frame.core :refer [subscribe dispatch dispatch-sync]]
|
|
||||||
[syng-im.db :as db]
|
|
||||||
[syng-im.models.commands :refer [get-command]]
|
|
||||||
[syng-im.utils.utils :refer [log on-error http-post]]
|
|
||||||
[syng-im.utils.logging :as log]))
|
|
||||||
|
|
||||||
(defn set-chat-command-content [db content]
|
|
||||||
(assoc-in db (db/chat-command-content-path (get-in db db/current-chat-id-path))
|
|
||||||
content))
|
|
||||||
|
|
||||||
(defn set-chat-command [db command-key]
|
|
||||||
(-> db
|
|
||||||
(set-chat-command-content nil)
|
|
||||||
(assoc-in (db/chat-command-path (get-in db db/current-chat-id-path))
|
|
||||||
(get-command command-key))))
|
|
|
@ -10,35 +10,6 @@
|
||||||
content-type-command
|
content-type-command
|
||||||
content-type-command-request]]))
|
content-type-command-request]]))
|
||||||
|
|
||||||
(defn intro [db]
|
|
||||||
(dispatch [:received-msg
|
|
||||||
{:msg-id "1"
|
|
||||||
:content "Hello there! It's Syng, a Dapp browser in your phone."
|
|
||||||
:content-type text-content-type
|
|
||||||
:outgoing false
|
|
||||||
:from "console"
|
|
||||||
:to "me"}])
|
|
||||||
(dispatch [:received-msg
|
|
||||||
{:msg-id "2"
|
|
||||||
:content (str "Syng uses a highly secure key-pair authentication type "
|
|
||||||
"to provide you a reliable way to access your account")
|
|
||||||
:content-type text-content-type
|
|
||||||
:outgoing false
|
|
||||||
:from "console"
|
|
||||||
:to "me"}])
|
|
||||||
(dispatch [:received-msg
|
|
||||||
{:msg-id "3"
|
|
||||||
:content (commands/format-command-request-msg-content
|
|
||||||
:keypair-password
|
|
||||||
(str "A key pair has been generated and saved to your device. "
|
|
||||||
"Create a password to secure your key"))
|
|
||||||
:content-type content-type-command-request
|
|
||||||
:outgoing false
|
|
||||||
:from "console"
|
|
||||||
:to "me"}])
|
|
||||||
;; (dispatch [:set-chat-command :keypair-password])
|
|
||||||
db)
|
|
||||||
|
|
||||||
(defn send-console-msg [text]
|
(defn send-console-msg [text]
|
||||||
{:msg-id (random/id)
|
{:msg-id (random/id)
|
||||||
:from "me"
|
:from "me"
|
||||||
|
@ -47,8 +18,69 @@
|
||||||
:content-type text-content-type
|
:content-type text-content-type
|
||||||
:outgoing true})
|
:outgoing true})
|
||||||
|
|
||||||
(defn- handle-password [content]
|
|
||||||
;; TODO validate and save password
|
;; -- Send confirmation code and synchronize contacts---------------------------
|
||||||
|
(defn on-sync-contacts []
|
||||||
|
(dispatch [:received-msg
|
||||||
|
{:msg-id (random/id)
|
||||||
|
:content (str "Your contacts have been synchronized")
|
||||||
|
:content-type text-content-type
|
||||||
|
:outgoing false
|
||||||
|
:from "console"
|
||||||
|
:to "me"}]))
|
||||||
|
|
||||||
|
(defn sync-contacts []
|
||||||
|
(dispatch [:sync-contacts on-sync-contacts]))
|
||||||
|
|
||||||
|
(defn on-send-code-response [body]
|
||||||
|
(if (:confirmed body)
|
||||||
|
(do (dispatch [:received-msg
|
||||||
|
{:msg-id (random/id)
|
||||||
|
:content "Confirmed"
|
||||||
|
:content-type text-content-type
|
||||||
|
:outgoing false
|
||||||
|
:from "console"
|
||||||
|
:to "me"}])
|
||||||
|
(dispatch [:set-chat-command-request nil])
|
||||||
|
(sync-contacts))
|
||||||
|
(dispatch [:received-msg
|
||||||
|
{:msg-id (random/id)
|
||||||
|
:content "Wrong code"
|
||||||
|
:content-type text-content-type
|
||||||
|
:outgoing false
|
||||||
|
:from "console"
|
||||||
|
:to "me"}])))
|
||||||
|
|
||||||
|
(defn send-code [code]
|
||||||
|
(dispatch [:sign-up-confirm code on-send-code-response]))
|
||||||
|
|
||||||
|
(defn- handle-confirmation-code [command-key content]
|
||||||
|
(when (= command-key :confirmation-code)
|
||||||
|
(send-code content)))
|
||||||
|
|
||||||
|
;; -- Send phone number ----------------------------------------
|
||||||
|
(defn on-sign-up-response []
|
||||||
|
(dispatch [:received-msg
|
||||||
|
{:msg-id (random/id)
|
||||||
|
:content (commands/format-command-request-msg-content
|
||||||
|
:confirmation-code
|
||||||
|
(str "Thanks! We've sent you a text message with a confirmation "
|
||||||
|
"code. Please provide that code to confirm your phone number"))
|
||||||
|
:content-type content-type-command-request
|
||||||
|
:outgoing false
|
||||||
|
:from "console"
|
||||||
|
:to "me"}])
|
||||||
|
(dispatch [:set-chat-command-request handle-confirmation-code]))
|
||||||
|
|
||||||
|
(defn- handle-phone [command-key content]
|
||||||
|
(when (= command-key :phone)
|
||||||
|
(let [phone-number (format-phone-number content)]
|
||||||
|
(dispatch [:sign-up phone-number on-sign-up-response]))))
|
||||||
|
|
||||||
|
|
||||||
|
;; -- Saving password ----------------------------------------
|
||||||
|
(defn- save-password [password]
|
||||||
|
;; TODO validate and save password
|
||||||
(dispatch [:received-msg
|
(dispatch [:received-msg
|
||||||
{:msg-id (random/id)
|
{:msg-id (random/id)
|
||||||
:content (str "OK great! Your password has been saved. Just to let you "
|
:content (str "OK great! Your password has been saved. Just to let you "
|
||||||
|
@ -101,75 +133,50 @@
|
||||||
:content-type content-type-command-request
|
:content-type content-type-command-request
|
||||||
:outgoing false
|
:outgoing false
|
||||||
:from "console"
|
:from "console"
|
||||||
:to "me"}]))
|
:to "me"}])
|
||||||
|
(dispatch [:set-chat-command-request handle-phone]))
|
||||||
|
|
||||||
|
(defn- handle-password [command-key content]
|
||||||
|
(when (= command-key :keypair-password)
|
||||||
|
(save-password content)))
|
||||||
|
|
||||||
;; -- Send phone number ----------------------------------------
|
(defn intro [db]
|
||||||
(defn on-sign-up-response []
|
|
||||||
(dispatch [:received-msg
|
(dispatch [:received-msg
|
||||||
{:msg-id (random/id)
|
{:msg-id "1"
|
||||||
:content (commands/format-command-request-msg-content
|
:content "Hello there! It's Syng, a Dapp browser in your phone."
|
||||||
:confirmation-code
|
|
||||||
(str "Thanks! We've sent you a text message with a confirmation "
|
|
||||||
"code. Please provide that code to confirm your phone number"))
|
|
||||||
:content-type content-type-command-request
|
|
||||||
:outgoing false
|
|
||||||
:from "console"
|
|
||||||
:to "me"}]))
|
|
||||||
|
|
||||||
(defn- handle-phone [content]
|
|
||||||
(let [phone-number (format-phone-number content)]
|
|
||||||
(dispatch [:sign-up phone-number on-sign-up-response])))
|
|
||||||
|
|
||||||
|
|
||||||
;; -- Phone number confirmation --------------------------------
|
|
||||||
(defn on-sync-contacts []
|
|
||||||
(dispatch [:received-msg
|
|
||||||
{:msg-id (random/id)
|
|
||||||
:content (str "Your contacts have been synchronized")
|
|
||||||
:content-type text-content-type
|
:content-type text-content-type
|
||||||
:outgoing false
|
:outgoing false
|
||||||
:from "console"
|
:from "console"
|
||||||
:to "me"}]))
|
:to "me"}])
|
||||||
|
(dispatch [:received-msg
|
||||||
(defn sync-contacts []
|
{:msg-id "2"
|
||||||
(dispatch [:sync-contacts on-sync-contacts]))
|
:content (str "Syng uses a highly secure key-pair authentication type "
|
||||||
|
"to provide you a reliable way to access your account")
|
||||||
(defn on-send-code-response [body]
|
:content-type text-content-type
|
||||||
(if (:confirmed body)
|
:outgoing false
|
||||||
(do (dispatch [:received-msg
|
:from "console"
|
||||||
{:msg-id (random/id)
|
:to "me"}])
|
||||||
:content "Confirmed"
|
(dispatch [:received-msg
|
||||||
:content-type text-content-type
|
{:msg-id "3"
|
||||||
:outgoing false
|
:content (commands/format-command-request-msg-content
|
||||||
:from "console"
|
:keypair-password
|
||||||
:to "me"}])
|
(str "A key pair has been generated and saved to your device. "
|
||||||
(sync-contacts))
|
"Create a password to secure your key"))
|
||||||
(dispatch [:received-msg
|
:content-type content-type-command-request
|
||||||
{:msg-id (random/id)
|
:outgoing false
|
||||||
:content "Wrong code"
|
:from "console"
|
||||||
:content-type text-content-type
|
:to "me"}])
|
||||||
:outgoing false
|
(dispatch [:set-chat-command-request handle-password])
|
||||||
:from "console"
|
;; (dispatch [:set-chat-command :keypair-password])
|
||||||
:to "me"}])))
|
db)
|
||||||
|
|
||||||
(defn send-code [code]
|
|
||||||
(dispatch [:sign-up-confirm code on-send-code-response]))
|
|
||||||
|
|
||||||
(defn- handle-confirmation-code [content]
|
|
||||||
(send-code content))
|
|
||||||
|
|
||||||
;; TODO store command key in a separate field
|
;; TODO store command key in a separate field
|
||||||
(defn send-console-command [command content]
|
(defn send-console-command [db command-key content]
|
||||||
(when (= command :keypair-password)
|
(when-let [command-handler (commands/get-chat-command-request db)]
|
||||||
(handle-password content))
|
(command-handler command-key content))
|
||||||
(when (= command :phone)
|
|
||||||
(handle-phone content))
|
|
||||||
(when (= command :confirmation-code)
|
|
||||||
(handle-confirmation-code content))
|
|
||||||
{:msg-id (random/id)
|
{:msg-id (random/id)
|
||||||
:from "me"
|
:from "me"
|
||||||
:to "console"
|
:to "console"
|
||||||
:content (commands/format-command-msg-content command content)
|
:content (commands/format-command-msg-content command-key content)
|
||||||
:content-type content-type-command
|
:content-type content-type-command
|
||||||
:outgoing true})
|
:outgoing true})
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
[clojure.walk :refer [stringify-keys keywordize-keys]]
|
[clojure.walk :refer [stringify-keys keywordize-keys]]
|
||||||
[cljs.core.async :as async :refer [chan put! <! >!]]
|
[cljs.core.async :as async :refer [chan put! <! >!]]
|
||||||
[re-frame.core :refer [subscribe dispatch dispatch-sync]]
|
[re-frame.core :refer [subscribe dispatch dispatch-sync]]
|
||||||
|
[syng-im.db :as db]
|
||||||
|
[syng-im.models.chat :refer [current-chat-id]]
|
||||||
[syng-im.utils.utils :refer [log toast]]
|
[syng-im.utils.utils :refer [log toast]]
|
||||||
[syng-im.persistence.realm :as realm]))
|
[syng-im.persistence.realm :as realm]))
|
||||||
|
|
||||||
|
@ -52,6 +54,29 @@
|
||||||
(defn get-command [command-key]
|
(defn get-command [command-key]
|
||||||
(first (filter #(= command-key (:command %)) commands)))
|
(first (filter #(= command-key (:command %)) commands)))
|
||||||
|
|
||||||
|
(defn get-chat-command-content [db]
|
||||||
|
(get-in db (db/chat-command-content-path (current-chat-id db))))
|
||||||
|
|
||||||
|
(defn set-chat-command-content [db content]
|
||||||
|
(assoc-in db (db/chat-command-content-path (get-in db db/current-chat-id-path))
|
||||||
|
content))
|
||||||
|
|
||||||
|
(defn get-chat-command [db]
|
||||||
|
(get-in db (db/chat-command-path (current-chat-id db))))
|
||||||
|
|
||||||
|
(defn set-chat-command [db command-key]
|
||||||
|
(-> db
|
||||||
|
(set-chat-command-content nil)
|
||||||
|
(assoc-in (db/chat-command-path (get-in db db/current-chat-id-path))
|
||||||
|
(get-command command-key))))
|
||||||
|
|
||||||
|
(defn get-chat-command-request [db]
|
||||||
|
(get-in db (db/chat-command-request-path (current-chat-id db))))
|
||||||
|
|
||||||
|
(defn set-chat-command-request [db handler]
|
||||||
|
(assoc-in db (db/chat-command-request-path (current-chat-id db)) handler))
|
||||||
|
|
||||||
|
|
||||||
(defn- map-to-str
|
(defn- map-to-str
|
||||||
[m]
|
[m]
|
||||||
(join ";" (map #(join "=" %) (stringify-keys m))))
|
(join ";" (map #(join "=" %) (stringify-keys m))))
|
||||||
|
|
|
@ -9,6 +9,9 @@
|
||||||
chat-by-id]]
|
chat-by-id]]
|
||||||
[syng-im.models.messages :refer [get-messages]]
|
[syng-im.models.messages :refer [get-messages]]
|
||||||
[syng-im.models.contacts :refer [contacts-list]]
|
[syng-im.models.contacts :refer [contacts-list]]
|
||||||
|
[syng-im.models.commands :refer [get-chat-command
|
||||||
|
get-chat-command-content
|
||||||
|
get-chat-command-request]]
|
||||||
[syng-im.handlers.suggestions :refer [get-suggestions]]))
|
[syng-im.handlers.suggestions :refer [get-suggestions]]))
|
||||||
|
|
||||||
;; -- Chat --------------------------------------------------------------
|
;; -- Chat --------------------------------------------------------------
|
||||||
|
@ -39,11 +42,18 @@
|
||||||
|
|
||||||
(register-sub :get-chat-command
|
(register-sub :get-chat-command
|
||||||
(fn [db _]
|
(fn [db _]
|
||||||
(reaction (get-in @db (db/chat-command-path (current-chat-id @db))))))
|
(-> (get-chat-command @db)
|
||||||
|
(reaction))))
|
||||||
|
|
||||||
(register-sub :get-chat-command-content
|
(register-sub :get-chat-command-content
|
||||||
(fn [db _]
|
(fn [db _]
|
||||||
(reaction (get-in @db (db/chat-command-content-path (current-chat-id @db))))))
|
(-> (get-chat-command-content @db)
|
||||||
|
(reaction))))
|
||||||
|
|
||||||
|
(register-sub :chat-command-request
|
||||||
|
(fn [db _]
|
||||||
|
(-> (get-chat-command-request @db)
|
||||||
|
(reaction))))
|
||||||
|
|
||||||
;; -- Chats list --------------------------------------------------------------
|
;; -- Chats list --------------------------------------------------------------
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue