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:
Andrea Maria Piana 2020-11-19 07:08:12 +01:00
parent 7c9bb5b21c
commit ae2d9b996c
No known key found for this signature in database
GPG Key ID: AA6CCA6DE0E06424
8 changed files with 14 additions and 8 deletions

1
.env
View File

@ -24,4 +24,5 @@ QR_READ_TEST_MENU=1
ENABLE_ROOT_ALERT=1
ENABLE_REFERRAL_INVITE=1
ENABLE_QUO_PREVIEW=1
MAX_IMAGES_BATCH=5
APN_TOPIC=im.status.ethereum.pr

View File

@ -23,4 +23,5 @@ KEYCARD_TEST_MENU=1
QR_READ_TEST_MENU=1
ENABLE_ROOT_ALERT=0
ENABLE_REFERRAL_INVITE=1
MAX_IMAGES_BATCH=5
APN_TOPIC=im.status.ethereum.pr

View File

@ -24,4 +24,5 @@ ENABLE_REFERRAL_INVITE=1
DISABLE_WALLET_ON_MOBILE_NETWORK=1
APN_TOPIC=im.status.ethereum.pr
BLANK_PREVIEW=0
GOOGLE_FREE=0
MAX_IMAGES_BATCH=5
GOOGLE_FREE=0

View File

@ -18,4 +18,5 @@ PARTITIONED_TOPIC=0
CONTRACT_NODES=1
ENABLE_ROOT_ALERT=1
ENABLE_REFERRAL_INVITE=0
BLANK_PREVIEW=0
MAX_IMAGES_BATCH=5
BLANK_PREVIEW=0

View File

@ -16,4 +16,5 @@ SNOOPY=0
RPC_NETWORKS_ONLY=1
PARTITIONED_TOPIC=0
ENABLE_ROOT_ALERT=1
MAX_IMAGES_BATCH=1
ENABLE_REFERRAL_INVITE=0

View File

@ -3,6 +3,7 @@
[status-im.utils.fx :as fx]
["@react-native-community/cameraroll" :as CameraRoll]
[status-im.utils.types :as types]
[status-im.utils.config :as config]
[status-im.ui.components.permissions :as permissions]
[status-im.ui.components.react :as react]
[status-im.utils.image-processing :as image-processing]
@ -11,7 +12,6 @@
[status-im.utils.platform :as platform]))
(def maximum-image-size-px 2000)
(def max-images-batch 5)
(defn- resize-and-call [uri cb]
(react/image-get-size
@ -63,7 +63,7 @@
(when (and platform/ios? (pos? (count images)))
(re-frame/dispatch [:chat.ui/clear-sending-images]))
(doseq [^js result (if platform/ios?
(take max-images-batch images)
(take config/max-images-batch images)
[images])]
(resize-and-call (.-path result)
#(re-frame/dispatch [:chat.ui/image-selected (result->id result) %]))))
@ -132,7 +132,7 @@
[{:keys [db]}]
(let [current-chat-id (:current-chat-id db)
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})))
(fx/defn camera-roll-pick
@ -143,7 +143,7 @@
(if (get-in db [:chats current-chat-id :timeline?])
{:db (update-in db [:chats current-chat-id :metadata :sending-image] {uri {:uri uri}})
::image-selected uri}
(when (and (< (count images) max-images-batch)
(when (and (< (count images) config/max-images-batch)
(not (get images uri)))
{:db (update-in db [:chats current-chat-id :metadata :sending-image] assoc uri {:uri uri})
::image-selected uri}))))

View File

@ -3,11 +3,11 @@
(:require [status-im.ui.components.react :as react]
[status-im.ui.components.icons.vector-icons :as icons]
[status-im.ui.components.permissions :as permissions]
[status-im.utils.config :as config]
[reagent.core :as reagent]
[quo.components.animated.pressable :as pressable]
[re-frame.core :as re-frame]
[quo.design-system.colors :as colors]
[status-im.chat.models.images :as images]
[quo.core :as quo]
[status-im.utils.utils :as utils]
[status-im.i18n :as i18n]))
@ -51,7 +51,7 @@
(defn image-preview [uri all-selected first? panel-height]
(let [wh (/ (- panel-height 8) 2)
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
(re-frame/dispatch [:chat.ui/image-unselected uri])
(re-frame/dispatch [:chat.ui/camera-roll-pick uri]))

View File

@ -29,6 +29,7 @@
(def erc20-contract-warnings-enabled? (enabled? (get-config :ERC20_CONTRACT_WARNINGS)))
(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-images-batch (js/parseInt (get-config :MAX_IMAGES_BATCH "1")))
;; NOTE: only disabled in releases
(def local-notifications? (enabled? (get-config :LOCAL_NOTIFICATIONS "1")))
(def blank-preview? (enabled? (get-config :BLANK_PREVIEW "1")))