Send command

Former-commit-id: 6f5deac5ee
This commit is contained in:
virvar 2016-04-04 18:19:52 +03:00
parent e7a10befbd
commit 7c045e120c
7 changed files with 95 additions and 16 deletions

View File

@ -7,10 +7,12 @@
touchable-highlight touchable-highlight
navigator navigator
toolbar-android]] toolbar-android]]
[syng-im.models.commands :as commands]
[syng-im.utils.logging :as log] [syng-im.utils.logging :as log]
[syng-im.navigation :refer [nav-pop]] [syng-im.navigation :refer [nav-pop]]
[syng-im.resources :as res] [syng-im.resources :as res]
[syng-im.constants :refer [text-content-type]])) [syng-im.constants :refer [text-content-type
content-type-command]]))
(defn message-date [{:keys [date]}] (defn message-date [{:keys [date]}]
@ -60,6 +62,29 @@
:lineHeight 15}} :lineHeight 15}}
"03:39"]]]) "03:39"]]])
(defn message-content-command [content]
(let [{:keys [command content]} (commands/parse-command-msg-content content)]
[view {:style {:flexDirection "column"}}
[view {:style {:margin 10
:backgroundColor (:color command)
:borderRadius 10}}
[text {:style {:marginTop -2
:marginHorizontal 10
:fontSize 14
:fontFamily "Avenir-Roman"
:color "white"}}
(:text command)]]
[text {:style {:marginTop -2
:marginHorizontal 10
:fontSize 14
:fontFamily "Avenir-Roman"
:color "black"}}
;; TODO isn't smart
(if (= (:command command) :keypair-password)
"******"
content)]]))
(defn message-content [{:keys [content-type content outgoing]}] (defn message-content [{:keys [content-type content outgoing]}]
[view {:style (merge {:borderRadius 6} [view {:style (merge {:borderRadius 6}
(if (= content-type text-content-type) (if (= content-type text-content-type)
@ -70,13 +95,16 @@
(if outgoing (if outgoing
{:backgroundColor "#D3EEEF"} {:backgroundColor "#D3EEEF"}
{:backgroundColor "#FBF6E3"}))} {:backgroundColor "#FBF6E3"}))}
(if (= content-type text-content-type) (cond
(= content-type text-content-type)
[text {:style {:fontSize 14 [text {:style {:fontSize 14
:fontFamily "Avenir-Roman" :fontFamily "Avenir-Roman"
:color "#4A5258"}} :color "#4A5258"}}
content] content]
[message-content-audio {:content content (= content-type content-type-command)
:content-type content-type}])]) [message-content-command content]
:else [message-content-audio {:content content
:content-type content-type}])])
(defn message-delivery-status [{:keys [delivery-status]}] (defn message-delivery-status [{:keys [delivery-status]}]
[view {:style {:flexDirection "row" [view {:style {:flexDirection "row"

View File

@ -14,11 +14,16 @@
(defn cancel-command-input [] (defn cancel-command-input []
(dispatch [:set-input-command nil])) (dispatch [:set-input-command nil]))
(defn send-command [chat-id command text]
(dispatch [:send-chat-command chat-id (:command command) text])
(cancel-command-input))
(defn simple-command-input-view [command input-options] (defn simple-command-input-view [command input-options]
(let [message-atom (r/atom nil) (let [message-atom (r/atom nil)
chat-id (subscribe [:get-current-chat-id])] chat-id-atom (subscribe [:get-current-chat-id])]
(fn [] (fn []
(let [message @message-atom] (let [message @message-atom
chat-id @chat-id-atom]
[view {:style {:flexDirection "row"}} [view {:style {:flexDirection "row"}}
[view {:style {:flex 1 [view {:style {:flex 1
:flexDirection "column" :flexDirection "column"
@ -60,9 +65,10 @@
:keyboardType "default" :keyboardType "default"
:value message :value message
:onChangeText (fn [new-text] :onChangeText (fn [new-text]
) (reset! message-atom new-text))
:onSubmitEditing (fn [e] :onSubmitEditing (fn [e]
)} (send-command chat-id command message)
(reset! message-atom nil))}
input-options)]]] input-options)]]]
[touchable-highlight {:style {:marginTop 14 [touchable-highlight {:style {:marginTop 14
:marginRight 16 :marginRight 16

View File

@ -6,3 +6,4 @@
;; (def server-address "http://10.0.3.2:3000/") ;; (def server-address "http://10.0.3.2:3000/")
(def text-content-type "text/plain") (def text-content-type "text/plain")
(def content-type-command "command")

View File

@ -103,6 +103,25 @@
(save-message chat-id msg) (save-message chat-id msg)
(signal-chat-updated db chat-id)))) (signal-chat-updated db chat-id))))
(register-handler :send-chat-command
(fn [db [action chat-id command content]]
(log/debug action "chat-id" chat-id "command" command "content" content)
(let [msg (if (= chat-id "console")
(sign-up-service/send-console-command command content)
;; TODO handle command, now sends as plain message
(let [{msg-id :msg-id
{from :from
to :to} :msg} (api/send-user-msg {:to chat-id
:content content})]
{:msg-id msg-id
:from from
:to to
:content content
:content-type text-content-type
:outgoing true}))]
(save-message chat-id msg)
(signal-chat-updated db chat-id))))
;; -- User data -------------------------------------------------------------- ;; -- User data --------------------------------------------------------------
(register-handler :set-user-phone-number (register-handler :set-user-phone-number

View File

@ -1,11 +1,12 @@
(ns syng-im.handlers.sign-up (ns syng-im.handlers.sign-up
(:require [re-frame.core :refer [subscribe dispatch dispatch-sync]] (:require [re-frame.core :refer [subscribe dispatch dispatch-sync]]
[syng-im.db :as db] [syng-im.db :as db]
;; [syng-im.models.commands :refer [commands suggestions]] [syng-im.models.commands :as commands]
[syng-im.utils.utils :refer [log on-error http-post toast]] [syng-im.utils.utils :refer [log on-error http-post toast]]
[syng-im.utils.logging :as log] [syng-im.utils.logging :as log]
[syng-im.utils.random :as random] [syng-im.utils.random :as random]
[syng-im.constants :refer [text-content-type]])) [syng-im.constants :refer [text-content-type
content-type-command]]))
(defn intro [db] (defn intro [db]
(dispatch [:received-msg {:msg-id "1" (dispatch [:received-msg {:msg-id "1"
@ -36,3 +37,12 @@
:content text :content text
:content-type text-content-type :content-type text-content-type
:outgoing true}) :outgoing true})
;; TODO store command key in a separate field
(defn send-console-command [command content]
{:msg-id (random/id)
:from "me"
:to "console"
:content (commands/format-command-msg-content command content)
:content-type content-type-command
:outgoing true})

View File

@ -1,5 +1,7 @@
(ns syng-im.models.commands (ns syng-im.models.commands
(:require [cljs.core.async :as async :refer [chan put! <! >!]] (:require [clojure.string :refer [join split]]
[clojure.walk :refer [stringify-keys keywordize-keys]]
[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.utils.utils :refer [log toast]] [syng-im.utils.utils :refer [log toast]]
[syng-im.persistence.realm :as realm])) [syng-im.persistence.realm :as realm]))
@ -44,3 +46,19 @@
(defn get-command [command-key] (defn get-command [command-key]
(first (filter #(= command-key (:command %)) commands))) (first (filter #(= command-key (:command %)) commands)))
(defn- map-to-str
[m]
(join ";" (map #(join "=" %) (stringify-keys m))))
(defn- str-to-map
[s]
(keywordize-keys (apply hash-map (split s #"[;=]"))))
;; TODO store command key in separate field
(defn format-command-msg-content [command content]
(map-to-str {:command (name command) :content content}))
;; TODO temp
(defn parse-command-msg-content [content]
(update (str-to-map content) :command #(get-command (keyword %))))

View File

@ -31,10 +31,7 @@
(register-sub :get-input-command (register-sub :get-input-command
(fn [db _] (fn [db _]
(reaction (get-in @db db/input-command-path)) (reaction (get-in @db db/input-command-path))))
;; (let [input-command-name ]
;; (reaction @input-command-name))
))
;; -- Chats list -------------------------------------------------------------- ;; -- Chats list --------------------------------------------------------------