Compare commits

..
Author SHA1 Message Date
yevh-berdnyk ba74308139 Merge remote-tracking branch 'origin/tests/removing-rerun-errors' into tests/removing-rerun-errors 2021-12-17 17:03:21 +02:00
yevh-berdnyk a8fd6fdd60 2 rerun errors removed 2021-12-17 17:01:45 +02:00
yevh-berdnyk fe9dd7c549 Merge branch 'tests/removing-rerun-errors' of github.com:status-im/status-react into tests/removing-rerun-errors 2021-12-17 16:59:54 +02:00
Churikova Tetiana be79a8e54c e2e: fix
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2021-12-17 14:48:24 +01:00
Roman Volosovskyi 36d96c6264 [#12912] Fix endless loading after removing messages in group chat 2021-12-17 12:44:08 +02:00
jinhojang6 340213ece5 Update translations
Signed-off-by: Shivek Khurana <shivek@status.im>
2021-12-17 15:54:06 +05:30
Churikova Tetiana 032a8786ff e2e: fixes
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2021-12-16 17:46:48 +01:00
Michele Balistreri 15d671275f avoid closing/opening NFC dialog in rapid sequence
Signed-off-by: Michele Balistreri <michele@bitgamma.com>
2021-12-16 18:32:08 +03:00
Ajay Sivan f3533c5f99 Show message timestamps on tap, remove from bubbles
Signed-off-by: andrey <motor4ik@gmail.com>
2021-12-16 13:15:35 +01:00
yevh-berdnyk b18d7b6a2a e2e: setup and teardown with shared drivers 2021-12-15 21:14:16 +02:00
Roman Volosovskyi 2c23ab4c5d [#12867] Add accessibility IDs to toggles for e2e 2021-12-15 18:57:25 +02:00
Roman Volosovskyi 646add59b8 [#12782] Re-open app on the last open chat 2021-12-15 13:45:42 +02:00
yevh-berdnyk 71651601ad Removed rerun errors 2021-12-15 03:55:27 +02:00
dependabot[bot] cd111aeeec Bump lxml from 4.6.2 to 4.6.5 in /test/appium
Bumps [lxml](https://github.com/lxml/lxml) from 4.6.2 to 4.6.5.
- [Release notes](https://github.com/lxml/lxml/releases)
- [Changelog](https://github.com/lxml/lxml/blob/master/CHANGES.txt)
- [Commits](https://github.com/lxml/lxml/compare/lxml-4.6.2...lxml-4.6.5)

---
updated-dependencies:
- dependency-name: lxml
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-13 19:45:32 +00:00
Roman Volosovskyi 81b60ce86c [#12907] Fix error on 'Accept and join' in referral chat 2021-12-13 16:42:08 +02:00
Roman Volosovskyi 356dd89147 [#12898] Fix endless loading in pubchats 2021-12-13 13:53:09 +02:00
Roman Volosovskyi a6102c1133 Fix unique :key warning on add pubchat screen 2021-12-13 12:59:03 +02:00
Andrea Maria Piana 7dfa93f2a2 Fix syncing public chats 2021-12-10 17:55:12 +00:00
Michele Balistreri c6271557b1 fix pairing for new cards
Signed-off-by: Michele Balistreri <michele@bitgamma.com>
2021-12-10 17:45:27 +03:00
Shivek Khurana d1f3a33194 Add 1.18 to RELEASES.MD
Signed-off-by: Shivek Khurana <shivek@status.im>
2021-12-09 15:46:55 +05:30
Shivek Khurana c6371bf3b3 Bump release to 1.18.0
Signed-off-by: Shivek Khurana <shivek@status.im>
2021-12-08 16:39:24 +05:30
jinhojang6 59bc7af00c Update translations 2021-12-07 17:14:40 +01:00
Michele Balistreri a5737856c0 sync leftovers
Signed-off-by: Michele Balistreri <michele@bitgamma.com>
2021-12-07 17:39:42 +03:00
Roman Volosovskyi 7d0944cfd1 [#12813] Remove POA network from the list 2021-12-07 13:08:31 +02:00
Roman Volosovskyi 099bcf8a17 Allow sending messages offline (non-datasync messages) 2021-12-07 12:25:26 +02:00
Churikova Tetiana 4504f07a2a e2e: small fixes
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2021-12-06 17:58:19 +01:00
Brian Sztamfater b5d8a641c6 Improve mention suggestions list
Signed-off-by: Brian Sztamfater <brian@status.im>
2021-12-06 10:45:49 -03:00
Parvesh Monu 11d3bf094a Decline pending group invites from user, when user is blocked (#12878) 2021-12-06 18:34:13 +05:30
Andrea Maria Piana 32c0f9719c [Fixes: #12869] Save contact on unblock 2021-12-06 11:46:29 +00:00
andrey b587a8f85e [#11895] No last message when opening chat but it was visible on chat-preview
Signed-off-by: andrey <motor4ik@gmail.com>
2021-12-03 12:15:19 +01:00
andrey 53d7d719f0 [#12858] [ANDROID] Changing screen orientation results in breaking images / layout
Signed-off-by: andrey <motor4ik@gmail.com>
2021-12-03 12:13:51 +01:00
Michele Balistreri 46c023920c sync activity center
Signed-off-by: Michele Balistreri <michele@bitgamma.com>
2021-12-02 17:27:57 +03:00
Churikova Tetiana 816f15f976 e2e: dependencies
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2021-12-01 18:41:05 +01:00
snyk-bot 853af40167 fix: test/appium/requirements.txt to reduce vulnerabilities
The following vulnerabilities are fixed by pinning transitive dependencies:
- https://snyk.io/vuln/SNYK-PYTHON-AIOHTTP-1584144

Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2021-12-01 16:10:39 +01:00
Andrea Maria Piana 153204ecb1 Add confirmation of p2p messages
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2021-12-01 13:00:56 +00:00
Roman Volosovskyi 62162c0f2a [#12848] Add an option to submit error report to GH 2021-11-30 16:13:36 +02:00
Roman Volosovskyi c7e66fb1aa [#12818] Support tx history (in a way) when on BSC chains 2021-11-27 11:03:01 +02:00
jakub 89d42b9ef4 nix: fix gomobile builds requiring Android SDK
This works fine on `x86_64`, but will fail when used on `aarch64`.

Issue: https://github.com/status-im/status-react/issues/12794

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2021-11-26 16:22:57 +01:00
jakub d0f76c5412 nix: upgrade nixpkgs to current master
Notable package upgrades:

| Software  | Old          | New           |
|-----------|--------------|---------------|
| Glibc     | `2.32`       | `2.33`        |
| BinUtils  | `2.35.1`     | `2.35.2`      |
| CoreUtils | `8.32`       | `9.0`         |
| OpenSSL   | `1.1.1k`     | `1.1.1l`      |
| Git       | `2.31.1`     | `2.33.1`      |
| GCC       | `8.4.0`      | `8.5.0`       |
| Clojure   | `1.10.3.855` | `1.10.3.1029` |
| Node.js   | `12.22.1`    | `12.22.7`     |
| Yarn      | `1.22.10`    | `1.22.17`     |

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2021-11-26 16:22:45 +01:00
Churikova Tetiana 3dc943c89e update release umbrella issue 2021-11-26 16:09:22 +01:00
Churikova Tetiana f5589c368c e2e: new tests + todos
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2021-11-26 15:18:29 +01:00
Roman Volosovskyi 469e082de1 [#12819] Fix network fee calculation on xDai chain 2021-11-26 13:25:09 +02:00
jakub a0430607d3 ci: specify macos host architecture in labels
Since now we have a 5th Gen Mac Mini with `arm64` M1 CPU.

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2021-11-26 12:07:36 +01:00
Parvesh Monu 751b30688d Decline pending group invitations from user, when user is banned (#12835) 2021-11-25 21:09:10 +05:30
Parvesh Monu b4b39e5088 Change accessibility label as per online status (#12846) 2021-11-25 18:07:47 +05:30
andrey ae26024890 [#12837] Cannot remove value from the 'Custom nonce' field
Signed-off-by: andrey <motor4ik@gmail.com>
2021-11-25 08:04:56 +01:00
jakub 8b055cd3c3 ci: fix macos host label for pod updates
Job: https://ci.status.im/job/status-react/job/tools/job/run-pod-repo-update

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2021-11-24 20:54:46 +01:00
andrey c9c8263c9e [#12365] Spin of death on adding custom NFT token contract
Signed-off-by: andrey <motor4ik@gmail.com>
2021-11-24 12:36:47 +01:00
andrey 4000abfd0a [#11964] "TypeError: Network request failed" when switching to Goerli network
Signed-off-by: andrey <motor4ik@gmail.com>
2021-11-23 17:44:03 +01:00
andrey 995a647a34 [#12827] Can't send transaction with custom nonce as it is overlapped by keyboard
Signed-off-by: andrey <motor4ik@gmail.com>
2021-11-23 11:46:45 +01:00
Andrea Maria Piana fdadee6cef update statusgo
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2021-11-22 11:20:56 +00:00
Churikova Tetiana 27f1feeaf6 e2e: catch testrail error
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2021-11-19 18:28:29 +01:00
Parvesh Monu debf3df61c Allow user to be reinvited to the same group after leaving (#12814) 2021-11-19 20:28:42 +05:30
Churikova Tetiana ebf2ad206e e2e: new checks, formatting 2021-11-18 16:16:48 +01:00
Michele Balistreri b919df6d6b better NFC timeout handling on iOS
Signed-off-by: Michele Balistreri <michele@bitgamma.com>
2021-11-18 14:57:01 +03:00
andrey 437d58f827 use react-native-fast-image for stickers
Signed-off-by: andrey <motor4ik@gmail.com>
2021-11-17 15:44:27 +01:00
andrey d0d9960f8d [#12807] add ENS erc20 token to the list
Signed-off-by: andrey <motor4ik@gmail.com>
2021-11-17 13:20:46 +01:00
Parvesh Monu db9d1a1251 Remove chat from activity center after opening from public chat (#12815) 2021-11-16 21:40:53 +05:30
andrey c16b0860ec custom network symbol
Signed-off-by: andrey <motor4ik@gmail.com>
2021-11-16 12:43:31 +01:00
jakub f448f014f6 nix: update gradle dependencies
Signed-off-by: Jakub Sokołowski <jakub@status.im>
2021-11-16 11:25:07 +01:00
jakub 43da5a60fe nix: make url2json.sh parse POM content for packaging
Otherwise we can download a JAR when an AAR is necessary.

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2021-11-16 11:12:06 +01:00
Churikova Tetiana 41496d5ce3 e2e: waku align
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2021-11-16 10:39:11 +01:00
Michele Balistreri 4349f2659e use a default pairing password for Keycard
Signed-off-by: Michele Balistreri <michele@bitgamma.com>
2021-11-16 08:31:41 +03:00
Andrea Maria Piana e125164273 [Fixes: #12550] Backup contacts through waku
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2021-11-15 18:55:59 +00:00
jakub 179f1d26ae nix: remove obsolete references to Nimbus sources
This used to be a project to integrate Nimbus with mobile, but it was abandoned.

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2021-11-15 13:17:30 +01:00
jakub bdfb7e296b nix: fix status-go override not passing to Nix build
Incorrect reference to `nimbus.src-override` causes Gradle builds to fail with:
```
Caused by: org.gradle.internal.resolve.ModuleVersionResolveException: Could not resolve status-im:status-go:e940434.
```
Due to this `if` clause not triggering:
https://github.com/status-im/status-react/blob/a573ae70e52e3c764b7a79a346c6114d01de458e/modules/react-native-status/android/build.gradle#L4-L8

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2021-11-15 12:11:11 +01:00
andrey a573ae70e5 [#12760] Add Binance Smart chain as main network
Signed-off-by: andrey <motor4ik@gmail.com>
2021-11-12 10:40:24 +01:00
Shivek Khurana 345ae29ddb Added svg support for nfts
Signed-off-by: Shivek Khurana <shivek@status.im>
2021-11-12 14:29:14 +05:30
Roman Volosovskyi 7359c52af1 Bug reporting and logs sharing improvements 2021-11-11 20:29:35 +02:00
Roman Volosovskyi 2c8276f353 [#11889] Allow snding messages offline 2021-11-11 16:31:20 +02:00
startgo 3ccdee2b9d Update zh_TW.json
修正一些顯示為簡體的字 Update some words to traditional chinese

Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2021-11-11 14:41:13 +01:00
Churikova Tetiana 97a106a025 e2e: geth log in failed tests + new checks for PNs
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2021-11-11 14:27:58 +01:00
Parvesh Monu 7754f0b6a5 fix community category reset on edit channel (#12804) 2021-11-09 16:14:25 +05:30
Parvesh Monu e16f7161c3 fix activity center community invite preview (#12803) 2021-11-08 19:22:28 +05:30
Jakub 9b5cbf8258 nix: avoid nesting of Nix shells, show errors (#12796)
Nesting of Nix shells does not work, since we have no way to safely do
that without starting an infinite loop of nested Nix shells.

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2021-11-05 12:59:33 +00:00
andrey 51bebf1483 fix eth_chainId
Signed-off-by: andrey <motor4ik@gmail.com>
2021-11-04 17:10:47 +01:00
Parvesh Monu b758b70733 Community categories reorder and persist open/close state (#12758) 2021-11-04 18:58:12 +05:30
206 changed files with 4344 additions and 2330 deletions
+1
View File
@@ -31,3 +31,4 @@ DATABASE_MANAGEMENT_ENABLED=1
METRICS_ENABLED=0
DELETE_MESSAGE_ENABLED=1
COLLECTIBLES_ENABLED=1
COMMANDS_ENABLED=1
+1 -1
View File
@@ -68,7 +68,7 @@ Upgrade (e2e):
- [ ] 3. Upload builds for DO store, https://dev.status.im/ (Jakub)
#### 5) At time of publishing
- [ ] 1. Notify marketing to push comms and blog post (Jonny)
- [ ] 1. Notify marketing to push comms and blog post (Jonny + get review on blog from QA team)
- [ ] 2. Publish release to app store and playstore
- [ ] 3. Final push to update prod site https://status.im/, [instructions](https://github.com/status-im/infra-docs/blob/master/articles/status_release_upload.md) (Jakub - requires credentials to upload)
- [ ] 4. Add the link to the post about the release and publish the release: https://github.com/status-im/status-react/releases (Jakub)
+3 -6
View File
@@ -42,7 +42,7 @@ export NIX_CONF_DIR = $(PWD)/nix
# Location of symlinks to derivations that should not be garbage collected
export _NIX_GCROOTS = /nix/var/nix/gcroots/per-user/$(USER)/status-react
# Defines which variables will be kept for Nix pure shell, use semicolon as divider
export _NIX_KEEP ?= TMPDIR,BUILD_ENV,STATUS_GO_SRC_OVERRIDE,NIMBUS_SRC_OVERRIDE
export _NIX_KEEP ?= TMPDIR,BUILD_ENV,STATUS_GO_SRC_OVERRIDE
# Useful for Andoird release builds
TMP_BUILD_NUMBER := $(shell ./scripts/version/gen_build_no.sh | cut -c1-10)
@@ -57,13 +57,10 @@ endif
# Nix targets
#----------------
# WARNING: This has to be located right before the targets
ifdef IN_NIX_SHELL
SHELL := env bash
else
# WARNING: This has to be located right before all the targets.
SHELL := ./nix/scripts/shell.sh
endif
shell: export TARGET ?= default
shell: ##@prepare Enter into a pre-configured shell
ifndef IN_NIX_SHELL
@ENTER_NIX_SHELL
+35
View File
@@ -1,3 +1,38 @@
## 1.18.0 Release notes :package:
### Features
* 🚦Online status indicator <https://github.com/status-im/status-react/issues/12547>
* 👛 Add possibility to select wallet for ENS names <https://github.com/status-im/status-react/pull/12761>
* 🐞 Bug reporting and logs sharing improvements <https://github.com/status-im/status-react/pull/12773>
* 🍳 Simplify Keycard onboarding by using defaults for pairing password <https://github.com/status-im/status-react/issues/12685>
* 💾 Backup contacts via Waku <https://github.com/status-im/status-react/issues/12550>
* 🪙 Added ENS token <https://github.com/status-im/status-react/issues/12807>
* 🌠 Using react-native-fast-image for stickers <https://github.com/status-im/status-react/pull/12769>
#### Message reliability improvements
* 𝌗 Show loading until all messages are processed <https://github.com/status-im/status-react/pull/12834>
* 💪🏼 More robust message confirmations handling <https://github.com/status-im/status-react/pull/12824>
* 📶 Allow sending messages when offline <https://github.com/status-im/status-react/issues/11889>
#### Improvements on device pairing
* 🔔💻 Notification in activity centre now sync across devices <https://github.com/status-im/status-react/issues/12571>
* ✅💻 Sync read messages across devices <https://github.com/status-im/status-react/pull/12698>
#### Network settings improvements
* ✨ Add Binance Smart chain <https://github.com/status-im/status-react/pull/12809>
* ♏︎ Added custom network symbol <https://github.com/status-im/status-react/commit/c16b0860ec921a61c119857de27c6f29e301e4f6>
* 💰 Network fee on xDai chain <https://github.com/status-im/status-react/pull/12845>
* 📇 Support tx history (in a way) when on BSC chains <https://github.com/status-im/status-react/pull/12843>
* 🙅🏻 Remove POA network from the list <https://github.com/status-im/status-react/pull/12887>
### Bug Fixes
* Fix activity center community invite preview <https://github.com/status-im/status-react/pull/12803>
* Missing notifications for some contacts <https://github.com/status-im/status-react/issues/12776>
* Fixes scrolling issues on the 'Max priority fee' bottom sheet <https://github.com/status-im/status-react/issues/12530>
* Handle Keycard timeout on iOS 15 <https://github.com/status-im/status-react/pull/12826>
* Allow user to be reinvited to the same group after leaving <https://github.com/status-im/status-react/pull/12814>
* Fix for "TypeError: Network request failed" when switching to Goerli network <https://github.com/status-im/status-react/issues/11964>
* Fix for Spin of death on adding custom NFT token contract <https://github.com/status-im/status-react/issues/12365>
* Changing screen orientation results in breaking images / layout <https://github.com/status-im/status-react/issues/12858>
## 1.17
### For iOS and Android
+1 -1
View File
@@ -1 +1 @@
1.17.0
1.18.0
+12
View File
@@ -64,3 +64,15 @@
-dontwarn java.nio.file.*
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
-dontwarn okio.**
# fast-image
-keep public class com.dylanvann.fastimage.* {*;}
-keep public class com.dylanvann.fastimage.** {*;}
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public class com.bumptech.glide.annotation.GlideModule
-keep public class * extends com.bumptech.glide.module.AppGlideModule
-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {
**[] $VALUES;
public *;
}
+1 -1
View File
@@ -1,7 +1,7 @@
library 'status-jenkins-lib@v1.3.3'
pipeline {
agent { label 'macos-xcode-12.5' }
agent { label 'macos && x86_64 && xcode-12.5' }
parameters {
string(
+1 -1
View File
@@ -29,7 +29,7 @@ pipeline {
name: 'HOST_LABEL',
description: 'Label of host to run on',
/* Using startTimeInMillis to randomize which host gets the update. */
defaultValue: "macos-0${(currentBuild.startTimeInMillis % 3) + 1}",
defaultValue: "maci7-0${(currentBuild.startTimeInMillis % 3) + 1}",
)
}
+82 -70
View File
@@ -1,62 +1,76 @@
GEM
remote: https://rubygems.org/
specs:
CFPropertyList (3.0.3)
addressable (2.7.0)
CFPropertyList (3.0.4)
rexml
addressable (2.8.0)
public_suffix (>= 2.0.2, < 5.0)
artifactory (3.0.15)
atomos (0.1.3)
aws-eventstream (1.1.1)
aws-partitions (1.442.0)
aws-sdk-core (3.113.1)
aws-eventstream (1.2.0)
aws-partitions (1.525.0)
aws-sdk-core (3.122.0)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.239.0)
aws-partitions (~> 1, >= 1.525.0)
aws-sigv4 (~> 1.1)
jmespath (~> 1.0)
aws-sdk-kms (1.43.0)
aws-sdk-core (~> 3, >= 3.112.0)
aws-sdk-kms (1.51.0)
aws-sdk-core (~> 3, >= 3.122.0)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.93.0)
aws-sdk-core (~> 3, >= 3.112.0)
aws-sdk-s3 (1.105.1)
aws-sdk-core (~> 3, >= 3.122.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.1)
aws-sigv4 (1.2.3)
aws-sigv4 (~> 1.4)
aws-sigv4 (1.4.0)
aws-eventstream (~> 1, >= 1.0.2)
babosa (1.0.4)
claide (1.0.3)
colored (1.2)
colored2 (3.1.2)
commander-fastlane (4.4.6)
highline (~> 1.7.2)
commander (4.6.0)
highline (~> 2.0.0)
declarative (0.0.20)
declarative-option (0.1.0)
digest-crc (0.6.3)
digest-crc (0.6.4)
rake (>= 12.0.0, < 14.0.0)
domain_name (0.5.20190701)
unf (>= 0.0.5, < 1.0.0)
dotenv (2.7.6)
emoji_regex (3.2.2)
excon (0.79.0)
faraday (1.3.0)
emoji_regex (3.2.3)
excon (0.88.0)
faraday (1.8.0)
faraday-em_http (~> 1.0)
faraday-em_synchrony (~> 1.0)
faraday-excon (~> 1.1)
faraday-httpclient (~> 1.0.1)
faraday-net_http (~> 1.0)
faraday-net_http_persistent (~> 1.1)
faraday-patron (~> 1.0)
faraday-rack (~> 1.0)
multipart-post (>= 1.2, < 3)
ruby2_keywords
ruby2_keywords (>= 0.0.4)
faraday-cookie_jar (0.0.7)
faraday (>= 0.8.0)
http-cookie (~> 1.0.0)
faraday-em_http (1.0.0)
faraday-em_synchrony (1.0.0)
faraday-excon (1.1.0)
faraday-httpclient (1.0.1)
faraday-net_http (1.0.1)
faraday_middleware (1.0.0)
faraday-net_http_persistent (1.2.0)
faraday-patron (1.0.0)
faraday-rack (1.0.0)
faraday_middleware (1.2.0)
faraday (~> 1.0)
fastimage (2.2.3)
fastlane (2.179.0)
fastimage (2.2.5)
fastlane (2.197.0)
CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.3, < 3.0.0)
addressable (>= 2.8, < 3.0.0)
artifactory (~> 3.0)
aws-sdk-s3 (~> 1.0)
babosa (>= 1.0.3, < 2.0.0)
bundler (>= 1.12.0, < 3.0.0)
colored
commander-fastlane (>= 4.4.6, < 5.0.0)
commander (~> 4.6)
dotenv (>= 2.1.1, < 3.0.0)
emoji_regex (>= 0.1, < 4.0)
excon (>= 0.71.0, < 1.0.0)
@@ -65,19 +79,20 @@ GEM
faraday_middleware (~> 1.0)
fastimage (>= 2.1.0, < 3.0.0)
gh_inspector (>= 1.1.2, < 2.0.0)
google-api-client (>= 0.37.0, < 0.39.0)
google-cloud-storage (>= 1.15.0, < 2.0.0)
highline (>= 1.7.2, < 2.0.0)
google-apis-androidpublisher_v3 (~> 0.3)
google-apis-playcustomapp_v1 (~> 0.1)
google-cloud-storage (~> 1.31)
highline (~> 2.0)
json (< 3.0.0)
jwt (>= 2.1.0, < 3)
mini_magick (>= 4.9.4, < 5.0.0)
multipart-post (~> 2.0.0)
naturally (~> 2.2)
optparse (~> 0.1.1)
plist (>= 3.1.0, < 4.0.0)
rubyzip (>= 2.0.0, < 3.0.0)
security (= 0.1.3)
simctl (~> 1.6.3)
slack-notifier (>= 2.0.0, < 3.0.0)
terminal-notifier (>= 2.0.0, < 3.0.0)
terminal-table (>= 1.4.5, < 2.0.0)
tty-screen (>= 0.6.3, < 1.0.0)
@@ -90,75 +105,71 @@ GEM
fastlane-plugin-diawi (2.1.0)
rest-client (>= 2.0.0)
gh_inspector (1.1.3)
google-api-client (0.38.0)
google-apis-androidpublisher_v3 (0.13.0)
google-apis-core (>= 0.4, < 2.a)
google-apis-core (0.4.1)
addressable (~> 2.5, >= 2.5.1)
googleauth (~> 0.9)
httpclient (>= 2.8.1, < 3.0)
googleauth (>= 0.16.2, < 2.a)
httpclient (>= 2.8.1, < 3.a)
mini_mime (~> 1.0)
representable (~> 3.0)
retriable (>= 2.0, < 4.0)
signet (~> 0.12)
google-apis-core (0.3.0)
addressable (~> 2.5, >= 2.5.1)
googleauth (~> 0.14)
httpclient (>= 2.8.1, < 3.0)
mini_mime (~> 1.0)
representable (~> 3.0)
retriable (>= 2.0, < 4.0)
retriable (>= 2.0, < 4.a)
rexml
signet (~> 0.14)
webrick
google-apis-iamcredentials_v1 (0.3.0)
google-apis-core (~> 0.1)
google-apis-storage_v1 (0.3.0)
google-apis-core (~> 0.1)
google-apis-iamcredentials_v1 (0.8.0)
google-apis-core (>= 0.4, < 2.a)
google-apis-playcustomapp_v1 (0.6.0)
google-apis-core (>= 0.4, < 2.a)
google-apis-storage_v1 (0.9.0)
google-apis-core (>= 0.4, < 2.a)
google-cloud-core (1.6.0)
google-cloud-env (~> 1.0)
google-cloud-errors (~> 1.0)
google-cloud-env (1.5.0)
faraday (>= 0.17.3, < 2.0)
google-cloud-errors (1.1.0)
google-cloud-storage (1.31.0)
google-cloud-errors (1.2.0)
google-cloud-storage (1.34.1)
addressable (~> 2.5)
digest-crc (~> 0.4)
google-apis-iamcredentials_v1 (~> 0.1)
google-apis-storage_v1 (~> 0.1)
google-cloud-core (~> 1.2)
googleauth (~> 0.9)
google-cloud-core (~> 1.6)
googleauth (>= 0.16.2, < 2.a)
mini_mime (~> 1.0)
googleauth (0.16.1)
googleauth (1.1.0)
faraday (>= 0.17.3, < 2.0)
jwt (>= 1.4, < 3.0)
memoist (~> 0.16)
multi_json (~> 1.11)
os (>= 0.9, < 2.0)
signet (~> 0.14)
highline (1.7.10)
signet (>= 0.16, < 2.a)
highline (2.0.3)
http-accept (1.7.0)
http-cookie (1.0.3)
http-cookie (1.0.4)
domain_name (~> 0.5)
httpclient (2.8.3)
jmespath (1.4.0)
json (2.5.1)
jwt (2.2.2)
json (2.6.1)
jwt (2.3.0)
memoist (0.16.2)
mime-types (3.3.1)
mime-types-data (~> 3.2015)
mime-types-data (3.2021.0225)
mime-types-data (3.2021.0901)
mini_magick (4.11.0)
mini_mime (1.1.0)
mini_mime (1.1.2)
multi_json (1.15.0)
multipart-post (2.0.0)
nanaimo (0.3.0)
naturally (2.2.1)
netrc (0.11.0)
os (1.1.1)
optparse (0.1.1)
os (1.1.4)
plist (3.6.0)
public_suffix (4.0.6)
rake (13.0.3)
representable (3.0.4)
rake (13.0.6)
representable (3.1.1)
declarative (< 0.1.0)
declarative-option (< 0.2.0)
trailblazer-option (>= 0.1.1, < 0.2.0)
uber (< 0.2.0)
rest-client (2.1.0)
http-accept (>= 1.7.0, < 2.0)
@@ -168,21 +179,21 @@ GEM
retriable (3.1.2)
rexml (3.2.5)
rouge (2.0.7)
ruby2_keywords (0.0.4)
rubyzip (2.3.0)
ruby2_keywords (0.0.5)
rubyzip (2.3.2)
security (0.1.3)
signet (0.15.0)
addressable (~> 2.3)
signet (0.16.0)
addressable (~> 2.8)
faraday (>= 0.17.3, < 2.0)
jwt (>= 1.5, < 3.0)
multi_json (~> 1.10)
simctl (1.6.8)
CFPropertyList
naturally
slack-notifier (2.3.2)
terminal-notifier (2.0.0)
terminal-table (1.8.0)
unicode-display_width (~> 1.1, >= 1.1.1)
trailblazer-option (0.1.2)
tty-cursor (0.7.1)
tty-screen (0.8.1)
tty-spinner (0.9.3)
@@ -190,16 +201,17 @@ GEM
uber (0.1.0)
unf (0.1.4)
unf_ext
unf_ext (0.0.7.7)
unicode-display_width (1.7.0)
unf_ext (0.0.8)
unicode-display_width (1.8.0)
webrick (1.7.0)
word_wrap (1.0.0)
xcodeproj (1.19.0)
xcodeproj (1.21.0)
CFPropertyList (>= 2.3.3, < 4.0)
atomos (~> 0.1.3)
claide (>= 1.0.2, < 2.0)
colored2 (~> 3.1)
nanaimo (~> 0.3.0)
rexml (~> 3.2.4)
xcpretty (0.3.0)
rouge (~> 2.0.7)
xcpretty-travis-formatter (1.0.1)
+186 -104
View File
@@ -5,10 +5,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1fvchp2rhp2rmigx7qglf69xvjqvzq7x0g49naliw29r2bz656sy";
sha256 = "022r3m9wdxljpbya69y2i3h9g3dhhfaqzidf95m6qjzms792jvgp";
type = "gem";
};
version = "2.7.0";
version = "2.8.0";
};
artifactory = {
groups = ["default"];
@@ -35,20 +35,20 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0jfki5ikfr8ln5cdgv4iv1643kax0bjpp29jh78chzy713274jh3";
sha256 = "1pyis1nvnbjxk12a43xvgj2gv0mvp4cnkc1gzw0v1018r61399gz";
type = "gem";
};
version = "1.1.1";
version = "1.2.0";
};
aws-partitions = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0lm08fmahg3m87vbsfv73iswgvicdwcxfmkzr6v9qshlkg36lafd";
sha256 = "181a2xf9zs0hz77jkpmxidvkjzs65vsyqv1a31fcali7f0kvh4h9";
type = "gem";
};
version = "1.442.0";
version = "1.525.0";
};
aws-sdk-core = {
dependencies = ["aws-eventstream" "aws-partitions" "aws-sigv4" "jmespath"];
@@ -56,10 +56,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0i3x8p9gymc9977dcdkz5ca6mrmh7ym6p2mrscbh49nfd9gi5zg0";
sha256 = "0krx8cfajc72gv6mpyb67vnhd2m2iya19846jgipgfris194gjm2";
type = "gem";
};
version = "3.113.1";
version = "3.122.0";
};
aws-sdk-kms = {
dependencies = ["aws-sdk-core" "aws-sigv4"];
@@ -67,10 +67,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "01pd0f4srsa65zl4zq4014p9j5yrr2yy9h9ab17g3w9d0qqm2vsh";
sha256 = "0qac9dd6qriz6ldghkr8ga74zz28jl109kmvhvag74a3qf7k9dwj";
type = "gem";
};
version = "1.43.0";
version = "1.51.0";
};
aws-sdk-s3 = {
dependencies = ["aws-sdk-core" "aws-sdk-kms" "aws-sigv4"];
@@ -78,10 +78,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0iy2f9z43pc6fgwmga2cz8nf9gy2pwcw4jib141vp8z8dhylqj94";
sha256 = "12j7i6l52b6hsnj59grn0m1s9pn6l38zmra6ad8i12vdsvd185w7";
type = "gem";
};
version = "1.93.0";
version = "1.105.1";
};
aws-sigv4 = {
dependencies = ["aws-eventstream"];
@@ -89,10 +89,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1d9zhmi3mpfzkkpg7yw7s9r1dwk157kh9875j3c7gh6cy95lmmaw";
sha256 = "1wh1y79v0s4zgby2m79bnifk65hwf5pvk2yyrxzn2jkjjq8f8fqa";
type = "gem";
};
version = "1.2.3";
version = "1.4.0";
};
babosa = {
groups = ["default"];
@@ -105,14 +105,15 @@
version = "1.0.4";
};
CFPropertyList = {
dependencies = ["rexml"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0ia09r8bj3bjhcfiyr3vlk9zx7vahfypbs2lyrxix9x1jx3lfzq4";
sha256 = "00s388z1akvj2j77ylr1mgp02zxp4ybcgc4ds3bz4647dfk0cwxk";
type = "gem";
};
version = "3.0.3";
version = "3.0.4";
};
claide = {
groups = ["default"];
@@ -144,16 +145,16 @@
};
version = "3.1.2";
};
commander-fastlane = {
commander = {
dependencies = ["highline"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0y8d3ac9qwm1cg6rnpf8rcdsy1yxacrd2g2kl809xsp2vi973g65";
sha256 = "1n8k547hqq9hvbyqbx2qi08g0bky20bbjca1df8cqq5frhzxq7bx";
type = "gem";
};
version = "4.4.6";
version = "4.6.0";
};
declarative = {
groups = ["default"];
@@ -165,26 +166,16 @@
};
version = "0.0.20";
};
declarative-option = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1g4ibxq566f1frnhdymzi9hxxcm4g2gw4n21mpjk2mhwym4q6l0p";
type = "gem";
};
version = "0.1.0";
};
digest-crc = {
dependencies = ["rake"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "118d5p02kdw6a5pi8af12dxma7q3b77zz5q5xjjf5kgp8qh1930a";
sha256 = "1czaak53w8n13y1fr0q23gp0fhklvxjac5n562qj3xk6sh5ad0x2";
type = "gem";
};
version = "0.6.3";
version = "0.6.4";
};
domain_name = {
dependencies = ["unf"];
@@ -212,31 +203,31 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "15xqimc9dr9yyrf09dy8g60s65bvgg6xyyr7q74352r9vhwyg357";
sha256 = "0jsnrkfy345v66jlm2xrz8znivfnamg3mfzkddn414bndf2vxn7c";
type = "gem";
};
version = "3.2.2";
version = "3.2.3";
};
excon = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1759s0rz6qgsw86dds1z4jzb3fvizqsk11j5q6z7lc5n404w6i23";
sha256 = "15yrwawhvkjvfg0dsf8z81876ddj6161q0wh5s7pw4sim8z8pspr";
type = "gem";
};
version = "0.79.0";
version = "0.88.0";
};
faraday = {
dependencies = ["faraday-net_http" "multipart-post" "ruby2_keywords"];
dependencies = ["faraday-em_http" "faraday-em_synchrony" "faraday-excon" "faraday-httpclient" "faraday-net_http" "faraday-net_http_persistent" "faraday-patron" "faraday-rack" "multipart-post" "ruby2_keywords"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1hmssd8pj4n7yq4kz834ylkla8ryyvhaap6q9nzymp93m1xq21kz";
sha256 = "0afhlqgby2cizcwgh7h2sq5f77q01axjbdl25bsvfwsry9n7gyyi";
type = "gem";
};
version = "1.3.0";
version = "1.8.0";
};
faraday-cookie_jar = {
dependencies = ["faraday" "http-cookie"];
@@ -249,6 +240,46 @@
};
version = "0.0.7";
};
faraday-em_http = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "12cnqpbak4vhikrh2cdn94assh3yxza8rq2p9w2j34bqg5q4qgbs";
type = "gem";
};
version = "1.0.0";
};
faraday-em_synchrony = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1vgrbhkp83sngv6k4mii9f2s9v5lmp693hylfxp2ssfc60fas3a6";
type = "gem";
};
version = "1.0.0";
};
faraday-excon = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0h09wkb0k0bhm6dqsd47ac601qiaah8qdzjh8gvxfd376x1chmdh";
type = "gem";
};
version = "1.1.0";
};
faraday-httpclient = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0fyk0jd3ks7fdn8nv3spnwjpzx2lmxmg2gh4inz3by1zjzqg33sc";
type = "gem";
};
version = "1.0.1";
};
faraday-net_http = {
groups = ["default"];
platforms = [];
@@ -259,37 +290,67 @@
};
version = "1.0.1";
};
faraday-net_http_persistent = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0dc36ih95qw3rlccffcb0vgxjhmipsvxhn6cw71l7ffs0f7vq30b";
type = "gem";
};
version = "1.2.0";
};
faraday-patron = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "19wgsgfq0xkski1g7m96snv39la3zxz6x7nbdgiwhg5v82rxfb6w";
type = "gem";
};
version = "1.0.0";
};
faraday-rack = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1h184g4vqql5jv9s9im6igy00jp6mrah2h14py6mpf9bkabfqq7g";
type = "gem";
};
version = "1.0.0";
};
faraday_middleware = {
dependencies = ["faraday"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0jik2kgfinwnfi6fpp512vlvs0mlggign3gkbpkg5fw1jr9his0r";
sha256 = "1bw8mfh4yin2xk7138rg3fhb2p5g2dlmdma88k82psah9mbmvlfy";
type = "gem";
};
version = "1.0.0";
version = "1.2.0";
};
fastimage = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0lgr0vs9kg5622qaf2l3f37b238dncs037fisiygvkbq8sg11i68";
sha256 = "05i1fgqy4l40niwm9y56d04f876sm0cvc7q3w2rpddf8gya4lcs9";
type = "gem";
};
version = "2.2.3";
version = "2.2.5";
};
fastlane = {
dependencies = ["CFPropertyList" "addressable" "artifactory" "aws-sdk-s3" "babosa" "colored" "commander-fastlane" "dotenv" "emoji_regex" "excon" "faraday" "faraday-cookie_jar" "faraday_middleware" "fastimage" "gh_inspector" "google-api-client" "google-cloud-storage" "highline" "json" "jwt" "mini_magick" "multipart-post" "naturally" "plist" "rubyzip" "security" "simctl" "slack-notifier" "terminal-notifier" "terminal-table" "tty-screen" "tty-spinner" "word_wrap" "xcodeproj" "xcpretty" "xcpretty-travis-formatter"];
dependencies = ["CFPropertyList" "addressable" "artifactory" "aws-sdk-s3" "babosa" "colored" "commander" "dotenv" "emoji_regex" "excon" "faraday" "faraday-cookie_jar" "faraday_middleware" "fastimage" "gh_inspector" "google-apis-androidpublisher_v3" "google-apis-playcustomapp_v1" "google-cloud-storage" "highline" "json" "jwt" "mini_magick" "multipart-post" "naturally" "optparse" "plist" "rubyzip" "security" "simctl" "terminal-notifier" "terminal-table" "tty-screen" "tty-spinner" "word_wrap" "xcodeproj" "xcpretty" "xcpretty-travis-formatter"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1wspwgc1q31049a20k2gnzmizdvq4jdmzyd2fnz7r4g68fygj3sj";
sha256 = "1qlvg0sca8j1ryzxpvnmpjnh3fwmv6sk8l7mr9mv34z8rdy1iv3x";
type = "gem";
};
version = "2.179.0";
version = "2.197.0";
};
fastlane-plugin-clean_testflight_testers = {
groups = ["default"];
@@ -322,27 +383,27 @@
};
version = "1.1.3";
};
google-api-client = {
dependencies = ["addressable" "googleauth" "httpclient" "mini_mime" "representable" "retriable" "signet"];
google-apis-androidpublisher_v3 = {
dependencies = ["google-apis-core"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1jybks8i00rxrxx9mkx90dbdk6pczh2w757wchlavmrkrk0dp9s1";
sha256 = "1nxgda00y080xdavxs6nv5h2grwamds33b25nkjb4mij7385brs1";
type = "gem";
};
version = "0.38.0";
version = "0.13.0";
};
google-apis-core = {
dependencies = ["addressable" "googleauth" "httpclient" "mini_mime" "representable" "retriable" "rexml" "signet" "webrick"];
dependencies = ["addressable" "googleauth" "httpclient" "mini_mime" "representable" "retriable" "rexml" "webrick"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1jx4jiyfjxd8pxlpi94f07cb5yvljb5rv7i8xzjq2xrrlvdf212a";
sha256 = "1nzzj66clgr9ldmbjqkzgpvqmd6bjjmbw6khpgq80mp3gks4ycqy";
type = "gem";
};
version = "0.3.0";
version = "0.4.1";
};
google-apis-iamcredentials_v1 = {
dependencies = ["google-apis-core"];
@@ -350,10 +411,21 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1gqpxcc0cjv4838q38g3mx9pgk7681w6irr6zwcygvnvbsvbbpsh";
sha256 = "0slpmdjsxbjdqs7qwkyfk3sdnfy5wliwf89jy8hq7l87a31r7lvk";
type = "gem";
};
version = "0.3.0";
version = "0.8.0";
};
google-apis-playcustomapp_v1 = {
dependencies = ["google-apis-core"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0v9y6avlnwxwv4vahhygrsmrpmric4zg8sxjd26vhhlxw6g8955b";
type = "gem";
};
version = "0.6.0";
};
google-apis-storage_v1 = {
dependencies = ["google-apis-core"];
@@ -361,10 +433,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0q6d5grhrkyfxmzlv0y39i6wzq5ayq1lkp33vfcg9pm8jyzcz7b2";
sha256 = "0y6gyqj2cwsbdxk7wsrjzp9jz2hn2bk1zi1jjm5k311c3jlnj0r1";
type = "gem";
};
version = "0.3.0";
version = "0.9.0";
};
google-cloud-core = {
dependencies = ["google-cloud-env" "google-cloud-errors"];
@@ -393,10 +465,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0q3h996b6vl2ryfbm9jwczjcbnwhkpqs6hingxp22rhzk7qxi9z0";
sha256 = "0nakfswnck6grjpyhckzl40qccyys3sy999h5axk0rldx96fnivd";
type = "gem";
};
version = "1.1.0";
version = "1.2.0";
};
google-cloud-storage = {
dependencies = ["addressable" "digest-crc" "google-apis-iamcredentials_v1" "google-apis-storage_v1" "google-cloud-core" "googleauth" "mini_mime"];
@@ -404,10 +476,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1bjkwnsii4svw2g09xjqpkq3mck820kj9nhx3vlv7rjmlh3bg68s";
sha256 = "1pvcpqx64cxm05dzr9q7zxrymjq4jk46ifd1p4b6c9v3v0c9ipb5";
type = "gem";
};
version = "1.31.0";
version = "1.34.1";
};
googleauth = {
dependencies = ["faraday" "jwt" "memoist" "multi_json" "os" "signet"];
@@ -415,20 +487,20 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1438alhx4n4rdgf6q7ni8qj1b10y8lr9z9spphhjyhacby1ifsjn";
sha256 = "12zm6r7jxqv8k1a4iyijq2gcywk2d62nizbnabwsnhnzxwxwxc3s";
type = "gem";
};
version = "0.16.1";
version = "1.1.0";
};
highline = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "01ib7jp85xjc4gh4jg0wyzllm46hwv8p0w1m4c75pbgi41fps50y";
sha256 = "0yclf57n2j3cw8144ania99h1zinf8q3f5zrhqa754j6gl95rp9d";
type = "gem";
};
version = "1.7.10";
version = "2.0.3";
};
http-accept = {
groups = ["default"];
@@ -446,10 +518,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "004cgs4xg5n6byjs7qld0xhsjq3n6ydfh897myr2mibvh6fjc49g";
sha256 = "19370bc97gsy2j4hanij246hv1ddc85hw0xjb6sj7n1ykqdlx9l9";
type = "gem";
};
version = "1.0.3";
version = "1.0.4";
};
httpclient = {
groups = ["default"];
@@ -476,20 +548,20 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0lrirj0gw420kw71bjjlqkqhqbrplla61gbv1jzgsz6bv90qr3ci";
sha256 = "1z9grvjyfz16ag55hg522d3q4dh07hf391sf9s96npc0vfi85xkz";
type = "gem";
};
version = "2.5.1";
version = "2.6.1";
};
jwt = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "14ynyq1q483spj20ffl4xayfqx1a8qr761mqjfxczf8lwlap392n";
sha256 = "0bg8pjx0mpvl10k6d8a6gc8dzlv2z5jkqcjbjcirnk032iriq838";
type = "gem";
};
version = "2.2.2";
version = "2.3.0";
};
memoist = {
groups = ["default"];
@@ -517,10 +589,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1phcq7z0zpipwd7y4fbqmlaqghv07fjjgrx99mwq3z3n0yvy7fmi";
sha256 = "1z5wvk6qi4ws1kjh7xn1rfirqw5m72bwvqacck1fjpbh33pcrwxv";
type = "gem";
};
version = "3.2021.0225";
version = "3.2021.0901";
};
mini_magick = {
groups = ["default"];
@@ -537,10 +609,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0kb7jq3wjgckmkzna799y5qmvn6vg52878bkgw35qay6lflcrwih";
sha256 = "0lbim375gw2dk6383qirz13hgdmxlan0vc5da2l072j3qw6fqjm5";
type = "gem";
};
version = "1.1.0";
version = "1.1.2";
};
multi_json = {
groups = ["default"];
@@ -592,15 +664,25 @@
};
version = "0.11.0";
};
optparse = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0j9l5a1zszvrlggp1ldx82i4kkqx34g4g3amwp488s499w5l1cvj";
type = "gem";
};
version = "0.1.1";
};
os = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "12fli64wz5j9868gpzv5wqsingk1jk457qyqksv9ksmq9b0zpc9x";
sha256 = "0gwd20smyhxbm687vdikfh1gpi96h8qb1x28s2pdcysf6dm6v0ap";
type = "gem";
};
version = "1.1.1";
version = "1.1.4";
};
plist = {
groups = ["default"];
@@ -627,21 +709,21 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1iik52mf9ky4cgs38fp2m8r6skdkq1yz23vh18lk95fhbcxb6a67";
sha256 = "15whn7p9nrkxangbs9hh75q585yfn66lv0v2mhj6q6dl6x8bzr2w";
type = "gem";
};
version = "13.0.3";
version = "13.0.6";
};
representable = {
dependencies = ["declarative" "declarative-option" "uber"];
dependencies = ["declarative" "trailblazer-option" "uber"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0qm9rgi1j5a6nv726ka4mmixivlxfsg91h8rpp72wwd4vqbkkm07";
sha256 = "09xwzz94ryp57wyjrqysiz1sslnxd4r4m9wayy63jb7f8qfx1kys";
type = "gem";
};
version = "3.0.4";
version = "3.1.1";
};
rest-client = {
dependencies = ["http-accept" "http-cookie" "mime-types" "netrc"];
@@ -689,20 +771,20 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "15wfcqxyfgka05v2a7kpg64x57gl1y4xzvnc9lh60bqx5sf1iqrs";
sha256 = "1vz322p8n39hz3b4a9gkmz9y7a5jaz41zrm2ywf31dvkqm03glgz";
type = "gem";
};
version = "0.0.4";
version = "0.0.5";
};
rubyzip = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0590m2pr9i209pp5z4mx0nb1961ishdiqb28995hw1nln1d1b5ji";
sha256 = "0grps9197qyxakbpw02pda59v45lfgbgiyw48i0mq9f2bn9y6mrz";
type = "gem";
};
version = "2.3.0";
version = "2.3.2";
};
security = {
groups = ["default"];
@@ -720,10 +802,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1vvxmfm9khxp35xs8qxc82i7hakylxbn7kx4apinvxaid6rlq60g";
sha256 = "0cgmadrpgkpcklvvm2cga9mnrfqwqlydwpask1wx617h5ha6954k";
type = "gem";
};
version = "0.15.0";
version = "0.16.0";
};
simctl = {
dependencies = ["CFPropertyList" "naturally"];
@@ -736,16 +818,6 @@
};
version = "1.6.8";
};
slack-notifier = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1pkfn99dhy5s526r6k8d87fwwb6j287ga9s7lxqmh60z28xqh3bv";
type = "gem";
};
version = "2.3.2";
};
terminal-notifier = {
groups = ["default"];
platforms = [];
@@ -767,6 +839,16 @@
};
version = "1.8.0";
};
trailblazer-option = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "18s48fndi2kfvrfzmq6rxvjfwad347548yby0341ixz1lhpg3r10";
type = "gem";
};
version = "0.1.2";
};
tty-cursor = {
groups = ["default"];
platforms = [];
@@ -824,20 +906,20 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0wc47r23h063l8ysws8sy24gzh74mks81cak3lkzlrw4qkqb3sg4";
sha256 = "0jmbimpnpjdzz8hlrppgl9spm99qh3qzbx0b81k3gkgwba8nk3yd";
type = "gem";
};
version = "0.0.7.7";
version = "0.0.8";
};
unicode-display_width = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "06i3id27s60141x6fdnjn5rar1cywdwy64ilc59cz937303q3mna";
sha256 = "1204c1jx2g89pc25qk5150mk7j5k90692i7ihgfzqnad6qni74h2";
type = "gem";
};
version = "1.7.0";
version = "1.8.0";
};
webrick = {
groups = ["default"];
@@ -860,15 +942,15 @@
version = "1.0.0";
};
xcodeproj = {
dependencies = ["CFPropertyList" "atomos" "claide" "colored2" "nanaimo"];
dependencies = ["CFPropertyList" "atomos" "claide" "colored2" "nanaimo" "rexml"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1411j6sfnz0cx4fiw52f0yqx4bgcn8cmpgi3i5rwmmahayyjz2fn";
sha256 = "0xmzb1mdsnkpf7v07whz0n2wc8kg6785sc7i5zyawd8dl8517rp4";
type = "gem";
};
version = "1.19.0";
version = "1.21.0";
};
xcpretty = {
dependencies = ["rouge"];
+32 -3
View File
@@ -25,6 +25,15 @@ PODS:
- Keycard (3.0.4):
- CryptoSwift
- secp256k1
- libwebp (1.2.1):
- libwebp/demux (= 1.2.1)
- libwebp/mux (= 1.2.1)
- libwebp/webp (= 1.2.1)
- libwebp/demux (1.2.1):
- libwebp/webp
- libwebp/mux (1.2.1):
- libwebp/demux
- libwebp/webp (1.2.1)
- Permission-Camera (2.1.5):
- RNPermissions
- Permission-Microphone (2.1.5):
@@ -221,7 +230,7 @@ PODS:
- React
- react-native-status (1.0.0):
- React
- react-native-status-keycard (2.5.35):
- react-native-status-keycard (2.5.36):
- Keycard
- React
- react-native-webview (11.3.0):
@@ -309,6 +318,10 @@ PODS:
- React
- RNDeviceInfo (7.4.0):
- React-Core
- RNFastImage (8.5.11):
- React-Core
- SDWebImage (~> 5.11.1)
- SDWebImageWebPCoder (~> 0.8.4)
- RNFS (2.16.6):
- React
- RNGestureHandler (1.8.0):
@@ -363,6 +376,12 @@ PODS:
- React-Core
- RNSVG (9.13.6):
- React
- SDWebImage (5.11.1):
- SDWebImage/Core (= 5.11.1)
- SDWebImage/Core (5.11.1)
- SDWebImageWebPCoder (0.8.4):
- libwebp (~> 1.0)
- SDWebImage/Core (~> 5.10)
- secp256k1 (0.1.6)
- SQLCipher (3.4.2):
- SQLCipher/standard (= 3.4.2)
@@ -429,6 +448,7 @@ DEPENDENCIES:
- "RNCMaskedView (from `../node_modules/@react-native-community/masked-view`)"
- "RNCPushNotificationIOS (from `../node_modules/@react-native-community/push-notification-ios`)"
- RNDeviceInfo (from `../node_modules/react-native-device-info`)
- RNFastImage (from `../node_modules/react-native-fast-image`)
- RNFS (from `../node_modules/react-native-fs`)
- RNGestureHandler (from `../node_modules/react-native-gesture-handler`)
- RNImageCropPicker (from `../node_modules/react-native-image-crop-picker`)
@@ -449,6 +469,9 @@ SPEC REPOS:
trunk:
- boost-for-react-native
- CryptoSwift
- libwebp
- SDWebImage
- SDWebImageWebPCoder
- SQLCipher
- SSZipArchive
- TOCropViewController
@@ -556,6 +579,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/@react-native-community/push-notification-ios"
RNDeviceInfo:
:path: "../node_modules/react-native-device-info"
RNFastImage:
:path: "../node_modules/react-native-fast-image"
RNFS:
:path: "../node_modules/react-native-fs"
RNGestureHandler:
@@ -586,7 +611,7 @@ EXTERNAL SOURCES:
CHECKOUT OPTIONS:
Keycard:
:commit: abf2be41c70846ab6f11c8bd445faf81b0befc1f
:commit: d5bb5d68dbac19a34945918b51873fbba2c18310
:git: https://github.com/status-im/Keycard.swift.git
secp256k1:
:commit: 46a1fa30d9b8babeae85ff519050f42394ab5fcc
@@ -603,6 +628,7 @@ SPEC CHECKSUMS:
Folly: b73c3869541e86821df3c387eb0af5f65addfab4
glog: 5bc68409594b19a3e5c5cbced7b1ecf61053b709
Keycard: dd96182888da0aacf4de821b641103143bbb26cc
libwebp: 98a37e597e40bfdb4c911fc98f2c53d0b12d05fc
Permission-Camera: afad27bf90337684d4a86f3825112d648c8c4d3b
Permission-Microphone: 0ffabc3fe1c75cfb260525ee3f529383c9f4368c
RCTRequired: 082f10cd3f905d6c124597fd1c14f6f2655ff65e
@@ -627,7 +653,7 @@ SPEC CHECKSUMS:
react-native-slider: 12bd76d3d568c9c5500825db54123d44b48e4ad4
react-native-splash-screen: 200d11d188e2e78cea3ad319964f6142b6384865
react-native-status: 45dbf1302ce3c258b459dfab137cd1c2c68c295d
react-native-status-keycard: de55c01648d24ff7c17a77f3aa29a0421f44143c
react-native-status-keycard: eb84554a23315510948613a9467e7e3481be340c
react-native-webview: af9990b21a9aeafa8e8347746eb4116c0de086af
React-RCTActionSheet: 89a0ca9f4a06c1f93c26067af074ccdce0f40336
React-RCTAnimation: 1bde3ecc0c104c55df246eda516e0deb03c4e49b
@@ -647,6 +673,7 @@ SPEC CHECKSUMS:
RNCMaskedView: 71fc32d971f03b7f03d6ab6b86b730c4ee64f5b6
RNCPushNotificationIOS: c145c6253ea016e5efeff604f2720736b4a596f7
RNDeviceInfo: 9538a884f862fe4aa0d7cead9f34e292d41ba8f6
RNFastImage: 1f2cab428712a4baaf78d6169eaec7f622556dd7
RNFS: 2bd9eb49dc82fa9676382f0585b992c424cd59df
RNGestureHandler: 7a5833d0f788dbd107fbb913e09aa0c1ff333c39
RNImageCropPicker: 35a3ceb837446fa11547704709bb22b5fac6d584
@@ -657,6 +684,8 @@ SPEC CHECKSUMS:
RNReanimated: 70f662b5232dd5d19ccff581e919a54ea73df51c
RNShare: 2dc2fcac3f7321cfd6b60a23ed4bf4d549f86f5f
RNSVG: 8ba35cbeb385a52fd960fd28db9d7d18b4c2974f
SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d
SDWebImageWebPCoder: f93010f3f6c031e2f8fb3081ca4ee6966c539815
secp256k1: f61d67e6fdcb85fd727acf1bf35ace6036db540c
SQLCipher: f9fcf29b2e59ced7defc2a2bdd0ebe79b40d4990
SSZipArchive: e7b4f3d9e780c2acc1764cd88fbf2de28f26e5b2
@@ -460,6 +460,7 @@ RCT_EXPORT_METHOD(saveAccountAndLogin:(NSString *)multiaccountData
#if DEBUG
NSLog(@"SaveAccountAndLogin() method called");
#endif
[self getExportDbFilePath];
NSString *keyUID = [self getKeyUID:multiaccountData];
NSString *finalConfig = [self prepareDirAndUpdateConfig:config
withKeyUID:keyUID];
@@ -477,6 +478,7 @@ RCT_EXPORT_METHOD(saveAccountAndLoginWithKeycard:(NSString *)multiaccountData
#if DEBUG
NSLog(@"SaveAccountAndLoginWithKeycard() method called");
#endif
[self getExportDbFilePath];
NSString *keyUID = [self getKeyUID:multiaccountData];
NSString *finalConfig = [self prepareDirAndUpdateConfig:config
withKeyUID:keyUID];
@@ -484,6 +486,17 @@ RCT_EXPORT_METHOD(saveAccountAndLoginWithKeycard:(NSString *)multiaccountData
NSLog(@"%@", result);
}
- (NSString *) getExportDbFilePath {
NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"export.db"];
NSFileManager *fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:filePath]) {
[fileManager removeItemAtPath:filePath error:nil];
}
return filePath;
}
- (NSURL *) getKeyStoreDir:(NSString *)keyUID {
NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *rootUrl =[[fileManager
@@ -523,6 +536,7 @@ RCT_EXPORT_METHOD(login:(NSString *)accountData
#if DEBUG
NSLog(@"Login() method called");
#endif
[self getExportDbFilePath];
[self migrateKeystore:accountData password:password];
NSString *result = StatusgoLogin(accountData, password);
NSLog(@"%@", result);
@@ -535,6 +549,7 @@ RCT_EXPORT_METHOD(loginWithKeycard:(NSString *)accountData
#if DEBUG
NSLog(@"LoginWithKeycard() method called");
#endif
[self getExportDbFilePath];
[self migrateKeystore:accountData password:password];
NSString *result = StatusgoLoginWithKeycard(accountData, password, chatKey);
@@ -858,8 +873,8 @@ RCT_EXPORT_METHOD(exportUnencryptedDatabase:(NSString *)accountData
#if DEBUG
NSLog(@"exportUnencryptedDatabase() method called");
#endif
NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"export.db"];
NSString *filePath = [self getExportDbFilePath];
StatusgoExportUnencryptedDatabase(accountData, password, filePath);
callback(@[filePath]);
+2 -2
View File
@@ -47,9 +47,9 @@ It pulls in all the `pkgs`, `targets` and `shells` defined in [`nix/default.nix`
# Shells
Normally shells are started using `make shell TARGET=android`, but that is essentially the same as calling:
Normally shells are started using `make shell TARGET=default`, but that is essentially the same as calling:
```bash
nix-shell -A shells.android default.nix
nix-shell -A shells.default default.nix
```
The [`nix/scripts/shell.sh`](./scripts/shell.sh) script is essentially a wrapper around that command to make it usable as shell for the `Makefile`.
+2
View File
@@ -47,6 +47,8 @@ This way your shell and all other nix commands should run in a setup that is tai
For valid values you can check the [`nix/shells.nix`](/nix/shells.nix) file.
:warning: __WARNING__: To have Nix pick up all changes a new `nix-shell` needs to be spawned.
## Using a local status-go repository
If you need to use a locally checked-out status-go repository, you can achieve that by defining the `STATUS_GO_SRC_OVERRIDE`
-1
View File
@@ -13,7 +13,6 @@
abi-include = "armeabi-v7a;arm64-v8a;x86"; # Android architectures to build for
};
nimbus = { src-override = null; };
status-go = { src-override = null; };
};
+162 -26
View File
@@ -601,6 +601,20 @@
}
},
{
"path": "androidx/exifinterface/exifinterface/1.2.0/exifinterface-1.2.0",
"host": "https://dl.google.com/dl/android/maven2",
"type": "aar",
"pom": {
"sha1": "34832395bc9a4fe2aafdd73605ddf9da9f842e7a",
"sha256": "1qi9p1nmdw8d0wpy0nmakvnpj4hgb0xf3aicd8qzn0nclszr2zkg"
},
"jar": {
"sha1": "e8a2f661f33bbfa8e9d226aa5dacae90aedf2fc9",
"sha256": "19xf8zwzxlvq2l4qfwfijasjpv3jlz5ylmh5cykpbr4m618qxrma"
}
},
{
"path": "androidx/fragment/fragment/1.0.0/fragment-1.0.0",
"host": "https://dl.google.com/dl/android/maven2",
@@ -5473,6 +5487,90 @@
}
},
{
"path": "com/github/bumptech/glide/annotations/4.12.0/annotations-4.12.0",
"host": "https://repo.maven.apache.org/maven2",
"type": "jar",
"pom": {
"sha1": "94d5a495b107bd421804a296c9073439402c0996",
"sha256": "0r1f6n03hrh7m0br3wzx81bz8addxk2pgc0cnfw2bx1n46d469z4"
},
"jar": {
"sha1": "298d793db124809d74ad9a90de5eddc408898c84",
"sha256": "13nyz9h7ibplz14nybkcmk464kgg8iasp5c1qf4ws7wkiyzhqhzs"
}
},
{
"path": "com/github/bumptech/glide/compiler/4.12.0/compiler-4.12.0",
"host": "https://repo.maven.apache.org/maven2",
"type": "jar",
"pom": {
"sha1": "4a090fcf1fe6ec3782581efc517a8f621e85a804",
"sha256": "121xrlvir16f38k7qif0c311l2ccivxaqsq6sr4csdd1jgs25agc"
},
"jar": {
"sha1": "75cf5e43fd6e6c6e769e060014feb985284cfae7",
"sha256": "16n94cf2d7sba5r6kzh8sqvvaikl5ph9an6lz4pdabd579rrf0h3"
}
},
{
"path": "com/github/bumptech/glide/disklrucache/4.12.0/disklrucache-4.12.0",
"host": "https://repo.maven.apache.org/maven2",
"type": "jar",
"pom": {
"sha1": "0c90a83f7490992222d8bf7227b35e6bc0e4f552",
"sha256": "1m0a7yiafry9g84vgqmaznxqhs0sg008vya13i2ckhbcky2nblk4"
},
"jar": {
"sha1": "6d44c9103551e3ff51f00ac26077c143a8fb74f9",
"sha256": "0yb38pnjbsb8qc5c4hffp40a4gihj0g65gwdwwp5ib26jq3cj33g"
}
},
{
"path": "com/github/bumptech/glide/gifdecoder/4.12.0/gifdecoder-4.12.0",
"host": "https://repo.maven.apache.org/maven2",
"type": "aar",
"pom": {
"sha1": "9105e854c39f7d5dbcfd04f644a243f31e48033d",
"sha256": "1s9qsf8awvnrr3a5ia7ppcj2vx51pnqwd8mvdmqjdl5y0w3vv4w1"
},
"jar": {
"sha1": "a00cc6741d9f7cf025dd93293c724a688c47631e",
"sha256": "0158p9w1w80m8fmnzff23n89n8lkw9s3kh9hn81almb8nzaiqyhr"
}
},
{
"path": "com/github/bumptech/glide/glide/4.12.0/glide-4.12.0",
"host": "https://repo.maven.apache.org/maven2",
"type": "aar",
"pom": {
"sha1": "74ef469a4966c69ec7346df8b3895ac11474f8be",
"sha256": "1h5qbi06valf58madv01zlapny64368r17x21lck54wy2dr4hvgx"
},
"jar": {
"sha1": "3f57db6cc954212739bb0d693ec48ecbc8ab73c4",
"sha256": "11432hpyjc74rhf494xn50c6qcmx49mgii227zjpz5v2vd599qka"
}
},
{
"path": "com/github/bumptech/glide/okhttp3-integration/4.12.0/okhttp3-integration-4.12.0",
"host": "https://repo.maven.apache.org/maven2",
"type": "aar",
"pom": {
"sha1": "86bab5a64ff1b3492ca0a416b59de2ed89d46608",
"sha256": "0x30kznlw383w6yvz7vynk7mwbhscx4j1lyjl9aa0419byiyw7ng"
},
"jar": {
"sha1": "8235c8ea4484c142ac058b736e807f9c56346e59",
"sha256": "086nrnk2i6jgfi6iv2s3gfqhywzzm79isd87x84ks7wpvbs2wwhd"
}
},
{
"path": "com/github/clans/fab/1.6.4/fab-1.6.4",
"host": "https://repo.maven.apache.org/maven2",
@@ -5848,16 +5946,16 @@
},
{
"path": "com/google/errorprone/error_prone_annotations/2.9.0/error_prone_annotations-2.9.0",
"path": "com/google/errorprone/error_prone_annotations/2.10.0/error_prone_annotations-2.10.0",
"host": "https://repo.maven.apache.org/maven2",
"type": "jar",
"pom": {
"sha1": "ffe29062ff5242287b65c16ec45e6a65bb946231",
"sha256": "1kh82i3xl6wdr9pnbhiwx6szgfc2i7gjjw5q45p88xglr5ay13m4"
"sha1": "972fdb73175fce135e78555269ede8c8d3b36f74",
"sha256": "1k6021km41hzmh68yzzj9hhsfs5i1qjw7cljv7facxwaaygxr06n"
},
"jar": {
"sha1": "74fe3b8b4f3fc84dc940d0ca4c4b270dbc902764",
"sha256": "151n2rp4849dp0za82q1s1xpji0r3v1fd6a7li56nyp27b1vsizr"
"sha1": "9bc20b94d3ac42489cf6ce1e42509c86f6f861a1",
"sha256": "18940w3fbh9z4d9xrazfkw69y640ymfk7z42dhgd91pvbp9d8jd2"
}
},
@@ -5902,12 +6000,12 @@
},
{
"path": "com/google/errorprone/error_prone_parent/2.9.0/error_prone_parent-2.9.0",
"path": "com/google/errorprone/error_prone_parent/2.10.0/error_prone_parent-2.10.0",
"host": "https://repo.maven.apache.org/maven2",
"type": "pom",
"pom": {
"sha1": "a4f56c023d5284d3161dac51af134af6856e1fe9",
"sha256": "1d73xa8z8dyxg327zkk7i22nz2b3c864012dwdivaxar10yi42sj"
"sha1": "0d70888ba27b15543d639b0be077b1d0d6d38c40",
"sha256": "1yl9y1rcgq47cdk11y3xi8f0fvnbq5gfkglp430h1ychqj3im287"
}
},
@@ -6439,6 +6537,20 @@
}
},
{
"path": "com/squareup/okhttp3/okhttp/3.9.1/okhttp-3.9.1",
"host": "https://repo.maven.apache.org/maven2",
"type": "jar",
"pom": {
"sha1": "7a34bfe0899e4b1a4b84f4e9e79c221bd37e9808",
"sha256": "1vjwzaf5y4qfc5pvbsa79m11zjvzhn1b3rszvv6xxky1rpha3hdw"
},
"jar": {
"sha1": "84b4b7d1c4a238e7899972b7446c250691e65f1f",
"sha256": "0pkqnz1dmfrhvr17qbv1dr5nylvfnf5l8vgw0zjjdfiblhbi1l50"
}
},
{
"path": "com/squareup/okhttp3/okhttp/3.12.1/okhttp-3.12.1",
"host": "https://repo.maven.apache.org/maven2",
@@ -6481,6 +6593,16 @@
}
},
{
"path": "com/squareup/okhttp3/parent/3.9.1/parent-3.9.1",
"host": "https://repo.maven.apache.org/maven2",
"type": "pom",
"pom": {
"sha1": "e55ee2b70a7a64431236eac139096e369db69bb6",
"sha256": "0lqm0gpbxfkw7n530hfr2jxr7r4cgiia2ahd0m1kb6kwdfzf05gm"
}
},
{
"path": "com/squareup/okhttp3/parent/3.12.1/parent-3.12.1",
"host": "https://repo.maven.apache.org/maven2",
@@ -6540,16 +6662,16 @@
},
{
"path": "com/squareup/okio/okio/3.0.0-alpha.10/okio-3.0.0-alpha.10",
"path": "com/squareup/okio/okio/3.0.0/okio-3.0.0",
"host": "https://repo.maven.apache.org/maven2",
"type": "jar",
"pom": {
"sha1": "5e8792b318a95e32e3898534e34aa4c78a3fbde3",
"sha256": "0g0lz46v6whx4v8qr2kn07gjm6zgwdrxs8jz8cwlfr0ywfxjy177"
"sha1": "b2fec062f421241a455a83d82790f442fef0ea7c",
"sha256": "0kqm1maql7kmk7lsnbm1619ghfn1jl0kv0fv8raizijy4csxa2ln"
},
"jar": {
"sha1": "41c0ed007ec61ced75fc7bc44c33b6071a638f36",
"sha256": "0ivsw7wf6a4wp6h5n49d3f0fbhnp0v6arlymrcwwshcs7qzwcgm5"
"sha1": "ed092ec73ae87b0295689e5e04e025361da01761",
"sha256": "17lpfiavx20hvv32irzmpy05jq77w9ihhslybqr0rjdj8gnn7gnw"
}
},
@@ -7508,12 +7630,12 @@
},
{
"path": "org/antlr/antlr4-master/4.9.2/antlr4-master-4.9.2",
"path": "org/antlr/antlr4-master/4.9.3/antlr4-master-4.9.3",
"host": "https://repo.maven.apache.org/maven2",
"type": "pom",
"pom": {
"sha1": "e5187c4f54155f23d4871af1ed3d4d60f7ab9a03",
"sha256": "0k4hh1i6np6961q26lhryvxgplsasyrw7dyxvzf4cqbf6290bpn6"
"sha1": "036b2162383e22b5a6c8c254e485921b5d77ad0c",
"sha256": "1f9m37864g54qh5ckpgx15kjv2i627ixl5q71b551pxssdac0p2n"
}
},
@@ -7532,16 +7654,16 @@
},
{
"path": "org/antlr/antlr4-runtime/4.9.2/antlr4-runtime-4.9.2",
"path": "org/antlr/antlr4-runtime/4.9.3/antlr4-runtime-4.9.3",
"host": "https://repo.maven.apache.org/maven2",
"type": "jar",
"pom": {
"sha1": "726d2331b5f8ada7a0dbde7579c0968d391f324b",
"sha256": "0v8qsyil9k0mpv602dcsjx422kk1w1m53xfv801v5bm597wh2697"
"sha1": "7ed961275fcdee7e2b69a66bf1ae6c4f9f5a1ab8",
"sha256": "193skn41436jxppf34gpjm782a7vp7z1c4cvflxgla86xbj48zjg"
},
"jar": {
"sha1": "ece33ec76e002dfde574cf7b57451a91a99185c5",
"sha256": "1xkm036832k3rwvjsafkbxdgm7ajfb69wsxcnwyd966mimi5600j"
"sha1": "81befc16ebedb8b8aea3e4c0835dd5ca7e8523a8",
"sha256": "198ys0lhpimjj5vzhpk82aiqqdqfphrjmsjjsqhz7i4vjsa6a6hk"
}
},
@@ -8398,16 +8520,16 @@
},
{
"path": "org/checkerframework/checker-qual/3.18.1/checker-qual-3.18.1",
"path": "org/checkerframework/checker-qual/3.19.0/checker-qual-3.19.0",
"host": "https://repo.maven.apache.org/maven2",
"type": "jar",
"pom": {
"sha1": "df76ae5043087138988c9505701833069f8edf27",
"sha256": "148xyyy76kd5s11anyxi3l2385mmy9y5nnq1058j646x5akq4i8i"
"sha1": "7afbf123d32e21bee825bb85dc0be42ca6466fed",
"sha256": "0wd3i9zrk3zbsxgpfjcsy68ba9sq5xhyvi13v05p0jx9w5f9rfi9"
},
"jar": {
"sha1": "a7de82e0fbd3247a71d57cbd21bfe4728415ba4f",
"sha256": "0md8sl75nvmn86k3nmhly57qjvain01x4d4ydhwnznwgqqix3xp3"
"sha1": "838b42bb6f7f73315167b359d24649845cef1c48",
"sha256": "0s5a93bln2b109brsys40wak9jw66rks9817glkk59pkhf8w89x8"
}
},
@@ -9663,6 +9785,20 @@
}
},
{
"path": "org/jetbrains/kotlin/kotlin-stdlib-common/1.5.31/kotlin-stdlib-common-1.5.31",
"host": "https://repo.maven.apache.org/maven2",
"type": "jar",
"pom": {
"sha1": "6f778763702ed6371c2cab78b3424ff2188a7283",
"sha256": "1hl32bjj7bwhcwl5viilbyzq7kvysnbxmv2jjslvxln3p13fj5dn"
},
"jar": {
"sha1": "043331609c7de811fed085e0dfd150874b157c32",
"sha256": "1b929r0199idbrdc4jbhmcvzfrpiysdik3cnw673ha5h4s7a38nz"
}
},
{
"path": "org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.2.71/kotlin-stdlib-jdk7-1.2.71",
"host": "https://repo.maven.apache.org/maven2",
+7
View File
@@ -34,6 +34,7 @@ androidx.documentfile:documentfile:1.0.0
androidx.drawerlayout:drawerlayout:1.0.0
androidx.exifinterface:exifinterface:1.1.0-beta01
androidx.exifinterface:exifinterface:1.1.0-rc01
androidx.exifinterface:exifinterface:1.2.0
androidx.fragment:fragment:1.0.0
androidx.fragment:fragment:1.1.0
androidx.interpolator:interpolator:1.0.0
@@ -333,6 +334,12 @@ com.facebook.soloader:annotation:0.9.0
com.facebook.soloader:nativeloader:0.9.0
com.facebook.soloader:soloader:0.9.0
com.facebook.yoga:proguard-annotations:1.14.1
com.github.bumptech.glide:annotations:4.12.0
com.github.bumptech.glide:compiler:4.12.0
com.github.bumptech.glide:disklrucache:4.12.0
com.github.bumptech.glide:gifdecoder:4.12.0
com.github.bumptech.glide:glide:4.12.0
com.github.bumptech.glide:okhttp3-integration:4.12.0
com.github.clans:fab:1.6.4
com.github.gundy:semver4j:0.16.4
com.github.status-im.status-keycard-java:android:3.0.4
+16 -6
View File
@@ -41,6 +41,7 @@ https://dl.google.com/dl/android/maven2/androidx/documentfile/documentfile/1.0.0
https://dl.google.com/dl/android/maven2/androidx/drawerlayout/drawerlayout/1.0.0/drawerlayout-1.0.0.pom
https://dl.google.com/dl/android/maven2/androidx/exifinterface/exifinterface/1.1.0-beta01/exifinterface-1.1.0-beta01.pom
https://dl.google.com/dl/android/maven2/androidx/exifinterface/exifinterface/1.1.0-rc01/exifinterface-1.1.0-rc01.pom
https://dl.google.com/dl/android/maven2/androidx/exifinterface/exifinterface/1.2.0/exifinterface-1.2.0.pom
https://dl.google.com/dl/android/maven2/androidx/fragment/fragment/1.0.0/fragment-1.0.0.pom
https://dl.google.com/dl/android/maven2/androidx/fragment/fragment/1.1.0/fragment-1.1.0.pom
https://dl.google.com/dl/android/maven2/androidx/interpolator/interpolator/1.0.0/interpolator-1.0.0.pom
@@ -389,6 +390,12 @@ https://repo.maven.apache.org/maven2/com/facebook/soloader/soloader/0.6.0/soload
https://repo.maven.apache.org/maven2/com/facebook/soloader/soloader/0.8.2/soloader-0.8.2.pom
https://repo.maven.apache.org/maven2/com/facebook/soloader/soloader/0.9.0/soloader-0.9.0.pom
https://repo.maven.apache.org/maven2/com/facebook/stetho/stetho/1.3.1/stetho-1.3.1.pom
https://repo.maven.apache.org/maven2/com/github/bumptech/glide/annotations/4.12.0/annotations-4.12.0.pom
https://repo.maven.apache.org/maven2/com/github/bumptech/glide/compiler/4.12.0/compiler-4.12.0.pom
https://repo.maven.apache.org/maven2/com/github/bumptech/glide/disklrucache/4.12.0/disklrucache-4.12.0.pom
https://repo.maven.apache.org/maven2/com/github/bumptech/glide/gifdecoder/4.12.0/gifdecoder-4.12.0.pom
https://repo.maven.apache.org/maven2/com/github/bumptech/glide/glide/4.12.0/glide-4.12.0.pom
https://repo.maven.apache.org/maven2/com/github/bumptech/glide/okhttp3-integration/4.12.0/okhttp3-integration-4.12.0.pom
https://repo.maven.apache.org/maven2/com/github/clans/fab/1.6.4/fab-1.6.4.pom
https://repo.maven.apache.org/maven2/com/github/gundy/semver4j/0.16.4/semver4j-0.16.4.pom
https://repo.maven.apache.org/maven2/com/googlecode/json-simple/json-simple/1.1/json-simple-1.1.pom
@@ -418,12 +425,12 @@ https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotatio
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.1.2/error_prone_annotations-2.1.2.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.3.1/error_prone_annotations-2.3.1.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.9.0/error_prone_annotations-2.9.0.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.10.0/error_prone_annotations-2.10.0.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.0.18/error_prone_parent-2.0.18.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.1.2/error_prone_parent-2.1.2.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.2.0/error_prone_parent-2.2.0.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.3.1/error_prone_parent-2.3.1.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.9.0/error_prone_parent-2.9.0.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.10.0/error_prone_parent-2.10.0.pom
https://repo.maven.apache.org/maven2/com/google/google/1/google-1.pom
https://repo.maven.apache.org/maven2/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.pom
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/17.0/guava-parent-17.0.pom
@@ -466,15 +473,17 @@ https://repo.maven.apache.org/maven2/com/squareup/assertj/assertj-android/1.1.1/
https://repo.maven.apache.org/maven2/com/squareup/javapoet/1.8.0/javapoet-1.8.0.pom
https://repo.maven.apache.org/maven2/com/squareup/javawriter/2.5.0/javawriter-2.5.0.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp-urlconnection/3.12.12/okhttp-urlconnection-3.12.12.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/3.9.1/okhttp-3.9.1.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/3.12.1/okhttp-3.12.1.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/3.12.12/okhttp-3.12.12.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/5.0.0-alpha.2/okhttp-5.0.0-alpha.2.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/parent/3.9.1/parent-3.9.1.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/parent/3.12.1/parent-3.12.1.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/parent/3.12.12/parent-3.12.12.pom
https://repo.maven.apache.org/maven2/com/squareup/okio/okio-parent/1.15.0/okio-parent-1.15.0.pom
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/1.15.0/okio-1.15.0.pom
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/2.9.0/okio-2.9.0.pom
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/3.0.0-alpha.10/okio-3.0.0-alpha.10.pom
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/3.0.0/okio-3.0.0.pom
https://repo.maven.apache.org/maven2/com/sun/activation/all/1.2.0/all-1.2.0.pom
https://repo.maven.apache.org/maven2/com/sun/activation/all/2.0.1/all-2.0.1.pom
https://repo.maven.apache.org/maven2/com/sun/activation/jakarta.activation/2.0.1/jakarta.activation-2.0.1.pom
@@ -552,9 +561,9 @@ https://repo.maven.apache.org/maven2/org/antlr/ST4/4.0.8/ST4-4.0.8.pom
https://repo.maven.apache.org/maven2/org/antlr/ST4/4.3.1/ST4-4.3.1.pom
https://repo.maven.apache.org/maven2/org/antlr/antlr4-master/4.5.2-1/antlr4-master-4.5.2-1.pom
https://repo.maven.apache.org/maven2/org/antlr/antlr4-master/4.5.3/antlr4-master-4.5.3.pom
https://repo.maven.apache.org/maven2/org/antlr/antlr4-master/4.9.2/antlr4-master-4.9.2.pom
https://repo.maven.apache.org/maven2/org/antlr/antlr4-master/4.9.3/antlr4-master-4.9.3.pom
https://repo.maven.apache.org/maven2/org/antlr/antlr4-runtime/4.5.2-1/antlr4-runtime-4.5.2-1.pom
https://repo.maven.apache.org/maven2/org/antlr/antlr4-runtime/4.9.2/antlr4-runtime-4.9.2.pom
https://repo.maven.apache.org/maven2/org/antlr/antlr4-runtime/4.9.3/antlr4-runtime-4.9.3.pom
https://repo.maven.apache.org/maven2/org/antlr/antlr4/4.5.3/antlr4-4.5.3.pom
https://repo.maven.apache.org/maven2/org/antlr/antlr-master/3.5.2/antlr-master-3.5.2.pom
https://repo.maven.apache.org/maven2/org/antlr/antlr-runtime/3.5.2/antlr-runtime-3.5.2.pom
@@ -627,7 +636,7 @@ https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk15on/1.56/bcprov
https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk15on/1.60/bcprov-jdk15on-1.60.pom
https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk15on/1.65/bcprov-jdk15on-1.65.pom
https://repo.maven.apache.org/maven2/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.pom
https://repo.maven.apache.org/maven2/org/checkerframework/checker-qual/3.18.1/checker-qual-3.18.1.pom
https://repo.maven.apache.org/maven2/org/checkerframework/checker-qual/3.19.0/checker-qual-3.19.0.pom
https://repo.maven.apache.org/maven2/org/codehaus/codehaus-parent/4/codehaus-parent-4.pom
https://repo.maven.apache.org/maven2/org/codehaus/groovy/groovy-all/2.4.15/groovy-all-2.4.15.pom
https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.14/animal-sniffer-annotations-1.14.pom
@@ -722,6 +731,7 @@ https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.21/kotlin-stdlib-common-1.4.21.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.30/kotlin-stdlib-common-1.4.30.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.31/kotlin-stdlib-common-1.4.31.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.5.31/kotlin-stdlib-common-1.5.31.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.2.71/kotlin-stdlib-jdk7-1.2.71.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.20/kotlin-stdlib-jdk7-1.3.20.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.50/kotlin-stdlib-jdk7-1.3.50.pom
+1
View File
@@ -12,6 +12,7 @@ react-native-config
react-native-dark-mode
react-native-device-info
react-native-dialogs
react-native-fast-image
react-native-fs
react-native-gesture-handler
react-native-haptic-feedback
+17 -20
View File
@@ -55,26 +55,6 @@ fi
# Get the relative path without full URL
OBJ_REL_NAME="${OBJ_REL_URL#${REPO_URL}/}"
OBJ_NIX_FETCH_OUT=$(nix_fetch "${OBJ_REL_URL}.jar")
# Dependency might be a JAR or an AAR
if [[ ${?} -eq 0 ]]; then
# Some deps have only a POM, nor JAR or AAR
OBJ_TYPE="jar"
OBJ_PATH=$(get_nix_path "${OBJ_NIX_FETCH_OUT}")
OBJ_SHA256=$(get_nix_sha "${OBJ_NIX_FETCH_OUT}")
OBJ_SHA1=$(get_sha1 "${OBJ_PATH}")
else
OBJ_NIX_FETCH_OUT=$(nix_fetch "${OBJ_REL_URL}.aar")
if [[ ${?} -eq 0 ]]; then
OBJ_TYPE="aar"
OBJ_PATH=$(get_nix_path "${OBJ_NIX_FETCH_OUT}")
OBJ_SHA256=$(get_nix_sha "${OBJ_NIX_FETCH_OUT}")
OBJ_SHA1=$(get_sha1 "${OBJ_PATH}")
else
OBJ_TYPE="pom"
fi
fi
# Both JARs and AARs have a POM
POM_NIX_FETCH_OUT=$(nix_fetch "${OBJ_REL_URL}.pom")
POM_PATH=$(get_nix_path "${POM_NIX_FETCH_OUT}")
@@ -85,6 +65,23 @@ fi
POM_SHA256=$(get_nix_sha "${POM_NIX_FETCH_OUT}")
POM_SHA1=$(get_sha1 "${POM_PATH}")
# Identify packaging type, JAR, AAR, or just POM.
OBJ_TYPE=$(grep -oP '<packaging>\K[^<]+' "${POM_PATH}")
# Bundle is a JAR made using maven-bundle-plugin.
case "${OBJ_TYPE}" in
''|'bundle') OBJ_TYPE=jar;;
'aar.asc') OBJ_TYPE=aar;;
esac
# Some dependencies have only a POM file.
if [[ "${OBJ_TYPE}" != "pom" ]]; then
OBJ_NIX_FETCH_OUT=$(nix_fetch "${OBJ_REL_URL}.${OBJ_TYPE}")
if [[ ${?} -eq 0 ]]; then
OBJ_PATH=$(get_nix_path "${OBJ_NIX_FETCH_OUT}")
OBJ_SHA256=$(get_nix_sha "${OBJ_NIX_FETCH_OUT}")
OBJ_SHA1=$(get_sha1 "${OBJ_PATH}")
fi
fi
# Format into a Nix attrset entry
echo -ne "
{
+1 -1
View File
@@ -75,7 +75,7 @@ in stdenv.mkDerivation rec {
BUILD_ENV = buildEnv;
# custom env variables derived from config
STATUS_GO_SRC_OVERRIDE = getConfig "nimbus.src-override" null;
STATUS_GO_SRC_OVERRIDE = getConfig "status-go.src-override" null;
ANDROID_APK_SIGNED = getConfig "android.apk-signed" "true";
ANDROID_ABI_SPLIT = getConfig "android.abi-split" "false";
ANDROID_ABI_INCLUDE = androidAbiInclude;
+2
View File
@@ -42,6 +42,8 @@ in {
allowHigher = true;
};
gomobile = super.gomobile.override {
# FIXME: No Android SDK packages for aarch64-darwin.
withAndroidPkgs = stdenv.system != "aarch64-darwin";
androidPkgs = self.androidEnvCustom.compose;
};
+3 -3
View File
@@ -11,10 +11,10 @@ let
# We follow the master branch of official nixpkgs.
nixpkgsSrc = fetchFromGitHub {
name = "nixpkgs-source";
owner = "NixOS";
owner = "status-im";
repo = "nixpkgs";
rev = "65135081f63ca2f5eaa9b7b54bfc7bf31502cfd6";
sha256 = "074lyh19x8xs8xqf4wwwl64870rpml96g7dhx1y09i81w5k29aga";
rev = "15111f8a9ad423d300886b537647691c2faa28cd";
sha256 = "05ny644x3dpxigljnb4rmams5vrs5gkbcyqjfamvlqm8rdmsi0kn";
# To get the compressed Nix sha256, use:
# nix-prefetch-url --unpack https://github.com/${ORG}/nixpkgs/archive/${REV}.tar.gz
};
+27 -19
View File
@@ -15,46 +15,53 @@ source "${GIT_ROOT}/nix/scripts/source.sh"
export TERM=xterm # fix for colors
shift # we remove the first -c from arguments
nixArgs=(
"--show-trace"
)
if [[ -z "${TARGET}" ]]; then
TARGET="default"
export TARGET="default"
echo -e "${YLW}Missing TARGET, assuming default target.${RST} See nix/README.md for more details." 1>&2
fi
# Minimal shell with just Nix sourced, useful for `make nix-gc`.
if [[ "${TARGET}" == "nix" ]]; then
eval $@
exit
exit 0
fi
if [[ -n "${IN_NIX_SHELL}" ]] && [[ -n "${NIX_SHELL_TARGET}" ]]; then
if [[ "${NIX_SHELL_TARGET}" == "${TARGET}" ]]; then
echo -e "${YLW}Nix shell for TARGET=${TARGET} is already active.${RST}" >&2
exit 0
else
# Nesting nix shells does not work due to how we detect already present shell.
echo -e "${RED}Cannot nest Nix shells with different targets!${RST}" >&2
exit 1
fi
fi
entryPoint="default.nix"
nixArgs+=("--attr shells.${TARGET}")
nixArgs=(
"--show-trace"
"--attr shells.${TARGET}"
)
config=''
if [ -n "${STATUS_GO_SRC_OVERRIDE}" ]; then
config+="status-im.status-go.src-override=\"${STATUS_GO_SRC_OVERRIDE}\";"
fi
if [ -n "${NIMBUS_SRC_OVERRIDE}" ]; then
config+="status-im.nimbus.src-override=\"${NIMBUS_SRC_OVERRIDE}\";"
if [[ -n "${STATUS_GO_SRC_OVERRIDE}" ]]; then
config+="status-im.status-go.src-override=\"${STATUS_GO_SRC_OVERRIDE}\";"
fi
config+="status-im.build-type=\"${BUILD_TYPE}\";"
if [ -n "$config" ]; then
nixArgs+=("--arg config {$config}")
if [[ -n "$config" ]]; then
nixArgs+=("--arg config {$config}")
fi
# This variable allows specifying which env vars to keep for Nix pure shell
# The separator is a colon
if [[ -n "${_NIX_KEEP}" ]]; then
nixArgs+=("--keep ${_NIX_KEEP//,/ --keep }")
nixArgs+=("--keep ${_NIX_KEEP//,/ --keep }")
fi
# Not all builds are ready to be run in a pure environment
if [[ -n "${_NIX_PURE}" ]]; then
nixArgs+=("--pure")
pureDesc='pure '
nixArgs+=("--pure")
pureDesc='pure '
fi
echo -e "${GRN}Configuring ${pureDesc}Nix shell for target '${TARGET}'...${RST}" 1>&2
@@ -65,7 +72,8 @@ ${GIT_ROOT}/nix/scripts/gcroots.sh "shells.${TARGET}"
# ENTER_NIX_SHELL is the fake command used when `make shell` is run.
# It is just a special string, not a variable, and a marker to not use `--run`.
if [[ "${@}" == "ENTER_NIX_SHELL" ]]; then
exec nix-shell ${nixArgs[@]} ${entryPoint}
export NIX_SHELL_TARGET="${TARGET}"
exec nix-shell ${nixArgs[@]} --keep NIX_SHELL_TARGET ${entryPoint}
else
exec nix-shell ${nixArgs[@]} --run "$@" ${entryPoint}
exec nix-shell ${nixArgs[@]} --run "$@" ${entryPoint}
fi
-47
View File
@@ -1,47 +0,0 @@
#
# This fetches nimbus source from local folder or GitHub and
# loads the derivation defined in the `nix/default.nix` in the repo.
#
{ config, lib, stdenv, callPackage, fetchFromGitHub }:
let
inherit (lib) getConfig attrByPath strings traceValFn;
repo = "nimbus";
localPath = getConfig "nimbus.src-override" "";
localSrc =
# We use builtins.path so that we can name the resulting derivation.
# Name would be taken from the checkout directory, and wouldn't be deterministic.
builtins.path rec {
path = traceValFn (path: ''
Using local ${repo} sources from ${path}
'') localPath;
name = "${repo}-source-local";
filter =
# Keep this filter as restrictive as possible in order to
# avoid unnecessary rebuilds and limit closure size
lib.mkFilter {
root = path;
include = [
"nix.*" "wrappers.*" "vendor.*"
"Makefile" "nim.cfg" "nimbus.nimble" "default.nix"
];
};
};
ghSrc = fetchFromGitHub rec {
inherit repo;
name = "${repo}-source-${strings.substring 0 7 rev}";
rev = "73278f20d0bf27fb7c6c331b515abb765814f1cc";
owner = "status-im";
sha256 = "0myq234zqnpmqsc2452xygnyc6sjs8x1blyrpa4bi9v2cwbyap5c";
fetchSubmodules = true;
};
src = if localPath != "" then localSrc else ghSrc;
nimbusDeriv = import "${src}/nix/default.nix";
in nimbusDeriv
+3 -3
View File
@@ -1,9 +1,9 @@
{ config, utils, lib, callPackage, fetchFromGitHub }:
let
inherit (lib) strings traceValFn attrByPath importJSON;
inherit (lib) strings traceValFn attrByPath importJSON getConfig;
srcOverride = attrByPath [ "status-im" "status-go" "src-override" ] null config;
srcOverride = getConfig "status-go.src-override" null;
# Warning message about using local sources
localSrcWarn = (path: "Using local status-go sources from ${path}");
@@ -27,7 +27,7 @@ let
include = [ ".*" ];
exclude = [
".*/[.]git.*" ".*[.]md" ".*[.]yml" ".*/.*_test.go$"
"_assets/.*" "build/.*"
"VERSION" "_assets/.*" "build/.*"
".*/.*LICENSE.*" ".*/CONTRIB.*" ".*/AUTHOR.*"
];
};
+2 -1
View File
@@ -39,6 +39,7 @@
"react-native-dark-mode": "^0.2.2",
"react-native-device-info": "^7.4.0",
"react-native-dialogs": "^1.0.4",
"react-native-fast-image": "8.5.11",
"react-native-fetch-polyfill": "^1.1.2",
"react-native-fs": "^2.14.1",
"react-native-gesture-handler": "^1.8.0",
@@ -58,7 +59,7 @@
"react-native-shake": "^3.3.1",
"react-native-share": "^7.0.1",
"react-native-splash-screen": "^3.2.0",
"react-native-status-keycard": "git+https://github.com/status-im/react-native-status-keycard.git#v2.5.35",
"react-native-status-keycard": "git+https://github.com/status-im/react-native-status-keycard.git#v2.5.37",
"react-native-svg": "^9.8.4",
"react-native-touch-id": "^4.4.1",
"react-native-webview": "git+https://github.com/status-im/react-native-webview.git#v11.3.0-status",
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

+3 -2
View File
@@ -138,7 +138,7 @@
} else if (payload.method == "net_version"){
return web3Response(payload, window.statusAppNetworkId)
} else if (payload.method == "eth_chainId"){
return web3Response(payload, "0x" + window.statusAppNetworkId.toString(16))
return web3Response(payload, "0x" + Number(window.statusAppNetworkId).toString(16))
} else if (payload.method == "eth_uninstallFilter"){
return web3Response(payload, true);
} else {
@@ -159,7 +159,7 @@
EthereumProvider.prototype.isConnected = function () { return true; };
// Set legacy metamask fields https://docs.metamask.io/guide/ethereum-provider.html#legacy-api
EthereumProvider.prototype.networkVersion = window.statusAppNetworkId;
EthereumProvider.prototype.chainId = "0x" + window.statusAppNetworkId.toString(16);
EthereumProvider.prototype.chainId = "0x" + Number(window.statusAppNetworkId).toString(16);
EthereumProvider.prototype._events = {};
@@ -222,6 +222,7 @@
var syncResponse = getSyncResponse({method: method});
if (syncResponse){
return new Promise(function (resolve, reject) {
if (window.statusAppDebug) { console.log("resolve sync: " + resolve + " " + JSON.stringify(syncResponse.result)); }
resolve(syncResponse.result);
});
}
-3
View File
@@ -26,9 +26,6 @@ config=''
if [[ -n "${STATUS_GO_SRC_OVERRIDE}" ]]; then
config+="status-im.status-go.src-override=\"${STATUS_GO_SRC_OVERRIDE}\";"
fi
if [[ -n "${NIMBUS_SRC_OVERRIDE}" ]]; then
config+="status-im.nimbus.src-override=\"${NIMBUS_SRC_OVERRIDE}\";"
fi
if [[ "${ANDROID_APK_SIGNED}" == "true" ]]; then
config+="status-im.android.keystore-path=\"$(must_get_env KEYSTORE_PATH)\";"
fi
+39 -54
View File
@@ -19,20 +19,11 @@
:restSpeedThreshold 0.1
:restDisplacementThreshold 0.1})
;; NOTE(Ferossgp): RNGH does not work in modal react native
(defn modal [{:keys [visible] :as props} & children]
(if platform/android?
(into [rn/view {:style styles/container
:pointer-events (if visible :box-none :none)}]
(when visible children))
(into [rn/modal props] children)))
(defn bottom-sheet-hooks [props]
(let [{on-cancel :onCancel
disable-drag? :disableDrag?
show-handle? :showHandle?
visible? :visible?
transparent :transparent
backdrop-dismiss? :backdropDismiss?
back-button-cancel :backButtonCancel
children :children
@@ -50,7 +41,7 @@
keyboard-height-android-delta (if (and platform/android? keyboard-shown) (+ keyboard-height 20) 0)
safe-area (safe-area/use-safe-area)
window-height (- window-height (if platform/android?
(+ 50 keyboard-height-android-delta)
(+ 50 keyboard-height-android-delta) ;; TODO : remove 50 when react-native-navigation v8 will be implemented https://github.com/wix/react-native-navigation/issues/7225
0))
min-height (+ (* styles/vertical-padding 2) (:bottom safe-area))
max-height (- window-height (:top safe-area) styles/margin-top)
@@ -186,48 +177,42 @@
(close-sheet)))
[visible?])
(reagent/as-element
[modal {:visible @visible
:transparent true
:presentation-style :overFullScreen
:hardware-accelerated true
:on-request-close (fn []
(when back-button-cancel
(close-sheet)))}
[rn/view {:style styles/container
:opacity (if transparent 0 1)
:pointer-events :box-none}
[gesture-handler/tap-gesture-handler (merge {:enabled backdrop-dismiss?}
tap-gesture-handler)
[animated/view {:style (merge (styles/backdrop)
(when platform/ios?
{:opacity opacity
:background-color (:backdrop @colors/theme)}))}]]
[animated/view {:style (merge (styles/content-container window-height)
{:transform [{:translateY (animated/add translate-y keyboard-height-android-delta)}
{:translateY (* window-height 2)}]})}
[gesture-handler/pan-gesture-handler (merge on-master-event
{:ref master-ref
:wait-for body-ref
:enabled (not disable-drag?)})
[animated/view {:style styles/content-header}
(when show-handle?
[rn/view {:style styles/handle}])]]
[gesture-handler/pan-gesture-handler (merge on-body-event
{:ref body-ref
:wait-for master-ref
:enabled (and (not disable-drag?)
(not= sheet-height max-height))})
[animated/view {:height sheet-height}
[animated/scroll-view {:bounces false
:flex 1
:scroll-enabled (= sheet-height max-height)}
[animated/view {:style {:padding-top styles/vertical-padding
:padding-bottom (+ styles/vertical-padding
(if (and platform/ios? keyboard-shown)
keyboard-height
(:bottom safe-area)))}
:on-layout #(reset! height (.-nativeEvent.layout.height ^js %))}
(into [:<>]
(react/get-children children))]]]]]]])))
[rn/view {:style styles/container
:pointer-events :box-none}
[gesture-handler/tap-gesture-handler (merge {:enabled backdrop-dismiss?}
tap-gesture-handler)
[animated/view {:style (merge (styles/backdrop)
(when platform/ios?
{:opacity opacity
:background-color (:backdrop @colors/theme)}))}]]
[animated/view {:style (merge (styles/content-container window-height)
{:transform [{:translateY (if (= sheet-height max-height)
(animated/add translate-y keyboard-height-android-delta)
translate-y)}
{:translateY (* window-height 2)}]})}
[gesture-handler/pan-gesture-handler (merge on-master-event
{:ref master-ref
:wait-for body-ref
:enabled (not disable-drag?)})
[animated/view {:style styles/content-header}
(when show-handle?
[rn/view {:style styles/handle}])]]
[gesture-handler/pan-gesture-handler (merge on-body-event
{:ref body-ref
:wait-for master-ref
:enabled (and (not disable-drag?)
(not= sheet-height max-height))})
[animated/view {:height sheet-height}
[animated/scroll-view {:bounces false
:flex 1
:scroll-enabled (= sheet-height max-height)}
[animated/view {:style {:padding-top styles/vertical-padding
:padding-bottom (+ styles/vertical-padding
(if (and platform/ios? keyboard-shown)
keyboard-height
(:bottom safe-area)))}
:on-layout #(reset! height (.-nativeEvent.layout.height ^js %))}
(into [:<>]
(react/get-children children))]]]]]])))
(def bottom-sheet (reagent/adapt-react-class (react/memo bottom-sheet-hooks)))
(def bottom-sheet (reagent/adapt-react-class (react/memo bottom-sheet-hooks)))
+7 -7
View File
@@ -49,15 +49,15 @@
:hold hold
:disabled disabled}]]]))))
(defn switch-view [{:keys [transition hold disabled]}]
(defn switch-view [{:keys [transition hold disabled value]}]
[animated/view {:style (styles/switch-style transition disabled)
:accessibility-label :switch
:accessibility-label (str "switch-" (if value "on" "off"))
:accessibility-role :switch}
[animated/view {:style (styles/switch-bullet-style transition hold)}]])
(defn radio-view [{:keys [transition hold disabled]}]
(defn radio-view [{:keys [transition hold disabled value]}]
[animated/view {:style (styles/radio-style transition disabled)
:accessibility-label :radio
:accessibility-label (str "radio-" (if value "on" "off"))
:accessibility-role :radio}
[animated/view {:style (styles/radio-bullet-style transition hold)}]])
@@ -67,15 +67,15 @@
[rn/touchable-without-feedback
{:on-press (when (and onChange (not disabled)) onChange)}
[rn/view {:style (styles/checkbox-style value disabled)
:accessibility-label :checkbox
:accessibility-label (str "checkbox-" (if value "on" "off"))
:accessibility-role :checkbox}
[rn/view {:style (styles/check-icon-style value)}
[icons/tiny-icon :tiny-icons/tiny-check {:color colors/white}]]]])))
(defn animated-checkbox-view [{:keys [transition hold disabled]}]
(defn animated-checkbox-view [{:keys [transition hold disabled value]}]
[animated/view
{:style (styles/animated-checkbox-style transition disabled)
:accessibility-label :checkbox
:accessibility-label (str "checkbox-" (if value "on" "off"))
:accessibility-role :checkbox}
[animated/view {:style (styles/animated-check-icon-style transition hold)}
[icons/tiny-icon :tiny-icons/tiny-check {:color colors/white}]]])
+2 -2
View File
@@ -26,7 +26,7 @@
[cofx {:keys [key id]} public]
(fx/merge cofx
{::persistence/chat-initalized! true}
(chat/start-chat key)))
(chat/start-chat key nil)))
(fx/defn start-public-chat
{:events [::start-public-chat]}
@@ -37,7 +37,7 @@
(fx/defn join-public-chat
[cofx chat-name]
(chat/start-public-chat cofx chat-name {:navigation-reset? true}))
(chat/start-public-chat cofx chat-name nil))
(fx/defn accept-pack
{:events [::accept-pack]}
+2 -2
View File
@@ -78,9 +78,9 @@
(if-not validation-result
(if new-contact?
(fx/merge cofx
(contact/add-contact chat-key nil)
(contact/add-contact chat-key nil nil)
(navigation/navigate-to-cofx :contacts-list {}))
(chat/start-chat cofx chat-key))
(chat/start-chat cofx chat-key nil))
{:utils/show-popup {:title (i18n/label :t/unable-to-read-this-code)
:content (case validation-result
:invalid
+1 -1
View File
@@ -9,7 +9,7 @@
(def key->string str)
(defn- set-item! [key value]
(defn set-item! [key value]
(-> ^js async-storage
(.setItem (key->string key)
(clj->transit value))
+26
View File
@@ -0,0 +1,26 @@
(ns status-im.backup.core
(:require [re-frame.core :as re-frame]
[taoensso.timbre :as log]
[status-im.ethereum.json-rpc :as json-rpc]
[status-im.utils.fx :as fx]))
(fx/defn handle-backup-failed
{:events [::backup-failed]}
[{:keys [db]}]
{:db (dissoc db :backup/performing-backup)})
(fx/defn handle-backup-perfomed
{:events [::backup-performed]}
[{:keys [db]}]
{:db (dissoc db :backup/performing-backup)})
(fx/defn handle-perform-backup-pressed
{:events [:multiaccounts.ui/perform-backup-pressed]}
[{:keys [db]}]
{:db (assoc db :backup/performing-backup true)
::json-rpc/call [{:method (json-rpc/call-ext-method "backupData")
:params []
:on-error #(do
(log/error "failed to perfom backup" %)
(re-frame/dispatch [::backup-failed %]))
:on-success #(re-frame/dispatch [::backup-performed %])}]})
+59 -44
View File
@@ -4,6 +4,7 @@
[status-im.multiaccounts.model :as multiaccounts.model]
[status-im.chat.models.message-list :as message-list]
[status-im.data-store.chats :as chats-store]
[status-im.data-store.contacts :as contacts-store]
[status-im.ethereum.json-rpc :as json-rpc]
[status-im.i18n.i18n :as i18n]
[quo.design-system.colors :as colors]
@@ -128,11 +129,13 @@
(map (map-chats cofx) chats))]
(fx/merge
cofx
{:db (-> db
(update :chats merge all-chats)
(update :chats-home-list set/union chats-home-list)
(update :chats #(apply dissoc % removed-chats))
(update :chats-home-list set/difference removed-chats))}
(merge {:db (-> db
(update :chats merge all-chats)
(update :chats-home-list set/union chats-home-list)
(update :chats #(apply dissoc % removed-chats))
(update :chats-home-list set/difference removed-chats))}
(when (not-empty removed-chats)
{:clear-multiple-message-notifications removed-chats}))
leave-removed-chat)))
(fx/defn clear-history
@@ -196,15 +199,23 @@
(fx/defn close-chat
{:events [:close-chat]}
[{:keys [db] :as cofx} target-chat-id]
(let [chat-id (:current-chat-id db)]
(if (:ignore-close-chat db)
{:db (dissoc db :ignore-close-chat)}
(when (= target-chat-id chat-id)
(chat.state/reset-visible-item)
(fx/merge cofx
{:db (dissoc db :current-chat-id)}
(offload-messages chat-id))))))
[{:keys [db] :as cofx}]
(let [chat-id (:current-chat-id db)
navigate-after-home-to-chat (:navigate-after-home-to-chat db)]
(chat.state/reset-visible-item)
(if navigate-after-home-to-chat
{:db (dissoc db :navigate-after-home-to-chat)}
(fx/merge cofx
{:db (dissoc db :current-chat-id)}
(offload-messages chat-id)))))
(fx/defn force-close-chat
[{:keys [db] :as cofx} chat-id]
(do
(chat.state/reset-visible-item)
(fx/merge cofx
{:db (dissoc db :current-chat-id)}
(offload-messages chat-id))))
(fx/defn remove-chat
"Removes chat completely from app, producing all necessary effects for that"
@@ -231,19 +242,21 @@
(fx/defn navigate-to-chat
"Takes coeffects map and chat-id, returns effects necessary for navigation and preloading data"
{:events [:chat.ui/navigate-to-chat]}
[{db :db :as cofx} chat-id dont-reset?]
(fx/merge cofx
(close-chat (:current-chat-id db))
(fn [{:keys [db]}]
{:db (assoc db :current-chat-id chat-id :ignore-close-chat true)})
(preload-chat-data chat-id)
#(when (group-chat? cofx chat-id)
(loading/load-chat % chat-id))
#(when-not dont-reset?
(navigation/change-tab % :chat))
#(when-not dont-reset?
(navigation/pop-to-root-tab % :chat-stack))
(navigation/navigate-to-cofx :chat nil)))
[{db :db :as cofx} chat-id]
(let [home-view? (= (get db :view-id) :home)]
(fx/merge cofx
(close-chat)
(force-close-chat chat-id)
(fn [{:keys [db]}]
{:db (assoc db :current-chat-id chat-id :navigate-after-home-to-chat (not home-view?))})
(preload-chat-data chat-id)
#(when (group-chat? cofx chat-id)
(loading/load-chat % chat-id))
#(when-not home-view?
(navigation/change-tab % :chat))
#(when-not home-view?
(navigation/pop-to-root-tab % :chat-stack))
(navigation/navigate-to-cofx :chat nil))))
(fx/defn handle-clear-history-response
{:events [::history-cleared]}
@@ -254,10 +267,16 @@
(fx/defn handle-one-to-one-chat-created
{:events [::one-to-one-chat-created]}
[{:keys [db]} chat-id response]
(let [chat (chats-store/<-rpc (first (:chats response)))]
{:db (-> db
(assoc-in [:chats chat-id] chat)
(update :chats-home-list conj chat-id))
(let [chat (chats-store/<-rpc (first (:chats response)))
contact-rpc (first (:contacts response))
contact (when contact-rpc (contacts-store/<-rpc contact-rpc))]
{:db (cond-> db
contact
(assoc-in [:contacts/contacts chat-id] contact)
:always
(assoc-in [:chats chat-id] chat)
:always
(update :chats-home-list conj chat-id))
:dispatch [:chat.ui/navigate-to-chat chat-id]}))
(fx/defn navigate-to-user-pinned-messages
@@ -269,11 +288,11 @@
(fx/defn start-chat
"Start a chat, making sure it exists"
{:events [:chat.ui/start-chat]}
[{:keys [db] :as cofx} chat-id]
[{:keys [db] :as cofx} chat-id ens-name]
;; don't allow to open chat with yourself
(when (not= (multiaccounts.model/current-public-key cofx) chat-id)
{::json-rpc/call [{:method "wakuext_createOneToOneChat"
:params [{:id chat-id}]
:params [{:id chat-id :ensName ens-name}]
:on-success #(re-frame/dispatch [::one-to-one-chat-created chat-id %])
:on-error #(log/error "failed to create one-to-on chat" chat-id %)}]}))
@@ -285,14 +304,11 @@
(fx/defn handle-public-chat-created
{:events [::public-chat-created]}
[{:keys [db]} chat-id {:keys [dont-navigate?]} response]
(let [chat (chats-store/<-rpc (first (:chats response)))
db-with-chat {:db (-> db
(assoc-in [:chats chat-id] chat)
(update :chats-home-list conj chat-id))}]
(if dont-navigate?
db-with-chat
(assoc db-with-chat :dispatch [:chat.ui/navigate-to-chat chat-id]))))
[{:keys [db]} chat-id _ response]
{:db (-> db
(assoc-in [:chats chat-id] (chats-store/<-rpc (first (:chats response))))
(update :chats-home-list conj chat-id))
:dispatch [:chat.ui/navigate-to-chat chat-id]})
(fx/defn create-public-chat-go [_ chat-id opts]
{::json-rpc/call [{:method "wakuext_createPublicChat"
@@ -303,11 +319,10 @@
(fx/defn start-public-chat
"Starts a new public chat"
{:events [:chat.ui/start-public-chat]}
[cofx topic {:keys [dont-navigate? profile-public-key] :as opts}]
[cofx topic {:keys [profile-public-key] :as opts}]
(if (or (new-public-chat.db/valid-topic? topic) profile-public-key)
(if (active-chat? cofx topic)
(when-not dont-navigate?
(navigate-to-chat cofx topic false))
(navigate-to-chat cofx topic)
(create-public-chat-go
cofx
topic
+63 -5
View File
@@ -14,7 +14,8 @@
[quo.design-system.colors :as colors]
[status-im.navigation :as navigation]
[status-im.utils.handlers :refer [>evt]]
[status-im.ui.components.emoji-thumbnail.styles :as emoji-thumbnail-styles]))
[status-im.ui.components.emoji-thumbnail.styles :as emoji-thumbnail-styles]
[status-im.notifications-center.core :as notification-center]))
(def crop-size 1000)
@@ -287,7 +288,8 @@
(fx/defn edit-channel
{:events [::edit-channel-confirmation-pressed]}
[{:keys [db] :as cofx}]
(let [{:keys [name description color community-id emoji edit-channel-id]} (get db :communities/create-channel)]
(let [{:keys [name description color community-id emoji edit-channel-id category-id]}
(get db :communities/create-channel)]
{::json-rpc/call [{:method "wakuext_editCommunityChat"
:params [community-id
edit-channel-id
@@ -295,6 +297,7 @@
:description description
:color color
:emoji emoji}
:category_id category-id
:permissions {:access constants/community-channel-access-no-membership}}]
:js-response true
:on-success #(re-frame/dispatch [::community-channel-edited %])
@@ -342,7 +345,7 @@
(fx/defn edit-channel-pressed
{:events [::edit-channel-pressed]}
[{:keys [db] :as cofx} community-id chat-name description color emoji chat-id]
[{:keys [db] :as cofx} community-id chat-name description color emoji chat-id category-id]
(let [{:keys [color emoji]} (if (string/blank? emoji)
(rand-nth emoji-thumbnail-styles/emoji-picker-default-thumbnails)
{:color color :emoji emoji})]
@@ -352,7 +355,8 @@
:color color
:community-id community-id
:emoji emoji
:edit-channel-id chat-id})}
:edit-channel-id chat-id
:category-id category-id})}
(navigation/open-modal :edit-community-channel nil))))
(fx/defn community-created
@@ -444,7 +448,8 @@
[cofx response-js]
(fx/merge cofx
(bottom-sheet/hide-bottom-sheet)
(handle-response response-js)))
(handle-response response-js)
(notification-center/get-activity-center-notifications-count)))
(fx/defn member-ban
{:events [::member-ban]}
@@ -586,3 +591,56 @@
(fx/merge cofx
(navigation/navigate-back)
(remove-chat-from-category community-id id categoryID))))
(fx/defn reorder-category
{:events [::reorder-community-category]}
[_ community-id category-id new-position]
{::json-rpc/call [{:method "wakuext_reorderCommunityCategories"
:params [{:communityId community-id
:categoryId category-id
:position new-position}]
:js-response true
:on-success #(re-frame/dispatch [:sanitize-messages-and-process-response %])
:on-error #(log/error "failed to reorder community category" %)}]})
(defn category-hash [public-key community-id category-id]
(hash (str public-key community-id category-id)))
(fx/defn store-category-state
{:events [::store-category-state]}
[{:keys [db]} community-id category-id state-open?]
(let [public-key (get-in db [:multiaccount :public-key])
hash (category-hash public-key community-id category-id)]
{::async-storage/set! {hash state-open?}}))
(fx/defn update-category-states-in-db
{:events [::category-states-loaded]}
[{:keys [db]} community-id hashes states]
(let [public-key (get-in db [:multiaccount :public-key])
categories-old (get-in db [:communities community-id :categories])
categories (reduce (fn [acc [category-id category]]
(let [hash (get hashes category-id)
state (get states hash)
category-updated (assoc category :state state)]
(assoc acc category-id category-updated)))
{} categories-old)]
{:db (update-in db [:communities community-id :categories] merge categories)}))
(fx/defn load-category-states
{:events [::load-category-states]}
[{:keys [db]} community-id]
(let [public-key (get-in db [:multiaccount :public-key])
categories (get-in db [:communities community-id :categories])
{:keys [keys hashes]} (reduce (fn [acc category]
(let [category-id (get category 0)
hash (category-hash
public-key
community-id
category-id)]
(-> acc
(assoc-in [:hashes category-id] hash)
(update :keys #(conj % hash)))))
{} categories)]
{::async-storage/get {:keys keys
:cb #(re-frame/dispatch
[::category-states-loaded community-id hashes %])}}))
+27 -15
View File
@@ -5,6 +5,8 @@
[status-im.data-store.chats :as chats-store]
[status-im.data-store.contacts :as contacts-store]
[status-im.navigation :as navigation]
[status-im.utils.types :as types]
[status-im.notifications-center.core :as notification-center]
[status-im.utils.fx :as fx]))
(fx/defn clean-up-chat
@@ -34,23 +36,25 @@
(fx/defn contact-blocked
{:events [::contact-blocked]}
[{:keys [db] :as cofx} {:keys [public-key]} chats]
(let [fxs (map #(clean-up-chat public-key %) chats)]
(let [fxs (when chats
(map #(->> (chats-store/<-rpc %)
(clean-up-chat public-key)) (types/js->clj chats)))]
(apply fx/merge
cofx
{:db (-> db
(update :chats dissoc public-key)
(update :chats-home-list disj public-key)
(assoc-in [:contacts/contacts public-key :added] false))}
(notification-center/get-activity-center-notifications-count)
fxs)))
(fx/defn block-contact
{:events [:contact.ui/block-contact-confirmed]}
[{:keys [db now] :as cofx} public-key]
[{:keys [db] :as cofx} public-key]
(let [contact (-> (contact.db/public-key->contact
(:contacts/contacts db)
public-key)
(assoc :last-updated now
:blocked true
(assoc :blocked true
:added false))
from-one-to-one-chat? (not (get-in db [:chats (:current-chat-id db) :group-chat]))]
(fx/merge cofx
@@ -59,20 +63,28 @@
(update :contacts/blocked (fnil conj #{}) public-key)
;; update the contact in contacts list
(assoc-in [:contacts/contacts public-key] contact))}
(contacts-store/block contact #(do (re-frame/dispatch [::contact-blocked contact (map chats-store/<-rpc %)])
(re-frame/dispatch [:hide-popover])))
(contacts-store/block
public-key #(do (re-frame/dispatch [::contact-blocked contact (.-chats %)])
(re-frame/dispatch [:sanitize-messages-and-process-response %])
(re-frame/dispatch [:hide-popover])))
;; reset navigation to avoid going back to non existing one to one chat
(if from-one-to-one-chat?
(navigation/pop-to-root-tab :chat-stack)
(navigation/navigate-back)))))
(fx/defn contact-unblocked
{:events [::contact-unblocked]}
[{:keys [db]} contact-id]
(let [contact (-> (get-in db [:contacts/contacts contact-id])
(assoc :blocked false))]
{:db (-> db
(update :contacts/blocked disj contact-id)
(assoc-in [:contacts/contacts contact-id] contact))}))
(fx/defn unblock-contact
{:events [:contact.ui/unblock-contact-pressed ::contact-unblocked]}
[{:keys [db now] :as cofx} public-key]
(let [contact (-> (get-in db [:contacts/contacts public-key])
(assoc :last-updated now :blocked false))]
(fx/merge cofx
{:db (-> db
(update :contacts/blocked disj public-key)
(assoc-in [:contacts/contacts public-key] contact))}
(contacts-store/save-contact contact nil))))
{:events [:contact.ui/unblock-contact-pressed]}
[cofx contact-id]
(contacts-store/unblock
cofx
contact-id
#(re-frame/dispatch [::contact-unblocked contact-id])))
+6 -6
View File
@@ -3,7 +3,8 @@
[status-im.navigation :as navigation]
[status-im.utils.fx :as fx]
[status-im.chat.models :as chat]
[status-im.contact.core :as contact]))
[status-im.contact.core :as contact]
[status-im.notifications-center.core :as notification-center]))
(fx/defn send-message-pressed
{:events [:contact.ui/send-message-pressed]
@@ -11,6 +12,7 @@
[cofx {:keys [public-key]}]
(fx/merge cofx
{:dispatch-later [{:ms 1000 :dispatch [:chat.ui/start-chat public-key]}]}
(notification-center/accept-all-activity-center-notifications-from-chat public-key)
(navigation/pop-to-root-tab :chat-stack)))
(fx/defn contact-code-submitted
@@ -20,12 +22,10 @@
(let [{:keys [public-key ens-name]} new-identity]
(fx/merge cofx
#(if new-contact?
(contact/add-contact % public-key nickname)
(chat/start-chat % public-key))
(contact/add-contact % public-key nickname ens-name)
(chat/start-chat % public-key ens-name))
#(when new-contact?
(navigation/navigate-back %))
#(when ens-name
(contact/name-verified % public-key ens-name)))))
(navigation/navigate-back %)))))
(fx/defn pinned-messages-pressed
{:events [:contact.ui/pinned-messages-pressed]}
+17 -65
View File
@@ -3,11 +3,9 @@
[status-im.contact.db :as contact.db]
[status-im.data-store.contacts :as contacts-store]
[status-im.ethereum.json-rpc :as json-rpc]
[status-im.mailserver.core :as mailserver]
[status-im.navigation :as navigation]
[status-im.utils.fx :as fx]
[taoensso.timbre :as log]
[clojure.string :as string]
[status-im.constants :as constants]
[status-im.contact.block :as contact.block]))
@@ -54,10 +52,7 @@
(conj nil)
(and blocked (not was-blocked))
(conj [::contact.block/contact-blocked contact chats])
(and was-blocked (not blocked))
(conj [::contact.block/contact-unblocked public-key]))))
(conj [::contact.block/contact-blocked contact chats]))))
[[:offload-messages constants/timeline-chat-id]]
contacts)]
(merge
@@ -71,17 +66,6 @@
(when (> (count events) 1)
{:dispatch-n events}))))
(fx/defn upsert-contact
[{:keys [db] :as cofx}
{:keys [public-key] :as contact}]
(fx/merge cofx
{:db (-> db
(update-in [:contacts/contacts public-key] merge contact))}
(fn [cf]
(contacts-store/save-contact cf
(get-in cf [:db :contacts/contacts public-key])
#(re-frame/dispatch [::send-contact-request public-key])))))
(fx/defn send-contact-request
{:events [::send-contact-request]}
[{:keys [db] :as cofx} public-key]
@@ -92,22 +76,17 @@
(fx/defn add-contact
"Add a contact and set pending to false"
{:events [:contact.ui/add-to-contact-pressed]
:interceptors [(re-frame/inject-cofx :random-id-generator)]}
[{:keys [db] :as cofx} public-key nickname]
{:events [:contact.ui/add-to-contact-pressed]}
[{:keys [db] :as cofx} public-key nickname ens-name]
(when (not= (get-in db [:multiaccount :public-key]) public-key)
(let [contact (cond-> (get-in db [:contacts/contacts public-key]
(build-contact cofx public-key))
(and nickname (not (string/blank? nickname)))
(assoc :nickname nickname)
:else
(assoc :added true))]
(fx/merge cofx
{:db (dissoc db :contacts/new-identity)
:dispatch-n [[:start-profile-chat public-key]
[:offload-messages constants/timeline-chat-id]]}
(upsert-contact contact)
(mailserver/process-next-messages-request)))))
(contacts-store/add
cofx
public-key
nickname
ens-name
#(do
(re-frame/dispatch [:sanitize-messages-and-process-response %])
(re-frame/dispatch [:offload-messages constants/timeline-chat-id])))))
(fx/defn remove-contact
"Remove a contact from current account's contact list"
@@ -119,16 +98,6 @@
:on-success #(log/debug "contact removed successfully")}]
:dispatch [:offload-messages constants/timeline-chat-id]})
(fx/defn create-contact
"Create entry in contacts"
[{:keys [db] :as cofx} public-key]
(when (not= (get-in db [:multiaccount :public-key]) public-key)
(let [contact (build-contact cofx public-key)]
(log/info "create contact" contact)
(fx/merge cofx
{:db (dissoc db :contacts/new-identity)}
(upsert-contact contact)))))
(fx/defn initialize-contacts [cofx]
(contacts-store/fetch-contacts-rpc cofx #(re-frame/dispatch [::contacts-loaded %])))
@@ -141,29 +110,12 @@
:new-chat-name "")}
(navigation/navigate-to-cofx :contact-toggle-list nil)))
(fx/defn name-verified
{:events [:contacts/ens-name-verified]}
[{:keys [db now] :as cofx} public-key ens-name]
(let [contact (-> (or (get-in db [:contacts/contacts public-key])
(build-contact cofx public-key))
(assoc :name ens-name
:ens-verified true))]
(fx/merge cofx
{:db (-> db
(update-in [:contacts/contacts public-key] merge contact))
::json-rpc/call [{:method "wakuext_ensVerified"
:params [public-key ens-name]
:on-success #(log/debug "ens name verified successuful")}]})))
(fx/defn update-nickname
{:events [:contacts/update-nickname]}
[{:keys [db] :as cofx} public-key nickname]
(let [contact (-> (build-contact cofx public-key)
(merge (get-in db [:contacts/contacts public-key])))]
(fx/merge cofx
{:db (assoc-in db [:contacts/contacts public-key]
(if (string/blank? nickname)
(dissoc contact :nickname)
(assoc contact :nickname nickname)))}
(upsert-contact {:public-key public-key})
(navigation/navigate-back))))
(fx/merge cofx
(contacts-store/set-nickname
public-key
nickname
#(re-frame/dispatch [:sanitize-messages-and-process-response %]))
(navigation/navigate-back)))
+4 -1
View File
@@ -28,7 +28,10 @@
:chat-type constants/one-to-one-chat-type
:chat-name name
:public? false
:group-chat false)))
:group-chat false)
:else
chat))
(defn <-rpc [item]
(-> item
+30 -19
View File
@@ -13,15 +13,6 @@
:lastUpdated :last-updated
:localNickname :nickname}))
(defn ->rpc [contact]
(clojure.set/rename-keys contact {:public-key :id
:ens-verified :ensVerified
:ens-verified-at :ensVerifiedAt
:last-ens-clock-value :lastENSClockValue
:ens-verification-retries :ensVerificationRetries
:last-updated :lastUpdated
:nickname :localNickname}))
(fx/defn fetch-contacts-rpc
[_ on-success]
{::json-rpc/call [{:method (json-rpc/call-ext-method "contacts")
@@ -29,18 +20,38 @@
:on-success #(on-success (map <-rpc %))
:on-failure #(log/error "failed to fetch contacts" %)}]})
(fx/defn save-contact
[_ {:keys [public-key] :as contact} on-success]
{::json-rpc/call [{:method (json-rpc/call-ext-method "saveContact")
:params [(->rpc contact)]
(fx/defn add
[_ public-key nickname ens-name on-success]
{::json-rpc/call [{:method (json-rpc/call-ext-method "addContact")
:params [{:id public-key :nickname nickname :ensName ens-name}]
:js-response true
:on-success #(do
(log/debug "saved contact" public-key "successfuly")
(log/info "saved contact" public-key "successfuly")
(when on-success
(on-success)))
:on-failure #(log/error "failed to save contact" public-key %)}]})
(on-success %)))
:on-failure #(log/error "failed to add contact" public-key %)}]})
(fx/defn block [_ contact on-success]
(fx/defn set-nickname
[_ public-key nickname on-success]
{::json-rpc/call [{:method (json-rpc/call-ext-method "setContactLocalNickname")
:params [{:id public-key :nickname nickname}]
:js-response true
:on-success #(do
(log/debug "set contact nickname" public-key "successfuly" nickname)
(when on-success
(on-success %)))
:on-failure #(log/error "failed to set contact nickname " public-key nickname %)}]})
(fx/defn block [_ contact-id on-success]
{::json-rpc/call [{:method (json-rpc/call-ext-method "blockContact")
:params [(->rpc contact)]
:params [contact-id]
:js-response true
:on-success on-success
:on-failure #(log/error "failed to block contact" % contact)}]})
:on-failure #(log/error "failed to block contact" % contact-id)}]})
(fx/defn unblock [_ contact-id on-success]
{::json-rpc/call [{:method (json-rpc/call-ext-method "unblockContact")
:params [contact-id]
:on-success on-success
:js-response true
:on-failure #(log/error "failed to unblock contact" % contact-id)}]})
@@ -2,21 +2,6 @@
(:require [cljs.test :refer-macros [deftest is testing]]
[status-im.data-store.contacts :as c]))
(deftest contact->rpc
(let [contact {:public-key "pk"
:address "address"
:name "name"
:identicon "identicon"
:last-updated 1}
expected-contact {:id "pk"
:address "address"
:name "name"
:identicon "identicon"
:lastUpdated 1}]
(testing "->rpc"
(is (= expected-contact (c/->rpc contact))))))
(deftest contact<-rpc
(let [contact {:id "pk"
:address "address"
+33 -13
View File
@@ -17,15 +17,20 @@
(.hexToUtf8 utils s)
(catch :default _ nil)))
;; IDs standardized in https://github.com/ethereum/EIPs/blob/master/EIPS/eip-155.md#list-of-chain-ids
(def BSC-mainnet-chain-id 56)
(def BSC-testnet-chain-id 97)
;; IDs standardized in https://github.com/ethereum/EIPs/blob/master/EIPS/eip-155.md#list-of-chain-ids
(def chains
{:mainnet {:id 1 :name "Mainnet"}
:testnet {:id 3 :name "Ropsten"}
:rinkeby {:id 4 :name "Rinkeby"}
:xdai {:id 100 :name "xDai"}
:poa {:id 99 :name "POA"}
:goerli {:id 5 :name "Goerli"}})
{:mainnet {:id 1 :name "Mainnet"}
:testnet {:id 3 :name "Ropsten"}
:rinkeby {:id 4 :name "Rinkeby"}
:xdai {:id 100 :name "xDai"}
:goerli {:id 5 :name "Goerli"}
:bsc {:id BSC-mainnet-chain-id
:name "BSC"}
:bsc-testnet {:id BSC-testnet-chain-id
:name "BSC tetnet"}})
(defn chain-id->chain-keyword [i]
(or (some #(when (= i (:id (val %))) (key %)) chains)
@@ -46,11 +51,12 @@
(defn testnet? [id]
(contains? #{(chain-keyword->chain-id :testnet)
(chain-keyword->chain-id :rinkeby)
(chain-keyword->chain-id :goerli)} id))
(chain-keyword->chain-id :goerli)
(chain-keyword->chain-id :bsc-testnet)} id))
(defn sidechain? [id]
(contains? #{(chain-keyword->chain-id :xdai)
(chain-keyword->chain-id :poa)} id))
(chain-keyword->chain-id :bsc)} id))
(defn network-with-upstream-rpc? [network]
(get-in network [:config :UpstreamConfig :Enabled]))
@@ -107,6 +113,16 @@
network-id (get db :networks/current-network)]
(get networks network-id)))
(defn binance-chain-id? [chain-id]
(or (= BSC-mainnet-chain-id chain-id)
(= BSC-testnet-chain-id chain-id)))
(defn binance-chain? [db]
(-> db
current-network
network->chain-id
binance-chain-id?))
(def custom-rpc-node-id-len 45)
(defn custom-rpc-node? [{:keys [id]}]
@@ -120,13 +136,17 @@
network->chain-keyword
name))
(defn chain-keyword
(defn get-current-network
[{:networks/keys [current-network networks]}]
(network->chain-keyword (get networks current-network)))
(get networks current-network))
(defn chain-keyword
[db]
(network->chain-keyword (get-current-network db)))
(defn chain-id
[{:networks/keys [current-network networks]}]
(network->chain-id (get networks current-network)))
[db]
(network->chain-id (get-current-network db)))
(defn snt-symbol [db]
(chain-keyword->snt-symbol (chain-keyword db)))
+5
View File
@@ -56,6 +56,7 @@
"wakuext_disableInstallation" {}
"wakuext_sendChatMessage" {}
"wakuext_sendChatMessages" {}
"wakuext_backupData" {}
"wakuext_confirmJoiningGroup" {}
"wakuext_addAdminsToGroupChat" {}
"wakuext_addMembersToGroupChat" {}
@@ -90,9 +91,12 @@
"wakuext_unmuteChat" {}
"wakuext_contacts" {}
"wakuext_removeContact" {}
"wakuext_setContactLocalNickname" {}
"wakuext_clearHistory" {}
"wakuext_prepareContent" {}
"wakuext_blockContact" {}
"wakuext_unblockContact" {}
"wakuext_addContact" {}
"wakuext_updateMailservers" {}
"wakuext_sendEmojiReaction" {}
"wakuext_sendEmojiReactionRetraction" {}
@@ -190,6 +194,7 @@
"wallet_getCryptoOnRamps" {}
"wallet_getOpenseaCollectionsByOwner" {}
"wallet_getOpenseaAssetsByOwnerAndCollection" {}
"wallet_loadTransferByHash" {}
"browsers_getBrowsers" {}
"browsers_addBrowser" {}
"browsers_deleteBrowser" {}
+4 -3
View File
@@ -34,19 +34,20 @@
tokens))
(defn network->icon [network]
(let [s (str "../resources/images/tokens/" (name network) "/0-native.png")
(let [s (str "./resources/images/tokens/" (name network) "/0-native.png")
s-js (str "." s)
image (gensym)]
(if (.exists (io/file s))
`(let [~image (atom nil)]
(fn []
(or @~image
(reset! ~image (js/require ~s)))))
(reset! ~image (js/require ~s-js)))))
`(let [~image (atom nil)]
(fn []
(or
@~image
(reset! ~image
(js/require "../resources/images/tokens/default-native.png"))))))))
(js/require "../resources/images/tokens/default-token.png"))))))))
(defmacro resolve-native-currency-icons
"In react-native arguments to require must be static strings.
+41 -30
View File
@@ -1,46 +1,53 @@
(ns status-im.ethereum.tokens
(:require [clojure.string :as string])
(:require [clojure.string :as string]
[status-im.ethereum.core :as ethereum])
(:require-macros
[status-im.ethereum.macros :as ethereum.macros :refer [resolve-icons]]))
(def default-native-currency
(memoize
(fn []
{:name "Native"
:symbol :ETH
:decimals 18
:icon {:source (js/require "../resources/images/tokens/default-native.png")}})))
(fn [symbol]
{:name "Native"
:symbol :ETH
:symbol-display symbol
:decimals 18
:icon {:source (js/require "../resources/images/tokens/default-token.png")}})))
(def snt-icon-source (js/require "../resources/images/tokens/mainnet/SNT.png"))
(def all-native-currencies
(ethereum.macros/resolve-native-currency-icons
{:mainnet {:name "Ether"
:symbol :ETH
:decimals 18}
:testnet {:name "Ropsten Ether"
:symbol :ETH
:symbol-display :ETHro
:decimals 18}
:rinkeby {:name "Rinkeby Ether"
:symbol :ETH
:symbol-display :ETHri
:decimals 18}
:poa {:name "POA"
:symbol :ETH
:symbol-display :POA
:decimals 18}
:xdai {:name "xDAI"
:symbol :ETH
:symbol-display :xDAI
:symbol-exchange :DAI
:decimals 18}}))
{:mainnet {:name "Ether"
:symbol :ETH
:decimals 18}
:testnet {:name "Ropsten Ether"
:symbol :ETH
:symbol-display :ETHro
:decimals 18}
:rinkeby {:name "Rinkeby Ether"
:symbol :ETH
:symbol-display :ETHri
:decimals 18}
:xdai {:name "xDAI"
:symbol :ETH
:symbol-display :xDAI
:symbol-exchange :DAI
:decimals 18}
:bsc {:name "BSC"
:symbol :ETH
:symbol-display :BNB
:decimals 18}
:bsc-testnet {:name "BSC test"
:symbol :ETH
:symbol-display :BNBtest
:decimals 18}}))
(def native-currency-symbols
(set (map #(-> % val :symbol) all-native-currencies)))
(defn native-currency [chain]
(-> (get all-native-currencies chain (default-native-currency))))
(defn native-currency [{:keys [symbol] :as current-network}]
(let [chain (ethereum/network->chain-keyword current-network)]
(get all-native-currencies chain (default-native-currency symbol))))
(defn ethereum? [symbol]
(native-currency-symbols symbol))
@@ -767,6 +774,10 @@
{:address "0xba5BDe662c17e2aDFF1075610382B9B691296350"
:symbol :RARE
:name "SuperRare"
:decimals 18}
{:address "0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72"
:symbol :ENS
:name "Ethereum Name Service"
:decimals 18}])
:testnet
(resolve-icons :testnet
@@ -851,8 +862,8 @@
(defn address->token [all-tokens address]
(get all-tokens (string/lower-case address)))
(defn asset-for [all-tokens chain symbol]
(let [native-coin (native-currency chain)]
(defn asset-for [all-tokens current-network symbol]
(let [native-coin (native-currency current-network)]
(if (or (= (:symbol-display native-coin) symbol)
(= (:symbol native-coin) symbol))
native-coin
+26 -9
View File
@@ -2,6 +2,7 @@
(:require [cljs.spec.alpha :as spec]
[re-frame.core :as re-frame]
[status-im.ens.core :as ens]
[status-im.ethereum.core :as ethereum]
[status-im.ethereum.decode :as decode]
[status-im.ethereum.eip55 :as eip55]
[status-im.ethereum.encode :as encode]
@@ -13,16 +14,31 @@
(def confirmations-count-threshold 12)
(def etherscan-supported? #{:testnet :mainnet :rinkeby})
(def etherscan-supported?
#{(ethereum/chain-keyword->chain-id :mainnet)
(ethereum/chain-keyword->chain-id :testnet)
(ethereum/chain-keyword->chain-id :rinkeby)})
(let [network->subdomain {:testnet "ropsten" :rinkeby "rinkeby"}]
(defn get-transaction-details-url [chain hash]
{:pre [(keyword? chain) (string? hash)]
:post [(or (nil? %) (string? %))]}
(when (etherscan-supported? chain)
(let [network-subdomain (when-let [subdomain (network->subdomain chain)]
(str subdomain "."))]
(str "https://" network-subdomain "etherscan.io/tx/" hash)))))
(def binance-mainnet-chain-id (ethereum/chain-keyword->chain-id :bsc))
(def binance-testnet-chain-id (ethereum/chain-keyword->chain-id :bsc-testnet))
(def network->subdomain {3 "ropsten"
4 "rinkeby"})
(defn get-transaction-details-url [chain-id hash]
{:pre [(number? chain-id) (string? hash)]
:post [(or (nil? %) (string? %))]}
(cond
(etherscan-supported? chain-id)
(let [network-subdomain (when-let [subdomain (network->subdomain chain-id)]
(str subdomain "."))]
(str "https://" network-subdomain "etherscan.io/tx/" hash))
(= chain-id binance-mainnet-chain-id)
(str "https://bscscan.com/tx/" hash)
(= chain-id binance-testnet-chain-id)
(str "https://testnet.bscscan.com/tx/" hash)))
(def default-erc20-token
{:symbol :ERC20
@@ -358,6 +374,7 @@
(tx-fetching-in-progress [address]))))
(fx/defn get-fetched-transfers
{:events [:transaction/get-fetched-transfers]}
[{:keys [db]}]
{:transactions/get-transfers
{:chain-tokens (:wallet/all-tokens db)
+68 -52
View File
@@ -1,64 +1,64 @@
(ns status-im.events
(:require [re-frame.core :as re-frame]
[status-im.chat.models :as chat]
[status-im.i18n.i18n :as i18n]
[status-im.mailserver.core :as mailserver]
[status-im.multiaccounts.core :as multiaccounts]
[status-im.ui.components.react :as react]
[status-im.utils.fx :as fx]
status-im.utils.logging.core
[status-im.wallet.core :as wallet]
[status-im.keycard.core :as keycard]
[status-im.utils.dimensions :as dimensions]
[status-im.multiaccounts.biometric.core :as biometric]
[status-im.constants :as constants]
[status-im.native-module.core :as status]
[status-im.ui.components.permissions :as permissions]
[status-im.utils.utils :as utils]
[status-im.ethereum.json-rpc :as json-rpc]
[status-im.anon-metrics.core :as anon-metrics]
[status-im.utils.universal-links.core :as universal-links]
clojure.set
status-im.currency.core
status-im.navigation
status-im.utils.universal-links.core
status-im.wallet.custom-tokens.core
status-im.waku.core
status-im.wallet.choose-recipient.core
status-im.wallet.accounts.core
status-im.popover.core
status-im.visibility-status-popover.core
status-im.visibility-status-updates.core
status-im.bottom-sheet.core
(:require clojure.set
[re-frame.core :as re-frame]
status-im.add-new.core
status-im.search.core
status-im.http.core
status-im.profile.core
[status-im.anon-metrics.core :as anon-metrics]
[status-im.async-storage.core :as async-storage]
status-im.backup.core
status-im.bootnodes.core
status-im.bottom-sheet.core
status-im.browser.core
status-im.browser.permissions
[status-im.chat.models :as chat]
status-im.chat.models.images
status-im.ui.screens.privacy-and-security-settings.events
status-im.chat.models.input
status-im.chat.models.loading
status-im.chat.models.transport
[status-im.constants :as constants]
status-im.contact.block
status-im.contact.chat
status-im.contact.core
status-im.currency.core
[status-im.ethereum.json-rpc :as json-rpc]
status-im.ethereum.subscriptions
status-im.fleet.core
status-im.http.core
[status-im.i18n.i18n :as i18n]
status-im.init.core
[status-im.keycard.core :as keycard]
status-im.log-level.core
status-im.mailserver.constants
[status-im.mailserver.core :as mailserver]
[status-im.multiaccounts.biometric.core :as biometric]
[status-im.multiaccounts.core :as multiaccounts]
status-im.multiaccounts.login.core
status-im.multiaccounts.logout.core
status-im.multiaccounts.update.core
[status-im.native-module.core :as status]
[status-im.navigation :as navigation]
status-im.notifications-center.core
status-im.pairing.core
status-im.popover.core
status-im.profile.core
status-im.search.core
status-im.signals.core
status-im.stickers.core
status-im.transport.core
status-im.init.core
status-im.log-level.core
status-im.mailserver.constants
status-im.ethereum.subscriptions
status-im.fleet.core
status-im.contact.block
status-im.contact.core
status-im.contact.chat
status-im.chat.models.input
status-im.chat.models.loading
status-im.bootnodes.core
status-im.browser.core
status-im.browser.permissions
status-im.chat.models.transport
status-im.notifications-center.core
[status-im.navigation :as navigation]))
[status-im.ui.components.permissions :as permissions]
[status-im.ui.components.react :as react]
status-im.ui.screens.privacy-and-security-settings.events
[status-im.utils.dimensions :as dimensions]
[status-im.utils.fx :as fx]
status-im.utils.logging.core
[status-im.utils.universal-links.core :as universal-links]
[status-im.utils.utils :as utils]
status-im.visibility-status-popover.core
status-im.visibility-status-updates.core
status-im.waku.core
status-im.wallet.accounts.core
status-im.wallet.choose-recipient.core
[status-im.wallet.core :as wallet]
status-im.wallet.custom-tokens.core))
(re-frame/reg-fx
:dismiss-keyboard
@@ -192,8 +192,24 @@
(fx/defn on-will-focus
{:events [:screens/on-will-focus]
:interceptors [anon-metrics/interceptor]}
[cofx view-id]
[{:keys [db] :as cofx} view-id]
(fx/merge cofx
(cond
(= :chat view-id)
{::async-storage/set! {:chat-id (get-in cofx [:db :current-chat-id])
:key-uid (get-in cofx [:db :multiaccount :key-uid])}
:db (assoc db :screens/was-focused-once? true)}
(= :login view-id)
{}
(not (get db :screens/was-focused-once?))
{:db (assoc db :screens/was-focused-once? true)}
:else
{::async-storage/set! {:chat-id nil
:key-uid nil}
:db (assoc db :screens/was-focused-once? true)})
#(case view-id
:keycard-settings (keycard/settings-screen-did-load %)
:reset-card (keycard/reset-card-screen-did-load %)
+1 -1
View File
@@ -61,7 +61,7 @@
[cofx {:keys [chat-id invitation-admin chat-name]}]
(if (get-in cofx [:db :chats chat-id])
{:dispatch-n [[:accept-all-activity-center-notifications-from-chat chat-id]
[:chat.ui/navigate-to-chat chat-id false]]}
[:chat.ui/navigate-to-chat chat-id]]}
{::json-rpc/call [{:method (json-rpc/call-ext-method "createGroupChatFromInvitation")
:params [chat-name chat-id invitation-admin]
:js-response true
+13 -2
View File
@@ -10,6 +10,7 @@
[status-im.utils.keychain.core :as keychain]
[status-im.utils.types :as types]
[taoensso.timbre :as log]
[status-im.utils.datetime :as utils.datetime]
[status-im.bottom-sheet.core :as bottom-sheet]
[status-im.utils.platform :as platform]
[status-im.popover.core :as popover]))
@@ -416,6 +417,14 @@
;; Get application info
(fx/defn update-pairings
[{:keys [db]} instance-uid pairing]
(let [paired-on (utils.datetime/timestamp)
pairings (-> (get-in db [:keycard :pairings])
(assoc instance-uid {:pairing pairing :paired-on paired-on}))]
{:keycard/persist-pairings pairings
:db (assoc-in db [:keycard :pairings] pairings)}))
(fx/defn get-application-info
{:events [:keycard/get-application-info]}
[{:keys [db]} on-card-read]
@@ -425,9 +434,8 @@
(fx/defn on-get-application-info-success
{:events [:keycard.callback/on-get-application-info-success]}
[{:keys [db] :as cofx} info on-success]
(let [{:keys [pin-retry-counter puk-retry-counter]} info
(let [{:keys [pin-retry-counter puk-retry-counter instance-uid new-pairing]} info
view-id (:view-id db)
{:keys [on-card-read]} (:keycard db)
on-success' (or on-success on-card-read)
enter-step (get-in db [:keycard :pin :enter-step])]
@@ -443,6 +451,8 @@
(assoc-in [:keycard :application-info :applet-installed?] true)
(assoc-in [:keycard :application-info-error] nil))}
(stash-on-card-read)
(when new-pairing
(update-pairings instance-uid new-pairing))
(when (and (zero? pin-retry-counter)
(pos? puk-retry-counter)
(not= enter-step :puk))
@@ -452,6 +462,7 @@
(blocked-keycard-popup cofx)
(when on-success'
(dispatch-event cofx on-success')))))))
(fx/defn on-get-application-info-error
{:events [:keycard.callback/on-get-application-info-error]}
[{:keys [db] :as cofx} error]
+8 -6
View File
@@ -70,7 +70,9 @@
(mnemonic/set-mnemonic))
(when (= flow :recovery)
(onboarding/proceed-with-generating-key)))
(recovery/load-pair-screen cofx))))
(if (get-in db [:keycard :secrets :password])
(onboarding/load-pairing-screen cofx)
(recovery/load-pair-screen cofx)))))
(fx/defn navigate-to-keycard-settings
{:events [:profile.ui/keycard-settings-button-pressed]}
@@ -523,14 +525,14 @@
(fx/merge cofx
{:db (assoc-in db [:keycard :card-state] card-state)}
(set-setup-step card-state)
(common/hide-connection-sheet)
(when paired?
(load-pairing))
(when (and flow
(= card-state :init))
(proceed-setup-with-initialized-card flow instance-uid paired?))
(if (and flow
(= card-state :init))
(proceed-setup-with-initialized-card flow instance-uid paired?)
(common/hide-connection-sheet))
(when (= card-state :pre-init)
(if (= flow :import)
@@ -583,7 +585,7 @@
{:db (-> db
(assoc-in [:keycard :nfc-running?] false)
(assoc-in [:keycard :card-connected?] false))
:keycard/start-nfc nil})
:dispatch-later [{:ms 500 :dispatch [:keycard.ui/start-nfc]}]})
(fx/defn on-register-card-events
{:events [:keycard.callback/on-register-card-events]}
+1
View File
@@ -21,6 +21,7 @@
(assoc-in [:keycard :setup-step] :recovery-phrase)
(assoc-in [:keycard :secrets :mnemonic] mnemonic))}
(common/clear-on-card-connected)
(common/hide-connection-sheet)
(navigation/navigate-replace :keycard-onboarding-recovery-phrase nil))))
(fx/defn load-loading-keys-screen
+8 -6
View File
@@ -232,12 +232,14 @@
[{:keys [db] :as cofx} secrets]
(let [secrets' (js->clj secrets :keywordize-keys true)]
(fx/merge cofx
{:keycard/get-application-info nil
:db (-> db
(assoc-in [:keycard :card-state] :init)
(assoc-in [:keycard :setup-step] :secret-keys)
(update-in [:keycard :secrets] merge secrets'))}
(load-pairing-screen))))
{:db (-> db
(assoc-in [:keycard :card-state] :init)
(assoc-in [:keycard :setup-step] :secret-keys)
(update-in [:keycard :secrets] merge secrets'))}
(common/show-connection-sheet
{:on-card-connected :keycard/get-application-info
:on-card-read :keycard/check-card-state
:handler (common/get-application-info :keycard/check-card-state)}))))
(fx/defn on-install-applet-and-init-card-error
{:events [:keycard.callback/on-install-applet-and-init-card-error
+3 -2
View File
@@ -184,8 +184,9 @@
(fx/defn handle-successful-request
{:events [::request-success]}
[{:keys [db]} response-js]
{:db (dissoc db :mailserver/current-request)})
[{:keys [db] :as cofx} response-js]
{:db (dissoc db :mailserver/current-request)
:dispatch [:sanitize-messages-and-process-response response-js]})
(fx/defn process-next-messages-request
{:events [::request-messages]}
@@ -191,6 +191,7 @@
:latest-derived-path 0
:signing-phrase signing-phrase
:send-push-notifications? true
:backup-enabled? true
:installation-id (random-guid-generator)
;; default mailserver (history node) setting
:use-mailservers? true
+29 -9
View File
@@ -122,8 +122,11 @@
(wallet/get-cached-balances scan-all-tokens?))
(when-not (get db :wallet/new-account)
(wallet/restart-wallet-service nil))
(when-not (utils.mobile-sync/syncing-allowed? cofx)
(when (or (not (utils.mobile-sync/syncing-allowed? cofx))
(ethereum/binance-chain? db))
(transactions/get-fetched-transfers))
(when (ethereum/binance-chain? db)
(wallet/request-current-block-update))
(prices/update-prices)))
(fx/defn login
@@ -300,17 +303,20 @@
(let [{:networks/keys [current-network networks]
:as settings}
(data-store.settings/rpc->settings settings)
multiaccount (dissoc settings :networks/current-network :networks/networks)]
multiaccount (dissoc settings :networks/current-network :networks/networks)
;;for some reason we save default networks in db, in case when we want to modify default-networks for
;; existing accounts we have to merge them again into networks
merged-networks (merge networks config/default-networks-by-id)]
(fx/merge cofx
{:db (-> db
(dissoc :multiaccounts/login)
(assoc :networks/current-network current-network
:networks/networks networks
:networks/networks merged-networks
:multiaccount multiaccount))}
(data-store.chats/fetch-chats-rpc
{:on-success
#(do (re-frame/dispatch [:chats-list/load-success %])
(re-frame/dispatch [::get-chats-callback settings]))})
(re-frame/dispatch [::get-chats-callback]))})
(acquisition/login)
(initialize-appearance)
(initialize-communities-enabled)
@@ -319,11 +325,24 @@
(logging/set-log-level (:log-level multiaccount))
(notifications-center/get-activity-center-notifications-count))))
(re-frame/reg-fx
::open-last-chat
(fn [key-uid]
(async-storage/get-item
:chat-id
(fn [chat-id]
(when chat-id
(async-storage/get-item
:key-uid
(fn [stored-key-uid]
(when (= stored-key-uid key-uid)
(re-frame/dispatch [:chat.ui/navigate-to-chat chat-id])))))))))
(fx/defn get-chats-callback
{:events [::get-chats-callback]}
[{:keys [db] :as cofx} settings]
(let [{:keys [notifications-enabled?]
:networks/keys [current-network networks]} settings
[{:keys [db] :as cofx}]
(let [{:networks/keys [current-network networks]} db
notifications-enabled? (get-in db [:multiaccount :notifications-enabled?])
network-id (str (get-in networks [current-network :config :NetworkId]))]
(fx/merge cofx
(cond-> {::eip1559/check-eip1559-activation
@@ -333,7 +352,8 @@
::initialize-wallet
(fn [accounts custom-tokens favourites]
(re-frame/dispatch [::initialize-wallet
accounts custom-tokens favourites]))}
accounts custom-tokens favourites]))
::open-last-chat (get-in db [:multiaccount :key-uid])}
notifications-enabled?
(assoc ::notifications/enable nil))
(transport/start-messenger)
@@ -375,7 +395,7 @@
config/metrics-enabled?)
(navigation/navigate-to :anon-metrics-opt-in {})
:else (re-frame/dispatch [:init-root :chat-stack]))))
:else (re-frame/dispatch [:init-root :chat-stack]))))
(fx/defn login-only-events
[{:keys [db] :as cofx} key-uid password save-password?]
@@ -89,8 +89,7 @@
:mainnet #{:SNT}
:rinkeby #{:MOKSHA
:KDO}
:xdai #{}
:poa #{}}
:xdai #{}}
:preview-privacy? true
:fleet :eth.prod
:identicon "data:image/png;base64iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAMAAAC7IEhfAAADAFBMVEX////YsYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPGFwxAAABAHRSTlP//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKmfXxgAABnNJREFUeNoBaAaX+QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEAAAAAAQEBAQAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQAAAAABAQEBAAAAAAEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAEBAQEAAAAAAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEAAAAAAQEBAQAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQAAAAABAQEBAAAAAAEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAEBAQEAAAAAAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEAAAAAAQEBAQAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQAAAAABAQEBAAAAAAEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAEBAQEAAAAAAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEAAAAAAQEBAQAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQAAAAABAQEBAAAAAAEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAEBAQEAAAAAAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAAAAAAEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEAAAAAAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQAAAAABAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAAAAAAEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAloYA4a9rBHIAAAAASUVORK5CYII="
@@ -47,6 +47,11 @@
(assoc-in db [:multiaccount setting] setting-value)
(update db :multiaccount dissoc setting))}))
(fx/defn toggle-backup-enabled
{:events [:multiaccounts.ui/switch-backup-enabled]}
[cofx enabled?]
(multiaccount-update cofx :backup-enabled? enabled? {}))
(fx/defn toggle-opensea-nfts-visibility
{:events [::toggle-opensea-nfts-visiblity]}
[cofx visible?]
+2 -2
View File
@@ -1,6 +1,6 @@
(ns status-im.navigation
(:require [status-im.utils.fx :as fx]
[status-im.anon-metrics.core :as anon-metrics]))
(:require [status-im.anon-metrics.core :as anon-metrics]
[status-im.utils.fx :as fx]))
(defn- all-screens-params [db view screen-params]
(cond-> db
+31 -11
View File
@@ -1,17 +1,18 @@
(ns status-im.navigation.core
(:require
[re-frame.core :as re-frame]
[status-im.ui.screens.views :as views]
[status-im.utils.platform :as platform]
[status-im.navigation.roots :as roots]
[status-im.ui.components.react :as react]
[quo.components.text-input :as quo.text-input]
[status-im.ui.components.icons.icons :as icons]
[quo.design-system.colors :as quo.colors]
[status-im.utils.fx :as fx]
["react-native-navigation" :refer (Navigation)]
["react-native" :as rn]
["react-native-gesture-handler" :refer (gestureHandlerRootHOC)]
["react-native" :as rn]))
["react-native-navigation" :refer (Navigation)]
[quo.components.text-input :as quo.text-input]
[quo.design-system.colors :as quo.colors]
[re-frame.core :as re-frame]
[status-im.navigation.roots :as roots]
[status-im.ui.components.icons.icons :as icons]
[status-im.ui.components.react :as react]
[status-im.ui.screens.views :as views]
[status-im.utils.fx :as fx]
[status-im.utils.platform :as platform]
[taoensso.timbre :as log]))
(def debug? ^boolean js/goog.DEBUG)
@@ -26,6 +27,7 @@
;; REGISTER COMPONENT (LAZY)
(defn reg-comp [key]
(log/debug "reg-comp" key)
(if-let [comp (get views/components (keyword key))]
(.registerComponent Navigation key (fn [] (views/component comp)))
(let [screen (views/screen key)]
@@ -35,6 +37,7 @@
(.setLazyComponentRegistrator Navigation reg-comp))
(defn dismiss-all-modals []
(log/debug "dissmiss-all-modals")
(when @curr-modal
(reset! curr-modal false)
(reset! dissmissing true)
@@ -44,6 +47,7 @@
;; PUSH SCREEN
(defn navigate [comp]
(log/debug "NAVIGATE" comp)
(let [{:keys [options]} (get views/screens comp)]
(.push Navigation
(name @root-comp-id)
@@ -57,6 +61,7 @@
;; OPEN MODAL
(defn update-modal-topbar-options [options]
(log/debug "update-modal-topbar-options" options)
(merge options
(roots/merge-top-bar {:elevation 0
:noBorder true
@@ -68,6 +73,7 @@
options)))
(defn open-modal [comp]
(log/debug "open-modal" comp)
(let [{:keys [options]} (get views/screens comp)]
(if @dissmissing
(reset! dissmissing comp)
@@ -88,6 +94,7 @@
;; DISSMISS MODAL
(defn dissmissModal []
(log/debug "dissmissModal")
(reset! dissmissing true)
(.dismissModal Navigation (name (last @modals))))
@@ -105,6 +112,7 @@
(handler)))))))
(defn set-view-id [view-id]
(log/debug "set-view-id" view-id)
(when-let [{:keys [on-focus]} (get views/screens view-id)]
(re-frame/dispatch [:set :view-id view-id])
(re-frame/dispatch [:screens/on-will-focus view-id])
@@ -135,6 +143,7 @@
(.events Navigation)
(fn [^js evn]
(let [view-id (keyword (.-componentName evn))]
(log/debug "screen-appear-reg" view-id)
(when (get views/screens view-id)
(when (and (not= view-id :bottom-sheet)
(not= view-id :popover)
@@ -159,6 +168,7 @@
(re-frame/reg-fx
:init-root-fx
(fn [new-root-id]
(log/debug :init-root-fx new-root-id)
(reset! root-comp-id new-root-id)
(reset! root-id @root-comp-id)
(.setRoot Navigation (clj->js (get (roots/roots) new-root-id)))))
@@ -166,6 +176,7 @@
(re-frame/reg-fx
:init-root-with-component-fx
(fn [[new-root-id new-root-comp-id]]
(log/debug :init-root-with-component-fx new-root-id new-root-comp-id)
(reset! root-comp-id new-root-comp-id)
(reset! root-id @root-comp-id)
(.setRoot Navigation (clj->js (get (roots/roots) new-root-id)))))
@@ -173,6 +184,7 @@
(fx/defn set-multiaccount-root
{:events [::set-multiaccount-root]}
[{:keys [db]}]
(log/debug :set-multiaccounts-root)
(let [key-uid (get-in db [:multiaccounts/login :key-uid])
keycard-account? (boolean (get-in db [:multiaccounts/multiaccounts
key-uid
@@ -192,6 +204,7 @@
(.hide ^js splash-screen))))
(defn get-screen-component [comp]
(log/debug :get-screen-component comp)
(let [{:keys [options]} (get views/screens comp)]
{:component {:id comp
:name comp
@@ -203,6 +216,7 @@
(re-frame/reg-fx
:set-stack-root-fx
(fn [[stack comp]]
(log/debug :set-stack-root-fx stack comp)
(.setStackRoot Navigation
(name stack)
(clj->js (if (vector? comp)
@@ -225,6 +239,7 @@
(re-frame/reg-fx
:change-tab-fx
(fn [tab]
(log/debug :change-tab-fx)
(reset! root-comp-id (get tab-root-ids (get tab-key-idx tab)))
(.mergeOptions Navigation "tabs-stack" (clj->js {:bottomTabs {:currentTabIndex (get tab-key-idx tab)}}))
;;when we change tab we want to dismiss all modals
@@ -234,6 +249,7 @@
(re-frame/reg-fx
:change-tab-count-fx
(fn [[tab cnt]]
(log/debug :change-tab-count-fx tab cnt)
(.mergeOptions Navigation
(name (get tab-root-ids (get tab-key-idx tab)))
(clj->js {:bottomTab (cond
@@ -253,6 +269,7 @@
(re-frame/reg-fx
:pop-to-root-tab-fx
(fn [comp]
(log/debug :pop-to-root-tab-fx comp)
(dismiss-all-modals)
(.popToRoot Navigation (name comp))))
@@ -343,11 +360,13 @@
(re-frame/reg-fx
:navigate-to-fx
(fn [key]
(log/debug :navigate-to-fx key)
(navigate key)))
(re-frame/reg-fx
:navigate-back-fx
(fn []
(log/debug :navigate-back-fx)
(if @curr-modal
(dissmissModal)
(.pop Navigation (name @root-comp-id)))))
@@ -355,5 +374,6 @@
(re-frame/reg-fx
:navigate-replace-fx
(fn [view-id]
(log/debug :navigate-replace-fx view-id)
(.pop Navigation (name @root-comp-id))
(navigate view-id)))
+1
View File
@@ -35,6 +35,7 @@
(defn default-root []
{:layout {:componentBackgroundColor colors/white
:orientation "portrait"
:backgroundColor colors/white}})
(defn merge-top-bar [root-options options]
+6 -2
View File
@@ -19,6 +19,7 @@
(def default-manage
{:name {:value ""}
:url {:value ""}
:symbol {:value ""}
:chain {:value :mainnet}})
(defn validate-string [{:keys [value]}]
@@ -38,6 +39,7 @@
(-> manage
(update :url validate-url)
(update :name validate-string)
(update :symbol validate-string)
(update :chain validate-string)
(update :network-id validate-network-id)))
@@ -151,7 +153,7 @@
:on-success #(re-frame/dispatch [:navigate-back])}]}))
(defn new-network
[random-id network-name upstream-url chain-type chain-id]
[random-id network-name symbol upstream-url chain-type chain-id]
(let [data-dir (str "/ethereum/" (name chain-type) "_rpc")
config {:NetworkId (or (when chain-id (int chain-id))
(ethereum/chain-keyword->chain-id chain-type))
@@ -160,6 +162,7 @@
:URL upstream-url}}]
{:id random-id
:name network-name
:symbol symbol
:config config}))
(fx/defn save
@@ -169,10 +172,11 @@
random-id-generator :random-id-generator :as cofx}]
(if (valid-manage? manage)
;; rename network-id from UI to chain-id
(let [{:keys [name url chain network-id]} manage
(let [{:keys [name url chain network-id symbol]} manage
random-id (string/replace (random-id-generator) "-" "")
network (new-network random-id
(:value name)
(:value symbol)
(:value url)
(:value chain)
(:value network-id))
+23 -1
View File
@@ -34,11 +34,13 @@
(deftest new-network-test
(let [actual (network.core/new-network "randomid"
"network-name"
"network-symbol"
"upstream-url"
:mainnet
nil)]
(is (= {:id "randomid"
:name "network-name"
:symbol "network-symbol"
:config {:NetworkId 1
:DataDir "/ethereum/mainnet_rpc"
:UpstreamConfig {:Enabled true
@@ -48,11 +50,13 @@
(deftest new-network-id-test
(let [actual (network.core/new-network "randomid"
"network-name"
"network-symbol"
"upstream-url"
:mainnet
"5777")]
(is (= {:id "randomid"
:name "network-name"
:symbol "network-symbol"
:config {:NetworkId 5777
:DataDir "/ethereum/mainnet_rpc"
:UpstreamConfig {:Enabled true
@@ -63,21 +67,31 @@
(testing "a valid manage"
(is (network.core/valid-manage? {:url {:value "http://valid.com"}
:name {:value "valid"}
:symbol {:value "valid"}
:chain {:value "valid"}})))
(testing "invalid url"
(is (not (network.core/valid-manage? {:url {:value "invalid"}
:name {:value "valid"}
:symbol {:value "valid"}
:chain {:value "valid"}}))))
(testing "invalid name"
(is (not (network.core/valid-manage? {:url {:value "http://valid.com"}
:name {:value ""}
:symbol {:value "valid"}
:chain {:value "valid"}}))))
(testing "invalid chain"
(is (not (network.core/valid-manage? {:url {:value "http://valid.com"}
:name {:value "valid"}
:chain {:value ""}})))))
:symbol {:value "valid"}
:chain {:value ""}}))))
(testing "invalid symbol"
(is (not (network.core/valid-manage? {:url {:value "http://valid.com"}
:name {:value "valid"}
:symbol {:value ""}
:chain {:value "valid"}})))))
(deftest set-input-test
(testing "it updates and validate a field"
@@ -85,6 +99,8 @@
:error false}
:name {:value ""
:error true}
:symbol {:value "symbol"
:error false}
:chain {:value "mainnet"
:error false}
:network-id {:value nil
@@ -93,6 +109,8 @@
:error true}
:name {:value ""
:error false}
:symbol {:value "symbol"
:error false}
:chain {:value "mainnet"
:error false}}}}
:url "http://valid.com")))))
@@ -110,11 +128,13 @@
(let [fx (network.core/save {:random-id-generator (constantly "random-id")
:db {:networks/manage {:url {:value "http://valid.com"}
:chain {:value :mainnet}
:symbol {:value "symbol"}
:name {:value "valid"}}
:multiaccount {}
:networks/networks {"random2"
{:id "random2"
:name "network-name"
:symbol "symbol"
:config {:NetworkId 1
:DataDir "/ethereum/mainnet_rpc"
:UpstreamConfig {:Enabled true
@@ -147,11 +167,13 @@
:db {:networks/manage {:url {:value "http://valid.com"}
:chain {:value :mainnet}
:name {:value "valid"}
:symbol {:value "symbol"}
:network-id {:value 5}}
:multiaccount {}
:networks/networks {"randomid"
{:id "randomid"
:name "network-name"
:symbol "symbol"
:config {:NetworkId 3
:DataDir "/ethereum/mainnet_rpc"
:UpstreamConfig {:Enabled true
+7
View File
@@ -92,6 +92,13 @@
(when platform/android?
(pn-android/clear-message-notifications chat-id))))
(re-frame/reg-fx
:clear-multiple-message-notifications
(fn [chat-ids]
(when platform/android?
(doseq [chat-id chat-ids]
(pn-android/clear-message-notifications chat-id)))))
(fx/defn handle-enable-notifications-event
{:events [::registered-for-push-notifications]}
[cofx token]
+4 -2
View File
@@ -1,5 +1,6 @@
(ns status-im.notifications.local
(:require [status-im.utils.fx :as fx]
(:require [status-im.async-storage.core :as async-storage]
[status-im.utils.fx :as fx]
[status-im.ethereum.decode :as decode]
["@react-native-community/push-notification-ios" :default pn-ios]
[status-im.notifications.android :as pn-android]
@@ -40,6 +41,7 @@
(defn handle-notification-press [{{deep-link :deepLink} :userInfo
interaction :userInteraction}]
(async-storage/set-item! (str :chat-id) nil)
(when (and deep-link
(or platform/ios?
(and platform/android? interaction)))
@@ -66,7 +68,7 @@
(get-in tokens/all-tokens-normalized
[(keyword chain) (clojure.string/lower-case contract)]
default-erc20-token)
(tokens/native-currency (keyword chain)))
(tokens/native-currency network))
amount (money/wei->ether (decode/uint value))
to (or (:name toAccount) (utils/get-shortened-address to))
from (or (:name fromAccount) (utils/get-shortened-address from))
+21 -8
View File
@@ -6,15 +6,28 @@
[status-im.data-store.activities :as data-store.activities]))
(fx/defn handle-activities [{:keys [db]} activities]
{:db (-> db
(update-in [:activity.center/notifications :notifications] #(concat activities %))
(update :activity.center/notifications-count + (count activities)))
:dispatch (cond
(= (:view-id db) :notifications-center)
[:mark-all-activity-center-notifications-as-read]
(let [{:keys [unread-count notifications]}
(reduce (fn [acc {:keys [read dismissed accepted] :as notification}]
(as-> acc a
(if read
(update a :unread-count dec)
(update a :unread-count inc))
(= (:view-id db) :chat)
[:accept-all-activity-center-notifications-from-chat (:current-chat-id db)])})
(if (or dismissed accepted)
(update a :notifications (fn [items] (remove #(= (:id notification) (:id %)) items)))
(update a :notifications conj notification))))
{:unread-count (get db :activity.center/notifications-count 0)
:notifications (get-in db [:activity.center/notifications :notifications])}
activities)]
{:db (-> db
(assoc-in [:activity.center/notifications :notifications] notifications)
(assoc :activity.center/notifications-count (max 0 unread-count)))
:dispatch (cond
(= (:view-id db) :notifications-center)
[:mark-all-activity-center-notifications-as-read]
(= (:view-id db) :chat)
[:accept-all-activity-center-notifications-from-chat (:current-chat-id db)])}))
(fx/defn get-activity-center-notifications-count
{:events [:get-activity-center-notifications-count]}
+1 -1
View File
@@ -43,7 +43,7 @@
(fx/defn handle-private-chat [{:keys [db] :as cofx} {:keys [chat-id]}]
(if-not (new-chat.db/own-public-key? db chat-id)
(chat/start-chat cofx chat-id)
(chat/start-chat cofx chat-id nil)
{:utils/show-popup {:title (i18n/label :t/unable-to-read-this-code)
:content (i18n/label :t/can-not-add-yourself)}}))
+2 -1
View File
@@ -53,7 +53,7 @@
(fx/defn process
{:events [:signals/signal-received]}
[cofx event-str]
[{:keys [db] :as cofx} event-str]
;; We only convert to clojure when strictly necessary or we know it
;; won't impact performance, as it is a fairly costly operation on large-ish
;; data structures
@@ -62,6 +62,7 @@
type (.-type data)]
(case type
"node.login" (status-node-started cofx (js->clj event-js :keywordize-keys true))
"backup.performed" {:db (assoc-in db [:multiaccount :last-backup] (.-lastBackup event-js))}
"envelope.sent" (transport.message/update-envelopes-status cofx (:ids (js->clj event-js :keywordize-keys true)) :sent)
"envelope.expired" (transport.message/update-envelopes-status cofx (:ids (js->clj event-js :keywordize-keys true)) :not-sent)
"message.delivered" (let [{:keys [chatID messageID]} (js->clj event-js :keywordize-keys true)]
+6 -6
View File
@@ -197,7 +197,7 @@
:symbol :ETH
:value value
:amount (str eth-amount)
:token (tokens/asset-for (:wallet/all-tokens db) (ethereum/chain-keyword db) :ETH)}
:token (tokens/asset-for (:wallet/all-tokens db) (ethereum/get-current-network db) :ETH)}
(not (nil? token))
token
:else
@@ -234,7 +234,7 @@
:keycard-step (when pinless? :connect)})
:show-signing-sheet nil}
#(when-not wallet-set-up-passed?
{:dispatch-n [[:show-popover {:view :signing-phrase}]]})
{:dispatch-later [{:dispatch [:show-popover {:view :signing-phrase}] :ms 200}]})
(when pinless?
(keycard.card/start-nfc {:on-success #(re-frame/dispatch [:keycard.callback/start-nfc-success])
:on-failure #(re-frame/dispatch [:keycard.callback/start-nfc-failure])})
@@ -249,7 +249,7 @@
:show-signing-sheet nil
:dismiss-keyboard nil}
#(when-not wallet-set-up-passed?
{:dispatch-n [[:show-popover {:view :signing-phrase}]]})
{:dispatch-later [{:dispatch [:show-popover {:view :signing-phrase}] :ms 200}]})
(prices/update-prices)
#(when-not gas
{:db (assoc-in (:db %) [:signing/edit-fee :gas-loading?] true)
@@ -304,13 +304,13 @@
(fx/defn transaction-result
[{:keys [db] :as cofx} result tx-obj]
(let [{:keys [on-result symbol amount]} (get db :signing/tx)]
(let [{:keys [on-result symbol amount from]} (get db :signing/tx)]
(fx/merge cofx
{:db (dissoc db :signing/tx :signing/sign)
:signing/show-transaction-result nil}
(prepare-unconfirmed-transaction result tx-obj symbol amount)
(check-queue)
(wallet/watch-tx result)
(wallet/watch-tx (get from :address) result)
#(when on-result
{:dispatch (conj on-result result)}))))
@@ -323,7 +323,7 @@
(fx/merge
cofx
{:db (dissoc db :signing/tx :signing/sign)}
(wallet/watch-tx transaction-hash)
(wallet/watch-tx (get from :address) transaction-hash)
(if (keycard.common/keycard-multiaccount? db)
(signing.keycard/hash-message
{:data data
+27 -13
View File
@@ -7,7 +7,8 @@
[status-im.utils.money :as money]
[status-im.signing.eip1559 :as eip1559]
[taoensso.timbre :as log]
[status-im.popover.core :as popover]))
[status-im.popover.core :as popover]
[clojure.string :as string]))
(def min-gas-price-wei ^js (money/bignumber 1))
@@ -211,9 +212,7 @@
[{db :db} price]
(if (eip1559/sync-enabled?)
(let [{:keys [normal-base-fee max-priority-fee]} price
max-priority-fee-bn (money/with-precision
(get-suggested-tip max-priority-fee)
0)]
max-priority-fee-bn (money/with-precision (get-suggested-tip max-priority-fee) 0)]
{:db (-> db
(assoc-in [:signing/tx :maxFeePerGas]
(money/to-hex (money/add max-priority-fee-bn
@@ -279,7 +278,7 @@
{:events [:signing.nonce/submit]}
[{db :db :as cofx} nonce]
(fx/merge cofx
{:db (assoc-in db [:signing/tx :nonce] nonce)}
{:db (assoc-in db [:signing/tx :nonce] (if (string/blank? nonce) nil nonce))}
(bottom-sheet/hide-bottom-sheet)))
(re-frame/reg-fx
@@ -290,7 +289,9 @@
(fn []
(json-rpc/call
{:method "eth_feeHistory"
:params [101 "latest" nil]
;; NOTE(rasom): We don't need `reward` atm but if the last parameter is
;; `nil` request fails on some chains (particularly on xDai).
:params [101 "latest" [100]]
:on-success #(re-frame/dispatch [::header-fetched
(assoc params :fee-history %)])}))
(fn []
@@ -342,31 +343,44 @@
(defn check-base-fee [{:keys [baseFeePerGas]}]
(let [all-base-fees (mapv money/bignumber baseFeePerGas)
current-base-fee (last all-base-fees)
next-base-fee (peek all-base-fees)
previous-fees (subvec all-base-fees 0 101)
current-base-fee (peek previous-fees)
percentiles (calc-percentiles previous-fees [10 20 80])]
{:normal-base-fee (money/to-hex
(recommended-base-fee
current-base-fee
next-base-fee
(get percentiles 20)
(get percentiles 80)))
:slow-base-fee (money/to-hex
(slow-base-fee
current-base-fee
next-base-fee
(get percentiles 10)))
:fast-base-fee (money/to-hex
(fast-base-fee
current-base-fee
next-base-fee
(get percentiles 80)))
:current-base-fee (money/to-hex current-base-fee)}))
(defn max-priority-fee-hex [gas-price base-fee]
(money/to-hex
(money/sub (money/bignumber gas-price)
(money/bignumber base-fee))))
(fx/defn header-fetched
{:events [::header-fetched]}
[_ {:keys [error-callback success-callback fee-history] :as params}]
{::json-rpc/call
[{:method "eth_maxPriorityFeePerGas"
:on-success #(success-callback (merge {:max-priority-fee %}
(check-base-fee fee-history)))
[;; NOTE(rasom): eth_maxPriorityFeePerGas is not supported by some networks
;; so it is more reliable to calculate maxPriorityFeePerGas using the value
;; returned by eth_gasPrice and current base fee.
{:method "eth_gasPrice"
:on-success #(success-callback
(let [{:keys [current-base-fee] :as base-fees}
(check-base-fee fee-history)]
(merge {:max-priority-fee
(max-priority-fee-hex % current-base-fee)}
base-fees)))
:on-error (if error-callback
#(error-callback %)
#(log/error "Can't fetch header" %))}]})
+57 -41
View File
@@ -257,6 +257,11 @@
(reg-root-key-sub :anon-metrics/data-visible? :anon-metrics/data-visible?)
(reg-root-key-sub :anon-metrics/learn-more-visible? :anon-metrics/learn-more-visible?)
(reg-root-key-sub :bug-report/description-error :bug-report/description-error)
(reg-root-key-sub :bug-report/details :bug-report/details)
(reg-root-key-sub :backup/performing-backup :backup/performing-backup)
(re-frame/reg-sub
:communities
:<- [:raw-communities]
@@ -504,6 +509,12 @@
(fn [chain-id]
(= 1 chain-id)))
(re-frame/reg-sub
:ethereum-network?
:<- [:chain-id]
(fn [chain-id]
(< chain-id 6)))
(re-frame/reg-sub
:network-name
:<- [:current-network]
@@ -649,9 +660,9 @@
(re-frame/reg-sub
:ethereum/native-currency
:<- [:ethereum/chain-keyword]
(fn [chain-keyword]
(tokens/native-currency chain-keyword)))
:<- [:current-network]
(fn [network]
(tokens/native-currency network)))
;;MULTIACCOUNT ==============================================================================================================
@@ -887,6 +898,13 @@
(fn [[{:keys [categories]}] _]
categories))
(re-frame/reg-sub
:communities/sorted-categories
:<- [:communities]
(fn [communities [_ id]]
(->> (get-in communities [id :categories])
(sort-by #(:position (get % 1))))))
(re-frame/reg-sub
:chats/current-chat-ui-props
:<- [::chat-ui-props]
@@ -1179,19 +1197,6 @@
(hydrate-messages messages))))))
;;we want to keep data unchanged so react doesn't change component when we leave screen
(def memo-chat-messages-stream (atom nil))
(re-frame/reg-sub
:chats/chat-messages-stream
(fn [[_ chat-id] _]
[(re-frame/subscribe [:chats/raw-chat-messages-stream chat-id])
(re-frame/subscribe [:chats/chat-no-messages? chat-id])
(re-frame/subscribe [:view-id])])
(fn [[messages empty view-id]]
(when (or (= view-id :chat) empty)
(reset! memo-chat-messages-stream messages))
@memo-chat-messages-stream))
(def memo-profile-messages-stream (atom nil))
(re-frame/reg-sub
@@ -1287,7 +1292,6 @@
(re-frame/reg-sub
:chats/chat-toolbar
:<- [:disconnected?]
:<- [:multiaccounts/login]
:<- [:chats/sending-image]
:<- [:mainnet?]
@@ -1295,9 +1299,9 @@
:<- [:current-chat/metadata]
:<- [:chats/reply-message]
:<- [:chats/edit-message]
(fn [[disconnected? {:keys [processing]} sending-image mainnet? one-to-one-chat? {:keys [public?]} reply edit]]
(fn [[{:keys [processing]} sending-image mainnet? one-to-one-chat? {:keys [public?]} reply edit]]
(let [sending-image (seq sending-image)]
{:send (not (or processing disconnected?))
{:send (not processing)
:stickers (and mainnet?
(not sending-image)
(not reply))
@@ -1421,20 +1425,26 @@
:<- [:chats/mentionable-contacts]
:<- [:contacts/blocked-set]
:<- [:multiaccount]
(fn [[{:keys [chat-id users chat-type]} contacts blocked {:keys [name preferred-name public-key]}]]
(let [contacts-with-one-to-one (if (= chat-type constants/one-to-one-chat-type)
(assoc contacts chat-id (get contacts chat-id (-> chat-id
contact.db/public-key->new-contact
contact.db/enrich-contact)))
contacts)]
(fn [[{:keys [chat-id users contacts community-id chat-type] :as chat} mentionable-contacts blocked {:keys [name preferred-name public-key]}]]
(let [community-members @(re-frame/subscribe [:communities/community-members
community-id])
contacts-with-one-to-one (if (= chat-type constants/one-to-one-chat-type)
(assoc mentionable-contacts chat-id (get mentionable-contacts chat-id (-> chat-id
contact.db/public-key->new-contact
contact.db/enrich-contact)))
mentionable-contacts)
members-left (into #{} (filter #(group-chat/member-removed? chat %) (keys users)))
filtered-contacts (select-keys contacts-with-one-to-one (if (nil? community-id)
(distinct (concat (seq contacts) (keys users) [chat-id]))
(keys community-members)))]
(apply dissoc
(-> users
(merge contacts-with-one-to-one)
(merge filtered-contacts)
(assoc public-key (mentions/add-searchable-phrases
{:alias name
:name (or preferred-name name)
:public-key public-key})))
(conj blocked public-key)))))
(conj (concat blocked members-left) public-key)))))
(re-frame/reg-sub
:chat/mention-suggestions
@@ -1759,11 +1769,11 @@
(get-in wallet [:fetching address :all-fetched?])))
(re-frame/reg-sub
:wallet/etherscan-link
:wallet/chain-explorer-link
(fn [db [_ address]]
(let [network (:networks/current-network db)
link (get-in config/default-networks-by-id
[network :etherscan-link])]
[network :chain-explorer-link])]
(when link
(str link address)))))
@@ -1783,12 +1793,12 @@
(re-frame/reg-sub
:wallet/visible-assets
:<- [:ethereum/chain-keyword]
:<- [:current-network]
:<- [:wallet/visible-tokens-symbols]
:<- [:wallet/sorted-tokens]
(fn [[chain visible-tokens-symbols all-tokens-sorted]]
(fn [[network visible-tokens-symbols all-tokens-sorted]]
(conj (filter #(contains? visible-tokens-symbols (:symbol %)) all-tokens-sorted)
(tokens/native-currency chain))))
(tokens/native-currency network))))
(re-frame/reg-sub
:wallet/visible-assets-with-amount
@@ -2091,8 +2101,8 @@
(fn [[_ _ address] _]
[(re-frame/subscribe [:wallet.transactions/transactions address])
(re-frame/subscribe [:ethereum/native-currency])
(re-frame/subscribe [:ethereum/chain-keyword])])
(fn [[transactions native-currency chain-keyword] [_ hash _]]
(re-frame/subscribe [:chain-id])])
(fn [[transactions native-currency chain-id] [_ hash _]]
(let [{:keys [gas-used gas-price fee-cap tip-cap hash timestamp type]
:as transaction}
(get transactions hash)
@@ -2130,7 +2140,7 @@
(money/fee-value gas-used gas-price)
native-currency-text))
:url (transactions/get-transaction-details-url
chain-keyword
chain-id
hash)}))))))
(re-frame/reg-sub
@@ -2179,6 +2189,12 @@
:<- [:wallet]
:request-transaction)
(re-frame/reg-sub
:wallet/binance-chain?
:<- [:current-network]
(fn [network]
(ethereum/binance-chain-id? (get-in network [:config :NetworkId]))))
;;UI ==============================================================================================================
(re-frame/reg-sub
@@ -2785,11 +2801,11 @@
:<- [:wallet]
:<- [:offline?]
:<- [:wallet/all-tokens]
:<- [:ethereum/chain-keyword]
:<- [:current-network]
(fn [[{:keys [symbol from to amount-text] :as transaction}
wallet offline? all-tokens chain]]
wallet offline? all-tokens current-network]]
(let [balance (get-in wallet [:accounts (:address from) :balance])
{:keys [decimals] :as token} (tokens/asset-for all-tokens chain symbol)
{:keys [decimals] :as token} (tokens/asset-for all-tokens current-network symbol)
{:keys [value error]} (wallet.db/parse-amount amount-text decimals)
amount (money/formatted->internal value symbol decimals)
{:keys [amount-error] :as transaction-new}
@@ -2812,11 +2828,11 @@
:<- [:wallet]
:<- [:offline?]
:<- [:wallet/all-tokens]
:<- [:ethereum/chain-keyword]
:<- [:current-network]
(fn [[{:keys [symbol from to amount-text] :as transaction}
wallet offline? all-tokens chain]]
wallet offline? all-tokens current-network]]
(let [balance (get-in wallet [:accounts (:address from) :balance])
{:keys [decimals] :as token} (tokens/asset-for all-tokens chain symbol)
{:keys [decimals] :as token} (tokens/asset-for all-tokens current-network symbol)
{:keys [value error]} (wallet.db/parse-amount amount-text decimals)
amount (money/formatted->internal value symbol decimals)
{:keys [amount-error] :as transaction-new}
+5 -5
View File
@@ -81,9 +81,7 @@
(fx/merge cofx
(process-next response-js sync-handler)
(models.contact/ensure-contacts
(map data-store.contacts/<-rpc contacts-clj)
(when chats
(map data-store.chats/<-rpc (types/js->clj chats))))))
(map data-store.contacts/<-rpc contacts-clj) chats)))
(seq communities)
(let [communities-clj (types/js->clj communities)]
@@ -216,7 +214,7 @@
[{:ms 100 :dispatch [:process-statuses statuses]}])
(when (seq transactions)
(for [transaction-hash transactions]
{:ms 100 :dispatch [:watch-tx transaction-hash]})))}
{:ms 100 :dispatch [:watch-tx nil transaction-hash]})))}
(process-response response-js process-async)))))
(fx/defn remove-hash
@@ -257,7 +255,9 @@
(fx/defn update-envelopes-status
[{:keys [db] :as cofx} message-id status]
(apply fx/merge cofx (map #(update-envelope-status % status) message-id)))
(when (or (not= status :not-sent)
(= :online (:network db)))
(apply fx/merge cofx (map #(update-envelope-status % status) message-id))))
(fx/defn set-message-envelope-hash
"message-type is used for tracking"
+1 -1
View File
@@ -17,7 +17,7 @@
(defn section
"Render collapsible section"
[_props]
(let [opened? (reagent/atom false)]
(let [opened? (reagent/atom (get _props :default))]
(fn [{:keys [title content icon opened disabled
padding-vertical dropdown-margin-left
open-container-style
@@ -46,21 +46,22 @@
(defn profile-photo-plus-dot-view
[{:keys [public-key photo-container photo-path community?]}]
(let [photo-path (if (nil? photo-path)
@(re-frame.core/subscribe [:chats/photo-path public-key])
photo-path)
photo-container (if (nil? photo-container)
styles/container-chat-list photo-container)
size (:width photo-container)
identicon? (when photo-path (profile.db/base64-png? photo-path))
dot-styles (visibility-status-utils/icon-visibility-status-dot
public-key size identicon?)]
(let [photo-path (if (nil? photo-path)
@(re-frame.core/subscribe [:chats/photo-path public-key])
photo-path)
photo-container (if (nil? photo-container)
styles/container-chat-list photo-container)
size (:width photo-container)
identicon? (when photo-path (profile.db/base64-png? photo-path))
dot-styles (visibility-status-utils/icon-visibility-status-dot
public-key size identicon?)
dot-accessibility-label (:accessibility-label dot-styles)]
[react/view {:style photo-container
:accessibility-label :profile-photo}
[photos/photo photo-path {:size size}]
(when-not community?
[react/view {:style dot-styles
:accessibility-label :profile-photo-dot}])]))
:accessibility-label dot-accessibility-label}])]))
(defn emoji-chat-icon-view
[chat-id group-chat name emoji styles]
@@ -13,7 +13,9 @@
(merge {:style (merge
styles/wrapper
style)
:accessibility-label accessibility-label}
:accessibility-label (str accessibility-label
"-"
(if checked? "on" "off"))}
(when on-value-change
{:on-press #(on-value-change (not checked?))}))
(if checked?
+4 -1
View File
@@ -12,7 +12,8 @@
:refer (SafeAreaProvider SafeAreaInsetsContext)]
["@react-native-community/clipboard" :default Clipboard]
["react-native-linear-gradient" :default LinearGradient]
["react-native-navigation" :refer (Navigation)])
["react-native-navigation" :refer (Navigation)]
["react-native-fast-image" :as FastImage])
(:require-macros [status-im.utils.views :as views]))
(def native-modules (.-NativeModules react-native))
@@ -31,6 +32,8 @@
(def image-class (reagent/adapt-react-class (reactjs/memo (.-Image react-native))))
(def fast-image (reagent/adapt-react-class FastImage))
(defn image-get-size [uri callback] (.getSize (.-Image react-native) uri callback))
(defn resolve-asset-source [uri] (js->clj (.resolveAssetSource (.-Image react-native) uri) :keywordize-keys true))
@@ -103,4 +103,5 @@
(conj chats lang-topic)
chats)]
(for [chat chats]
(render-topic chat)))]])]]))
^{:key chat}
[render-topic chat]))]])]]))
@@ -0,0 +1,52 @@
(ns status-im.ui.screens.backup-settings.view
(:require-macros [status-im.utils.views :as views])
(:require [status-im.ui.components.react :as react]
[quo.design-system.colors :as colors]
[status-im.utils.datetime :as datetime]
[status-im.i18n.i18n :as i18n]
[quo.core :as quo]
[re-frame.core :as re-frame]))
(defn perform-backup! []
(re-frame/dispatch [:multiaccounts.ui/perform-backup-pressed]))
(defn footer [performing-backup?]
[react/touchable-highlight {:on-press (when-not performing-backup?
perform-backup!)
:style {:height 52}}
[react/view
{:style {:justify-content :center
:flex 1
:align-items :center}}
[react/text
{:color colors/blue
:text-align :center}
(if performing-backup?
(i18n/label :t/backing-up)
(i18n/label :t/perform-backup))]]])
(views/defview backup-settings []
(views/letsubs
[{:keys [last-backup backup-enabled?]}
[:multiaccount]
performing-backup? [:backup/performing-backup]]
[:<>
[react/scroll-view
[quo/list-item
{:size :small
:title (i18n/label :t/backup-through-waku)
:accessibility-label :backup-enabled
:container-margin-bottom 8
:on-press
#(re-frame/dispatch
[:multiaccounts.ui/switch-backup-enabled (not backup-enabled?)])
:accessory :switch
:active backup-enabled?}]
[quo/list-item
{:size :small
:title (i18n/label :t/last-backup-performed)
:accessory :text
:subtitle (if (pos? last-backup)
(datetime/time-ago-long (datetime/to-date last-backup))
(i18n/label :t/never))}]]
[footer performing-backup?]]))
+49
View File
@@ -0,0 +1,49 @@
(ns status-im.ui.screens.bug-report
(:require [quo.core :as quo]
[quo.react-native :as react-native]
[re-frame.core :as re-frame]
[status-im.i18n.i18n :as i18n]
[status-im.ui.components.topbar :as topbar]))
(defn bug-report []
(let [{:keys [description steps]} @(re-frame/subscribe [:bug-report/details])]
[react-native/view {:style {:flex 1}}
[topbar/topbar
{:title (i18n/label :t/bug-report)
:modal? true}]
[react-native/view {:style {:flex 1
:padding-top 8
:padding-horizontal 16}}
[quo/text-input
{:label (i18n/label :t/bug-report-description)
:default-value description
:placeholder (i18n/label :t/bug-report-description-placeholder)
:style {:margin-bottom 8}
:multiline true
:error @(re-frame/subscribe [:bug-report/description-error])
:accessibility-label :bug-report-description
:on-change-text #(re-frame/dispatch [:logging/report-details :description %])}]
[quo/text-input
{:label (i18n/label :t/bug-report-steps)
:default-value steps
:placeholder (i18n/label :t/bug-report-steps-placeholder)
:style {:margin-bottom 16}
:multiline true
:accessibility-label :bug-report-steps
:on-change-text #(re-frame/dispatch [:logging/report-details :steps %])}]
[quo/button
{:type :primary
:accessibility-label :bug-report-submit
:theme :accent
:on-press #(re-frame/dispatch [:logging/submit-report])}
(i18n/label :t/bug-report-submit-email)]
[react-native/view
{:style {:margin-vertical 16
:align-items :center}}
[quo/text (i18n/label :t/or)]]
[quo/button
{:type :primary
:accessibility-label :bug-report-submit-gh-issue
:theme :accent
:on-press #(re-frame/dispatch [:logging/submit-gh-issue])}
(i18n/label :t/bug-report-submit-gh-issue)]]]))
@@ -181,7 +181,7 @@
:message-id @current-player-message-id}))
nil)
(defview message-content [{:keys [audio audio-duration-ms message-id outgoing]} timestamp-view]
(defview message-content [{:keys [audio audio-duration-ms message-id outgoing]}]
(letsubs [state (reagent/atom nil)
progress (reagent/atom 0)
progress-anim (anim/create-value 0)
@@ -223,5 +223,4 @@
(#{:playing :paused :seeking} (:general @state)) @progress
:else (:duration @state))
s (quot time 1000)]
(gstring/format "%02d:%02d" (quot s 60) (mod s 60)))]
timestamp-view]]))))
(gstring/format "%02d:%02d" (quot s 60) (mod s 60)))]]]))))
@@ -149,12 +149,13 @@
(defn- command-transaction-info
[contract value]
(let [{:keys [symbol icon decimals color] :as token}
(let [{:keys [symbol symbol-display icon decimals color] :as token}
(if (seq contract)
(get @(re-frame/subscribe [:wallet/all-tokens])
contract
transactions/default-erc20-token)
@(re-frame/subscribe [:ethereum/native-currency]))
symbol (or symbol-display symbol)
amount (money/internal->formatted value symbol decimals)
{:keys [code]}
@(re-frame/subscribe [:wallet/currency])
+141 -107
View File
@@ -24,42 +24,64 @@
[status-im.ui.screens.chat.components.reply :as components.reply]
[status-im.ui.screens.chat.message.link-preview :as link-preview]
[status-im.ui.screens.communities.icon :as communities.icon]
[status-im.ui.components.animation :as animation]
[status-im.chat.models.pin-message :as models.pin-message])
(:require-macros [status-im.utils.views :refer [defview letsubs]]))
(defn message-timestamp-anim
[anim-opacity show-timestamp?]
(animation/start
(animation/anim-sequence
[(animation/timing
anim-opacity
{:toValue 1
:duration 100
:easing (.-ease ^js animation/easing)
:useNativeDriver true})
(animation/timing
anim-opacity
{:toValue 0
:delay 2000
:duration 100
:easing (.-ease ^js animation/easing)
:useNativeDriver true})]) #(reset! show-timestamp? false)))
(defview mention-element [from]
(letsubs [contact-name [:contacts/contact-name-by-identity from]]
contact-name))
(def edited-at-text (str " ⌫ " (i18n/label :t/edited)))
(defn message-status [{:keys [outgoing content outgoing-status pinned edited-at in-popover?]}]
(when-not in-popover? ;; We keep track if showing this message in a list in pin-limit-popover
[react/view
{:align-self :flex-end
:position :absolute
:bottom 9 ; 6 Bubble bottom, 3 message baseline
(if (:rtl? content) :left :right) 0
:flex-direction :row
:align-items :flex-end}
(when outgoing
[icons/icon (case outgoing-status
:sending :tiny-icons/tiny-pending
:sent :tiny-icons/tiny-sent
:not-sent :tiny-icons/tiny-warning
:delivered :tiny-icons/tiny-delivered
:tiny-icons/tiny-pending)
{:width 16
:height 12
:color (if pinned colors/gray colors/white)
:accessibility-label (name outgoing-status)}])
(when edited-at [react/text {:style (style/message-status-text (and outgoing (not pinned)))} edited-at-text])]))
(defn message-timestamp
([message]
[message-timestamp message false])
([{:keys [timestamp-str outgoing content outgoing-status pinned edited-at in-popover?]} justify-timestamp?]
(when-not in-popover? ;; We keep track if showing this message in a list in pin-limit-popover
[react/view (when justify-timestamp?
{:align-self :flex-end
:position :absolute
:bottom 9 ; 6 Bubble bottom, 3 message baseline
(if (:rtl? content) :left :right) 0
:flex-direction :row
:align-items :flex-end})
(when (and outgoing justify-timestamp?)
[icons/icon (case outgoing-status
:sending :tiny-icons/tiny-pending
:sent :tiny-icons/tiny-sent
:not-sent :tiny-icons/tiny-warning
:delivered :tiny-icons/tiny-delivered
:tiny-icons/tiny-pending)
{:width 16
:height 12
:color (if pinned colors/gray colors/white)
:accessibility-label (name outgoing-status)}])
[react/text {:style (style/message-timestamp-text (and outgoing (not pinned)))}
(str
timestamp-str
(when edited-at edited-at-text))]])))
[{:keys [timestamp-str in-popover?] :as message} show-timestamp?]
(when-not in-popover? ;; We keep track if showing this message in a list in pin-limit-popover
(let [anim-opacity (animation/create-value 0)]
[react/animated-view {:style (style/message-timestamp-wrapper message) :opacity anim-opacity}
(when @show-timestamp? (message-timestamp-anim anim-opacity show-timestamp?))
[react/text {:style (style/message-timestamp-text)}
timestamp-str]])))
(defview quoted-message
[_ {:keys [from parsed-text image]} outgoing current-public-key public? pinned]
@@ -168,19 +190,19 @@
(defn render-parsed-text [message tree]
(reduce (fn [acc e] (render-block message acc e)) [:<>] tree))
(defn render-parsed-text-with-timestamp [{:keys [timestamp-str outgoing edited-at in-popover?] :as message} tree]
(defn render-parsed-text-with-message-status [{:keys [outgoing edited-at in-popover?] :as message} tree]
(let [elements (render-parsed-text message tree)
timestamp [react/text {:style (style/message-timestamp-placeholder)}
(str (if (and outgoing (not in-popover?)) " " " ") (when-not in-popover? (str timestamp-str (when edited-at edited-at-text))))]
message-status [react/text {:style (style/message-status-placeholder)}
(str (if (and outgoing (not in-popover?)) " " " ") (when (and (not in-popover?) edited-at) edited-at-text))]
last-element (peek elements)]
;; Using `nth` here as slightly faster than `first`, roughly 30%
;; It's worth considering pure js structures for this code path as
;; it's perfomance critical
(if (= react/text-class (nth last-element 0))
;; Append timestamp to last text
(conj (pop elements) (conj last-element timestamp))
;; Append timestamp to new block
(conj elements timestamp))))
;; Append message status to last text
(conj (pop elements) (conj last-element message-status))
;; Append message status to new block
(conj elements message-status))))
(defn unknown-content-type
[{:keys [outgoing content-type content] :as message}]
@@ -409,7 +431,8 @@
(defn collapsible-text-message [{:keys [mentioned]} _]
(let [collapsed? (reagent/atom false)
collapsible? (reagent/atom false)]
collapsible? (reagent/atom false)
show-timestamp? (reagent/atom false)]
(fn [{:keys [content outgoing current-public-key public? pinned in-popover?] :as message} on-long-press modal]
(let [max-height (when-not (or outgoing modal)
(if @collapsible?
@@ -418,7 +441,8 @@
[react/touchable-highlight
(when-not modal
{:on-press (fn [_]
(react/dismiss-keyboard!))
(react/dismiss-keyboard!)
(reset! show-timestamp? true))
:delay-long-press 100
:on-long-press (fn []
(if @collapsed?
@@ -426,40 +450,41 @@
(js/setTimeout #(on-long-press-fn on-long-press message content) 200))
(on-long-press-fn on-long-press message content)))
:disabled in-popover?})
[react/view {:style (style/message-view message)}
[react/view {:style (style/message-view-content)
:max-height max-height}
(let [response-to (:response-to content)]
[react/view {:on-layout
#(when (and (> (.-nativeEvent.layout.height ^js %) max-message-height-px)
(not @collapsible?)
(not outgoing)
(not modal))
(reset! collapsed? true)
(reset! collapsible? true))}
(when (and (seq response-to) (:quoted-message message))
[quoted-message response-to (:quoted-message message) outgoing current-public-key public? pinned])
[render-parsed-text-with-timestamp message (:parsed-text content)]])
(when-not @collapsed?
[message-timestamp message true])
(when (and @collapsible? (not modal))
(if @collapsed?
(let [color (if pinned colors/pin-background (if mentioned colors/mentioned-background colors/blue-light))]
[react/touchable-highlight
{:on-press #(swap! collapsed? not)
:style {:position :absolute :bottom 0 :left 0 :right 0 :height 72}}
[react/linear-gradient {:colors [(str color "00") color]
:start {:x 0 :y 0} :end {:x 0 :y 0.9}}
[react/view {:height 72 :align-self :center :justify-content :flex-end
:padding-bottom 10}
[react/view (style/collapse-button)
[icons/icon :main-icons/dropdown
{:color colors/white}]]]]])
[react/touchable-highlight {:on-press #(swap! collapsed? not)
:style {:align-self :center :margin 5}}
[react/view (style/collapse-button)
[icons/icon :main-icons/dropdown-up
{:color colors/white}]]]))]]]))))
[react/view (style/message-view-wrapper outgoing)
[message-timestamp message show-timestamp?]
[react/view {:style (style/message-view message)}
[react/view {:style (style/message-view-content)
:max-height max-height}
(let [response-to (:response-to content)]
[react/view {:on-layout
#(when (and (> (.-nativeEvent.layout.height ^js %) max-message-height-px)
(not @collapsible?)
(not outgoing)
(not modal))
(reset! collapsed? true)
(reset! collapsible? true))}
(when (and (seq response-to) (:quoted-message message))
[quoted-message response-to (:quoted-message message) outgoing current-public-key public? pinned])
[render-parsed-text-with-message-status message (:parsed-text content)]])
(when-not @collapsible? [message-status message])
(when (and @collapsible? (not modal))
(if @collapsed?
(let [color (if pinned colors/pin-background (if mentioned colors/mentioned-background colors/blue-light))]
[react/touchable-highlight
{:on-press #(swap! collapsed? not)
:style {:position :absolute :bottom 0 :left 0 :right 0 :height 72}}
[react/linear-gradient {:colors [(str color "00") color]
:start {:x 0 :y 0} :end {:x 0 :y 0.9}}
[react/view {:height 72 :align-self :center :justify-content :flex-end
:padding-bottom 10}
[react/view (style/collapse-button)
[icons/icon :main-icons/dropdown
{:color colors/white}]]]]])
[react/touchable-highlight {:on-press #(swap! collapsed? not)
:style {:align-self :center :margin 5}}
[react/view (style/collapse-button)
[icons/icon :main-icons/dropdown-up
{:color colors/white}]]]))]]]]))))
(defmethod ->message constants/content-type-text
[message {:keys [on-long-press modal] :as reaction-picker}]
@@ -484,33 +509,37 @@
(defmethod ->message constants/content-type-emoji
[{:keys [content current-public-key outgoing public? pinned in-popover? message-pin-enabled] :as message} {:keys [on-long-press modal]
:as reaction-picker}]
(let [response-to (:response-to content)]
[message-content-wrapper message
[react/touchable-highlight (when-not modal
{:disabled in-popover?
:on-press (fn []
(react/dismiss-keyboard!))
:delay-long-press 100
:on-long-press (fn []
(on-long-press
(concat
[{:on-press #(re-frame/dispatch [:chat.ui/reply-to-message message])
:id :reply
:label (i18n/label :t/message-reply)}
{:on-press #(react/copy-to-clipboard (get content :text))
:id :copy
:label (i18n/label :t/sharing-copy-to-clipboard)}]
(when message-pin-enabled [{:on-press #(pin-message message)
:label (if pinned (i18n/label :t/unpin) (i18n/label :t/pin))}]))))})
[react/view (style/message-view message)
[react/view {:style (style/message-view-content)}
[react/view {:style (style/style-message-text outgoing)}
(when (and (seq response-to) (:quoted-message message))
[quoted-message response-to (:quoted-message message) outgoing current-public-key public? pinned])
[react/text {:style (style/emoji-message message)}
(:text content)]]
[message-timestamp message]]]]
reaction-picker]))
(let [response-to (:response-to content)
show-timestamp? (reagent/atom false)]
(fn [] [message-content-wrapper message
[react/touchable-highlight (when-not modal
{:disabled in-popover?
:on-press (fn []
(react/dismiss-keyboard!)
(reset! show-timestamp? true))
:delay-long-press 100
:on-long-press (fn []
(on-long-press
(concat
[{:on-press #(re-frame/dispatch [:chat.ui/reply-to-message message])
:id :reply
:label (i18n/label :t/message-reply)}
{:on-press #(react/copy-to-clipboard (get content :text))
:id :copy
:label (i18n/label :t/sharing-copy-to-clipboard)}]
(when message-pin-enabled [{:on-press #(pin-message message)
:label (if pinned (i18n/label :t/unpin) (i18n/label :t/pin))}]))))})
[react/view (style/message-view-wrapper outgoing)
[message-timestamp message show-timestamp?]
[react/view (style/message-view message)
[react/view {:style (style/message-view-content)}
[react/view {:style (style/style-message-text outgoing)}
(when (and (seq response-to) (:quoted-message message))
[quoted-message response-to (:quoted-message message) outgoing current-public-key public? pinned])
[react/text {:style (style/emoji-message message)}
(:text content)]]
[message-status message]]]]]
reaction-picker])))
(defmethod ->message constants/content-type-sticker
[{:keys [content from outgoing in-popover?]
@@ -533,9 +562,9 @@
[{:on-press #(when pack
(re-frame/dispatch [:chat.ui/show-profile from]))
:label (i18n/label :t/view-details)}])))})
[react/image {:style {:margin 10 :width 140 :height 140}
;;TODO (perf) move to event
:source {:uri (contenthash/url (-> content :sticker :hash))}}]]
[react/fast-image {:style {:margin 10 :width 140 :height 140}
;;TODO (perf) move to event
:source {:uri (contenthash/url (-> content :sticker :hash))}}]]
reaction-picker]))
(defmethod ->message constants/content-type-image [{:keys [content in-popover?] :as message} {:keys [on-long-press modal]
@@ -556,14 +585,19 @@
(defmethod ->message constants/content-type-audio [message {:keys [on-long-press modal]
:as reaction-picker}]
[message-content-wrapper message
[react/touchable-highlight (when-not modal
{:on-long-press
(fn [] (on-long-press []))})
[react/view {:style (style/message-view message) :accessibility-label :audio-message}
[react/view {:style (style/message-view-content)}
[message.audio/message-content message [message-timestamp message false]]]]]
reaction-picker])
(let [show-timestamp? (reagent/atom false)]
(fn [] [message-content-wrapper message
[react/touchable-highlight (when-not modal
{:on-long-press
(fn [] (on-long-press []))
:on-press (fn []
(reset! show-timestamp? true))})
[react/view (style/message-view-wrapper (:outgoing message))
[message-timestamp message show-timestamp?]
[react/view {:style (style/message-view message) :accessibility-label :audio-message}
[react/view {:style (style/message-view-content)}
[message.audio/message-content message] [message-status message]]]]]
reaction-picker])))
(defmethod ->message :default [message]
[message-content-wrapper message
@@ -39,9 +39,9 @@
^{:key (str hash)}
[react/touchable-highlight {:style {:height 75 :width 75 :margin 5}
:on-press #(debounce/dispatch-and-chill [:chat/send-sticker sticker] 1000)}
[react/image {:style {:resize-mode :cover :width "100%" :height "100%"}
:accessibility-label :sticker-icon
:source {:uri (contenthash/url (str "0x" hash))}}]])]]])
[react/fast-image {:style {:width "100%" :height "100%"}
:accessibility-label :sticker-icon
:source {:uri (contenthash/url (str "0x" hash))}}]])]]])
(defview recent-stickers-panel [window-width]
(letsubs [stickers [:stickers/recent]]
@@ -143,6 +143,6 @@
^{:key id}
[pack-icon {:id id
:background-color colors/white}
[react/image {:style {:width icon-size :height icon-size :border-radius (/ icon-size 2)}
:source {:uri (contenthash/url thumbnail)}}]])]
[react/fast-image {:style {:width icon-size :height icon-size :border-radius (/ icon-size 2)}
:source {:uri (contenthash/url thumbnail)}}]])]
[scroll-indicator]]]]]))
@@ -43,5 +43,5 @@
:justify-content :space-between})
(defn timestamp [outgoing]
(merge (message.style/message-timestamp-text outgoing)
(merge (message.style/audio-message-timestamp-text outgoing)
{:margin-left 40}))
@@ -29,11 +29,33 @@
(def message-timestamp
{:font-size 10})
(defn message-timestamp-placeholder
(defn message-status-placeholder
[]
(merge message-timestamp {:opacity 0 :color "rgba(0,0,0,0)"}))
(defn message-timestamp-text
(defn message-timestamp-wrapper [{:keys [last-in-group? outgoing group-chat]}]
{:justify-content :center
(if outgoing :margin-right :margin-left) 12 ;; horizontal margin is only required at the adjust side of the message.
:margin-top (if (and last-in-group?
(or outgoing
(not group-chat)))
16
0) ;; Add gap between message groups
:opacity 0})
(defn message-timestamp-text []
(merge message-timestamp
{:color colors/gray
:text-align :center}))
(defn message-status-text [outgoing]
{:font-size 10
:line-height 10
:color (if outgoing
colors/white-transparent-70-persist
colors/gray)})
(defn audio-message-timestamp-text
[outgoing]
(merge message-timestamp
{:line-height 10
@@ -44,7 +66,7 @@
(defn message-wrapper [{:keys [outgoing in-popover?]}]
(if (and outgoing (not in-popover?))
{:margin-left 96}
{:margin-right 52}))
{:margin-right 96}))
(defn message-author-wrapper
[outgoing display-photo? in-popover?]
@@ -156,10 +178,10 @@
:padding-left 3})
(defn emoji-message
[{:keys [incoming-group]}]
[{:keys [incoming-group outgoing]}]
{:font-size 28
:line-height 34 ;TODO: Smaller crops the icon on the top
:margin-right 12
:margin-right (if outgoing 18 0) ;; Margin to display outgoing message status
:margin-top (if incoming-group 4 0)})
(defn collapse-button []
@@ -171,6 +193,10 @@
:shadow-color (:shadow-01 @colors/theme)
:shadow-offset {:width 0 :height 4}})
(defn message-view-wrapper [outgoing]
{:align-self :flex-end
:flex-direction (if outgoing :row :row-reverse)})
(defn message-view
[{:keys [content-type outgoing group-chat last-in-group? mentioned pinned]}]
(merge
+43 -48
View File
@@ -295,7 +295,7 @@
(defn messages-view [{:keys [chat bottom-space pan-responder space-keeper show-input?]}]
(let [{:keys [group-chat chat-id public? community-id admins]} chat
messages @(re-frame/subscribe [:chats/chat-messages-stream chat-id])]
messages @(re-frame/subscribe [:chats/raw-chat-messages-stream chat-id])]
;;do not use anonymous functions for handlers
[list/flat-list
(merge
@@ -343,8 +343,7 @@
[toolbar-content/toolbar-content-view-inner chat-info]]))
(defn chat []
(let [curr-chat-id (:chat-id @(re-frame/subscribe [:chats/current-chat-chat-view]))
bottom-space (reagent/atom 0)
(let [bottom-space (reagent/atom 0)
panel-space (reagent/atom 52)
active-panel (reagent/atom nil)
position-y (animated/value 0)
@@ -355,48 +354,44 @@
space-keeper (get-space-keeper-ios bottom-space panel-space active-panel text-input-ref)
set-active-panel (get-set-active-panel active-panel)
on-close #(set-active-panel nil)]
(reagent/create-class
{:component-will-unmount #(re-frame/dispatch-sync [:close-chat curr-chat-id])
:component-did-mount (fn [] (js/setTimeout #(re-frame/dispatch [:set :ignore-close-chat false]) 500))
:reagent-render
(fn []
(let [{:keys [chat-id show-input? group-chat admins invitation-admin] :as chat}
;;we want to react only on these fields, do not use full chat map here
@(re-frame/subscribe [:chats/current-chat-chat-view])
max-bottom-space (max @bottom-space @panel-space)]
[:<>
[connectivity/loading-indicator]
(when chat-id
(if group-chat
[invitation-requests chat-id admins]
[add-contact-bar chat-id]))
;;MESSAGES LIST
[messages-view {:chat chat
:bottom-space max-bottom-space
:pan-responder pan-responder
:space-keeper space-keeper
:show-input? show-input?}]
(when (and group-chat invitation-admin)
[accessory/view {:y position-y
:on-update-inset on-update}
[invitation-bar chat-id]])
[components/autocomplete-mentions text-input-ref max-bottom-space]
(when show-input?
;; NOTE: this only accepts two children
[accessory/view {:y position-y
:pan-state pan-state
:has-panel (boolean @active-panel)
:on-close on-close
:on-update-inset on-update}
[react/view
[edit/edit-message-auto-focus-wrapper text-input-ref]
[reply/reply-message-auto-focus-wrapper text-input-ref]
;; We set the key so we can force a re-render as
;; it does not rely on ratom but just atoms
^{:key (str @components/chat-input-key "chat-input")}
[components/chat-toolbar
{:chat-id chat-id
:active-panel @active-panel
:set-active-panel set-active-panel
:text-input-ref text-input-ref}]]
[bottom-sheet @active-panel]])]))})))
(fn []
(let [{:keys [chat-id show-input? group-chat admins invitation-admin] :as chat}
;;we want to react only on these fields, do not use full chat map here
@(re-frame/subscribe [:chats/current-chat-chat-view])
max-bottom-space (max @bottom-space @panel-space)]
[:<>
[connectivity/loading-indicator]
(when chat-id
(if group-chat
[invitation-requests chat-id admins]
[add-contact-bar chat-id]))
;;MESSAGES LIST
[messages-view {:chat chat
:bottom-space max-bottom-space
:pan-responder pan-responder
:space-keeper space-keeper
:show-input? show-input?}]
(when (and group-chat invitation-admin)
[accessory/view {:y position-y
:on-update-inset on-update}
[invitation-bar chat-id]])
[components/autocomplete-mentions text-input-ref max-bottom-space]
(when show-input?
;; NOTE: this only accepts two children
[accessory/view {:y position-y
:pan-state pan-state
:has-panel (boolean @active-panel)
:on-close on-close
:on-update-inset on-update}
[react/view
[edit/edit-message-auto-focus-wrapper text-input-ref]
[reply/reply-message-auto-focus-wrapper text-input-ref]
;; We set the key so we can force a re-render as
;; it does not rely on ratom but just atoms
^{:key (str @components/chat-input-key "chat-input")}
[components/chat-toolbar
{:chat-id chat-id
:active-panel @active-panel
:set-active-panel set-active-panel
:text-input-ref text-input-ref}]]
[bottom-sheet @active-panel]])]))))
@@ -26,7 +26,8 @@
description
color
emoji
chat-id])}])
chat-id
(:id category)])}])
:extended-header (profile-header/extended-header
{:title chat-name
:color color
@@ -139,7 +139,14 @@
:title (i18n/label :t/edit-chats)
:accessibility-label :community-edit-chats
:icon :main-icons/edit
:on-press #(hide-sheet-and-dispatch [:open-modal :community-edit-chats {:community-id id}])}]])]))
:on-press #(hide-sheet-and-dispatch [:open-modal :community-edit-chats {:community-id id}])}]
[quo/list-item
{:theme :accent
:title (i18n/label :t/reorder-categories)
:accessibility-label :community-reorder-categories
:icon :main-icons/channel-category
:on-press #(hide-sheet-and-dispatch
[:open-modal :community-reorder-categories {:community-id id}])}]])]))
(defn blank-page [text]
[rn/view {:style {:padding 16 :flex 1 :flex-direction :row :align-items :center :justify-content :center}}
@@ -147,14 +154,14 @@
:color :secondary}
text]])
(defn community-chat-item [{:keys [chat-id] :as home-item} _ _ {:keys [from-chat]}]
(defn community-chat-item [{:keys [chat-id] :as home-item} _ _ _]
[inner-item/home-list-item
;; We want communities to behave as public chats when it comes to
;; unread indicator
(assoc home-item :public? true)
{:on-press (fn []
(re-frame/dispatch [:dismiss-keyboard])
(re-frame/dispatch [:chat.ui/navigate-to-chat chat-id (not from-chat)])
(re-frame/dispatch [:chat.ui/navigate-to-chat chat-id])
(re-frame/dispatch [:search/home-filter-changed nil])
(re-frame/dispatch [:accept-all-activity-center-notifications-from-chat chat-id]))
:on-long-press #(re-frame/dispatch [:bottom-sheet/show-sheet
@@ -163,11 +170,14 @@
(defn categories-accordion [community-id chats categories edit data]
[:<>
(for [{:keys [name id]} (vals categories)]
(for [{:keys [name id state]} (vals categories)]
^{:key (str "cat" name id)}
[:<>
[accordion/section
{:opened edit
{:on-open #(>evt [::communities/store-category-state community-id id true])
:on-close #(>evt [::communities/store-category-state community-id id false])
:default state
:opened edit
:disabled edit
:title [rn/view styles/category-item
(if edit
@@ -195,7 +205,9 @@
(defn community-chat-list [community-id categories edit from-chat]
(let [chats (<sub [:chats/categories-by-community-id community-id])]
(if (and (empty? categories) (empty? chats))
[blank-page (i18n/label :t/welcome-community-blank-message)]
(if edit
[blank-page (i18n/label :t/welcome-community-blank-message-edit-chats)]
[blank-page (i18n/label :t/welcome-community-blank-message)])
[list/flat-list
{:key-fn :chat-id
:content-container-style {:padding-bottom 8}
@@ -258,7 +270,8 @@
(defn community-edit []
(let [{:keys [community-id]} (<sub [:get-screen-params])]
(fn []
(let [{:keys [id name images members permissions color categories]} (<sub [:communities/community community-id])]
(let [{:keys [id name images members permissions color]} (<sub [:communities/community community-id])
categories (<sub [:communities/sorted-categories community-id])]
[:<>
[topbar/topbar
{:modal? true
@@ -274,9 +287,10 @@
(defn community []
(let [{:keys [community-id from-chat]} (<sub [:get-screen-params])]
(fn []
(let [{:keys [id chats name images members permissions color joined can-request-access?
can-join? requested-to-join-at admin categories]
:as community} (<sub [:communities/community community-id])]
(let [{:keys [id chats name images members permissions color joined
can-request-access? can-join? requested-to-join-at admin]
:as community} (<sub [:communities/community community-id])
categories (<sub [:communities/sorted-categories community-id])]
(if community
[rn/view {:style {:flex 1}}
[topbar/topbar
@@ -0,0 +1,60 @@
(ns status-im.ui.screens.communities.reorder-categories
(:require [quo.core :as quo]
[quo.react-native :as rn]
[clojure.set :as clojure.set]
[status-im.i18n.i18n :as i18n]
[status-im.constants :as constants]
[quo.design-system.colors :as colors]
[status-im.ui.components.react :as react]
[status-im.ui.components.topbar :as topbar]
[status-im.communities.core :as communities]
[status-im.utils.handlers :refer [>evt <sub]]
[status-im.ui.components.icons.icons :as icons]
[status-im.ui.screens.communities.styles :as styles]
[status-im.ui.screens.communities.community :as community]))
(defn category-change-positon [community-id key up? position]
(let [new-position (if up? (dec position) (inc position))]
(>evt [::communities/reorder-community-category community-id key new-position])))
(defn category-item-button [community-id up? disabled? key position]
(let [[margin-right icon] (if up?
[10 :main-icons/dropdown-up]
[25 :main-icons/dropdown])]
[react/touchable-opacity {:disabled disabled?
:on-press #(category-change-positon
community-id key up? position)}
[rn/view {:style (styles/reorder-categories-button margin-right)}
[icons/icon icon {:color colors/black}]]]))
(defn category-item [community-id count {:keys [key name position]}]
(let [up-disabled? (= position 0)
down-disabled? (= position (dec count))]
[:<>
[rn/view {:style styles/reorder-categories-item}
[icons/icon :main-icons/channel-category {:color colors/gray}]
[rn/text {:style (styles/reorder-categories-text)} name]
[category-item-button community-id true up-disabled? key position]
[category-item-button community-id false down-disabled? key position]]
[quo/separator]]))
(defn categories-view [community-id categories count]
[rn/view {:accessibility-label :reorder-categories-list}
(for [category-vector categories]
(let [category (clojure.set/rename-keys (get category-vector 1) {:id :key})]
[category-item community-id count category]))])
(defn view []
(let [{:keys [community-id]} (<sub [:get-screen-params])
{:keys [id name images members permissions color]}
(<sub [:communities/community community-id])
categories (<sub [:communities/sorted-categories community-id])]
[:<>
[topbar/topbar
{:modal? true
:content [community/toolbar-content id name color images
(not= (:access permissions) constants/community-no-membership-access)
(count members)]}]
(if (empty? categories)
[community/blank-page (i18n/label :t/welcome-community-blank-message-categories)]
[categories-view community-id categories (count categories)])]))
@@ -24,7 +24,7 @@
(defn view []
(let [{:keys [community-id chat]} (<sub [:get-screen-params])]
(fn []
(let [categories (<sub [:community/categories community-id])
(let [categories (<sub [:communities/sorted-categories community-id])
comm-chat (<sub [:chats/community-chat-by-id community-id (:chat-id chat)])
_ (reset! selected-item (:categoryID comm-chat))]
[:<>
@@ -56,4 +56,4 @@
@selected-item
comm-chat]
3000)}
(i18n/label :t/done)]}]]))))
(i18n/label :t/done)]}]]))))
@@ -1,8 +1,34 @@
(ns status-im.ui.screens.communities.styles)
(ns status-im.ui.screens.communities.styles
(:require [quo.design-system.colors :as colors]))
(def category-item
{:flex 1
:flex-direction :row
:align-items :center
:height 52
:margin-left 18})
:margin-left 18})
(def reorder-categories-item
{:accessibility-label :reorder-categories-item
:flex-direction :row
:height 60
:align-items :center
:margin-left 18})
(defn reorder-categories-text []
{:font-size 17
:margin-left 10
:color (colors/get-color :text-01)
:flex 1})
(defn reorder-categories-button [margin-right]
{:accessibility-label :reorder-categories-button
:width 30
:height 30
:border-radius 15
:margin 10
:margin-right margin-right
:border-width 1
:justify-content :center
:align-items :center
:border-color colors/black})
@@ -41,6 +41,7 @@
{:border-bottom-color (quo.colors/get-color :ui-01)
:border-bottom-width 1}))
:on-press (fn []
(>evt [::communities/load-category-states id])
(>evt [:dismiss-keyboard])
(>evt [:navigate-to :community {:community-id id}]))
:on-long-press #(>evt [:bottom-sheet/show-sheet
@@ -24,7 +24,7 @@
:title (i18n/label :t/submit-bug)
:accessibility-label :submit-bug-button
:on-press
#(re-frame/dispatch [:logging.ui/send-logs-pressed])
#(re-frame/dispatch [:open-modal :bug-report])
:chevron true}
{:size :small
:title (i18n/label :t/request-feature)
+18 -11
View File
@@ -24,7 +24,8 @@
[status-im.ui.components.topbar :as topbar]
[status-im.ui.components.plus-button :as components.plus-button]
[status-im.ui.screens.chat.sheets :as sheets]
[status-im.ui.components.tabbar.core :as tabbar])
[status-im.ui.components.tabbar.core :as tabbar]
["react-native-navigation" :refer (Navigation)])
(:require-macros [status-im.utils.views :as views]))
(defn home-tooltip-view []
@@ -199,13 +200,19 @@
:accessibility-label :notifications-unread-badge}]])]))
(defn home []
[react/keyboard-avoiding-view {:style {:flex 1}
:ignore-offset true}
[topbar/topbar {:title (i18n/label :t/chat)
:navigation :none
:right-component [react/view {:flex-direction :row :margin-right 16}
[connectivity/connectivity-button]
[notifications-button]]}]
[chats-list]
[plus-button]
[tabbar/tabs-counts-subscriptions]])
(reagent/create-class
{:component-did-mount #(set! (.-navigationEventListener %) (.bindComponent (.events Navigation) % "home"))
:componentWillAppear #(do (re-frame/dispatch-sync [:set :view-id :home])
(re-frame/dispatch [:close-chat]))
:reagent-render
(fn []
[react/keyboard-avoiding-view {:style {:flex 1}
:ignore-offset true}
[topbar/topbar {:title (i18n/label :t/chat)
:navigation :none
:right-component [react/view {:flex-direction :row :margin-right 16}
[connectivity/connectivity-button]
[notifications-button]]}]
[chats-list]
[plus-button]
[tabbar/tabs-counts-subscriptions]])}))
@@ -34,6 +34,13 @@
:default-value (get-in manage-network [:name :value])
:on-change-text #(re-frame/dispatch [::network/input-changed :name %])
:auto-focus true}]]
[react/view {:padding-vertical 8}
[quo/text-input
{:label (i18n/label :t/symbol)
:placeholder (i18n/label :t/specify-symbol)
:default-value (get-in manage-network [:symbol :value])
:on-change-text #(re-frame/dispatch [::network/input-changed :symbol %])
:auto-focus true}]]
[react/view {:padding-vertical 8}
[quo/text-input
{:label (i18n/label :t/rpc-url)
@@ -54,7 +54,7 @@
;;TODO (perf) move to event
(home-item/memo-timestamp timestamp)]
[react/view {:style styles/notification-message-container}
[home-item/message-content-text (select-keys message [:content :content-type]) false]
[home-item/message-content-text (select-keys message [:content :content-type :community-id]) false]
(cond (= type constants/activity-center-notification-type-mention)
[react/view {:style styles/group-info-container
:accessibility-label :chat-name-container}
@@ -89,4 +89,4 @@
:width 18
:height 18
:container-style styles/reply-icon}]
[home-item/message-content-text (select-keys reply-message [:content :content-type]) false]])]]]))
[home-item/message-content-text (select-keys reply-message [:content :content-type :community-id]) false]])]]]))
@@ -82,11 +82,15 @@
visibility-status-update (visibility-status-update public-key my-icon?)
size (/ container-size 4)
margin (if identicon? (/ size 6) (/ size 7))
dot-color (dot-color visibility-status-update my-icon?)]
dot-color (dot-color visibility-status-update my-icon?)
accessibility-label (if (= dot-color colors/color-online)
:online-profile-photo-dot
:offline-profile-photo-dot)]
(merge (styles/visibility-status-dot dot-color size)
{:bottom margin
:right margin
:position :absolute})))
{:bottom margin
:right margin
:position :absolute
:accessibility-label accessibility-label})))
(defn visibility-status-order [public-key]
(let [my-icon? (my-icon? public-key)

Some files were not shown because too many files have changed in this diff Show More