Add unpinning of mailservers

Signed-off-by: Igor Mandrigin <i@mandrigin.ru>
This commit is contained in:
Andrea Maria Piana 2019-03-01 10:36:49 +01:00 committed by Igor Mandrigin
parent 6fe3f0500a
commit b26b6ee5e0
No known key found for this signature in database
GPG Key ID: 4A0EDDE26E66BC8B
9 changed files with 149 additions and 35 deletions

View File

@ -1 +1 @@
0.23.0-beta.5
0.23.0-beta.7

View File

@ -393,6 +393,16 @@
(fn [cofx _]
(mailserver/connect-to-mailserver cofx)))
(handlers/register-handler-fx
:mailserver.ui/unpin-pressed
(fn [cofx _]
(mailserver/unpin cofx)))
(handlers/register-handler-fx
:mailserver.ui/pin-pressed
(fn [cofx _]
(mailserver/pin cofx)))
(handlers/register-handler-fx
:mailserver.ui/request-error-pressed
(fn [cofx _]

View File

@ -38,7 +38,7 @@
(def seven-days (* 7 one-day))
(def maximum-number-of-attempts 2)
(def request-timeout 30)
(def min-limit 200)
(def min-limit 100)
(def max-limit 2000)
(def backoff-interval-ms 3000)
(def default-limit max-limit)
@ -46,6 +46,7 @@
"Time after which mailserver connection is considered to have failed"
10000)
(def limit (atom default-limit))
(def success-counter (atom 0))
(defn connected? [{:keys [db]} id]
(= (:mailserver/current-id db) id))
@ -143,17 +144,30 @@
(fn [enodes]
(update-mailservers! enodes)))
(re-frame/reg-fx
:mailserver/set-limit
(fn [n]
(reset! limit n)))
(defn decrease-limit []
(max min-limit (/ @limit 2)))
(defn increase-limit []
(min max-limit (* @limit 2)))
(re-frame/reg-fx
:mailserver/set-limit
(fn [n]
(reset! limit n)))
(re-frame/reg-fx
:mailserver/increase-limit
(fn []
(if (>= @success-counter 2)
(reset! limit (increase-limit))
(swap! success-counter inc))))
(re-frame/reg-fx
:mailserver/decrease-limit
(fn []
(reset! limit (decrease-limit))
(reset! success-counter 0)))
(defn mark-trusted-peer! [web3 enode]
(.markTrustedPeer (transport.utils/shh web3)
enode
@ -262,7 +276,7 @@
(log/debug "Adjusting mailserver request" "from:" from "adjusted-from:" adjusted-from)
adjusted-from))
(fx/defn handle-request-success [{:keys [db]} request-id]
(fx/defn handle-request-success [{:keys [db]} {:keys [request-id]}]
(when (:mailserver/current-request db)
{:db (assoc-in db [:mailserver/current-request :request-id] request-id)}))
@ -527,7 +541,7 @@
(if (empty? error)
(fx/merge
cofx
{:mailserver/set-limit (increase-limit)}
{:mailserver/increase-limit []}
(update-mailserver-topics {:request-id (:requestID event)
:cursor (:cursor event)}))
@ -603,11 +617,11 @@
web3 (:web3 db)]
(log/info "mailserver: message request " request-id "expired for mailserver topic" topics "from" from "to" to "cursor" cursor "limit" (decrease-limit))
{:db (update-in db [:mailserver/current-request :attempts] inc)
:mailserver/set-limit (decrease-limit)
:mailserver/decrease-limit []
:mailserver/request-messages {:web3 web3
:mailserver mailserver
:request (assoc request :limit (decrease-limit))}})
{:mailserver/set-limit (decrease-limit)})))))
{:mailserver/decrease-limit []})))))
(fx/defn initialize-mailserver
[cofx custom-mailservers]
@ -733,10 +747,31 @@
(fx/defn save-settings
[{:keys [db] :as cofx} current-fleet mailserver-id]
(let [{:keys [address]} (fetch-current cofx)
settings (get-in db [:account/account :settings])]
settings (get-in db [:account/account :settings])
;; Check if previous mailserver was pinned
pinned? (get-in settings [:mailserver current-fleet])]
(fx/merge cofx
{:db (assoc db :mailserver/current-id mailserver-id)
:mailserver/remove-peer address}
(connect-to-mailserver)
(when pinned?
(accounts.update/update-settings (assoc-in settings [:mailserver current-fleet] mailserver-id)
{})))))
(fx/defn unpin
[{:keys [db] :as cofx}]
(let [current-fleet (fleet/current-fleet db)
settings (get-in db [:account/account :settings])]
(fx/merge cofx
(accounts.update/update-settings (update settings :mailserver dissoc current-fleet)
{})
(change-mailserver))))
(fx/defn pin
[{:keys [db] :as cofx}]
(let [current-fleet (fleet/current-fleet db)
mailserver-id (:mailserver/current-id db)
settings (get-in db [:account/account :settings])]
(fx/merge cofx
(accounts.update/update-settings (assoc-in settings [:mailserver current-fleet] mailserver-id)
{}))))

View File

@ -1,5 +1,7 @@
(ns status-im.mailserver.subs
(:require [re-frame.core :as re-frame]))
(:require
[status-im.mailserver.core :as mailserver]
[re-frame.core :as re-frame]))
(re-frame/reg-sub
:mailserver/state
@ -46,6 +48,11 @@
(fn [db]
(:mailserver/current-id db)))
(re-frame/reg-sub
:mailserver/preferred-id
(fn [db]
(mailserver/preferred-mailserver-id {:db db})))
(re-frame/reg-sub
:mailserver/mailservers
(fn [db]

View File

@ -156,15 +156,18 @@
(i18n/label :t/send-logs)]]]]))
(views/defview advanced-settings []
(views/letsubs [current-mailserver-id [:mailserver/current-id]
{:keys [settings]} [:account/account]
mailservers [:mailserver/fleet-mailservers]
mailserver-state [:mailserver/state]
node-status [:node-status]
peers-count [:peers-count]
connection-stats [:connection-stats]
disconnected [:disconnected?]]
(let [render-fn (offline-messaging.views/render-row current-mailserver-id)
(views/letsubs [current-mailserver-id [:mailserver/current-id]
{:keys [settings]} [:account/account]
mailservers [:mailserver/fleet-mailservers]
mailserver-state [:mailserver/state]
preferred-mailserver-id [:mailserver/preferred-id]
node-status [:node-status]
peers-count [:peers-count]
connection-stats [:connection-stats]
disconnected [:disconnected?]]
(let [render-fn (offline-messaging.views/render-row
current-mailserver-id
preferred-mailserver-id)
pfs? (:pfs? settings)
connection-message (connection-status peers-count node-status mailserver-state disconnected)]
[react/scroll-view
@ -182,6 +185,7 @@
[react/view {:style styles/title-separator}]
[react/text {:style styles/adv-settings-subtitle} (i18n/label :offline-messaging)]
[offline-messaging.views/pinned-state preferred-mailserver-id]
[react/view
(for [mailserver (vals mailservers)]
^{:key (:id mailserver)}

View File

@ -1,7 +1,8 @@
(ns status-im.ui.screens.offline-messaging-settings.styles
(:require [status-im.ui.components.colors :as colors]
[status-im.utils.platform :as platform])
(:require-macros [status-im.utils.styles :refer [defstyle]]))
(:require-macros [status-im.utils.styles :refer [defnstyle
defstyle]]))
(def wrapper
{:flex 1
@ -10,10 +11,13 @@
(def mailserver-item-inner
{:padding-horizontal 16})
(defstyle mailserver-item
(defnstyle mailserver-item [pinned?]
{:flex-direction :row
:background-color :white
:align-items :center
:opacity (if pinned?
1
0.4)
:padding-horizontal 16
:ios {:height 64}
:android {:height 56}})
@ -46,3 +50,14 @@
(defn mailserver-icon [connected?]
(hash-map (if platform/desktop? :tint-color :color) (if connected? :white :gray)))
(def mailserver-pinned
{:padding-horizontal 16
:flex-direction :row
:padding-vertical 5})
(def mailserver-pinned-text
{:color colors/black})
(def mailserver-pinned-text-container
{:margin-top 15})

View File

@ -3,6 +3,7 @@
(:require [re-frame.core :as re-frame]
[status-im.i18n :as i18n]
[status-im.utils.config :as config]
[status-im.ui.components.checkbox.view :as checkbox.views]
[status-im.ui.components.icons.vector-icons :as vector-icons]
[status-im.ui.components.list.views :as list]
[status-im.ui.components.react :as react]
@ -20,23 +21,38 @@
(if platform/desktop? {:style (styles/mailserver-icon connected?)}
(styles/mailserver-icon connected?))]])
(defn render-row [current-mailserver-id]
(defn pinned-state [pinned?]
[react/touchable-highlight {:on-press (if pinned?
#(re-frame/dispatch [:mailserver.ui/unpin-pressed])
#(re-frame/dispatch [:mailserver.ui/pin-pressed]))}
[react/view {:style styles/mailserver-pinned}
[checkbox.views/checkbox
{:checked? (not pinned?)
:on-value-change (if pinned?
#(re-frame/dispatch [:mailserver.ui/unpin-pressed])
#(re-frame/dispatch [:mailserver.ui/pin-pressed]))}]
[react/view {:style styles/mailserver-pinned-text-container}
[react/text {:style styles/mailserver-pinned-text}
(i18n/label :t/mailserver-automatic)]]]])
(defn render-row [current-mailserver-id pinned?]
(fn [{:keys [name id user-defined]}]
(let [connected? (= id current-mailserver-id)]
[react/touchable-highlight
{:on-press #(if user-defined
(re-frame/dispatch [:mailserver.ui/user-defined-mailserver-selected id])
(re-frame/dispatch [:mailserver.ui/default-mailserver-selected id]))
{:on-press (when pinned? #(if user-defined
(re-frame/dispatch [:mailserver.ui/user-defined-mailserver-selected id])
(re-frame/dispatch [:mailserver.ui/default-mailserver-selected id])))
:accessibility-label :mailserver-item}
[react/view styles/mailserver-item
[react/view (styles/mailserver-item pinned?)
[mailserver-icon connected?]
[react/view styles/mailserver-item-inner
[react/text {:style styles/mailserver-item-name-text}
name]]]])))
(views/defview offline-messaging-settings []
(views/letsubs [current-mailserver-id [:mailserver/current-id]
mailservers [:mailserver/fleet-mailservers]]
(views/letsubs [current-mailserver-id [:mailserver/current-id]
preferred-mailserver-id [:mailserver/preferred-id]
mailservers [:mailserver/fleet-mailservers]]
[react/view {:flex 1}
[status-bar/status-bar]
[toolbar/toolbar {}
@ -45,7 +61,9 @@
[toolbar/actions
[(toolbar.actions/add false #(re-frame/dispatch [:mailserver.ui/add-pressed]))]]]
[react/view styles/wrapper
[pinned-state preferred-mailserver-id]
[list/flat-list {:data (vals mailservers)
:default-separator? false
:key-fn :name
:render-fn (render-row current-mailserver-id)}]]]))
:render-fn (render-row current-mailserver-id
preferred-mailserver-id)}]]]))

View File

@ -354,9 +354,9 @@
(testing "it did not reach the maximum number of attempts"
(testing "it reached the maximum number of attempts"
(testing "it decrease the limit")
(is (= {:mailserver/set-limit 1000} (mailserver/resend-request {:db {:mailserver/current-request
{}}}
{})))))))
(is (= {:mailserver/decrease-limit []} (mailserver/resend-request {:db {:mailserver/current-request
{}}}
{})))))))
(deftest test-resend-request-request-id
(testing "request-id passed is nil"
@ -398,6 +398,30 @@
(is (= (into #{} (keys (peers-summary-change-result true false false)))
#{}))))
(deftest unpin-test
(testing "it removes the preference"
(let [db {:mailserver/current-id "mailserverid"
:mailserver/mailservers
{:eth.beta {"mailserverid" {:address "mailserver-address"
:password "mailserver-password"}}}
:account/account
{:settings {:fleet :eth.beta
:mailserver {:eth.beta "mailserverid"}}}}]
(is (not (get-in (mailserver/unpin {:db db})
[:db :account/account :settings :mailserver :eth.beta]))))))
(deftest pin-test
(testing "it removes the preference"
(let [db {:mailserver/current-id "mailserverid"
:mailserver/mailservers
{:eth.beta {"mailserverid" {:address "mailserver-address"
:password "mailserver-password"}}}
:account/account
{:settings {:fleet :eth.beta
:mailserver {}}}}]
(is (= "mailserverid" (get-in (mailserver/pin {:db db})
[:db :account/account :settings :mailserver :eth.beta]))))))
(deftest connect-to-mailserver
(let [db {:mailserver/current-id "mailserverid"
:mailserver/mailservers

View File

@ -263,6 +263,7 @@
"update-status": "Update your status...",
"errors": "Errors",
"mailserver-connection-error": "Could not connect to mailserver",
"mailserver-automatic": "Automatic selection",
"currency-display-name-kzt": "Kazakhstan Tenge",
"no-recent-chats": "Your Home screen will house your recent chats and DApp history. Tap the plus (+) button to get started.",
"install": "Install",