[perf] network module

This commit is contained in:
Roman Volosovskyi 2019-06-06 21:09:26 +03:00
parent 2204ad5142
commit 908f730b1d
No known key found for this signature in database
GPG Key ID: 0238A4B5ECEE70DE
38 changed files with 356 additions and 281 deletions

View File

@ -123,7 +123,16 @@
:language-out :es-2015 :language-out :es-2015
:modules {:cljs-base {:output-to "index.ios.js"} :modules {:cljs-base {:output-to "index.ios.js"}
:i18n {:entries #{"status_im.goog.i18n"} :i18n {:entries #{"status_im.goog.i18n"}
:output-to "status-modules/cljs/i18n-raw.js"}}} :output-to "status-modules/cljs/i18n-raw.js"}
:network {:entries #{"status_im.network.ui.network_details.views"
"status_im.network.ui.edit_network.views"
"status_im.network.ui.edit_network.styles"
"status_im.network.ui.views"
"status_im.network.ui.styles"
"status_im.network.events"
"status_im.network.subs"
"status_im.network.core"}
:output-to "status-modules/cljs/network-raw.js"}}}
:warning-handlers [status-im.utils.build/warning-handler]} :warning-handlers [status-im.utils.build/warning-handler]}
:android :android
{:source-paths ["components/src" "react-native/src/cljsjs" "react-native/src/mobile" "src" "env/prod" "prod"] {:source-paths ["components/src" "react-native/src/cljsjs" "react-native/src/mobile" "src" "env/prod" "prod"]
@ -143,7 +152,16 @@
:language-out :es-2015 :language-out :es-2015
:modules {:cljs-base {:output-to "index.android.js"} :modules {:cljs-base {:output-to "index.android.js"}
:i18n {:entries #{"status_im.goog.i18n"} :i18n {:entries #{"status_im.goog.i18n"}
:output-to "status-modules/cljs/i18n-raw.js"}}} :output-to "status-modules/cljs/i18n-raw.js"}
:network {:entries #{"status_im.network.ui.network_details.views"
"status_im.network.ui.edit_network.views"
"status_im.network.ui.edit_network.styles"
"status_im.network.ui.views"
"status_im.network.ui.styles"
"status_im.network.events"
"status_im.network.subs"
"status_im.network.core"}
:output-to "status-modules/cljs/network-raw.js"}}}
:warning-handlers [status-im.utils.build/warning-handler]} :warning-handlers [status-im.utils.build/warning-handler]}
:desktop :desktop
{:source-paths ["components/src" "react-native/src/cljsjs" "react-native/src/desktop" "src" "env/prod" "prod"] {:source-paths ["components/src" "react-native/src/cljsjs" "react-native/src/desktop" "src" "env/prod" "prod"]
@ -162,5 +180,14 @@
:language-out :es-2015 :language-out :es-2015
:modules {:cljs-base {:output-to "index.desktop.js"} :modules {:cljs-base {:output-to "index.desktop.js"}
:i18n {:entries #{"status_im.goog.i18n"} :i18n {:entries #{"status_im.goog.i18n"}
:output-to "status-modules/cljs/i18n-raw.js"}}} :output-to "status-modules/cljs/i18n-raw.js"}
:network {:entries #{"status_im.network.ui.network_details.views"
"status_im.network.ui.edit_network.views"
"status_im.network.ui.edit_network.styles"
"status_im.network.ui.views"
"status_im.network.ui.styles"
"status_im.network.events"
"status_im.network.subs"
"status_im.network.core"}
:output-to "status-modules/cljs/network-raw.js"}}}
:warning-handlers [status-im.utils.build/warning-handler]}}}}}) :warning-handlers [status-im.utils.build/warning-handler]}}}}})

View File

@ -1,32 +1,14 @@
(ns status-im.accounts.db (ns status-im.accounts.db
(:require status-im.utils.db (:require status-im.utils.db
status-im.ui.screens.network-settings.db status-im.network.module
status-im.ui.screens.bootnodes-settings.db status-im.ui.screens.bootnodes-settings.db
status-im.ui.screens.extensions.db status-im.ui.screens.extensions.db
[clojure.string :as string]
[cljs.spec.alpha :as spec] [cljs.spec.alpha :as spec]
[status-im.constants :as const] [status-im.constants :as const]))
[status-im.utils.security :as security]))
(defn logged-in? [cofx]
(boolean
(get-in cofx [:db :account/account])))
(defn credentials [cofx]
(select-keys (get-in cofx [:db :accounts/login]) [:address :password :save-password?]))
(defn valid-length? [password] (defn valid-length? [password]
(>= (count password) const/min-password-length)) (>= (count password) const/min-password-length))
(defn account-creation-next-enabled? [{:keys [step password password-confirm name]}]
(or (and password (= :enter-password step) (spec/valid? ::password (security/safe-unmask-data password)))
(and password-confirm (= :confirm-password step) (spec/valid? ::password password-confirm))
(and name (= :enter-name step) (not (string/blank? name)))))
(defn current-public-key
[cofx]
(get-in cofx [:db :account/account :public-key]))
(spec/def ::password (spec/and :global/not-empty-string valid-length?)) (spec/def ::password (spec/and :global/not-empty-string valid-length?))
(spec/def :account/address :global/address) (spec/def :account/address :global/address)

View File

@ -1,6 +1,6 @@
(ns status-im.accounts.login.core (ns status-im.accounts.login.core
(:require [re-frame.core :as re-frame] (:require [re-frame.core :as re-frame]
[status-im.accounts.db :as accounts.db] [status-im.accounts.model :as accounts.model]
[status-im.chaos-mode.core :as chaos-mode] [status-im.chaos-mode.core :as chaos-mode]
[status-im.data-store.core :as data-store] [status-im.data-store.core :as data-store]
[status-im.ethereum.subscriptions :as ethereum.subscriptions] [status-im.ethereum.subscriptions :as ethereum.subscriptions]
@ -80,7 +80,7 @@
(get-in [:db :hardwallet :account]) (get-in [:db :hardwallet :account])
(select-keys [:whisper-private-key :encryption-public-key]) (select-keys [:whisper-private-key :encryption-public-key])
(assoc :on-result #(re-frame/dispatch [:accounts.login.callback/login-success %])))} (assoc :on-result #(re-frame/dispatch [:accounts.login.callback/login-success %])))}
(let [{:keys [address password]} (accounts.db/credentials cofx)] (let [{:keys [address password]} (accounts.model/credentials cofx)]
{:accounts.login/login [address password]}))) {:accounts.login/login [address password]})))
(fx/defn initialize-wallet [cofx] (fx/defn initialize-wallet [cofx]
@ -94,7 +94,7 @@
(fx/defn user-login-without-creating-db (fx/defn user-login-without-creating-db
{:events [:accounts.login.ui/password-input-submitted]} {:events [:accounts.login.ui/password-input-submitted]}
[{:keys [db] :as cofx}] [{:keys [db] :as cofx}]
(let [{:keys [address password]} (accounts.db/credentials cofx)] (let [{:keys [address password]} (accounts.model/credentials cofx)]
(fx/merge (fx/merge
cofx cofx
{:db (-> db {:db (-> db
@ -108,7 +108,7 @@
(fx/defn user-login (fx/defn user-login
[{:keys [db] :as cofx} create-database?] [{:keys [db] :as cofx} create-database?]
(let [{:keys [address password]} (accounts.db/credentials cofx)] (let [{:keys [address password]} (accounts.model/credentials cofx)]
(fx/merge (fx/merge
cofx cofx
{:db (-> db {:db (-> db
@ -147,7 +147,7 @@
error (:error data) error (:error data)
success (empty? error) success (empty? error)
{:keys [address password save-password?]} {:keys [address password save-password?]}
(accounts.db/credentials cofx) (accounts.model/credentials cofx)
network-type (:network/type db)] network-type (:network/type db)]
;; check if logged into account ;; check if logged into account
(when address (when address
@ -208,7 +208,7 @@
(show-migration-error-dialog cofx realm-error) (show-migration-error-dialog cofx realm-error)
:database-does-not-exist :database-does-not-exist
(let [{:keys [address password]} (accounts.db/credentials cofx)] (let [{:keys [address password]} (accounts.model/credentials cofx)]
{:data-store/change-account [address {:data-store/change-account [address
password password
true true
@ -251,7 +251,7 @@
(fx/defn unknown-realm-error (fx/defn unknown-realm-error
[cofx {:keys [realm-error erase-button]}] [cofx {:keys [realm-error erase-button]}]
(let [{:keys [message]} realm-error (let [{:keys [message]} realm-error
{:keys [address]} (accounts.db/credentials cofx)] {:keys [address]} (accounts.model/credentials cofx)]
{:ui/show-confirmation {:ui/show-confirmation
{:title (i18n/label :unknown-realm-error) {:title (i18n/label :unknown-realm-error)
:content (i18n/label :content (i18n/label

View File

@ -0,0 +1,20 @@
(ns status-im.accounts.model
(:require [status-im.utils.security :as security]
[cljs.spec.alpha :as spec]
[clojure.string :as string]))
(defn logged-in? [cofx]
(boolean
(get-in cofx [:db :account/account])))
(defn credentials [cofx]
(select-keys (get-in cofx [:db :accounts/login]) [:address :password :save-password?]))
(defn account-creation-next-enabled? [{:keys [step password password-confirm name]}]
(or (and password (= :enter-password step) (spec/valid? :status-im.accounts.db/password (security/safe-unmask-data password)))
(and password-confirm (= :confirm-password step) (spec/valid? :status-im.accounts.db/password password-confirm))
(and name (= :enter-name step) (not (string/blank? name)))))
(defn current-public-key
[cofx]
(get-in cofx [:db :account/account :public-key]))

View File

@ -1,6 +1,6 @@
(ns status-im.chat.models (ns status-im.chat.models
(:require [re-frame.core :as re-frame] (:require [re-frame.core :as re-frame]
[status-im.accounts.db :as accounts.db] [status-im.accounts.model :as accounts.model]
[status-im.contact-code.core :as contact-code] [status-im.contact-code.core :as contact-code]
[status-im.contact.core :as contact.core] [status-im.contact.core :as contact.core]
[status-im.data-store.chats :as chats-store] [status-im.data-store.chats :as chats-store]
@ -228,7 +228,7 @@
(fx/defn mark-messages-seen (fx/defn mark-messages-seen
"Marks all unviewed loaded messages as seen in particular chat" "Marks all unviewed loaded messages as seen in particular chat"
[{:keys [db] :as cofx} chat-id] [{:keys [db] :as cofx} chat-id]
(let [public-key (accounts.db/current-public-key cofx) (let [public-key (accounts.model/current-public-key cofx)
loaded-unviewed-ids (get-in db [:chats chat-id :loaded-unviewed-messages-ids])] loaded-unviewed-ids (get-in db [:chats chat-id :loaded-unviewed-messages-ids])]
(when (seq loaded-unviewed-ids) (when (seq loaded-unviewed-ids)
(fx/merge cofx (fx/merge cofx
@ -279,7 +279,7 @@
"Start a chat, making sure it exists" "Start a chat, making sure it exists"
[{:keys [db] :as cofx} chat-id opts] [{:keys [db] :as cofx} chat-id opts]
;; don't allow to open chat with yourself ;; don't allow to open chat with yourself
(when (not= (accounts.db/current-public-key cofx) chat-id) (when (not= (accounts.model/current-public-key cofx) chat-id)
(if config/use-status-go-protocol? (if config/use-status-go-protocol?
(fx/merge cofx (fx/merge cofx
{:json-rpc/call [{:method "status_startOneOnOneChat" {:json-rpc/call [{:method "status_startOneOnOneChat"

View File

@ -1,6 +1,5 @@
(ns status-im.chat.models.loading (ns status-im.chat.models.loading
(:require [re-frame.core :as re-frame] (:require [re-frame.core :as re-frame]
[status-im.accounts.db :as accounts.db]
[status-im.chat.commands.core :as commands] [status-im.chat.commands.core :as commands]
[status-im.chat.models :as chat-model] [status-im.chat.models :as chat-model]
[status-im.mailserver.core :as mailserver] [status-im.mailserver.core :as mailserver]
@ -125,7 +124,6 @@
referenced-messages (into empty-message-map referenced-messages (into empty-message-map
(get-referenced-messages (get-referenced-ids indexed-messages))) (get-referenced-messages (get-referenced-ids indexed-messages)))
new-message-ids (keys indexed-messages) new-message-ids (keys indexed-messages)
public-key (accounts.db/current-public-key cofx)
loaded-unviewed-messages (get-unviewed-message-ids)] loaded-unviewed-messages (get-unviewed-message-ids)]
(fx/merge cofx (fx/merge cofx
{:db (-> db {:db (-> db

View File

@ -1,6 +1,6 @@
(ns status-im.chat.models.message (ns status-im.chat.models.message
(:require [re-frame.core :as re-frame] (:require [re-frame.core :as re-frame]
[status-im.accounts.db :as accounts.db] [status-im.accounts.model :as accounts.model]
[status-im.chat.commands.receiving :as commands-receiving] [status-im.chat.commands.receiving :as commands-receiving]
[status-im.chat.db :as chat.db] [status-im.chat.db :as chat.db]
[status-im.chat.models :as chat-model] [status-im.chat.models :as chat-model]
@ -102,7 +102,7 @@
[{:keys [db] :as cofx} [{:keys [db] :as cofx}
{{:keys [chat-id message-id clock-value timestamp from] :as message} :message {{:keys [chat-id message-id clock-value timestamp from] :as message} :message
:keys [current-chat? batch? dedup-id raw-message]}] :keys [current-chat? batch? dedup-id raw-message]}]
(let [current-public-key (accounts.db/current-public-key cofx) (let [current-public-key (accounts.model/current-public-key cofx)
prepared-message (-> message prepared-message (-> message
(prepare-message chat-id current-chat?) (prepare-message chat-id current-chat?)
(add-outgoing-status current-public-key))] (add-outgoing-status current-public-key))]
@ -156,7 +156,7 @@
old-id->message old-id->message
{:keys [from message-id chat-id js-obj content dedup-id] :as raw-message}] {:keys [from message-id chat-id js-obj content dedup-id] :as raw-message}]
(let [{:keys [web3 current-chat-id view-id]} db (let [{:keys [web3 current-chat-id view-id]} db
current-public-key (accounts.db/current-public-key cofx) current-public-key (accounts.model/current-public-key cofx)
current-chat? (and (or (= :chat view-id) current-chat? (and (or (= :chat view-id)
(= :chat-modal view-id)) (= :chat-modal view-id))
(= current-chat-id chat-id)) (= current-chat-id chat-id))
@ -216,11 +216,11 @@
;; Version 0 does not have a concept of joining, so any message is ok ;; Version 0 does not have a concept of joining, so any message is ok
;; otherwise check we joined ;; otherwise check we joined
(or (= 0 (get-in cofx [:db :chats chat-id :group-chat-local-version])) (or (= 0 (get-in cofx [:db :chats chat-id :group-chat-local-version]))
(get-in cofx [:db :chats chat-id :members-joined (accounts.db/current-public-key cofx)])))) chat-id (get-in cofx [:db :chats chat-id :members-joined (accounts.model/current-public-key cofx)])))) chat-id
(and (= :public-group-user-message message-type) (and (= :public-group-user-message message-type)
(get-in cofx [:db :chats chat-id :public?])) chat-id (get-in cofx [:db :chats chat-id :public?])) chat-id
(and (= :user-message message-type) (and (= :user-message message-type)
(= (accounts.db/current-public-key cofx) from)) chat-id (= (accounts.model/current-public-key cofx) from)) chat-id
(= :user-message message-type) from)) (= :user-message message-type) from))
(defn calculate-unviewed-messages-count (defn calculate-unviewed-messages-count
@ -228,7 +228,7 @@
(let [{:keys [current-chat-id view-id]} db (let [{:keys [current-chat-id view-id]} db
chat-view? (or (= :chat view-id) chat-view? (or (= :chat view-id)
(= :chat-modal view-id)) (= :chat-modal view-id))
current-public-key (accounts.db/current-public-key cofx)] current-public-key (accounts.model/current-public-key cofx)]
(+ (get-in db [:chats chat-id :unviewed-messages-count]) (+ (get-in db [:chats chat-id :unviewed-messages-count])
(if (and chat-view? (= current-chat-id chat-id)) (if (and chat-view? (= current-chat-id chat-id))
0 0
@ -381,7 +381,7 @@
[cofx chat-id message-id fcm-tokens status] [cofx chat-id message-id fcm-tokens status]
(log/debug "#6772 - send-push-notification" message-id fcm-tokens) (log/debug "#6772 - send-push-notification" message-id fcm-tokens)
(when (and (seq fcm-tokens) (= status :sent)) (when (and (seq fcm-tokens) (= status :sent))
(let [payload {:from (accounts.db/current-public-key cofx) (let [payload {:from (accounts.model/current-public-key cofx)
:to chat-id :to chat-id
:id message-id}] :id message-id}]
{:send-notification {:data-payload (notifications/encode-notification-payload payload) {:send-notification {:data-payload (notifications/encode-notification-payload payload)
@ -444,7 +444,7 @@
(let [{:keys [chats]} db (let [{:keys [chats]} db
{:keys [last-clock-value] :as chat} (get chats chat-id) {:keys [last-clock-value] :as chat} (get chats chat-id)
message-data (-> message message-data (-> message
(assoc :from (accounts.db/current-public-key cofx) (assoc :from (accounts.model/current-public-key cofx)
:timestamp now :timestamp now
:whisper-timestamp (quot now 1000) :whisper-timestamp (quot now 1000)
:clock-value (utils.clocks/send :clock-value (utils.clocks/send

View File

@ -1,5 +1,5 @@
(ns status-im.contact.core (ns status-im.contact.core
(:require [status-im.accounts.db :as accounts.db] (:require [status-im.accounts.model :as accounts.model]
[status-im.contact-code.core :as contact-code] [status-im.contact-code.core :as contact-code]
[status-im.contact.db :as contact.db] [status-im.contact.db :as contact.db]
[status-im.contact.device-info :as device-info] [status-im.contact.device-info :as device-info]
@ -119,7 +119,7 @@
;; for now ;; for now
(let [timestamp-ms (* timestamp 1000) (let [timestamp-ms (* timestamp 1000)
prev-last-updated (get-in db [:contacts/contacts public-key :last-updated]) prev-last-updated (get-in db [:contacts/contacts public-key :last-updated])
current-public-key (accounts.db/current-public-key cofx)] current-public-key (accounts.model/current-public-key cofx)]
(when (and (not= current-public-key public-key) (when (and (not= current-public-key public-key)
(< prev-last-updated timestamp-ms)) (< prev-last-updated timestamp-ms))
(let [contact (get contacts public-key) (let [contact (get contacts public-key)

View File

@ -10,7 +10,7 @@
[status-im.transport.message.public-chat :as transport.public-chat] [status-im.transport.message.public-chat :as transport.public-chat]
[status-im.data-store.accounts :as data-store.accounts] [status-im.data-store.accounts :as data-store.accounts]
[status-im.transport.chat.core :as transport.chat] [status-im.transport.chat.core :as transport.chat]
[status-im.accounts.db :as accounts.db] [status-im.accounts.model :as accounts.model]
[status-im.mailserver.core :as mailserver])) [status-im.mailserver.core :as mailserver]))
(defn topic [pk] (defn topic [pk]
@ -42,7 +42,7 @@
"We can stop listening to contact codes when we don't have any active chat "We can stop listening to contact codes when we don't have any active chat
with the user (one-to-one or group-chat), and it is not in our contacts" with the user (one-to-one or group-chat), and it is not in our contacts"
[{:keys [db] :as cofx} their-public-key] [{:keys [db] :as cofx} their-public-key]
(let [my-public-key (accounts.db/current-public-key cofx) (let [my-public-key (accounts.model/current-public-key cofx)
active-group-chats (filter (fn [{:keys [is-active members members-joined]}] active-group-chats (filter (fn [{:keys [is-active members members-joined]}]
(and is-active (and is-active
(contains? members-joined my-public-key) (contains? members-joined my-public-key)
@ -64,11 +64,11 @@
(fx/defn init [cofx] (fx/defn init [cofx]
(log/debug "initializing contact-code") (log/debug "initializing contact-code")
(let [current-public-key (accounts.db/current-public-key cofx)] (let [current-public-key (accounts.model/current-public-key cofx)]
(listen cofx current-public-key))) (listen cofx current-public-key)))
(defn publish! [{:keys [web3 now] :as cofx}] (defn publish! [{:keys [web3 now] :as cofx}]
(let [current-public-key (accounts.db/current-public-key cofx) (let [current-public-key (accounts.model/current-public-key cofx)
chat-id (topic current-public-key) chat-id (topic current-public-key)
peers-count (:peers-count @re-frame.db/app-db) peers-count (:peers-count @re-frame.db/app-db)
last-published (get-in last-published (get-in

View File

@ -9,7 +9,7 @@
[status-im.data-store.contact-recovery :as data-store.contact-recovery] [status-im.data-store.contact-recovery :as data-store.contact-recovery]
[status-im.utils.config :as config] [status-im.utils.config :as config]
[status-im.utils.fx :as fx] [status-im.utils.fx :as fx]
[status-im.accounts.db :as accounts.db] [status-im.accounts.model :as accounts.model]
[status-im.contact.core :as models.contact])) [status-im.contact.core :as models.contact]))
;; How long do we wait until we process a contact-recovery again? ;; How long do we wait until we process a contact-recovery again?
@ -25,7 +25,7 @@
"Check that a contact-recovery for the given user is not already in process, if not "Check that a contact-recovery for the given user is not already in process, if not
fetch from db and check" fetch from db and check"
[{:keys [db now] :as cofx} public-key] [{:keys [db now] :as cofx} public-key]
(let [my-public-key (accounts.db/current-public-key cofx)] (let [my-public-key (accounts.model/current-public-key cofx)]
(when (and (not= public-key my-public-key) (when (and (not= public-key my-public-key)
(not (get-in db [:contact-recovery/pop-up public-key]))) (not (get-in db [:contact-recovery/pop-up public-key])))
{:db (update db :contact-recovery/pop-up conj public-key) {:db (update db :contact-recovery/pop-up conj public-key)
@ -51,7 +51,7 @@
"Send an empty message to the user, which will carry device information" "Send an empty message to the user, which will carry device information"
[cofx public-key] [cofx public-key]
(let [{:keys [web3]} (:db cofx) (let [{:keys [web3]} (:db cofx)
current-public-key (accounts.db/current-public-key cofx)] current-public-key (accounts.model/current-public-key cofx)]
{:shh/send-direct-message {:shh/send-direct-message
[{:web3 web3 [{:web3 web3
:src current-public-key :src current-public-key

View File

@ -32,7 +32,6 @@
[status-im.init.core :as init] [status-im.init.core :as init]
[status-im.log-level.core :as log-level] [status-im.log-level.core :as log-level]
[status-im.mailserver.core :as mailserver] [status-im.mailserver.core :as mailserver]
[status-im.network.core :as network]
[status-im.node.core :as node] [status-im.node.core :as node]
[status-im.notifications.core :as notifications] [status-im.notifications.core :as notifications]
[status-im.pairing.core :as pairing] [status-im.pairing.core :as pairing]
@ -489,71 +488,6 @@
(fn [cofx [_ request-id]] (fn [cofx [_ request-id]]
(mailserver/handle-request-success cofx request-id))) (mailserver/handle-request-success cofx request-id)))
;; network module
(handlers/register-handler-fx
:network.ui/save-network-pressed
[(re-frame/inject-cofx :random-id-generator)]
(fn [cofx]
(network/save-network cofx)))
(handlers/register-handler-fx
:network.ui/input-changed
(fn [cofx [_ input-key value]]
(network/set-input cofx input-key value)))
(handlers/register-handler-fx
:network.ui/add-network-pressed
(fn [cofx]
(network/edit cofx)))
(handlers/register-handler-fx
:network.callback/non-rpc-network-saved
(fn [_ _]
{:ui/close-application nil}))
(handlers/register-handler-fx
:network.ui/save-non-rpc-network-pressed
(fn [cofx [_ network]]
(network/save-non-rpc-network cofx network)))
(handlers/register-handler-fx
:network.ui/save-rpc-network-pressed
(fn [cofx [_ network]]
(network/save-rpc-network cofx network)))
(handlers/register-handler-fx
:network.ui/remove-network-confirmed
(fn [cofx [_ network]]
(network/remove-network cofx network [:navigate-back])))
(handlers/register-handler-fx
:network.ui/connect-network-pressed
(fn [cofx [_ network-id]]
(network/connect cofx {:network-id network-id
:on-failure (fn [{:keys [reason]} _]
(utils/show-popup "Error" (str reason)))})))
(handlers/register-handler-fx
:network.ui/delete-network-pressed
(fn [cofx [_ network]]
(network/delete cofx {:network network})))
(handlers/register-handler-fx
:network.ui/network-entry-pressed
(fn [cofx [_ network]]
(network/open-network-details cofx network)))
(handlers/register-handler-fx
:network/connection-status-changed
(fn [{db :db :as cofx} [_ is-connected?]]
(network/handle-connection-status-change cofx is-connected?)))
(handlers/register-handler-fx
:network/network-status-changed
(fn [cofx [_ data]]
(network/handle-network-status-change cofx data)))
;; fleet module ;; fleet module
(handlers/register-handler-fx (handlers/register-handler-fx

View File

@ -1,7 +1,7 @@
(ns status-im.extensions.capacities.network (ns status-im.extensions.capacities.network
(:require [status-im.utils.handlers :as handlers] (:require [status-im.utils.handlers :as handlers]
[status-im.i18n :as i18n] [status-im.i18n :as i18n]
[status-im.network.core :as network])) [status-im.network.module :as network]))
(handlers/register-handler-fx (handlers/register-handler-fx
:extensions/network-on-success :extensions/network-on-success

View File

@ -4,7 +4,7 @@
[clojure.spec.alpha :as spec] [clojure.spec.alpha :as spec]
[clojure.string :as string] [clojure.string :as string]
[re-frame.core :as re-frame] [re-frame.core :as re-frame]
[status-im.accounts.db :as accounts.db] [status-im.accounts.model :as accounts.model]
[status-im.chat.models :as models.chat] [status-im.chat.models :as models.chat]
[status-im.chat.models.message :as models.message] [status-im.chat.models.message :as models.message]
[status-im.contact.core :as models.contact] [status-im.contact.core :as models.contact]
@ -120,7 +120,7 @@
members (clojure.set/union (get-in cofx [:db :chats chat-id :contacts]) members (clojure.set/union (get-in cofx [:db :chats chat-id :contacts])
removed-members) removed-members)
{:keys [web3]} (:db cofx) {:keys [web3]} (:db cofx)
current-public-key (accounts.db/current-public-key cofx) current-public-key (accounts.model/current-public-key cofx)
;; If a member has joined is listening to the shared topic and we send there ;; If a member has joined is listening to the shared topic and we send there
;; to ourselves we send always on contact-discovery to make sure all devices ;; to ourselves we send always on contact-discovery to make sure all devices
;; are informed, in case of dropped messages. ;; are informed, in case of dropped messages.
@ -202,7 +202,7 @@
(fx/defn create (fx/defn create
"Format group update message and sign membership" "Format group update message and sign membership"
[{:keys [db random-guid-generator] :as cofx} group-name] [{:keys [db random-guid-generator] :as cofx} group-name]
(let [my-public-key (accounts.db/current-public-key cofx) (let [my-public-key (accounts.model/current-public-key cofx)
chat-id (str (random-guid-generator) my-public-key) chat-id (str (random-guid-generator) my-public-key)
selected-contacts (:group/selected-contacts db) selected-contacts (:group/selected-contacts db)
clock-value (utils.clocks/send 0) clock-value (utils.clocks/send 0)
@ -227,7 +227,7 @@
(fx/defn remove-member (fx/defn remove-member
"Format group update message and sign membership" "Format group update message and sign membership"
[{:keys [db] :as cofx} chat-id member] [{:keys [db] :as cofx} chat-id member]
(let [my-public-key (accounts.db/current-public-key cofx) (let [my-public-key (accounts.model/current-public-key cofx)
last-clock-value (get-last-clock-value cofx chat-id) last-clock-value (get-last-clock-value cofx chat-id)
chat (get-in cofx [:db :chats chat-id]) chat (get-in cofx [:db :chats chat-id])
remove-event {:type "member-removed" remove-event {:type "member-removed"
@ -243,7 +243,7 @@
(fx/defn join-chat (fx/defn join-chat
"Format group update message and sign membership" "Format group update message and sign membership"
[cofx chat-id] [cofx chat-id]
(let [my-public-key (accounts.db/current-public-key cofx) (let [my-public-key (accounts.model/current-public-key cofx)
last-clock-value (get-last-clock-value cofx chat-id) last-clock-value (get-last-clock-value cofx chat-id)
chat (get-in cofx [:db :chats chat-id]) chat (get-in cofx [:db :chats chat-id])
event (member-joined-event last-clock-value my-public-key)] event (member-joined-event last-clock-value my-public-key)]
@ -264,7 +264,7 @@
(fx/defn make-admin (fx/defn make-admin
"Format group update with make admin message and sign membership" "Format group update with make admin message and sign membership"
[{:keys [db] :as cofx} chat-id member] [{:keys [db] :as cofx} chat-id member]
(let [my-public-key (accounts.db/current-public-key cofx) (let [my-public-key (accounts.model/current-public-key cofx)
last-clock-value (get-last-clock-value cofx chat-id) last-clock-value (get-last-clock-value cofx chat-id)
chat (get-in cofx [:db :chats chat-id]) chat (get-in cofx [:db :chats chat-id])
event {:type "admins-added" event {:type "admins-added"
@ -284,12 +284,12 @@
events [(members-added-event last-clock-value selected-participants)]] events [(members-added-event last-clock-value selected-participants)]]
{:group-chats/sign-membership {:chat-id current-chat-id {:group-chats/sign-membership {:chat-id current-chat-id
:from (accounts.db/current-public-key cofx) :from (accounts.model/current-public-key cofx)
:events events}})) :events events}}))
(fx/defn remove (fx/defn remove
"Remove & leave chat" "Remove & leave chat"
[{:keys [db] :as cofx} chat-id] [{:keys [db] :as cofx} chat-id]
(let [my-public-key (accounts.db/current-public-key cofx)] (let [my-public-key (accounts.model/current-public-key cofx)]
(fx/merge cofx (fx/merge cofx
(remove-member chat-id my-public-key) (remove-member chat-id my-public-key)
(models.chat/remove-chat chat-id)))) (models.chat/remove-chat chat-id))))
@ -463,7 +463,7 @@
"Listen/Tear down the shared topic/contact-codes. Stop listening for members who "Listen/Tear down the shared topic/contact-codes. Stop listening for members who
have left the chat" have left the chat"
[cofx chat-id previous-chat] [cofx chat-id previous-chat]
(let [my-public-key (accounts.db/current-public-key cofx) (let [my-public-key (accounts.model/current-public-key cofx)
new-chat (get-in cofx [:db :chats chat-id])] new-chat (get-in cofx [:db :chats chat-id])]
;; If we left the chat, teardown, otherwise upsert ;; If we left the chat, teardown, otherwise upsert
(if (and (group-chats.db/joined? my-public-key previous-chat) (if (and (group-chats.db/joined? my-public-key previous-chat)
@ -495,7 +495,7 @@
(let [previous-chat (get-in cofx [:db :chats chat-id]) (let [previous-chat (get-in cofx [:db :chats chat-id])
all-updates (clojure.set/union (set (:membership-updates previous-chat)) all-updates (clojure.set/union (set (:membership-updates previous-chat))
(set (:membership-updates membership-update))) (set (:membership-updates membership-update)))
my-public-key (accounts.db/current-public-key cofx) my-public-key (accounts.model/current-public-key cofx)
unwrapped-events (group-chats.db/unwrap-events all-updates) unwrapped-events (group-chats.db/unwrap-events all-updates)
new-group (build-group unwrapped-events) new-group (build-group unwrapped-events)
member? (contains? (:contacts new-group) my-public-key)] member? (contains? (:contacts new-group) my-public-key)]
@ -527,7 +527,7 @@
[{:keys [db] :as cofx} {:keys [chat-id] :as signed-events}] [{:keys [db] :as cofx} {:keys [chat-id] :as signed-events}]
(let [old-chat (get-in db [:chats chat-id]) (let [old-chat (get-in db [:chats chat-id])
updated-chat (update old-chat :membership-updates conj signed-events) updated-chat (update old-chat :membership-updates conj signed-events)
my-public-key (accounts.db/current-public-key cofx) my-public-key (accounts.model/current-public-key cofx)
group-update (chat->group-update chat-id updated-chat) group-update (chat->group-update chat-id updated-chat)
new-group-fx (handle-membership-update group-update nil my-public-key) new-group-fx (handle-membership-update group-update nil my-public-key)
;; We need to send to users who have been removed as well ;; We need to send to users who have been removed as well

View File

@ -1,7 +1,7 @@
(ns ^{:doc "Mailserver events and API"} (ns ^{:doc "Mailserver events and API"}
status-im.mailserver.core status-im.mailserver.core
(:require [re-frame.core :as re-frame] (:require [re-frame.core :as re-frame]
[status-im.accounts.db :as accounts.db] [status-im.accounts.model :as accounts.model]
[status-im.fleet.core :as fleet] [status-im.fleet.core :as fleet]
[status-im.native-module.core :as status] [status-im.native-module.core :as status]
[status-im.utils.platform :as platform] [status-im.utils.platform :as platform]
@ -504,7 +504,7 @@
"when host reconnects, reset request-to and "when host reconnects, reset request-to and
reconnect to mailserver" reconnect to mailserver"
[{:keys [db] :as cofx} is-connected?] [{:keys [db] :as cofx} is-connected?]
(when (and (accounts.db/logged-in? cofx) (when (and (accounts.model/logged-in? cofx)
is-connected?) is-connected?)
(fx/merge cofx (fx/merge cofx
(reset-request-to) (reset-request-to)
@ -813,7 +813,7 @@
(fx/defn handle-request-completed (fx/defn handle-request-completed
[{{:keys [chats]} :db :as cofx} [{{:keys [chats]} :db :as cofx}
{:keys [requestID lastEnvelopeHash cursor errorMessage]}] {:keys [requestID lastEnvelopeHash cursor errorMessage]}]
(when (accounts.db/logged-in? cofx) (when (accounts.model/logged-in? cofx)
(if (empty? errorMessage) (if (empty? errorMessage)
(let [never-synced-chats-in-request (let [never-synced-chats-in-request
(->> (chats->never-synced-public-chats chats) (->> (chats->never-synced-public-chats chats)
@ -908,7 +908,7 @@
(fx/defn fetch-history (fx/defn fetch-history
[{:keys [db] :as cofx} chat-id {:keys [from to]}] [{:keys [db] :as cofx} chat-id {:keys [from to]}]
(log/debug "fetch-history" "chat-id:" chat-id "from-timestamp:" from) (log/debug "fetch-history" "chat-id:" chat-id "from-timestamp:" from)
(let [public-key (accounts.db/current-public-key cofx) (let [public-key (accounts.model/current-public-key cofx)
topic (or (get-in db [:transport/chats chat-id :topic]) topic (or (get-in db [:transport/chats chat-id :topic])
(transport.topic/public-key->discovery-topic-hash public-key))] (transport.topic/public-key->discovery-topic-hash public-key))]
(fx/merge cofx (fx/merge cofx

View File

@ -1,7 +1,7 @@
(ns status-im.models.dev-server (ns status-im.models.dev-server
(:require [clojure.string :as string] (:require [clojure.string :as string]
[status-im.browser.core :as browser] [status-im.browser.core :as browser]
[status-im.network.core :as network] [status-im.network.module :as network]
[status-im.utils.fx :as fx])) [status-im.utils.fx :as fx]))
(defn start (defn start

View File

@ -8,13 +8,13 @@
[status-im.i18n :as i18n] [status-im.i18n :as i18n]
[status-im.mailserver.core :as mailserver] [status-im.mailserver.core :as mailserver]
[status-im.native-module.core :as status] [status-im.native-module.core :as status]
[status-im.network.net-info :as net-info]
[status-im.ui.screens.mobile-network-settings.events :as mobile-network] [status-im.ui.screens.mobile-network-settings.events :as mobile-network]
[status-im.ui.screens.navigation :as navigation] [status-im.ui.screens.navigation :as navigation]
[status-im.utils.fx :as fx] [status-im.utils.fx :as fx]
[status-im.utils.handlers :as handlers] [status-im.utils.handlers :as handlers]
[status-im.utils.http :as http] [status-im.utils.http :as http]
[status-im.utils.types :as types])) [status-im.utils.types :as types]
status-im.network.subs))
(def url-regex (def url-regex
#"https?://(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}(\.[a-z]{2,6})?\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)") #"https?://(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}(\.[a-z]{2,6})?\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)")
@ -245,12 +245,6 @@
{:data (get-in cofx [:db :networks/manage]) {:data (get-in cofx [:db :networks/manage])
:success-event [:navigate-back]})) :success-event [:navigate-back]}))
(fx/defn handle-connection-status-change
[{:keys [db] :as cofx} is-connected?]
(fx/merge cofx
{:db (assoc db :network-status (if is-connected? :online :offline))}
(mailserver/network-connection-status-changed is-connected?)))
(defn- navigate-to-network-details (defn- navigate-to-network-details
[cofx network show-warning?] [cofx network show-warning?]
(fx/merge cofx (fx/merge cofx
@ -275,33 +269,3 @@
;; Otherwise, we show an explanation dialog to a user if the current fleet does not suport LES ;; Otherwise, we show an explanation dialog to a user if the current fleet does not suport LES
{:utils/show-popup {:title "LES not supported" {:utils/show-popup {:title "LES not supported"
:content (not-supported-warning fleet)}}))) :content (not-supported-warning fleet)}})))
(fx/defn handle-network-status-change
[{:keys [db] :as cofx} {:keys [type] :as data}]
(let [old-network-type (:network/type db)]
(fx/merge
cofx
{:db (assoc db :network/type type)
:network/notify-status-go data}
(when (= "none" old-network-type)
(chaos-mode/check-chaos-mode))
(mobile-network/on-network-status-change))))
(re-frame/reg-fx
:network/listen-to-network-status
(fn []
(let [callback-event #(re-frame/dispatch [:network/network-status-changed %])]
(net-info/net-info callback-event)
(net-info/add-net-info-listener callback-event))))
(re-frame/reg-fx
:network/listen-to-connection-status
(fn []
(let [callback-event #(re-frame/dispatch [:network/connection-status-changed %])]
(net-info/is-connected? callback-event)
(net-info/add-connection-listener callback-event))))
(re-frame/reg-fx
:network/notify-status-go
(fn [data]
(status/connection-change data)))

View File

@ -0,0 +1,58 @@
(ns status-im.network.events
(:require [status-im.network.core :as network]
[status-im.utils.handlers :as handlers]
[re-frame.core :as re-frame]
[status-im.utils.utils :as utils]))
(handlers/register-handler-fx
:network.ui/save-network-pressed
[(re-frame/inject-cofx :random-id-generator)]
(fn [cofx]
(network/save-network cofx)))
(handlers/register-handler-fx
:network.ui/input-changed
(fn [cofx [_ input-key value]]
(network/set-input cofx input-key value)))
(handlers/register-handler-fx
:network.ui/add-network-pressed
(fn [cofx]
(network/edit cofx)))
(handlers/register-handler-fx
:network.callback/non-rpc-network-saved
(fn [_ _]
{:ui/close-application nil}))
(handlers/register-handler-fx
:network.ui/save-non-rpc-network-pressed
(fn [cofx [_ network]]
(network/save-non-rpc-network cofx network)))
(handlers/register-handler-fx
:network.ui/save-rpc-network-pressed
(fn [cofx [_ network]]
(network/save-rpc-network cofx network)))
(handlers/register-handler-fx
:network.ui/remove-network-confirmed
(fn [cofx [_ network]]
(network/remove-network cofx network [:navigate-back])))
(handlers/register-handler-fx
:network.ui/connect-network-pressed
(fn [cofx [_ network-id]]
(network/connect cofx {:network-id network-id
:on-failure (fn [{:keys [reason]} _]
(utils/show-popup "Error" (str reason)))})))
(handlers/register-handler-fx
:network.ui/delete-network-pressed
(fn [cofx [_ network]]
(network/delete cofx {:network network})))
(handlers/register-handler-fx
:network.ui/network-entry-pressed
(fn [cofx [_ network]]
(network/open-network-details cofx network)))

View File

@ -0,0 +1,52 @@
(ns status-im.network.module
(:require-macros [status-im.modules :as modules])
(:require status-im.network.net-info
status-im.network.ui.db
[re-frame.core :as re-frame]
[status-im.ethereum.core :as ethereum]))
(modules/defmodule network
{:save 'status-im.network.core/save
:connect 'status-im.network.core/connect
:delete 'status-im.network.core/delete
:get-network-id-for-chain-id 'status-im.network.core/get-network-id-for-chain-id
:get-network 'status-im.network.core/get-network
:remove-network 'status-im.network.core/remove-network
:edit-network-view 'status-im.network.ui.edit-network.views/edit-network
:network-settings-view 'status-im.network.ui.views/network-settings
:network-details-view 'status-im.network.ui.network-details.views/network-details})
(defn save [& args]
(apply (get-symbol :save) args))
(defn connect [& args]
(apply (get-symbol :connect) args))
(defn delete [& args]
(apply (get-symbol :delete) args))
(defn get-network-id-for-chain-id [& args]
(apply (get-symbol :get-network-id-for-chain-id) args))
(defn get-network [& args]
(apply (get-symbol :get-network) args))
(defn remove-network [& args]
(apply (get-symbol :remove-network) args))
(defn edit-network-view []
[(get-symbol :edit-network-view)])
(defn network-settings-view []
[(get-symbol :network-settings-view)])
(defn network-details-view []
[(get-symbol :network-details-view)])
;; Preloaded handlers, subs, functions
(re-frame/reg-sub
:get-network-id
:<- [:network]
(fn [network]
(ethereum/network->chain-id network)))

View File

@ -1,7 +1,14 @@
(ns status-im.network.net-info (ns status-im.network.net-info
(:require [taoensso.timbre :as log] (:require [taoensso.timbre :as log]
[status-im.ui.components.react :as react-components] [status-im.ui.components.react :as react-components]
[status-im.utils.platform :as platform])) [status-im.utils.platform :as platform]
[re-frame.core :as re-frame]
[status-im.utils.fx :as fx]
[status-im.mailserver.core :as mailserver]
[status-im.utils.handlers :as handlers]
[status-im.chaos-mode.core :as chaos-mode]
[status-im.native-module.core :as status]
[status-im.ui.screens.mobile-network-settings.events :as mobile-network]))
(defn is-connected? [callback] (defn is-connected? [callback]
(when (react-components/net-info) (when (react-components/net-info)
@ -34,3 +41,49 @@
(when (react-components/net-info) (when (react-components/net-info)
(.addEventListener (react-components/net-info) "connectionChange" (.addEventListener (react-components/net-info) "connectionChange"
(wrap-net-info listener)))) (wrap-net-info listener))))
(re-frame/reg-fx
:network/listen-to-network-status
(fn []
(let [callback-event #(re-frame/dispatch [:network/network-status-changed %])]
(net-info callback-event)
(add-net-info-listener callback-event))))
(re-frame/reg-fx
:network/listen-to-connection-status
(fn []
(let [callback-event #(re-frame/dispatch [:network/connection-status-changed %])]
(is-connected? callback-event)
(add-connection-listener callback-event))))
(fx/defn handle-connection-status-change
[{:keys [db] :as cofx} is-connected?]
(fx/merge cofx
{:db (assoc db :network-status (if is-connected? :online :offline))}
(mailserver/network-connection-status-changed is-connected?)))
(handlers/register-handler-fx
:network/connection-status-changed
(fn [{db :db :as cofx} [_ is-connected?]]
(handle-connection-status-change cofx is-connected?)))
(fx/defn handle-network-status-change
[{:keys [db] :as cofx} {:keys [type] :as data}]
(let [old-network-type (:network/type db)]
(fx/merge
cofx
{:db (assoc db :network/type type)
:network/notify-status-go data}
(when (= "none" old-network-type)
(chaos-mode/check-chaos-mode))
(mobile-network/on-network-status-change))))
(handlers/register-handler-fx
:network/network-status-changed
(fn [cofx [_ data]]
(handle-network-status-change cofx data)))
(re-frame/reg-fx
:network/notify-status-go
(fn [data]
(status/connection-change data)))

View File

@ -0,0 +1,41 @@
(ns status-im.network.subs
(:require [re-frame.core :as re-frame]
[status-im.ethereum.core :as ethereum]))
(defn- filter-networks [network-type]
(fn [network]
(let [chain-id (ethereum/network->chain-id network)
testnet? (ethereum/testnet? chain-id)
custom? (:custom? network)]
(case network-type
:custom custom?
:mainnet (and (not custom?) (not testnet?))
:testnet (and (not custom?) testnet?)))))
(defn- label-networks [default-networks]
(fn [network]
(let [custom? (not (contains? default-networks (:id network)))]
(assoc network :custom? custom?))))
(re-frame/reg-sub
:get-networks
:<- [:account/account]
:<- [:networks/networks]
(fn [[{:keys [networks]} default-networks]]
(let [networks (map (label-networks default-networks) (sort-by :name (vals networks)))
types [:mainnet :testnet :custom]]
(zipmap
types
(map #(filter (filter-networks %) networks) types)))))
(re-frame/reg-sub
:get-manage-network
:<- [:networks/manage]
(fn [manage]
manage))
(re-frame/reg-sub
:manage-network-valid?
:<- [:get-manage-network]
(fn [manage]
(not-any? :error (vals manage))))

View File

@ -1,4 +1,4 @@
(ns status-im.ui.screens.network-settings.db (ns status-im.network.ui.db
(:require [cljs.spec.alpha :as spec])) (:require [cljs.spec.alpha :as spec]))
(spec/def :networks/id string?) (spec/def :networks/id string?)

View File

@ -1,4 +1,4 @@
(ns status-im.ui.screens.network-settings.edit-network.styles (ns status-im.network.ui.edit-network.styles
(:require-macros [status-im.utils.styles :refer [defstyle]]) (:require-macros [status-im.utils.styles :refer [defstyle]])
(:require [status-im.ui.components.colors :as colors] (:require [status-im.ui.components.colors :as colors]
[status-im.ui.components.styles :as styles])) [status-im.ui.components.styles :as styles]))

View File

@ -1,4 +1,4 @@
(ns status-im.ui.screens.network-settings.edit-network.views (ns status-im.network.ui.edit-network.views
(:require-macros [status-im.utils.views :as views]) (:require-macros [status-im.utils.views :as views])
(:require (:require
[re-frame.core :as re-frame] [re-frame.core :as re-frame]
@ -10,7 +10,7 @@
[status-im.ui.components.toolbar.view :as toolbar] [status-im.ui.components.toolbar.view :as toolbar]
[status-im.ui.components.list.views :as list] [status-im.ui.components.list.views :as list]
[status-im.ui.components.text-input.view :as text-input] [status-im.ui.components.text-input.view :as text-input]
[status-im.ui.screens.network-settings.edit-network.styles :as styles] [status-im.network.ui.edit-network.styles :as styles]
[clojure.string :as string])) [clojure.string :as string]))
(defn- render-network-type [manage-network type] (defn- render-network-type [manage-network type]

View File

@ -1,4 +1,4 @@
(ns status-im.ui.screens.network-settings.network-details.views (ns status-im.network.ui.network-details.views
(:require-macros [status-im.utils.views :as views]) (:require-macros [status-im.utils.views :as views])
(:require (:require
[re-frame.core :as rf] [re-frame.core :as rf]
@ -8,8 +8,8 @@
[status-im.i18n :as i18n] [status-im.i18n :as i18n]
[status-im.ui.components.styles :as components.styles] [status-im.ui.components.styles :as components.styles]
[status-im.ui.components.common.common :as components.common] [status-im.ui.components.common.common :as components.common]
[status-im.ui.screens.network-settings.styles :as st] [status-im.network.ui.styles :as st]
[status-im.ui.screens.network-settings.views :as network-settings])) [status-im.network.ui.views :as network-settings]))
(views/defview network-details [] (views/defview network-details []
(views/letsubs [{:keys [networks/selected-network]} [:get-screen-params] (views/letsubs [{:keys [networks/selected-network]} [:get-screen-params]

View File

@ -1,4 +1,4 @@
(ns status-im.ui.screens.network-settings.styles (ns status-im.network.ui.styles
(:require-macros [status-im.utils.styles :refer [defstyle defnstyle]]) (:require-macros [status-im.utils.styles :refer [defstyle defnstyle]])
(:require [status-im.ui.components.colors :as colors] (:require [status-im.ui.components.colors :as colors]
[status-im.ui.components.styles :as components.styles])) [status-im.ui.components.styles :as components.styles]))

View File

@ -1,7 +1,6 @@
(ns status-im.ui.screens.network-settings.views (ns status-im.network.ui.views
(:require-macros [status-im.utils.views :as views]) (:require-macros [status-im.utils.views :as views])
(:require [re-frame.core :as re-frame] (:require [re-frame.core :as re-frame]
[reagent.core :as reagent]
[status-im.i18n :as i18n] [status-im.i18n :as i18n]
[status-im.ui.components.react :as react] [status-im.ui.components.react :as react]
[status-im.ui.components.icons.vector-icons :as vector-icons] [status-im.ui.components.icons.vector-icons :as vector-icons]
@ -10,7 +9,7 @@
[status-im.ui.components.toolbar.view :as toolbar] [status-im.ui.components.toolbar.view :as toolbar]
[status-im.ui.components.toolbar.actions :as toolbar.actions] [status-im.ui.components.toolbar.actions :as toolbar.actions]
[status-im.ui.components.styles :as components.styles] [status-im.ui.components.styles :as components.styles]
[status-im.ui.screens.network-settings.styles :as styles])) [status-im.network.ui.styles :as styles]))
(defn- network-icon [connected? size] (defn- network-icon [connected? size]
[react/view (styles/network-icon connected? size) [react/view (styles/network-icon connected? size)

View File

@ -1,7 +1,11 @@
(ns status-im.notifications.core (ns status-im.notifications.core
(:require [goog.object :as object] (:require [goog.object :as object]
[re-frame.core :as re-frame] [re-frame.core :as re-frame]
[status-im.accounts.db :as accounts.db] [status-im.react-native.js-dependencies :as rn]
[taoensso.timbre :as log]
[status-im.i18n :as i18n]
[status-im.accounts.model :as accounts.model]
[status-im.contact.db :as contact.db]
[status-im.chat.models :as chat-model] [status-im.chat.models :as chat-model]
[status-im.contact.db :as contact.db] [status-im.contact.db :as contact.db]
[status-im.ethereum.core :as ethereum] [status-im.ethereum.core :as ethereum]
@ -96,7 +100,7 @@
(if-let [account-pubkey (hash->pubkey contact-pubkey-or-hash (if-let [account-pubkey (hash->pubkey contact-pubkey-or-hash
(-> db :accounts/accounts vals))] (-> db :accounts/accounts vals))]
account-pubkey account-pubkey
(if (accounts.db/logged-in? cofx) (if (accounts.model/logged-in? cofx)
;; TODO: for simplicity we're doing a linear lookup of the contacts, ;; TODO: for simplicity we're doing a linear lookup of the contacts,
;; but we might want to build a map of hashed pubkeys to pubkeys ;; but we might want to build a map of hashed pubkeys to pubkeys
;; for this purpose ;; for this purpose
@ -145,7 +149,7 @@
:id id}) :id id})
(defn- get-contact-name [{:keys [db] :as cofx} from] (defn- get-contact-name [{:keys [db] :as cofx} from]
(if (accounts.db/logged-in? cofx) (if (accounts.model/logged-in? cofx)
(:name (hash->contact from (-> db :contacts/contacts vals))) (:name (hash->contact from (-> db :contacts/contacts vals)))
(anonymize-pubkey from))) (anonymize-pubkey from)))
@ -210,7 +214,7 @@
"Ignore push notifications from unknown contacts or removed chats" "Ignore push notifications from unknown contacts or removed chats"
[{:keys [db] :as cofx} {:keys [from] :as rehydrated-payload}] [{:keys [db] :as cofx} {:keys [from] :as rehydrated-payload}]
(and (valid-notification-payload? rehydrated-payload) (and (valid-notification-payload? rehydrated-payload)
(accounts.db/logged-in? cofx) (accounts.model/logged-in? cofx)
(some #(= (:public-key %) from) (some #(= (:public-key %) from)
(contact.db/get-active-contacts (:contacts/contacts db))) (contact.db/get-active-contacts (:contacts/contacts db)))
(some #(= (:chat-id %) from) (some #(= (:chat-id %) from)
@ -244,7 +248,7 @@
(fx/defn handle-push-notification-open (fx/defn handle-push-notification-open
[{:keys [db] :as cofx} decoded-payload {:keys [stored?] :as ctx}] [{:keys [db] :as cofx} decoded-payload {:keys [stored?] :as ctx}]
(let [current-public-key (accounts.db/current-public-key cofx) (let [current-public-key (accounts.model/current-public-key cofx)
nav-opts (when stored? {:navigation-reset? true}) nav-opts (when stored? {:navigation-reset? true})
rehydrated-payload (rehydrate-payload cofx decoded-payload) rehydrated-payload (rehydrate-payload cofx decoded-payload)
from (:from rehydrated-payload) from (:from rehydrated-payload)
@ -334,7 +338,7 @@
(fx/defn process-stored-event [{:keys [db] :as cofx} address stored-pns] (fx/defn process-stored-event [{:keys [db] :as cofx} address stored-pns]
(when-not platform/desktop? (when-not platform/desktop?
(if (accounts.db/logged-in? cofx) (if (accounts.model/logged-in? cofx)
(let [current-account (:account/account db) (let [current-account (:account/account db)
current-address (:address current-account) current-address (:address current-account)
current-account-pubkey (:public-key current-account) current-account-pubkey (:public-key current-account)

View File

@ -9,16 +9,12 @@
[status-im.utils.config :as config] [status-im.utils.config :as config]
[status-im.utils.platform :as utils.platform] [status-im.utils.platform :as utils.platform]
[status-im.chat.models :as models.chat] [status-im.chat.models :as models.chat]
[status-im.transport.message.public-chat :as transport.public-chat] [status-im.accounts.model :as accounts.model]
[status-im.accounts.db :as accounts.db]
[status-im.transport.message.protocol :as protocol] [status-im.transport.message.protocol :as protocol]
[status-im.transport.utils :as transport.utils]
[status-im.data-store.installations :as data-store.installations] [status-im.data-store.installations :as data-store.installations]
[status-im.native-module.core :as native-module] [status-im.native-module.core :as native-module]
[status-im.utils.identicon :as identicon] [status-im.utils.identicon :as identicon]
[status-im.contact.core :as contact] [status-im.contact.core :as contact]
[status-im.contact-code.core :as contact-code]
[status-im.data-store.contacts :as data-store.contacts]
[status-im.data-store.accounts :as data-store.accounts] [status-im.data-store.accounts :as data-store.accounts]
[status-im.transport.message.pairing :as transport.pairing])) [status-im.transport.message.pairing :as transport.pairing]))
@ -49,7 +45,7 @@
(defn send-pair-installation [cofx payload] (defn send-pair-installation [cofx payload]
(let [{:keys [web3]} (:db cofx) (let [{:keys [web3]} (:db cofx)
current-public-key (accounts.db/current-public-key cofx)] current-public-key (accounts.model/current-public-key cofx)]
{:shh/send-pairing-message {:web3 web3 {:shh/send-pairing-message {:web3 web3
:src current-public-key :src current-public-key
:payload payload}})) :payload payload}}))
@ -109,7 +105,7 @@
:has-bundle? true}] :has-bundle? true}]
(when (when
(and (= (:identity bundle) (and (= (:identity bundle)
(accounts.db/current-public-key cofx)) (accounts.model/current-public-key cofx))
(not= (get-in db [:account/account :installation-id]) installation-id) (not= (get-in db [:account/account :installation-id]) installation-id)
(not (get-in db [:pairing/installations installation-id]))) (not (get-in db [:pairing/installations installation-id])))
(fx/merge cofx (fx/merge cofx
@ -214,7 +210,7 @@
(fx/defn send-sync-installation [cofx payload] (fx/defn send-sync-installation [cofx payload]
(let [{:keys [web3]} (:db cofx) (let [{:keys [web3]} (:db cofx)
current-public-key (accounts.db/current-public-key cofx)] current-public-key (accounts.model/current-public-key cofx)]
{:shh/send-direct-message {:shh/send-direct-message
[{:web3 web3 [{:web3 web3
:src current-public-key :src current-public-key
@ -278,7 +274,7 @@
contacts)) contacts))
(defn handle-sync-installation [{:keys [db] :as cofx} {:keys [contacts account chat]} sender] (defn handle-sync-installation [{:keys [db] :as cofx} {:keys [contacts account chat]} sender]
(if (= sender (accounts.db/current-public-key cofx)) (if (= sender (accounts.model/current-public-key cofx))
(let [success-event [:message/messages-persisted [(or (:dedup-id cofx) (:js-obj cofx))]] (let [success-event [:message/messages-persisted [(or (:dedup-id cofx) (:js-obj cofx))]]
new-contacts (when (seq contacts) new-contacts (when (seq contacts)
(vals (merge-contacts (:contacts/contacts db) (vals (merge-contacts (:contacts/contacts db)
@ -302,7 +298,7 @@
fcm-token fcm-token
installation-id installation-id
device-type]} timestamp sender] device-type]} timestamp sender]
(if (and (= sender (accounts.db/current-public-key cofx)) (if (and (= sender (accounts.model/current-public-key cofx))
(not= (get-in db [:account/account :installation-id]) installation-id)) (not= (get-in db [:account/account :installation-id]) installation-id))
(let [installation {:installation-id installation-id (let [installation {:installation-id installation-id
:name name :name name

View File

@ -1,5 +1,5 @@
(ns status-im.signals.core (ns status-im.signals.core
(:require [status-im.accounts.db :as accounts.db] (:require [status-im.accounts.model :as accounts.model]
[status-im.accounts.login.core :as accounts.login] [status-im.accounts.login.core :as accounts.login]
[status-im.chat.models.loading :as chat.loading] [status-im.chat.models.loading :as chat.loading]
[status-im.contact-recovery.core :as contact-recovery] [status-im.contact-recovery.core :as contact-recovery]
@ -30,7 +30,7 @@
:login :login
(accounts.login/login) (accounts.login/login)
:verify-account :verify-account
(let [{:keys [address password]} (accounts.db/credentials cofx)] (let [{:keys [address password]} (accounts.model/credentials cofx)]
(fn [_] (fn [_]
{:accounts.login/verify {:accounts.login/verify
[address password (:realm-error db)]})) [address password (:realm-error db)]}))
@ -70,7 +70,7 @@
"envelope.expired" (transport.message/update-envelope-status cofx (:hash event) :not-sent) "envelope.expired" (transport.message/update-envelope-status cofx (:hash event) :not-sent)
"bundles.added" (pairing/handle-bundles-added cofx event) "bundles.added" (pairing/handle-bundles-added cofx event)
"mailserver.request.completed" (mailserver/handle-request-completed cofx event) "mailserver.request.completed" (mailserver/handle-request-completed cofx event)
"mailserver.request.expired" (when (accounts.db/logged-in? cofx) "mailserver.request.expired" (when (accounts.model/logged-in? cofx)
(mailserver/resend-request cofx {:request-id (:hash event)})) (mailserver/resend-request cofx {:request-id (:hash event)}))
"messages.decrypt.failed" (contact-recovery/handle-contact-recovery-fx cofx (:sender event)) "messages.decrypt.failed" (contact-recovery/handle-contact-recovery-fx cofx (:sender event))
"discovery.summary" (summary cofx event) "discovery.summary" (summary cofx event)

View File

@ -2,6 +2,7 @@
(:require [cljs.spec.alpha :as spec] (:require [cljs.spec.alpha :as spec]
[clojure.string :as string] [clojure.string :as string]
[re-frame.core :as re-frame] [re-frame.core :as re-frame]
[status-im.accounts.model :as accounts.model]
[status-im.accounts.db :as accounts.db] [status-im.accounts.db :as accounts.db]
[status-im.browser.core :as browser] [status-im.browser.core :as browser]
[status-im.chat.commands.core :as commands] [status-im.chat.commands.core :as commands]
@ -337,7 +338,7 @@
:get-account-creation-next-enabled? :get-account-creation-next-enabled?
:<- [:accounts/create] :<- [:accounts/create]
(fn [create] (fn [create]
(accounts.db/account-creation-next-enabled? create))) (accounts.model/account-creation-next-enabled? create)))
(re-frame/reg-sub (re-frame/reg-sub
:account-settings :account-settings
@ -912,52 +913,6 @@
{:search-filter search-filter {:search-filter search-filter
:chats filtered-chats}))) :chats filtered-chats})))
;;NETWORK SETTINGS =====================================================================================================
(re-frame/reg-sub
:get-network-id
:<- [:network]
(fn [network]
(ethereum/network->chain-id network)))
(defn- filter-networks [network-type]
(fn [network]
(let [chain-id (ethereum/network->chain-id network)
testnet? (ethereum/testnet? chain-id)
custom? (:custom? network)]
(case network-type
:custom custom?
:mainnet (and (not custom?) (not testnet?))
:testnet (and (not custom?) testnet?)))))
(defn- label-networks [default-networks]
(fn [network]
(let [custom? (not (contains? default-networks (:id network)))]
(assoc network :custom? custom?))))
(re-frame/reg-sub
:get-networks
:<- [:account/account]
:<- [:networks/networks]
(fn [[{:keys [networks] :as account} default-networks]]
(let [networks (map (label-networks default-networks) (sort-by :name (vals networks)))
types [:mainnet :testnet :custom]]
(zipmap
types
(map #(filter (filter-networks %) networks) types)))))
(re-frame/reg-sub
:get-manage-network
:<- [:networks/manage]
(fn [manage]
manage))
(re-frame/reg-sub
:manage-network-valid?
:<- [:get-manage-network]
(fn [manage]
(not-any? :error (vals manage))))
;;PAIRING ============================================================================================================== ;;PAIRING ==============================================================================================================
(re-frame/reg-sub (re-frame/reg-sub

View File

@ -1,7 +1,7 @@
(ns ^{:doc "Protocol API and protocol utils"} (ns ^{:doc "Protocol API and protocol utils"}
status-im.transport.message.protocol status-im.transport.message.protocol
(:require [cljs.spec.alpha :as spec] (:require [cljs.spec.alpha :as spec]
[status-im.accounts.db :as accounts.db] [status-im.accounts.model :as accounts.model]
[status-im.ethereum.core :as ethereum] [status-im.ethereum.core :as ethereum]
[status-im.transport.db :as transport.db] [status-im.transport.db :as transport.db]
[status-im.transport.partitioned-topic :as transport.topic] [status-im.transport.partitioned-topic :as transport.topic]
@ -43,7 +43,7 @@
(let [{:keys [web3]} db] (let [{:keys [web3]} db]
{:shh/send-public-message [{:web3 web3 {:shh/send-public-message [{:web3 web3
:success-event success-event :success-event success-event
:src (accounts.db/current-public-key cofx) :src (accounts.model/current-public-key cofx)
:chat chat-id :chat chat-id
:payload payload}]})) :payload payload}]}))
@ -55,7 +55,7 @@
{:keys [sym-key-id topic]} (get-in db [:transport/chats chat-id])] {:keys [sym-key-id topic]} (get-in db [:transport/chats chat-id])]
{:shh/post [{:web3 web3 {:shh/post [{:web3 web3
:success-event success-event :success-event success-event
:message (merge {:sig (accounts.db/current-public-key cofx) :message (merge {:sig (accounts.model/current-public-key cofx)
:symKeyID sym-key-id :symKeyID sym-key-id
:payload payload :payload payload
:topic (or topic :topic (or topic
@ -68,7 +68,7 @@
(let [{:keys [web3]} db] (let [{:keys [web3]} db]
{:shh/send-direct-message [{:web3 web3 {:shh/send-direct-message [{:web3 web3
:success-event success-event :success-event success-event
:src (accounts.db/current-public-key cofx) :src (accounts.model/current-public-key cofx)
:dst dst :dst dst
:topics (:mailserver/topics db) :topics (:mailserver/topics db)
:payload payload}]})) :payload payload}]}))
@ -90,7 +90,7 @@
(transport.topic/discovery-topic-hash))] (transport.topic/discovery-topic-hash))]
{:shh/post [{:web3 web3 {:shh/post [{:web3 web3
:success-event success-event :success-event success-event
:message (merge {:sig (accounts.db/current-public-key cofx) :message (merge {:sig (accounts.model/current-public-key cofx)
:pubKey chat-id :pubKey chat-id
:payload payload :payload payload
:topic topic-hash} :topic topic-hash}
@ -99,7 +99,7 @@
(defrecord Message [content content-type message-type clock-value timestamp] (defrecord Message [content content-type message-type clock-value timestamp]
StatusMessage StatusMessage
(send [this chat-id {:keys [message-id] :as cofx}] (send [this chat-id {:keys [message-id] :as cofx}]
(let [current-public-key (accounts.db/current-public-key cofx) (let [current-public-key (accounts.model/current-public-key cofx)
params {:chat-id chat-id params {:chat-id chat-id
:payload this :payload this
:success-event [:transport/message-sent :success-event [:transport/message-sent

View File

@ -11,7 +11,7 @@
status-im.ui.screens.group.db status-im.ui.screens.group.db
status-im.chat.specs status-im.chat.specs
status-im.ui.screens.profile.db status-im.ui.screens.profile.db
status-im.ui.screens.network-settings.db status-im.network.module
status-im.mailserver.db status-im.mailserver.db
status-im.browser.db status-im.browser.db
status-im.ui.screens.add-new.db status-im.ui.screens.add-new.db

View File

@ -4,7 +4,7 @@
[status-im.accounts.update.core :as accounts.update] [status-im.accounts.update.core :as accounts.update]
[status-im.utils.fx :as fx] [status-im.utils.fx :as fx]
[status-im.ui.components.bottom-sheet.core :as bottom-sheet] [status-im.ui.components.bottom-sheet.core :as bottom-sheet]
[status-im.accounts.db :as accounts.db] [status-im.accounts.model :as accounts.model]
[status-im.ui.screens.navigation :as navigation] [status-im.ui.screens.navigation :as navigation]
[status-im.mailserver.core :as mailserver] [status-im.mailserver.core :as mailserver]
[status-im.ui.screens.mobile-network-settings.utils :as utils])) [status-im.ui.screens.mobile-network-settings.utils :as utils]))
@ -16,7 +16,7 @@
(fx/defn on-network-status-change (fx/defn on-network-status-change
[{:keys [db] :as cofx}] [{:keys [db] :as cofx}]
(let [logged-in? (accounts.db/logged-in? cofx) (let [logged-in? (accounts.model/logged-in? cofx)
{:keys [remember-syncing-choice?]} (:account/account db)] {:keys [remember-syncing-choice?]} (:account/account db)]
(apply (apply
fx/merge fx/merge

View File

@ -1,7 +1,7 @@
(ns status-im.ui.screens.profile.events (ns status-im.ui.screens.profile.events
(:require [re-frame.core :as re-frame] (:require [re-frame.core :as re-frame]
[status-im.browser.core :as browser] [status-im.browser.core :as browser]
[status-im.accounts.db :as accounts.db] [status-im.accounts.model :as accounts.model]
[status-im.ui.screens.profile.models :as profile.models] [status-im.ui.screens.profile.models :as profile.models]
[status-im.ui.screens.profile.navigation] [status-im.ui.screens.profile.navigation]
[status-im.ui.components.list-selection :as list-selection] [status-im.ui.components.list-selection :as list-selection]
@ -35,7 +35,7 @@
(fn [{:keys [db] :as cofx}] (fn [{:keys [db] :as cofx}]
{:db (-> db {:db (-> db
(assoc-in [:my-profile/profile :photo-path] (assoc-in [:my-profile/profile :photo-path]
(identicon/identicon (accounts.db/current-public-key cofx))) (identicon/identicon (accounts.model/current-public-key cofx)))
(assoc :my-profile/editing? true))})) (assoc :my-profile/editing? true))}))
(handlers/register-handler-fx (handlers/register-handler-fx

View File

@ -40,13 +40,7 @@
[status-im.ui.screens.mobile-network-settings.view [status-im.ui.screens.mobile-network-settings.view
:as :as
mobile-network-settings] mobile-network-settings]
[status-im.ui.screens.network-settings.edit-network.views [status-im.network.module :as network]
:as
edit-network]
[status-im.ui.screens.network-settings.network-details.views
:as
network-details]
[status-im.ui.screens.network-settings.views :as network-settings]
[status-im.ui.screens.offline-messaging-settings.edit-mailserver.views [status-im.ui.screens.offline-messaging-settings.edit-mailserver.views
:as :as
edit-mailserver] edit-mailserver]
@ -151,9 +145,9 @@
:extensions-settings screens.extensions/extensions-settings :extensions-settings screens.extensions/extensions-settings
:edit-extension extensions.add/edit-extension :edit-extension extensions.add/edit-extension
:show-extension extensions.add/show-extension :show-extension extensions.add/show-extension
:network-settings network-settings/network-settings :network-settings network/network-settings-view
:network-details network-details/network-details :network-details network/network-details-view
:edit-network edit-network/edit-network :edit-network network/edit-network-view
:log-level-settings log-level-settings/log-level-settings :log-level-settings log-level-settings/log-level-settings
:fleet-settings fleet-settings/fleet-settings :fleet-settings fleet-settings/fleet-settings
:currency-settings currency-settings/currency-settings :currency-settings currency-settings/currency-settings

View File

@ -1,10 +1,8 @@
(ns status-im.utils.handlers (ns status-im.utils.handlers
(:require [cljs.spec.alpha :as spec] (:require [cljs.spec.alpha :as spec]
[clojure.string :as string]
[re-frame.core :as re-frame] [re-frame.core :as re-frame]
[re-frame.interceptor :refer [->interceptor get-coeffect get-effect]] [re-frame.interceptor :refer [->interceptor get-coeffect get-effect]]
[status-im.accounts.db :as accounts.db] [status-im.accounts.model :as accounts.model]
[cljs.core.async :as async]
[taoensso.timbre :as log])) [taoensso.timbre :as log]))
(def pre-event-callback (atom nil)) (def pre-event-callback (atom nil))
@ -40,7 +38,7 @@
:id :logged-in :id :logged-in
:before (fn logged-in-before :before (fn logged-in-before
[context] [context]
(when (accounts.db/logged-in? (:coeffects context)) (when (accounts.model/logged-in? (:coeffects context))
context)))) context))))
(defn- check-spec-msg-path-problem [problem] (defn- check-spec-msg-path-problem [problem]

View File

@ -2,7 +2,7 @@
(:require [cljs.spec.alpha :as spec] (:require [cljs.spec.alpha :as spec]
[goog.string :as gstring] [goog.string :as gstring]
[re-frame.core :as re-frame] [re-frame.core :as re-frame]
[status-im.accounts.db :as accounts.db] [status-im.accounts.model :as accounts.model]
[status-im.chat.models :as chat] [status-im.chat.models :as chat]
[status-im.constants :as constants] [status-im.constants :as constants]
[status-im.ethereum.eip681 :as eip681] [status-im.ethereum.eip681 :as eip681]
@ -131,7 +131,7 @@
"Store url in the database if the user is not logged in, to be processed "Store url in the database if the user is not logged in, to be processed
on login, otherwise just handle it" on login, otherwise just handle it"
[cofx url] [cofx url]
(if (accounts.db/logged-in? cofx) (if (accounts.model/logged-in? cofx)
(route-url cofx url) (route-url cofx url)
(store-url-for-later cofx url))) (store-url-for-later cofx url)))

View File

@ -1,6 +1,6 @@
(ns status-im.test.models.account (ns status-im.test.models.account
(:require [cljs.test :refer-macros [deftest is testing]] (:require [cljs.test :refer-macros [deftest is testing]]
[status-im.accounts.db :as accounts.db])) [status-im.accounts.model :as accounts.db]))
(deftest logged-in-test (deftest logged-in-test
(testing "account/account is defined" (testing "account/account is defined"