Compare commits

...
Author SHA1 Message Date
Omar Basem a2ec24605d fix: square image 2023-04-08 02:45:33 +04:00
jakub bb73bc76a0 nix: bump nixpkgs to include fix for apksigner
Without this fix:
https://github.com/NixOS/nixpkgs/commit/d0c06fa3

The `apksigner` utility is unavailable on macOS:
```
error: Package ‘apksigner-33.0.1’ in .../pkgs/development/tools/apksigner/default.nix:86
is not supported on ‘x86_64-darwin’, refusing to evaluate.
```

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2023-04-07 18:05:50 +02:00
Ibrahem Khalil bb20c5848f [15383] Add the album count attribute to message body (#15487) 2023-04-07 17:49:56 +02:00
frank 9da9427488 Move mentions logic to status-go (#15428) 2023-04-07 17:01:13 +08:00
Mohamed Javid c3ed15f30d [Improvements] Syncing completed events check (#15574) 2023-04-06 22:29:14 +05:30
Mohamed Javid 3238f42039 [Fix] Remove AC request to join notification on community request cancellation (#15586)
* [Fix] Remove AC request notification on community request cancellation

* Status Go Version Bump
2023-04-06 19:53:43 +05:30
Mohamed Javid 0656ad8cb2 [Fix] QR Viewfinder overlap with segmented tabs in Sign in (#15568) 2023-04-06 17:15:54 +05:30
Alexander 5be2cd949b Patch react-native/Yoga to make it possible to build an app using Xcode 14.3 (#15589)
* Patch react-native/Yoga to make it possible to build an app using Xcode 14.3

* Update

* Update

* Comment update

* Comment update
2023-04-06 12:20:36 +02:00
27 changed files with 380 additions and 1294 deletions
+9
View File
@@ -12,6 +12,7 @@ stdenv.mkDerivation {
"patchBuildIdPhase" "patchBuildIdPhase"
"patchHermesPhase" "patchHermesPhase"
"patchJavaPhase" "patchJavaPhase"
"patchYogaNodePackagePhase"
"installPhase" "installPhase"
]; ];
@@ -66,6 +67,14 @@ stdenv.mkDerivation {
patchJavaPhase = '' patchJavaPhase = ''
${nodejs}/bin/node ./node_modules/jetifier/bin/jetify ${nodejs}/bin/node ./node_modules/jetifier/bin/jetify
''; '';
# Patch React Native Yoga.cpp file
# FIXME: Remove this once release newer than 1.19.0 is used which includes:
# https://github.com/facebook/yoga/commit/f174de70
patchYogaNodePackagePhase = ''
substituteInPlace ./node_modules/react-native/ReactCommon/yoga/yoga/Yoga.cpp --replace \
'node->getLayout().hadOverflow() |' \
'node->getLayout().hadOverflow() ||'
'';
installPhase = '' installPhase = ''
mkdir -p $out mkdir -p $out
cp -R node_modules $out/ cp -R node_modules $out/
+4 -3
View File
@@ -11,10 +11,11 @@ let
# We follow the master branch of official nixpkgs. # We follow the master branch of official nixpkgs.
nixpkgsSrc = fetchFromGitHub { nixpkgsSrc = fetchFromGitHub {
name = "nixpkgs-source"; name = "nixpkgs-source";
owner = "status-im"; # FIXME: Fork used to get Cocoapods 1.12.0. # FIXME: Fork used to get Cocoapods 1.12.0 and apksigner macOS build.
owner = "status-im";
repo = "nixpkgs"; repo = "nixpkgs";
rev = "b9b2ed705edc00003d47625950602136be3e1ed5"; rev = "d0c06fa3d3982a91aa01bd63ed84020cbde3d3ab";
sha256 = "sha256-F0qOawdKx7kgiGqwVikYIawL2taJ1XfcgHy0Wn0mho8="; sha256 = "sha256-8blvuUHnuf0hFr/PpBxVohJp5CaGXIXhgJlFN/cv7us=";
# To get the compressed Nix sha256, use: # To get the compressed Nix sha256, use:
# nix-prefetch-url --unpack https://github.com/${ORG}/nixpkgs/archive/${REV}.tar.gz # nix-prefetch-url --unpack https://github.com/${ORG}/nixpkgs/archive/${REV}.tar.gz
}; };
+37 -41
View File
@@ -41,36 +41,19 @@
(rf/defn select-mention (rf/defn select-mention
{:events [:chat.ui/select-mention]} {:events [:chat.ui/select-mention]}
[{:keys [db] :as cofx} text-input-ref {:keys [primary-name searched-text match] :as user}] [{:keys [db] :as cofx} text-input-ref {:keys [primary-name searched-text match public-key] :as user}]
(let [chat-id (:current-chat-id db) (let [chat-id (:current-chat-id db)
new-text (mentions/new-input-text-with-mention cofx user) text (get-in db [:chat/inputs chat-id :input-text])
at-sign-idx (get-in db [:chats/mentions chat-id :mentions :at-sign-idx]) method "wakuext_chatMentionNewInputTextWithMention"
cursor (+ at-sign-idx (count primary-name) 2)] params [chat-id text primary-name]]
(rf/merge {:json-rpc/call [{:method method
cofx :params params
{:db (-> db :on-success #(rf/dispatch [:mention/on-new-input-text-with-mentions-success %
(assoc-in [:chats/cursor chat-id] cursor) primary-name text-input-ref match searched-text
(assoc-in [:chats/mention-suggestions chat-id] nil)) public-key])
:set-text-input-value [chat-id new-text text-input-ref]} :on-error #(rf/dispatch [:mention/on-error
(set-chat-input-text new-text chat-id) {:method method
;; NOTE(rasom): Some keyboards do not react on selection property passed to :params params} %])}]}))
;; text input (specifically Samsung keyboard with predictive text set on).
;; In this case, if the user continues typing after the programmatic change,
;; the new text is added to the last known cursor position before
;; programmatic change. By calling `reset-text-input-cursor` we force the
;; keyboard's cursor position to be changed before the next input.
(mentions/reset-text-input-cursor text-input-ref cursor)
;; NOTE(roman): on-text-input event is not dispatched when we change input
;; programmatically, so we have to call `on-text-input` manually
(mentions/on-text-input
(let [match-len (count match)
start (inc at-sign-idx)
end (+ start match-len)]
{:new-text match
:previous-text searched-text
:start start
:end end}))
(mentions/recheck-at-idxs {primary-name user}))))
(rf/defn disable-chat-cooldown (rf/defn disable-chat-cooldown
"Turns off chat cooldown (protection against message spamming)" "Turns off chat cooldown (protection against message spamming)"
@@ -182,8 +165,7 @@
(rf/merge cofx (rf/merge cofx
{:set-text-input-value [current-chat-id ""]} {:set-text-input-value [current-chat-id ""]}
(clean-input current-chat-id) (clean-input current-chat-id)
(mentions/clear-mentions) (mentions/clear-mentions))))
(mentions/clear-cursor))))
(rf/defn send-messages (rf/defn send-messages
[{:keys [db] :as cofx} input-text current-chat-id] [{:keys [db] :as cofx} input-text current-chat-id]
@@ -251,13 +233,29 @@
[{{:keys [current-chat-id] :as db} :db :as cofx}] [{{:keys [current-chat-id] :as db} :db :as cofx}]
(let [{:keys [input-text metadata]} (get-in db [:chat/inputs current-chat-id]) (let [{:keys [input-text metadata]} (get-in db [:chat/inputs current-chat-id])
editing-message (:editing-message metadata) editing-message (:editing-message metadata)
input-text-with-mentions (mentions/check-mentions cofx input-text)] method "wakuext_chatMentionCheckMentions"
(rf/merge cofx params [current-chat-id input-text]]
(if editing-message {:json-rpc/call [{:method method
(send-edited-message input-text-with-mentions editing-message) :params params
(send-messages input-text-with-mentions current-chat-id)) :on-error #(rf/dispatch [:mention/on-error {:method method :params params} %])
(mentions/clear-mentions) :on-success #(rf/dispatch [:mention/on-check-mentions-success
(mentions/clear-cursor)))) current-chat-id
editing-message
input-text
%])}]}))
(rf/defn on-check-mentions-success
{:events [:mention/on-check-mentions-success]}
[{:keys [db] :as cofx} current-chat-id editing-message input-text new-text]
(log/debug "[mentions] on-check-mentions-success"
{:chat-id current-chat-id
:editing-message editing-message
:input-text input-text
:new-text new-text})
(rf/merge cofx
(if editing-message
(send-edited-message new-text editing-message)
(send-messages new-text current-chat-id))))
(rf/defn send-contact-request (rf/defn send-contact-request
{:events [:contacts/send-contact-request]} {:events [:contacts/send-contact-request]}
@@ -271,7 +269,6 @@
:on-error #(log/warn "failed to send a contact request" %) :on-error #(log/warn "failed to send a contact request" %)
:on-success #(re-frame/dispatch [:transport/message-sent %])}]} :on-success #(re-frame/dispatch [:transport/message-sent %])}]}
(mentions/clear-mentions) (mentions/clear-mentions)
(mentions/clear-cursor)
(clean-input (:current-chat-id db)))) (clean-input (:current-chat-id db))))
(rf/defn cancel-contact-request (rf/defn cancel-contact-request
@@ -282,7 +279,6 @@
(rf/merge cofx (rf/merge cofx
{:db (assoc-in db [:chat/inputs current-chat-id :metadata :sending-contact-request] nil)} {:db (assoc-in db [:chat/inputs current-chat-id :metadata :sending-contact-request] nil)}
(mentions/clear-mentions) (mentions/clear-mentions)
(mentions/clear-cursor)
(clean-input (:current-chat-id db))))) (clean-input (:current-chat-id db)))))
(rf/defn chat-send-sticker (rf/defn chat-send-sticker
File diff suppressed because it is too large Load Diff
@@ -1,323 +0,0 @@
(ns status-im.chat.models.mentions-test
(:require [cljs.test :as test]
[clojure.string :as string]
[status-im.chat.models.mentions :as mentions]))
(def ->info-input
[[:text "H."]
[:mention
"@helpinghand.eth"]
[:text
" "]])
(def ->info-expected
{:at-sign-idx 2
:mention-end 19
:new-text " "
:previous-text ""
:start 18
:end 18
:at-idxs [{:mention? true
:from 2
:to 17
:checked? true}]})
(test/deftest test->info
(test/testing "->info base case"
(test/is (= ->info-expected (mentions/->info ->info-input)))))
;; No mention
(def mention-text-1 "parse-text")
(def mention-text-result-1 [[:text "parse-text"]])
;; Mention in the middle
(def mention-text-2
"hey @0x04fbce10971e1cd7253b98c7b7e54de3729ca57ce41a2bfb0d1c4e0a26f72c4b6913c3487fa1b4bb86125770f1743fb4459da05c1cbe31d938814cfaf36e252073 he")
(def mention-text-result-2
[[:text "hey "]
[:mention
"0x04fbce10971e1cd7253b98c7b7e54de3729ca57ce41a2bfb0d1c4e0a26f72c4b6913c3487fa1b4bb86125770f1743fb4459da05c1cbe31d938814cfaf36e252073"]
[:text " he"]])
;; Mention at the beginning
(def mention-text-3
"@0x04fbce10971e1cd7253b98c7b7e54de3729ca57ce41a2bfb0d1c4e0a26f72c4b6913c3487fa1b4bb86125770f1743fb4459da05c1cbe31d938814cfaf36e252073 he")
(def mention-text-result-3
[[:mention
"0x04fbce10971e1cd7253b98c7b7e54de3729ca57ce41a2bfb0d1c4e0a26f72c4b6913c3487fa1b4bb86125770f1743fb4459da05c1cbe31d938814cfaf36e252073"]
[:text " he"]])
;; Mention at the end
(def mention-text-4
"hey @0x04fbce10971e1cd7253b98c7b7e54de3729ca57ce41a2bfb0d1c4e0a26f72c4b6913c3487fa1b4bb86125770f1743fb4459da05c1cbe31d938814cfaf36e252073")
(def mention-text-result-4
[[:text "hey "]
[:mention
"0x04fbce10971e1cd7253b98c7b7e54de3729ca57ce41a2bfb0d1c4e0a26f72c4b6913c3487fa1b4bb86125770f1743fb4459da05c1cbe31d938814cfaf36e252073"]])
;; Invalid mention
(def mention-text-5
"invalid @0x04fBce10971e1cd7253b98c7b7e54de3729ca57ce41a2bfb0d1c4e0a26f72c4b6913c3487fa1b4bb86125770f1743fb4459da05c1cbe31d938814cfaf36e252073")
(def mention-text-result-5
[[:text
"invalid @0x04fBce10971e1cd7253b98c7b7e54de3729ca57ce41a2bfb0d1c4e0a26f72c4b6913c3487fa1b4bb86125770f1743fb4459da05c1cbe31d938814cfaf36e252073"]])
(test/deftest test-to-input
(test/testing "only text"
(test/is (= mention-text-result-1 (mentions/->input-field mention-text-1))))
(test/testing "in the middle"
(test/is (= mention-text-result-2 (mentions/->input-field mention-text-2))))
(test/testing "at the beginning"
(test/is (= mention-text-result-3 (mentions/->input-field mention-text-3))))
(test/testing "at the end"
(test/is (= mention-text-result-4 (mentions/->input-field mention-text-4))))
(test/testing "invalid"
(test/is (= mention-text-result-5 (mentions/->input-field mention-text-5)))))
(test/deftest test-replace-mentions
(let [users {"User Number One"
{:primary-name "User Number One"
:public-key "0xpk1"}
"User Number Two"
{:primary-name "user2"
:secondary-name "User Number Two"
:public-key "0xpk2"}
"User Number Three"
{:primary-name "user3"
:secondary-name "User Number Three"
:public-key "0xpk3"}}]
(test/testing "empty string"
(let [text ""
result (mentions/replace-mentions text users)]
(test/is (= result text) (pr-str text))))
(test/testing "no text"
(let [text nil
result (mentions/replace-mentions text users)]
(test/is (= result text) (pr-str text))))
(test/testing "incomlepte mention 1"
(let [text "@"
result (mentions/replace-mentions text users)]
(test/is (= result text) (pr-str text))))
(test/testing "incomplete mention 2"
(let [text "@r"
result (mentions/replace-mentions text users)]
(test/is (= result text) (pr-str text))))
(test/testing "no mentions"
(let [text "foo bar @buzz kek @foo"
result (mentions/replace-mentions text users)]
(test/is (= result text) (pr-str text))))
(test/testing "starts with mention"
(let [text "@User Number One"
result (mentions/replace-mentions text users)]
(test/is (= result "@0xpk1") (pr-str text))))
(test/testing "starts with mention, comma after mention"
(let [text "@User Number One,"
result (mentions/replace-mentions text users)]
(test/is (= result "@0xpk1,") (pr-str text))))
(test/testing "starts with mention but no space after"
(let [text "@User Number Onefoo"
result (mentions/replace-mentions text users)]
(test/is (= result text) (pr-str text))))
(test/testing "starts with mention, some text after mention"
(let [text "@User Number One foo"
result (mentions/replace-mentions text users)]
(test/is (= result "@0xpk1 foo") (pr-str text))))
(test/testing "starts with some text, then mention"
(let [text "text @User Number One"
result (mentions/replace-mentions text users)]
(test/is (= result "text @0xpk1") (pr-str text))))
(test/testing "starts with some text, then mention, then more text"
(let [text "text @User Number One foo"
result (mentions/replace-mentions text users)]
(test/is (= result "text @0xpk1 foo") (pr-str text))))
(test/testing "no space before mention"
(let [text "text@User Number One"
result (mentions/replace-mentions text users)]
(test/is (= result "text@0xpk1") (pr-str text))))
(test/testing "two different mentions"
(let [text "@User Number One @User Number two"
result (mentions/replace-mentions text users)]
(test/is (= result "@0xpk1 @0xpk2") (pr-str text))))
(test/testing "two different mentions, separated with comma"
(let [text "@User Number One,@User Number two"
result (mentions/replace-mentions text users)]
(test/is (= result "@0xpk1,@0xpk2") (pr-str text))))
(test/testing "two different mentions inside text"
(let [text "foo@User Number One bar @User Number two baz"
result (mentions/replace-mentions text users)]
(test/is (= result "foo@0xpk1 bar @0xpk2 baz") (pr-str text))))
(test/testing "ens mention"
(let [text "@user2"
result (mentions/replace-mentions text users)]
(test/is (= result "@0xpk2") (pr-str text))))
(test/testing "multiple mentions"
(let [text (string/join
" "
(repeat 1000 "@User Number One @User Number two"))
result (mentions/replace-mentions text users)
exprected-result (string/join
" "
(repeat 1000 "@0xpk1 @0xpk2"))]
(test/is (= exprected-result result))))
(test/testing "markdown"
(test/testing "single * case 1"
(let [text "*@user2*"
result (mentions/replace-mentions text users)]
(test/is (= result text) (pr-str text))))
(test/testing "single * case 2"
(let [text "*@user2 *"
result (mentions/replace-mentions text users)]
(test/is (= result "*@0xpk2 *") (pr-str text))))
(test/testing "single * case 3"
(let [text "a*@user2*"
result (mentions/replace-mentions text users)]
(test/is (= result text) (pr-str text))))
(test/testing "single * case 4"
(let [text "*@user2 foo*foo"
result (mentions/replace-mentions text users)]
(test/is (= result "*@0xpk2 foo*foo") (pr-str text))))
(test/testing "single * case 5"
(let [text "a *@user2*"
result (mentions/replace-mentions text users)]
(test/is (= result text) (pr-str text))))
(test/testing "single * case 6"
(let [text "*@user2 foo*"
result (mentions/replace-mentions text users)]
(test/is (= result text) (pr-str text))))
(test/testing "single * case 7"
(let [text "@user2 *@user2 foo* @user2"
result (mentions/replace-mentions text users)]
(test/is (= result "@0xpk2 *@user2 foo* @0xpk2") (pr-str text))))
(test/testing "single * case 8"
(let [text "*@user2 foo**@user2 foo*"
result (mentions/replace-mentions text users)]
(test/is (= result text) (pr-str text))))
(test/testing "single * case 9"
(let [text "*@user2 foo***@user2 foo* @user2"
result (mentions/replace-mentions text users)]
(test/is (= result "*@user2 foo***@user2 foo* @0xpk2") (pr-str text))))
(test/testing "double * case 1"
(let [text "**@user2**"
result (mentions/replace-mentions text users)]
(test/is (= result text) (pr-str text))))
(test/testing "double * case 2"
(let [text "**@user2 **"
result (mentions/replace-mentions text users)]
(test/is (= result "**@0xpk2 **") (pr-str text))))
(test/testing "double * case 3"
(let [text "a**@user2**"
result (mentions/replace-mentions text users)]
(test/is (= result text) (pr-str text))))
(test/testing "double * case 4"
(let [text "**@user2 foo**foo"
result (mentions/replace-mentions text users)]
(test/is (= result "**@user2 foo**foo") (pr-str text))))
(test/testing "double * case 5"
(let [text "a **@user2**"
result (mentions/replace-mentions text users)]
(test/is (= result text) (pr-str text))))
(test/testing "double * case 6"
(let [text "**@user2 foo**"
result (mentions/replace-mentions text users)]
(test/is (= result text) (pr-str text))))
(test/testing "double * case 7"
(let [text "@user2 **@user2 foo** @user2"
result (mentions/replace-mentions text users)]
(test/is (= result "@0xpk2 **@user2 foo** @0xpk2") (pr-str text))))
(test/testing "double * case 8"
(let [text "**@user2 foo****@user2 foo**"
result (mentions/replace-mentions text users)]
(test/is (= result text) (pr-str text))))
(test/testing "double * case 9"
(let [text "**@user2 foo*****@user2 foo** @user2"
result (mentions/replace-mentions text users)]
(test/is (= result "**@user2 foo*****@user2 foo** @0xpk2") (pr-str text))))
(test/testing "tripple * case 1"
(let [text "***@user2 foo***@user2 foo*"
result (mentions/replace-mentions text users)]
(test/is (= result "***@user2 foo***@0xpk2 foo*") (pr-str text))))
(test/testing "tripple ~ case 1"
(let [text "~~~@user2 foo~~~@user2 foo~"
result (mentions/replace-mentions text users)]
(test/is (= result text) (pr-str text))))
(test/testing "quote case 1"
(let [text ">@user2"
result (mentions/replace-mentions text users)]
(test/is (= result text) (pr-str text))))
(test/testing "quote case 2"
(let [text "\n>@user2"
result (mentions/replace-mentions text users)]
(test/is (= result text) (pr-str text))))
(test/testing "quote case 3"
(let [text "\n> @user2 \n \n @user2"
result (mentions/replace-mentions text users)]
(test/is (= result "\n> @user2 \n \n @0xpk2") (pr-str text))))
(test/testing "quote case 4"
(let [text ">@user2\n\n>@user2"
result (mentions/replace-mentions text users)]
(test/is (= result text) (pr-str text))))
(test/testing "quote case 5"
(let [text "***hey\n\n>@user2\n\n@user2 foo***"
result (mentions/replace-mentions text users)]
(test/is (= result "***hey\n\n>@user2\n\n@0xpk2 foo***")
(pr-str text))))
(test/testing "code case 1"
(let [text "` @user2 `"
result (mentions/replace-mentions text users)]
(test/is (= result text) (pr-str text))))
(test/testing "code case 2"
(let [text "` @user2 `"
result (mentions/replace-mentions text users)]
(test/is (= result text) (pr-str text))))
(test/testing "code case 3"
(let [text "``` @user2 ```"
result (mentions/replace-mentions text users)]
(test/is (= result text) (pr-str text))))
(test/testing "code case 4"
(let [text "` ` @user2 ``"
result (mentions/replace-mentions text users)]
(test/is (= result "` ` @0xpk2 ``") (pr-str text)))))))
+2 -1
View File
@@ -41,7 +41,8 @@
:albumId :album-id :albumId :album-id
:imageWidth :image-width :imageWidth :image-width
:imageHeight :image-height :imageHeight :image-height
:new :new?}) :new :new?
:albumImagesCount :album-images-count})
(update :quoted-message (update :quoted-message
set/rename-keys set/rename-keys
+1 -1
View File
@@ -115,7 +115,7 @@
{:events [:system-theme-mode-changed]} {:events [:system-theme-mode-changed]}
[{:keys [db] :as cofx} _] [{:keys [db] :as cofx} _]
(let [current-theme-type (get-in cofx [:db :multiaccount :appearance])] (let [current-theme-type (get-in cofx [:db :multiaccount :appearance])]
(when (and (multiaccounts.model/logged-in? cofx) (when (and (multiaccounts.model/logged-in? db)
(= current-theme-type status-im2.constants/theme-type-system)) (= current-theme-type status-im2.constants/theme-type-system))
{:multiaccounts.ui/switch-theme-fx {:multiaccounts.ui/switch-theme-fx
[(get-in db [:multiaccount :appearance]) [(get-in db [:multiaccount :appearance])
+1 -1
View File
@@ -238,7 +238,7 @@
:t/keycard-can-use-with-new-passcode :t/keycard-can-use-with-new-passcode
:t/keycard-backup-success-body))}} :t/keycard-backup-success-body))}}
(cond (cond
(multiaccounts.model/logged-in? cofx) (multiaccounts.model/logged-in? db)
(navigation/set-stack-root :profile-stack [:my-profile :keycard-settings]) (navigation/set-stack-root :profile-stack [:my-profile :keycard-settings])
(:multiaccounts/login db) (:multiaccounts/login db)
+1 -1
View File
@@ -21,7 +21,7 @@
(rf/defn on-network-status-change (rf/defn on-network-status-change
[{:keys [db] :as cofx}] [{:keys [db] :as cofx}]
(let [initialized? (get db :network-status/initialized?) (let [initialized? (get db :network-status/initialized?)
logged-in? (multiaccounts.model/logged-in? cofx) logged-in? (multiaccounts.model/logged-in? db)
{:keys [remember-syncing-choice?]} (:multiaccount db)] {:keys [remember-syncing-choice?]} (:multiaccount db)]
(apply (apply
rf/merge rf/merge
@@ -21,10 +21,10 @@
(rf/defn key-and-storage-management-pressed (rf/defn key-and-storage-management-pressed
"This event can be dispatched before login and from profile and needs to redirect accordingly" "This event can be dispatched before login and from profile and needs to redirect accordingly"
{:events [::key-and-storage-management-pressed]} {:events [::key-and-storage-management-pressed]}
[cofx] [{:keys [db] :as cofx}]
(navigation/navigate-to (navigation/navigate-to
cofx cofx
(if (multiaccounts.model/logged-in? cofx) (if (multiaccounts.model/logged-in? db)
:actions-logged-in :actions-logged-in
:actions-not-logged-in) :actions-not-logged-in)
nil)) nil))
+5 -6
View File
@@ -476,9 +476,6 @@
"Decides which root should be initialised depending on user and app state" "Decides which root should be initialised depending on user and app state"
[db] [db]
(cond (cond
(get db :local-pairing/completed-pairing?)
(re-frame/dispatch [:syncing/pairing-completed])
(get db :onboarding-2/new-account?) (get db :onboarding-2/new-account?)
(re-frame/dispatch [:onboarding-2/finalize-setup]) (re-frame/dispatch [:onboarding-2/finalize-setup])
@@ -490,8 +487,9 @@
(rf/defn login-only-events (rf/defn login-only-events
[{:keys [db] :as cofx} key-uid password save-password?] [{:keys [db] :as cofx} key-uid password save-password?]
(let [auth-method (:auth-method db) (let [auth-method (:auth-method db)
new-auth-method (get-new-auth-method auth-method save-password?)] new-auth-method (get-new-auth-method auth-method save-password?)
pairing-in-progress? (get-in db [:syncing :pairing-in-progress?])]
(log/debug "[login] login-only-events" (log/debug "[login] login-only-events"
"auth-method" auth-method "auth-method" auth-method
"new-auth-method" new-auth-method) "new-auth-method" new-auth-method)
@@ -500,7 +498,8 @@
:json-rpc/call :json-rpc/call
[{:method "settings_getSettings" [{:method "settings_getSettings"
:on-success #(do (re-frame/dispatch [::get-settings-callback %]) :on-success #(do (re-frame/dispatch [::get-settings-callback %])
(redirect-to-root db))}]} (when-not pairing-in-progress?
(redirect-to-root db)))}]}
(notifications/load-notification-preferences) (notifications/load-notification-preferences)
(when save-password? (when save-password?
(keychain/save-user-password key-uid password)) (keychain/save-user-password key-uid password))
+2 -3
View File
@@ -1,9 +1,8 @@
(ns status-im.multiaccounts.model) (ns status-im.multiaccounts.model)
(defn logged-in? (defn logged-in?
[cofx] [{:keys [multiaccount]}]
(boolean (boolean multiaccount))
(get-in cofx [:db :multiaccount])))
(defn credentials (defn credentials
[cofx] [cofx]
+2 -2
View File
@@ -4,6 +4,6 @@
(deftest logged-in-test (deftest logged-in-test
(testing "multiaccount is defined" (testing "multiaccount is defined"
(is (multiaccounts.model/logged-in? {:db {:multiaccount {}}}))) (is (multiaccounts.model/logged-in? {:multiaccount {}})))
(testing "multiaccount is not there" (testing "multiaccount is not there"
(is (not (multiaccounts.model/logged-in? {:db {}}))))) (is (not (multiaccounts.model/logged-in? {})))))
+13 -9
View File
@@ -60,27 +60,29 @@
[{:keys [db] :as cofx} event] [{:keys [db] :as cofx} event]
(log/info "local pairing signal received" (log/info "local pairing signal received"
{:event event}) {:event event})
(let [connection-success? (= (:type event) (let [connection-success? (and (= (:type event)
constants/local-pairing-event-connection-success) constants/local-pairing-event-connection-success)
(= (:action event)
constants/local-pairing-action-connect))
error-on-pairing? (contains? constants/local-pairing-event-errors (:type event)) error-on-pairing? (contains? constants/local-pairing-event-errors (:type event))
completed-pairing? (and (= (:type event) completed-pairing? (and (= (:type event)
constants/local-pairing-event-process-success) constants/local-pairing-event-transfer-success)
(= (:action event) (= (:action event)
constants/local-pairing-action-pairing-account)) constants/local-pairing-action-pairing-installation))
logged-in? (multiaccounts.model/logged-in? cofx) logged-in? (multiaccounts.model/logged-in? db)
;; since `connection-success` event is received on both sender and receiver devices ;; since `connection-success` event is received on both sender and receiver devices
;; we check the `logged-in?` status to identify the receiver and take the user to next screen ;; we check the `logged-in?` status to identify the receiver and take the user to next screen
navigate-to-syncing-devices? (and connection-success? (not logged-in?)) navigate-to-syncing-devices? (and connection-success? (not logged-in?))
user-in-syncing-devices-screen? (= (:view-id db) :syncing-devices)] user-in-syncing-devices-screen? (= (:view-id db) :syncing-devices)]
(merge {:db (cond-> db (merge {:db (cond-> db
connection-success? connection-success?
(assoc :local-pairing/completed-pairing? false) (assoc-in [:syncing :pairing-in-progress?] true)
error-on-pairing? error-on-pairing?
(dissoc :local-pairing/completed-pairing?) (update-in [:syncing :pairing-in-progress?] dissoc)
completed-pairing? completed-pairing?
(assoc :local-pairing/completed-pairing? true))} (assoc-in [:syncing :pairing-in-progress?] false))}
(when navigate-to-syncing-devices? (when navigate-to-syncing-devices?
{:dispatch [:navigate-to :syncing-devices]}) {:dispatch [:navigate-to :syncing-devices]})
(when (and error-on-pairing? user-in-syncing-devices-screen?) (when (and error-on-pairing? user-in-syncing-devices-screen?)
@@ -89,7 +91,9 @@
:icon-color colors/danger-50 :icon-color colors/danger-50
:override-theme :light :override-theme :light
:text (i18n/label :t/error-syncing-connection-failed)}] :text (i18n/label :t/error-syncing-connection-failed)}]
[:navigate-back]]})))) [:navigate-back]]})
(when completed-pairing?
{:dispatch [:syncing/pairing-completed]}))))
(rf/defn process (rf/defn process
{:events [:signals/signal-received]} {:events [:signals/signal-received]}
@@ -10,9 +10,7 @@
[re-frame.core :as re-frame] [re-frame.core :as re-frame]
[reagent.core :as reagent] [reagent.core :as reagent]
[status-im2.constants :as chat.constants] [status-im2.constants :as chat.constants]
[status-im.chat.models.mentions :as mentions]
[utils.i18n :as i18n] [utils.i18n :as i18n]
[status-im.multiaccounts.core :as multiaccounts]
[status-im.ui.components.icons.icons :as icons] [status-im.ui.components.icons.icons :as icons]
[status-im.ui.components.list.views :as list] [status-im.ui.components.list.views :as list]
[status-im.ui.screens.chat.components.reply :as reply] [status-im.ui.screens.chat.components.reply :as reply]
@@ -95,7 +93,7 @@
:color (styles/send-icon-color)}])]]) :color (styles/send-icon-color)}])]])
(defn on-selection-change (defn on-selection-change
[timeout-id last-text-change mentionable-users args] [timeout-id last-text-change args]
(let [selection (.-selection ^js (.-nativeEvent ^js args)) (let [selection (.-selection ^js (.-nativeEvent ^js args))
start (.-start selection) start (.-start selection)
end (.-end selection)] end (.-end selection)]
@@ -106,10 +104,9 @@
(reset! (reset!
timeout-id timeout-id
(utils.utils/set-timeout (utils.utils/set-timeout
#(re-frame/dispatch [::mentions/on-selection-change #(re-frame/dispatch [:mention/on-selection-change
{:start start {:start start
:end end} :end end}])
mentionable-users])
50))) 50)))
;; NOTE(rasom): on Android we dispatch event only in case if there ;; NOTE(rasom): on Android we dispatch event only in case if there
;; was no text changes during last 50ms. `on-selection-change` is ;; was no text changes during last 50ms. `on-selection-change` is
@@ -118,10 +115,9 @@
(when (and platform/android? (when (and platform/android?
(or (not @last-text-change) (or (not @last-text-change)
(< 50 (- (js/Date.now) @last-text-change)))) (< 50 (- (js/Date.now) @last-text-change))))
(re-frame/dispatch [::mentions/on-selection-change (re-frame/dispatch [:mention/on-selection-change
{:start start {:start start
:end end} :end end}]))))
mentionable-users]))))
(defonce input-texts (atom {})) (defonce input-texts (atom {}))
(defonce mentions-enabled (reagent/atom {})) (defonce mentions-enabled (reagent/atom {}))
@@ -183,7 +179,7 @@
(re-frame/dispatch [:chat.ui/set-chat-input-text val])) (re-frame/dispatch [:chat.ui/set-chat-input-text val]))
(defn on-change (defn on-change
[last-text-change timeout-id mentionable-users refs chat-id sending-image args] [last-text-change timeout-id refs chat-id sending-image args]
(let [text (.-text ^js (.-nativeEvent ^js args)) (let [text (.-text ^js (.-nativeEvent ^js args))
prev-text (get @input-texts chat-id)] prev-text (get @input-texts chat-id)]
(when (and (seq prev-text) (empty? text) (not sending-image)) (when (and (seq prev-text) (empty? text) (not sending-image))
@@ -206,46 +202,24 @@
;; NOTE(rasom): on iOS `on-change` is dispatched after `on-text-input`, ;; NOTE(rasom): on iOS `on-change` is dispatched after `on-text-input`,
;; that's why mention suggestions are calculated on `on-change` ;; that's why mention suggestions are calculated on `on-change`
(when platform/ios? (when platform/ios?
(re-frame/dispatch [::mentions/calculate-suggestions mentionable-users])))) (re-frame/dispatch [:mention/calculate-suggestions]))))
(rf/defn set-input-text (rf/defn set-input-text
"Set input text for current-chat. Takes db and input text and cofx "Set input text for current-chat. Takes db and input text and cofx
as arguments and returns new fx. Always clear all validation messages." as arguments and returns new fx. Always clear all validation messages."
{:events [:chat.ui.input/set-chat-input-text]} {:events [:chat.ui.input/set-chat-input-text]}
[{:keys [db]} text chat-id] [{:keys [db]} text chat-id]
(let [text-with-mentions (mentions/->input-field text) (let [params [chat-id text]
all-contacts (:contacts/contacts db) method "wakuext_chatMentionToInputField"]
chat (get-in db [:chats chat-id]) {:json-rpc/call [{:method method
current-multiaccount (:multiaccount db) :params params
community-members (when (= (:chat-type chat) chat.constants/community-chat-type) :on-success #(rf/dispatch [:mention/on-to-input-field-success %])
(get-in db [:communities (:community-id chat) :members])) :on-error #(rf/dispatch [:mention/on-error
mentionable-users (mentions/get-mentionable-users {:method method
chat :params params} %])}]}))
all-contacts
current-multiaccount
community-members)
hydrated-mentions (map
(fn [[t mention :as e]]
(if (= t :mention)
(let [mention (multiaccounts/displayed-name
(get mentionable-users mention))]
[:mention
(if (string/starts-with? mention "@")
mention
(str "@" mention))])
e))
text-with-mentions)
info (mentions/->info hydrated-mentions)
new-text (string/join (map second hydrated-mentions))]
{:set-text-input-value [chat-id new-text]
:db
(-> db
(assoc-in [:chats/cursor chat-id] (:mention-end info))
(assoc-in [:chat/inputs-with-mentions chat-id] hydrated-mentions)
(assoc-in [:chats/mentions chat-id :mentions] info))}))
(defn on-text-input (defn on-text-input
[mentionable-users chat-id args] [chat-id args]
(let [native-event (.-nativeEvent ^js args) (let [native-event (.-nativeEvent ^js args)
text (.-text ^js native-event) text (.-text ^js native-event)
previous-text (.-previousText ^js native-event) previous-text (.-previousText ^js native-event)
@@ -256,7 +230,7 @@
(swap! mentions-enabled assoc chat-id true)) (swap! mentions-enabled assoc chat-id true))
(re-frame/dispatch (re-frame/dispatch
[::mentions/on-text-input [:mention/on-text-input
{:new-text text {:new-text text
:previous-text previous-text :previous-text previous-text
:start start :start start
@@ -265,12 +239,11 @@
;; `on-change`, that's why mention suggestions are calculated ;; `on-change`, that's why mention suggestions are calculated
;; on `on-change` ;; on `on-change`
(when platform/android? (when platform/android?
(re-frame/dispatch [::mentions/calculate-suggestions mentionable-users])))) (re-frame/dispatch [:mention/calculate-suggestions]))))
(defn text-input (defn text-input
[{:keys [set-active-panel refs chat-id sending-image]}] [{:keys [set-active-panel refs chat-id sending-image]}]
(let [cooldown-enabled? @(re-frame/subscribe [:chats/current-chat-cooldown-enabled?]) (let [cooldown-enabled? @(re-frame/subscribe [:chats/current-chat-cooldown-enabled?])
mentionable-users @(re-frame/subscribe [:chats/mentionable-users])
timeout-id (atom nil) timeout-id (atom nil)
last-text-change (atom nil) last-text-change (atom nil)
mentions-enabled (get @mentions-enabled chat-id) mentions-enabled (get @mentions-enabled chat-id)
@@ -296,11 +269,10 @@
:auto-capitalize :sentences :auto-capitalize :sentences
:on-selection-change (partial on-selection-change :on-selection-change (partial on-selection-change
timeout-id timeout-id
last-text-change last-text-change)
mentionable-users)
:on-change :on-change
(partial on-change last-text-change timeout-id mentionable-users refs chat-id sending-image) (partial on-change last-text-change timeout-id refs chat-id sending-image)
:on-text-input (partial on-text-input mentionable-users chat-id)} :on-text-input (partial on-text-input chat-id)}
(if mentions-enabled (if mentions-enabled
(for [[idx [type text]] (map-indexed (for [[idx [type text]] (map-indexed
(fn [idx item] (fn [idx item]
@@ -76,7 +76,8 @@
(format-reply-author from contact-name current-public-key)]]) (format-reply-author from contact-name current-public-key)]])
(defn reply-message (defn reply-message
[{:keys [from identicon content-type contentType parsed-text content deleted? deleted-for-me?]} [{:keys [from identicon content-type contentType parsed-text content deleted? deleted-for-me?
album-images-count]}
in-chat-input? pin? recording-audio?] in-chat-input? pin? recording-audio?]
(let [contact-name (rf/sub [:contacts/contact-name-by-identity from]) (let [contact-name (rf/sub [:contacts/contact-name-by-identity from])
current-public-key (rf/sub [:multiaccount/public-key]) current-public-key (rf/sub [:multiaccount/public-key])
@@ -113,9 +114,12 @@
(= constants/content-type-audio content-type)) (= constants/content-type-audio content-type))
{:color (colors/theme-colors colors/neutral-50 colors/neutral-40)}))} {:color (colors/theme-colors colors/neutral-50 colors/neutral-40)}))}
(case (or content-type contentType) (case (or content-type contentType)
constants/content-type-image "Image" constants/content-type-image (if album-images-count
constants/content-type-sticker "Sticker" (i18n/label :t/images-albums-count
constants/content-type-audio "Audio" {:album-images-count album-images-count})
(i18n/label :t/image))
constants/content-type-sticker (i18n/label :t/sticker)
constants/content-type-audio (i18n/label :t/audio)
(get-quoted-text-with-mentions (or parsed-text (:parsed-text content))))]])] (get-quoted-text-with-mentions (or parsed-text (:parsed-text content))))]])]
(when (and in-chat-input? (not recording-audio?)) (when (and in-chat-input? (not recording-audio?))
[quo2.button/button [quo2.button/button
@@ -5,7 +5,6 @@
[re-frame.core :as re-frame] [re-frame.core :as re-frame]
[reagent.core :as reagent] [reagent.core :as reagent]
[status-im2.constants :as chat.constants] [status-im2.constants :as chat.constants]
[status-im.chat.models.mentions :as mentions]
[utils.i18n :as i18n] [utils.i18n :as i18n]
[utils.re-frame :as rf] [utils.re-frame :as rf]
[utils.transforms :as transforms] [utils.transforms :as transforms]
@@ -93,7 +92,7 @@
(rf/dispatch [:chat.ui/set-chat-input-text val])) (rf/dispatch [:chat.ui/set-chat-input-text val]))
(defn on-selection-change (defn on-selection-change
[timeout-id last-text-change mentionable-users args] [timeout-id last-text-change args]
(let [selection (.-selection ^js (.-nativeEvent ^js args)) (let [selection (.-selection ^js (.-nativeEvent ^js args))
start (.-start selection) start (.-start selection)
end (.-end selection)] end (.-end selection)]
@@ -104,10 +103,9 @@
(reset! (reset!
timeout-id timeout-id
(background-timer/set-timeout (background-timer/set-timeout
#(rf/dispatch [::mentions/on-selection-change #(rf/dispatch [:mention/on-selection-change
{:start start {:start start
:end end} :end end}])
mentionable-users])
50))) 50)))
;; NOTE(rasom): on Android we dispatch event only in case if there ;; NOTE(rasom): on Android we dispatch event only in case if there
;; was no text changes during last 50ms. `on-selection-change` is ;; was no text changes during last 50ms. `on-selection-change` is
@@ -116,13 +114,12 @@
(when (and platform/android? (when (and platform/android?
(or (not @last-text-change) (or (not @last-text-change)
(< 50 (- (js/Date.now) @last-text-change)))) (< 50 (- (js/Date.now) @last-text-change))))
(rf/dispatch [::mentions/on-selection-change (rf/dispatch [:mention/on-selection-change
{:start start {:start start
:end end} :end end}]))))
mentionable-users]))))
(defn on-change (defn on-change
[last-text-change timeout-id mentionable-users refs chat-id sending-image args] [last-text-change timeout-id refs chat-id sending-image args]
(let [text (.-text ^js (.-nativeEvent ^js args)) (let [text (.-text ^js (.-nativeEvent ^js args))
prev-text (get @input-texts chat-id)] prev-text (get @input-texts chat-id)]
(when (and (seq prev-text) (empty? text) (not sending-image)) (when (and (seq prev-text) (empty? text) (not sending-image))
@@ -147,10 +144,10 @@
;; NOTE(rasom): on iOS `on-change` is dispatched after `on-text-input`, ;; NOTE(rasom): on iOS `on-change` is dispatched after `on-text-input`,
;; that's why mention suggestions are calculated on `on-change` ;; that's why mention suggestions are calculated on `on-change`
(when platform/ios? (when platform/ios?
(rf/dispatch [::mentions/calculate-suggestions mentionable-users])))) (rf/dispatch [:mention/calculate-suggestions]))))
(defn on-text-input (defn on-text-input
[mentionable-users chat-id args] [chat-id args]
(let [native-event (.-nativeEvent ^js args) (let [native-event (.-nativeEvent ^js args)
text (.-text ^js native-event) text (.-text ^js native-event)
previous-text (.-previousText ^js native-event) previous-text (.-previousText ^js native-event)
@@ -161,7 +158,7 @@
(swap! mentions-enabled? assoc chat-id true)) (swap! mentions-enabled? assoc chat-id true))
(rf/dispatch (rf/dispatch
[::mentions/on-text-input [:mention/on-text-input
{:new-text text {:new-text text
:previous-text previous-text :previous-text previous-text
:start start :start start
@@ -170,7 +167,7 @@
;; `on-change`, that's why mention suggestions are calculated ;; `on-change`, that's why mention suggestions are calculated
;; on `on-change` ;; on `on-change`
(when platform/android? (when platform/android?
(rf/dispatch [::mentions/calculate-suggestions mentionable-users])))) (rf/dispatch [:mention/calculate-suggestions]))))
(defn text-input-style (defn text-input-style
[chat-id] [chat-id]
@@ -193,7 +190,6 @@
(defn text-input (defn text-input
[{:keys [refs chat-id sending-image on-content-size-change]}] [{:keys [refs chat-id sending-image on-content-size-change]}]
(let [cooldown-enabled? (rf/sub [:chats/current-chat-cooldown-enabled?]) (let [cooldown-enabled? (rf/sub [:chats/current-chat-cooldown-enabled?])
mentionable-users (rf/sub [:chats/mentionable-users])
timeout-id (reagent/atom nil) timeout-id (reagent/atom nil)
last-text-change (reagent/atom nil) last-text-change (reagent/atom nil)
mentions-enabled? (get @mentions-enabled? chat-id) mentions-enabled? (get @mentions-enabled? chat-id)
@@ -220,18 +216,17 @@
:on-content-size-change on-content-size-change :on-content-size-change on-content-size-change
:on-selection-change (partial on-selection-change :on-selection-change (partial on-selection-change
timeout-id timeout-id
last-text-change last-text-change)
mentionable-users)
:on-change :on-change
(partial on-change last-text-change timeout-id mentionable-users refs chat-id sending-image) (partial on-change last-text-change timeout-id refs chat-id sending-image)
:on-text-input (partial on-text-input mentionable-users chat-id)} :on-text-input (partial on-text-input chat-id)}
input-with-mentions (rf/sub [:chat/input-with-mentions]) input-with-mentions (rf/sub [:chat/input-with-mentions])
children (fn [] children (fn []
(if mentions-enabled? (if mentions-enabled?
(map-indexed (map-indexed
(fn [index [_ text]] (fn [index [mention-type text]]
^{:key (str index "_" type "_" text)} ^{:key (str index "_" mention-type "_" text)}
[rn/text (when (= type :mention) {:style {:color colors/primary-50}}) [rn/text (when (= mention-type :mention) {:style {:color colors/primary-50}})
text]) text])
input-with-mentions) input-with-mentions)
(get @input-texts chat-id)))] (get @input-texts chat-id)))]
@@ -184,7 +184,7 @@
on login, otherwise just handle it" on login, otherwise just handle it"
{:events [:universal-links/handle-url]} {:events [:universal-links/handle-url]}
[{:keys [db] :as cofx} url] [{:keys [db] :as cofx} url]
(if (and (multiaccounts.model/logged-in? cofx) (= (:app-state db) "active")) (if (and (multiaccounts.model/logged-in? db) (= (:app-state db) "active"))
(route-url cofx url) (route-url cofx url)
(store-url-for-later cofx url))) (store-url-for-later cofx url)))
+3
View File
@@ -263,6 +263,9 @@
An example of a connection string is -> cs2:5vd6J6:Jfc:27xMmHKEYwzRGXcvTtuiLZFfXscMx4Mz8d9wEHUxDj4p7:EG7Z13QScfWBJNJ5cprszzDQ5fBVsYMirXo8MaQFJvpF:3 " An example of a connection string is -> cs2:5vd6J6:Jfc:27xMmHKEYwzRGXcvTtuiLZFfXscMx4Mz8d9wEHUxDj4p7:EG7Z13QScfWBJNJ5cprszzDQ5fBVsYMirXo8MaQFJvpF:3 "
"cs") "cs")
(def ^:const local-pairing-role-sender "sender")
(def ^:const local-pairing-role-receiver "receiver")
;; sender and receiver events ;; sender and receiver events
(def ^:const local-pairing-event-connection-success "connection-success") (def ^:const local-pairing-event-connection-success "connection-success")
(def ^:const local-pairing-event-connection-error "connection-error") (def ^:const local-pairing-event-connection-error "connection-error")
@@ -13,5 +13,3 @@
(def ^:const velocity-factor 0.5) (def ^:const velocity-factor 0.5)
(def ^:const default-duration 300) (def ^:const default-duration 300)
(def ^:const default-dimension 1000)
@@ -216,11 +216,9 @@
curr-orientation (or (rf/sub [:lightbox/orientation]) curr-orientation (or (rf/sub [:lightbox/orientation])
orientation/portrait) orientation/portrait)
portrait? (= curr-orientation orientation/portrait) portrait? (= curr-orientation orientation/portrait)
dimensions (utils/get-dimensions dimensions (utils/get-dimensions (or image-width (:window-width args))
(or image-width c/default-dimension) (or image-height (:window-width args))
(or image-height c/default-duration) curr-orientation args)
curr-orientation
args)
animations {:scale (anim/use-val c/min-scale) animations {:scale (anim/use-val c/min-scale)
:saved-scale (anim/use-val c/min-scale) :saved-scale (anim/use-val c/min-scale)
:pan-x-start (anim/use-val c/init-offset) :pan-x-start (anim/use-val c/init-offset)
@@ -15,7 +15,8 @@
[status-im2.contexts.onboarding.common.background.view :as background] [status-im2.contexts.onboarding.common.background.view :as background]
[status-im2.contexts.onboarding.sign-in.style :as style] [status-im2.contexts.onboarding.sign-in.style :as style]
[utils.i18n :as i18n] [utils.i18n :as i18n]
[utils.re-frame :as rf])) [utils.re-frame :as rf]
[utils.transforms :as transforms]))
(defonce camera-permission-granted? (reagent/atom false)) (defonce camera-permission-granted? (reagent/atom false))
@@ -85,14 +86,20 @@
(defn- qr-scan-hole-area (defn- qr-scan-hole-area
[qr-view-finder] [qr-view-finder]
[rn/view (let [status-bar-height (rn/status-bar-height)]
{:style style/qr-view-finder [rn/view
:on-layout (fn [event] {:style style/qr-view-finder
(let [layout (js->clj (oops/oget event "nativeEvent.layout") :on-layout (fn [event]
:keywordize-keys (let [layout (transforms/js->clj (oops/oget event "nativeEvent.layout"))
true) width (:width layout)
view-finder (assoc layout :height (:width layout))] y (if platform/android?
(reset! qr-view-finder view-finder)))}]) (+ status-bar-height (:y layout))
(:y layout))
view-finder (-> layout
(assoc :height width)
(assoc :y y))]
(reset! qr-view-finder view-finder)))}]))
(defn- border (defn- border
[border1 border2 corner] [border1 border2 corner]
+14 -5
View File
@@ -13,10 +13,17 @@
(rf/defn local-pairing-completed (rf/defn local-pairing-completed
{:events [:syncing/pairing-completed]} {:events [:syncing/pairing-completed]}
[{:keys [db] :as cofx}] [{:keys [db]}]
(rf/merge cofx (let [receiver? (= (get-in db [:syncing :role]) constants/local-pairing-role-receiver)]
{:db (dissoc db :local-pairing/completed-pairing?) (merge
:dispatch [:init-root :enable-notifications]})) {:db (dissoc db :syncing)}
(when receiver?
{:dispatch [:init-root :enable-notifications]}))))
(rf/defn local-pairing-update-role
{:events [:syncing/update-role]}
[{:keys [db]} role]
{:db (assoc-in db [:syncing :role] role)})
(defn- get-default-node-config (defn- get-default-node-config
[installation-id] [installation-id]
@@ -44,6 +51,7 @@
:nodeConfig final-node-config :nodeConfig final-node-config
:settingCurrentNetwork config/default-network :settingCurrentNetwork config/default-network
:deviceType utils.platform/os}}))] :deviceType utils.platform/os}}))]
(rf/dispatch [:syncing/update-role constants/local-pairing-role-receiver])
(status/input-connection-string-for-bootstrapping (status/input-connection-string-for-bootstrapping
connection-string connection-string
config-map config-map
@@ -61,7 +69,8 @@
[:show-bottom-sheet [:show-bottom-sheet
{:content (fn [] {:content (fn []
[sheet/qr-code-view-with-connection-string [sheet/qr-code-view-with-connection-string
connection-string])}]))] connection-string])}])
(rf/dispatch [:syncing/update-role constants/local-pairing-role-sender]))]
(if valid-password? (if valid-password?
(let [sha3-pwd (status/sha3 (str (security/safe-unmask-data entered-password))) (let [sha3-pwd (status/sha3 (str (security/safe-unmask-data entered-password)))
key-uid (get-in db [:multiaccount :key-uid]) key-uid (get-in db [:multiaccount :key-uid])
-21
View File
@@ -3,7 +3,6 @@
[quo.design-system.colors :as colors] [quo.design-system.colors :as colors]
[re-frame.core :as re-frame] [re-frame.core :as re-frame]
[status-im.add-new.db :as db] [status-im.add-new.db :as db]
[status-im.chat.models.mentions :as mentions]
[status-im.communities.core :as communities] [status-im.communities.core :as communities]
[status-im.group-chats.core :as group-chat] [status-im.group-chats.core :as group-chat]
[status-im.group-chats.db :as group-chats.db] [status-im.group-chats.db :as group-chats.db]
@@ -438,26 +437,6 @@
(fn [[current-chat pk]] (fn [[current-chat pk]]
(group-chat/member-removed? current-chat pk))) (group-chat/member-removed? current-chat pk)))
(re-frame/reg-sub
:chats/mentionable-users
:<- [:chats/current-chat]
:<- [:contacts/blocked-set]
:<- [:contacts/contacts]
:<- [:multiaccount]
:<- [:communities/current-community-members]
(fn
[[{:keys [users] :as chat}
blocked
all-contacts
{:keys [public-key] :as current-multiaccount}
community-members]]
(let [mentionable-users (mentions/get-mentionable-users chat
all-contacts
current-multiaccount
community-members)
members-left (into #{} (filter #(group-chat/member-removed? chat %) (keys users)))]
(apply dissoc mentionable-users (conj (concat blocked members-left) public-key)))))
(re-frame/reg-sub (re-frame/reg-sub
:chat/mention-suggestions :chat/mention-suggestions
:<- [:chats/current-chat-id] :<- [:chats/current-chat-id]
+1 -1
View File
@@ -29,7 +29,7 @@
(re-frame/reg-sub (re-frame/reg-sub
:multiaccount/logged-in? :multiaccount/logged-in?
(fn [db] (fn [db]
(multiaccounts.model/logged-in? {:db db}))) (multiaccounts.model/logged-in? db)))
(re-frame/reg-sub (re-frame/reg-sub
:hide-screen? :hide-screen?
+3 -3
View File
@@ -3,7 +3,7 @@
"_comment": "Instead use: scripts/update-status-go.sh <rev>", "_comment": "Instead use: scripts/update-status-go.sh <rev>",
"owner": "status-im", "owner": "status-im",
"repo": "status-go", "repo": "status-go",
"version": "v0.142.4", "version": "v0.143.1",
"commit-sha1": "142b170ec99498bbeb41d7f4ce5b7140db597e56", "commit-sha1": "ee01fe4e0c14f03fb32dda15365da3c73470cde0",
"src-sha256": "038p3axqj4m2wczs3fg44535rn6y235hr23w9fjriaglp80p2z07" "src-sha256": "0l5rld1p5nsvfahn8iymyn87a8h6wrllcx2jngcy7pxffbgk3619"
} }
+1
View File
@@ -2018,6 +2018,7 @@
"you-have-no-contacts": "You have no contacts", "you-have-no-contacts": "You have no contacts",
"my-albums": "My albums", "my-albums": "My albums",
"images": "images", "images": "images",
"images-albums-count": "{{album-images-count}} images",
"only-6-images": "You can only add 6 images to your message", "only-6-images": "You can only add 6 images to your message",
"delivered": "Delivered", "delivered": "Delivered",
"mark-all-notifications-as-read": "Mark all notifications as read", "mark-all-notifications-as-read": "Mark all notifications as read",