Limit max batch of images
There's an issue reported on slow devices when sending a batch of images. All the requests are send concurrently, and the sending of messages is processed concurrently in the background. On slow devices or connection with slow upload speed this may result in expired envelopes, as the POW calculation or the upload takes too long, and either they never leave the device, or worse they reach the mailserver but won't be stored because already expired on arrival. This commit allows setting the max-images-batch config value, setting it to 1 for release and keeping it to 5 for other builds. Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
This commit is contained in:
parent
7c9bb5b21c
commit
ae2d9b996c
1
.env
1
.env
|
@ -24,4 +24,5 @@ QR_READ_TEST_MENU=1
|
||||||
ENABLE_ROOT_ALERT=1
|
ENABLE_ROOT_ALERT=1
|
||||||
ENABLE_REFERRAL_INVITE=1
|
ENABLE_REFERRAL_INVITE=1
|
||||||
ENABLE_QUO_PREVIEW=1
|
ENABLE_QUO_PREVIEW=1
|
||||||
|
MAX_IMAGES_BATCH=5
|
||||||
APN_TOPIC=im.status.ethereum.pr
|
APN_TOPIC=im.status.ethereum.pr
|
||||||
|
|
1
.env.e2e
1
.env.e2e
|
@ -23,4 +23,5 @@ KEYCARD_TEST_MENU=1
|
||||||
QR_READ_TEST_MENU=1
|
QR_READ_TEST_MENU=1
|
||||||
ENABLE_ROOT_ALERT=0
|
ENABLE_ROOT_ALERT=0
|
||||||
ENABLE_REFERRAL_INVITE=1
|
ENABLE_REFERRAL_INVITE=1
|
||||||
|
MAX_IMAGES_BATCH=5
|
||||||
APN_TOPIC=im.status.ethereum.pr
|
APN_TOPIC=im.status.ethereum.pr
|
||||||
|
|
|
@ -24,4 +24,5 @@ ENABLE_REFERRAL_INVITE=1
|
||||||
DISABLE_WALLET_ON_MOBILE_NETWORK=1
|
DISABLE_WALLET_ON_MOBILE_NETWORK=1
|
||||||
APN_TOPIC=im.status.ethereum.pr
|
APN_TOPIC=im.status.ethereum.pr
|
||||||
BLANK_PREVIEW=0
|
BLANK_PREVIEW=0
|
||||||
|
MAX_IMAGES_BATCH=5
|
||||||
GOOGLE_FREE=0
|
GOOGLE_FREE=0
|
|
@ -18,4 +18,5 @@ PARTITIONED_TOPIC=0
|
||||||
CONTRACT_NODES=1
|
CONTRACT_NODES=1
|
||||||
ENABLE_ROOT_ALERT=1
|
ENABLE_ROOT_ALERT=1
|
||||||
ENABLE_REFERRAL_INVITE=0
|
ENABLE_REFERRAL_INVITE=0
|
||||||
|
MAX_IMAGES_BATCH=5
|
||||||
BLANK_PREVIEW=0
|
BLANK_PREVIEW=0
|
|
@ -16,4 +16,5 @@ SNOOPY=0
|
||||||
RPC_NETWORKS_ONLY=1
|
RPC_NETWORKS_ONLY=1
|
||||||
PARTITIONED_TOPIC=0
|
PARTITIONED_TOPIC=0
|
||||||
ENABLE_ROOT_ALERT=1
|
ENABLE_ROOT_ALERT=1
|
||||||
|
MAX_IMAGES_BATCH=1
|
||||||
ENABLE_REFERRAL_INVITE=0
|
ENABLE_REFERRAL_INVITE=0
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
[status-im.utils.fx :as fx]
|
[status-im.utils.fx :as fx]
|
||||||
["@react-native-community/cameraroll" :as CameraRoll]
|
["@react-native-community/cameraroll" :as CameraRoll]
|
||||||
[status-im.utils.types :as types]
|
[status-im.utils.types :as types]
|
||||||
|
[status-im.utils.config :as config]
|
||||||
[status-im.ui.components.permissions :as permissions]
|
[status-im.ui.components.permissions :as permissions]
|
||||||
[status-im.ui.components.react :as react]
|
[status-im.ui.components.react :as react]
|
||||||
[status-im.utils.image-processing :as image-processing]
|
[status-im.utils.image-processing :as image-processing]
|
||||||
|
@ -11,7 +12,6 @@
|
||||||
[status-im.utils.platform :as platform]))
|
[status-im.utils.platform :as platform]))
|
||||||
|
|
||||||
(def maximum-image-size-px 2000)
|
(def maximum-image-size-px 2000)
|
||||||
(def max-images-batch 5)
|
|
||||||
|
|
||||||
(defn- resize-and-call [uri cb]
|
(defn- resize-and-call [uri cb]
|
||||||
(react/image-get-size
|
(react/image-get-size
|
||||||
|
@ -63,7 +63,7 @@
|
||||||
(when (and platform/ios? (pos? (count images)))
|
(when (and platform/ios? (pos? (count images)))
|
||||||
(re-frame/dispatch [:chat.ui/clear-sending-images]))
|
(re-frame/dispatch [:chat.ui/clear-sending-images]))
|
||||||
(doseq [^js result (if platform/ios?
|
(doseq [^js result (if platform/ios?
|
||||||
(take max-images-batch images)
|
(take config/max-images-batch images)
|
||||||
[images])]
|
[images])]
|
||||||
(resize-and-call (.-path result)
|
(resize-and-call (.-path result)
|
||||||
#(re-frame/dispatch [:chat.ui/image-selected (result->id result) %]))))
|
#(re-frame/dispatch [:chat.ui/image-selected (result->id result) %]))))
|
||||||
|
@ -132,7 +132,7 @@
|
||||||
[{:keys [db]}]
|
[{:keys [db]}]
|
||||||
(let [current-chat-id (:current-chat-id db)
|
(let [current-chat-id (:current-chat-id db)
|
||||||
images (get-in db [:chats current-chat-id :metadata :sending-image])]
|
images (get-in db [:chats current-chat-id :metadata :sending-image])]
|
||||||
(when (< (count images) max-images-batch)
|
(when (< (count images) config/max-images-batch)
|
||||||
{::chat-open-image-picker nil})))
|
{::chat-open-image-picker nil})))
|
||||||
|
|
||||||
(fx/defn camera-roll-pick
|
(fx/defn camera-roll-pick
|
||||||
|
@ -143,7 +143,7 @@
|
||||||
(if (get-in db [:chats current-chat-id :timeline?])
|
(if (get-in db [:chats current-chat-id :timeline?])
|
||||||
{:db (update-in db [:chats current-chat-id :metadata :sending-image] {uri {:uri uri}})
|
{:db (update-in db [:chats current-chat-id :metadata :sending-image] {uri {:uri uri}})
|
||||||
::image-selected uri}
|
::image-selected uri}
|
||||||
(when (and (< (count images) max-images-batch)
|
(when (and (< (count images) config/max-images-batch)
|
||||||
(not (get images uri)))
|
(not (get images uri)))
|
||||||
{:db (update-in db [:chats current-chat-id :metadata :sending-image] assoc uri {:uri uri})
|
{:db (update-in db [:chats current-chat-id :metadata :sending-image] assoc uri {:uri uri})
|
||||||
::image-selected uri}))))
|
::image-selected uri}))))
|
||||||
|
|
|
@ -3,11 +3,11 @@
|
||||||
(:require [status-im.ui.components.react :as react]
|
(:require [status-im.ui.components.react :as react]
|
||||||
[status-im.ui.components.icons.vector-icons :as icons]
|
[status-im.ui.components.icons.vector-icons :as icons]
|
||||||
[status-im.ui.components.permissions :as permissions]
|
[status-im.ui.components.permissions :as permissions]
|
||||||
|
[status-im.utils.config :as config]
|
||||||
[reagent.core :as reagent]
|
[reagent.core :as reagent]
|
||||||
[quo.components.animated.pressable :as pressable]
|
[quo.components.animated.pressable :as pressable]
|
||||||
[re-frame.core :as re-frame]
|
[re-frame.core :as re-frame]
|
||||||
[quo.design-system.colors :as colors]
|
[quo.design-system.colors :as colors]
|
||||||
[status-im.chat.models.images :as images]
|
|
||||||
[quo.core :as quo]
|
[quo.core :as quo]
|
||||||
[status-im.utils.utils :as utils]
|
[status-im.utils.utils :as utils]
|
||||||
[status-im.i18n :as i18n]))
|
[status-im.i18n :as i18n]))
|
||||||
|
@ -51,7 +51,7 @@
|
||||||
(defn image-preview [uri all-selected first? panel-height]
|
(defn image-preview [uri all-selected first? panel-height]
|
||||||
(let [wh (/ (- panel-height 8) 2)
|
(let [wh (/ (- panel-height 8) 2)
|
||||||
selected (get all-selected uri)
|
selected (get all-selected uri)
|
||||||
max-selected (>= (count all-selected) images/max-images-batch)]
|
max-selected (>= (count all-selected) config/max-images-batch)]
|
||||||
[react/touchable-highlight {:on-press #(if selected
|
[react/touchable-highlight {:on-press #(if selected
|
||||||
(re-frame/dispatch [:chat.ui/image-unselected uri])
|
(re-frame/dispatch [:chat.ui/image-unselected uri])
|
||||||
(re-frame/dispatch [:chat.ui/camera-roll-pick uri]))
|
(re-frame/dispatch [:chat.ui/camera-roll-pick uri]))
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
(def erc20-contract-warnings-enabled? (enabled? (get-config :ERC20_CONTRACT_WARNINGS)))
|
(def erc20-contract-warnings-enabled? (enabled? (get-config :ERC20_CONTRACT_WARNINGS)))
|
||||||
(def tr-to-talk-enabled? (enabled? (get-config :TRIBUTE_TO_TALK 0)))
|
(def tr-to-talk-enabled? (enabled? (get-config :TRIBUTE_TO_TALK 0)))
|
||||||
(def max-message-delivery-attempts (js/parseInt (get-config :MAX_MESSAGE_DELIVERY_ATTEMPTS "6")))
|
(def max-message-delivery-attempts (js/parseInt (get-config :MAX_MESSAGE_DELIVERY_ATTEMPTS "6")))
|
||||||
|
(def max-images-batch (js/parseInt (get-config :MAX_IMAGES_BATCH "1")))
|
||||||
;; NOTE: only disabled in releases
|
;; NOTE: only disabled in releases
|
||||||
(def local-notifications? (enabled? (get-config :LOCAL_NOTIFICATIONS "1")))
|
(def local-notifications? (enabled? (get-config :LOCAL_NOTIFICATIONS "1")))
|
||||||
(def blank-preview? (enabled? (get-config :BLANK_PREVIEW "1")))
|
(def blank-preview? (enabled? (get-config :BLANK_PREVIEW "1")))
|
||||||
|
|
Loading…
Reference in New Issue