From f7bb98895490e6c21de763938cbe2317ffab78e6 Mon Sep 17 00:00:00 2001 From: Roman Volosovskyi Date: Tue, 17 May 2016 13:32:20 +0300 Subject: [PATCH] more cleanup in handlers/subs Former-commit-id: 4752643ed7279fd54418af4e790bf18bdef35f4b --- src/syng_im/android/core.cljs | 6 +-- src/syng_im/chat/handlers.cljs | 41 +++++++++------------ src/syng_im/{handlers => chat}/sign_up.cljs | 3 +- src/syng_im/components/drawer/view.cljs | 9 ++--- src/syng_im/handlers.cljs | 1 - src/syng_im/models/messages.cljs | 39 ++++++++++---------- src/syng_im/navigation/handlers.cljs | 19 ++++------ src/syng_im/navigation/subs.cljs | 11 ------ src/syng_im/subs.cljs | 17 --------- 9 files changed, 53 insertions(+), 93 deletions(-) rename src/syng_im/{handlers => chat}/sign_up.cljs (99%) delete mode 100644 src/syng_im/navigation/subs.cljs diff --git a/src/syng_im/android/core.cljs b/src/syng_im/android/core.cljs index f1bb1815fb..125b49b6df 100644 --- a/src/syng_im/android/core.cljs +++ b/src/syng_im/android/core.cljs @@ -23,15 +23,15 @@ ;; todo: it might be better always return false from ;; this listener and handle application's closing ;; in handlers - (let [stack (subscribe [:navigation-stack])] + (let [stack (subscribe [:get :navigation-stack])] (when (< 1 (count @stack)) (dispatch [:navigate-back]) true)))] (add-event-listener "hardwareBackPress" new-listener))) (defn app-root [] - (let [signed-up (subscribe [:signed-up]) - view-id (subscribe [:view-id])] + (let [signed-up (subscribe [:get :signed-up]) + view-id (subscribe [:get :view-id])] (fn [] (case (if @signed-up @view-id :chat) :discovery [discovery] diff --git a/src/syng_im/chat/handlers.cljs b/src/syng_im/chat/handlers.cljs index b8c65037fb..82f37ececf 100644 --- a/src/syng_im/chat/handlers.cljs +++ b/src/syng_im/chat/handlers.cljs @@ -9,10 +9,11 @@ content-type-command]] [syng-im.utils.random :as random] [syng-im.components.react :as r] - [syng-im.handlers.sign-up :as sign-up-service] + [syng-im.chat.sign-up :as sign-up-service] [syng-im.models.chats :as chats] [syng-im.navigation.handlers :as nav] - [syng-im.models.chats :as c])) + [syng-im.models.chats :as c] + [syng-im.utils.handlers :as u])) (register-handler :set-show-actions (fn [db [_ show-actions]] @@ -71,17 +72,18 @@ ((enrich update-command) update-text)) (register-handler :send-group-chat-msg - (fn [db [_ chat-id text]] - (let [{msg-id :msg-id - {from :from} :msg} (api/send-group-user-msg {:group-id chat-id - :content text}) - msg {:msg-id msg-id - :from from - :to nil - :content text - :content-type text-content-type - :outgoing true}] - (messages/save-message chat-id msg)))) + (u/side-effect! + (fn [_ [_ chat-id text]] + (let [{msg-id :msg-id + {from :from} :msg} (api/send-group-user-msg {:group-id chat-id + :content text}) + msg {:msg-id msg-id + :from from + :to nil + :content text + :content-type text-content-type + :outgoing true}] + (messages/save-message chat-id msg))))) (defn console? [s] (= "console" s)) @@ -236,7 +238,6 @@ (fn [db [_ signed-up]] (sign-up-service/set-signed-up db signed-up))) - (defn load-messages! ([db] (load-messages! db nil)) ([db _] @@ -289,15 +290,9 @@ ((after store-message!)))) (register-handler :group-received-msg - (fn [db [_ {chat-id :group-id :as msg}]] - (messages/save-message chat-id msg) - db)) - -(defn load-chat! - [{:keys [chats current-chat-id] :as db}] - (when-not (chats current-chat-id) - (c/create-chat {})) - db) + (u/side-effect! + (fn [_ [_ {chat-id :group-id :as msg}]] + (messages/save-message chat-id msg)))) (defmethod nav/preload-data! :chat [{:keys [current-chat-id] :as db} [_ _ id]] diff --git a/src/syng_im/handlers/sign_up.cljs b/src/syng_im/chat/sign_up.cljs similarity index 99% rename from src/syng_im/handlers/sign_up.cljs rename to src/syng_im/chat/sign_up.cljs index dfbd1fa945..8cef60aac0 100644 --- a/src/syng_im/handlers/sign_up.cljs +++ b/src/syng_im/chat/sign_up.cljs @@ -1,4 +1,5 @@ -(ns syng-im.handlers.sign-up +(ns syng-im.chat.sign-up + ;syng-im.handlers.sign-up (:require [re-frame.core :refer [subscribe dispatch dispatch-sync]] [syng-im.persistence.simple-kv-store :as kv] [syng-im.protocol.state.storage :as s] diff --git a/src/syng_im/components/drawer/view.cljs b/src/syng_im/components/drawer/view.cljs index 3c96ce3395..6edf297ac2 100644 --- a/src/syng_im/components/drawer/view.cljs +++ b/src/syng_im/components/drawer/view.cljs @@ -46,18 +46,15 @@ @username]] [view st/menu-items-container [menu-item {:name "Profile" - :handler (fn [] - (dispatch [:show-my-profile]))}] + :handler #(dispatch [:navigate-to :my-profile])}] [menu-item {:name "Settings" :handler (fn [] ;; TODO not implemented )}] [menu-item {:name "Discovery" - :handler (fn [] - (dispatch [:navigate-to :discovery]))}] + :handler #(dispatch [:navigate-to :discovery])}] [menu-item {:name "Contacts" - :handler (fn [] - (dispatch [:show-contacts navigator]))}] + :handler #(dispatch [:show-contacts navigator])}] [menu-item {:name "Invite friends" :handler (fn [] ;; TODO not implemented diff --git a/src/syng_im/handlers.cljs b/src/syng_im/handlers.cljs index a5b2371adf..2b90f5991e 100644 --- a/src/syng_im/handlers.cljs +++ b/src/syng_im/handlers.cljs @@ -15,7 +15,6 @@ [syng-im.models.commands :refer [set-commands]] [syng-im.handlers.server :as server] [syng-im.chat.suggestions :refer [load-commands]] - [syng-im.handlers.sign-up :as sign-up-service] [syng-im.models.chats :refer [chat-exists? create-chat chat-add-participants diff --git a/src/syng_im/models/messages.cljs b/src/syng_im/models/messages.cljs index b4c6d3b834..e650e85127 100644 --- a/src/syng_im/models/messages.cljs +++ b/src/syng_im/models/messages.cljs @@ -17,28 +17,28 @@ (keywordize-keys (apply hash-map (split s #"[;=]")))) (defn save-message - [chat-id {:keys [from to msg-id content content-type outgoing - same-author same-direction] + ;; todo remove chat-id parameter + [chat-id {:keys [to msg-id content outgoing] + ;; outgoing should be explicitely defined in handlers :or {outgoing false - to nil} :as msg}] - (log/debug "save-message" chat-id msg) + to nil} :as message}] (when-not (r/exists? :msgs :msg-id msg-id) (r/write (fn [] - (let [content (if (string? content) - content - (map-to-str content))] - (r/create :msgs {:chat-id chat-id - :msg-id msg-id - :from from - :to to - :content content - :content-type content-type - :outgoing outgoing - :timestamp (timestamp) - :delivery-status nil - :same-author same-author - :same-direction same-direction} true)))))) + (let [content' (if (string? content) + content + (map-to-str content)) + message' (merge message + {:chat-id chat-id + :content content' + :timestamp (timestamp) + :delivery-status nil})] + (r/create :msgs message' true)))))) + +(defn command-type? [type] + (contains? + #{c/content-type-command c/content-type-command-request} + type)) (defn get-messages [chat-id] (->> (-> (r/get-by-field :msgs :chat-id chat-id) @@ -46,8 +46,7 @@ (r/collection->map)) (into '()) (map (fn [{:keys [content-type] :as message}] - (if (#{c/content-type-command c/content-type-command-request} - content-type) + (if (command-type? content-type) (update message :content str-to-map) message))))) diff --git a/src/syng_im/navigation/handlers.cljs b/src/syng_im/navigation/handlers.cljs index 217bd88136..98671d3e77 100644 --- a/src/syng_im/navigation/handlers.cljs +++ b/src/syng_im/navigation/handlers.cljs @@ -1,5 +1,6 @@ (ns syng-im.navigation.handlers - (:require [re-frame.core :refer [register-handler dispatch debug enrich]])) + (:require [re-frame.core :refer [register-handler dispatch debug enrich + after]])) (defn push-view [db view-id] (-> db @@ -71,14 +72,10 @@ (push-view :add-participants) clear-new-participants))) -(register-handler :show-profile - (debug - (fn [db [_ identity]] - (let [db (assoc db :contact-identity identity)] - (dispatch [:navigate-to :profile]) - db)))) +(defn show-profile + [db [_ identity]] + (-> db + (assoc :contact-identity identity) + (push-view :profile))) -(register-handler :show-my-profile - (fn [db _] - (dispatch [:navigate-to :my-profile]) - db)) +(register-handler :show-profile show-profile) diff --git a/src/syng_im/navigation/subs.cljs b/src/syng_im/navigation/subs.cljs deleted file mode 100644 index d7b2dc4a0a..0000000000 --- a/src/syng_im/navigation/subs.cljs +++ /dev/null @@ -1,11 +0,0 @@ -(ns syng-im.navigation.subs - (:require-macros [reagent.ratom :refer [reaction]]) - (:require [re-frame.core :refer [register-sub]])) - -(register-sub :view-id - (fn [db _] - (reaction (@db :view-id)))) - -(register-sub :navigation-stack - (fn [db _] - (reaction (:navigation-stack @db)))) diff --git a/src/syng_im/subs.cljs b/src/syng_im/subs.cljs index 117d670427..5479e808ae 100644 --- a/src/syng_im/subs.cljs +++ b/src/syng_im/subs.cljs @@ -1,27 +1,10 @@ (ns syng-im.subs (:require-macros [reagent.ratom :refer [reaction]]) (:require [re-frame.core :refer [register-sub]] - [syng-im.models.chats :refer [chats-list chat-by-id]] - [syng-im.models.contacts :refer [get-contacts - contacts-list-exclude - contacts-list-include - contact-by-identity]] syng-im.chat.subs - syng-im.navigation.subs syng-im.discovery.subs syng-im.contacts.subs)) -;; -- Chats list -------------------------------------------------------------- - (register-sub :get (fn [db [_ k]] (reaction (k @db)))) - -;; -- User data -------------------------------------------------------------- -(register-sub - :signed-up - (fn [db _] - (reaction (:signed-up @db)))) - -(register-sub :db - (fn [db _] (reaction @db)))