parent
e7a10befbd
commit
7c045e120c
|
@ -7,10 +7,12 @@
|
|||
touchable-highlight
|
||||
navigator
|
||||
toolbar-android]]
|
||||
[syng-im.models.commands :as commands]
|
||||
[syng-im.utils.logging :as log]
|
||||
[syng-im.navigation :refer [nav-pop]]
|
||||
[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]}]
|
||||
|
@ -60,6 +62,29 @@
|
|||
:lineHeight 15}}
|
||||
"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]}]
|
||||
[view {:style (merge {:borderRadius 6}
|
||||
(if (= content-type text-content-type)
|
||||
|
@ -70,13 +95,16 @@
|
|||
(if outgoing
|
||||
{:backgroundColor "#D3EEEF"}
|
||||
{:backgroundColor "#FBF6E3"}))}
|
||||
(if (= content-type text-content-type)
|
||||
(cond
|
||||
(= content-type text-content-type)
|
||||
[text {:style {:fontSize 14
|
||||
:fontFamily "Avenir-Roman"
|
||||
:color "#4A5258"}}
|
||||
content]
|
||||
[message-content-audio {:content content
|
||||
:content-type content-type}])])
|
||||
(= content-type content-type-command)
|
||||
[message-content-command content]
|
||||
:else [message-content-audio {:content content
|
||||
:content-type content-type}])])
|
||||
|
||||
(defn message-delivery-status [{:keys [delivery-status]}]
|
||||
[view {:style {:flexDirection "row"
|
||||
|
|
|
@ -14,11 +14,16 @@
|
|||
(defn cancel-command-input []
|
||||
(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]
|
||||
(let [message-atom (r/atom nil)
|
||||
chat-id (subscribe [:get-current-chat-id])]
|
||||
(let [message-atom (r/atom nil)
|
||||
chat-id-atom (subscribe [:get-current-chat-id])]
|
||||
(fn []
|
||||
(let [message @message-atom]
|
||||
(let [message @message-atom
|
||||
chat-id @chat-id-atom]
|
||||
[view {:style {:flexDirection "row"}}
|
||||
[view {:style {:flex 1
|
||||
:flexDirection "column"
|
||||
|
@ -60,9 +65,10 @@
|
|||
:keyboardType "default"
|
||||
:value message
|
||||
:onChangeText (fn [new-text]
|
||||
)
|
||||
(reset! message-atom new-text))
|
||||
:onSubmitEditing (fn [e]
|
||||
)}
|
||||
(send-command chat-id command message)
|
||||
(reset! message-atom nil))}
|
||||
input-options)]]]
|
||||
[touchable-highlight {:style {:marginTop 14
|
||||
:marginRight 16
|
||||
|
|
|
@ -6,3 +6,4 @@
|
|||
;; (def server-address "http://10.0.3.2:3000/")
|
||||
|
||||
(def text-content-type "text/plain")
|
||||
(def content-type-command "command")
|
||||
|
|
|
@ -103,6 +103,25 @@
|
|||
(save-message chat-id msg)
|
||||
(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 --------------------------------------------------------------
|
||||
|
||||
(register-handler :set-user-phone-number
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
(ns syng-im.handlers.sign-up
|
||||
(:require [re-frame.core :refer [subscribe dispatch dispatch-sync]]
|
||||
[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.logging :as log]
|
||||
[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]
|
||||
(dispatch [:received-msg {:msg-id "1"
|
||||
|
@ -36,3 +37,12 @@
|
|||
:content text
|
||||
:content-type text-content-type
|
||||
: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})
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
(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]]
|
||||
[syng-im.utils.utils :refer [log toast]]
|
||||
[syng-im.persistence.realm :as realm]))
|
||||
|
@ -44,3 +46,19 @@
|
|||
|
||||
(defn get-command [command-key]
|
||||
(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 %))))
|
||||
|
|
|
@ -31,10 +31,7 @@
|
|||
|
||||
(register-sub :get-input-command
|
||||
(fn [db _]
|
||||
(reaction (get-in @db db/input-command-path))
|
||||
;; (let [input-command-name ]
|
||||
;; (reaction @input-command-name))
|
||||
))
|
||||
(reaction (get-in @db db/input-command-path))))
|
||||
|
||||
;; -- Chats list --------------------------------------------------------------
|
||||
|
||||
|
|
Loading…
Reference in New Issue