diff --git a/.github/workflows/pr_test_build.yml b/.github/workflows/pr_test_build.yml index 84ac69197..f8496ffcd 100644 --- a/.github/workflows/pr_test_build.yml +++ b/.github/workflows/pr_test_build.yml @@ -21,7 +21,7 @@ jobs: - name: Flutter action uses: subosito/flutter-action@v1 with: - flutter-version: '3.3.x' + flutter-version: '3.7.x' channel: stable - name: Install package dependencies @@ -110,6 +110,7 @@ jobs: echo "const onramperApiKey = '${{ secrets.ONRAMPER_API_KEY }}';" >> lib/.secrets.g.dart echo "const anypayToken = '${{ secrets.ANY_PAY_TOKEN }}';" >> lib/.secrets.g.dart echo "const ioniaClientId = '${{ secrets.IONIA_CLIENT_ID }}';" >> lib/.secrets.g.dart + echo "const twitterBearerToken = '${{ secrets.TWITTER_BEARER_TOKEN }}';" >> lib/.secrets.g.dart - name: Rename app run: sed -i -e "s/\${APP_NAME}/$GITHUB_HEAD_REF/g" /opt/android/cake_wallet/android/app/src/main/AndroidManifest.xml diff --git a/README.md b/README.md index 2a77aecb7..3077366ac 100644 --- a/README.md +++ b/README.md @@ -90,12 +90,12 @@ Edit the applicable `strings_XX.arb` file in `res/values/` and open a pull reque - French - German - Italian -- Portugese +- Portuguese - Dutch - Polish - Croatian - Russian -- Ukranian +- Ukrainian - Hindi - Japanese - Chinese @@ -104,6 +104,9 @@ Edit the applicable `strings_XX.arb` file in `res/values/` and open a pull reque - Arabic - Turkish - Burmese +- Urdu +- Bulgarian +- Czech - Indonesian ## Add a new language diff --git a/Refund Pollicy.md b/Refund Pollicy.md deleted file mode 100644 index d2e13f5ef..000000000 --- a/Refund Pollicy.md +++ /dev/null @@ -1,27 +0,0 @@ -# Refund Policy - -This Refund Policy covers returns, refunds, and cancellations for your purchases from Cake Technologies, LLC (“Company,” “we,” or “us”). - -### Returns - -We do not accept returns of cryptocurrencies. Once cryptocurrencies are delivered to the provided wallet address, we cannot accept a return. If we allow you to sell cryptocurrencies to us, you may optionally engage in another trade to convert the cryptocurrency to another asset at the price at that point in time. - -### Refunds - -We do not issue refunds except in the case of an error resulting in a non-delivery of cryptocurrencies. In this case, we will decide whether to complete the trade or refund the account. We endeavor to complete an investigation to determine whether an error occurred and to make this decision within ten (10) days of receipt of your error report, and we will do so in any case within ninety (90) days. We reserve the right to issue a refund for the equivalent amount in another asset at the exchange rate then offered by us should we determine an error occurred. - -### Cancellations - -Once you make a payment to us, trades cannot be cancelled. In nearly all cases, we deliver cryptocurrency to your address in a matter of seconds or minutes. If you have not received your purchased cryptocurrency within six (6) hours of completing payment and have confirmed that your wallet is connected to a reliable node and fully synchronized with the network, please contact us. - -### Network Fees - -We may charge a network fee for the delivery of cryptocurrencies. This will be clearly shown in the checkout page. If we issue a refund, we may choose to deduct any network fees from the refund, including any network fees incurred in processing the refund. - -### Fraud - -If you believe a cryptocurrency purchase was conducted fraudulently, please alert your bank or card issuer, as applicable, and follow their instructions. Please be aware that fraudulent transactions may result in the loss of your money with no recourse. - -### Contact Us - -If you believe that there has been an error in processing your payment, please contact us at support@cakewallet.com. \ No newline at end of file diff --git a/analysis_options.yaml b/analysis_options.yaml index 524f70011..396904041 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -18,6 +18,8 @@ analyzer: linter: rules: - cancel_subscriptions + - always_declare_return_types + - prefer_final_fields # analyzer: diff --git a/assets/images/flags/pak.png b/assets/images/flags/pak.png new file mode 100644 index 000000000..1462650e4 Binary files /dev/null and b/assets/images/flags/pak.png differ diff --git a/cw_bitcoin/lib/bitcoin_amount_format.dart b/cw_bitcoin/lib/bitcoin_amount_format.dart index c72d21960..d5a42d984 100644 --- a/cw_bitcoin/lib/bitcoin_amount_format.dart +++ b/cw_bitcoin/lib/bitcoin_amount_format.dart @@ -17,7 +17,7 @@ int stringDoubleToBitcoinAmount(String amount) { int result = 0; try { - result = (double.parse(amount) * bitcoinAmountDivider).toInt(); + result = (double.parse(amount) * bitcoinAmountDivider).round(); } catch (e) { result = 0; } diff --git a/cw_bitcoin/pubspec.lock b/cw_bitcoin/pubspec.lock index 9207fc209..bfcd9e5a6 100644 --- a/cw_bitcoin/pubspec.lock +++ b/cw_bitcoin/pubspec.lock @@ -5,37 +5,42 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - url: "https://pub.dartlang.org" + sha256: "4897882604d919befd350648c7f91926a9d5de99e67b455bf0917cc2362f4bb8" + url: "https://pub.dev" source: hosted version: "47.0.0" analyzer: dependency: transitive description: name: analyzer - url: "https://pub.dartlang.org" + sha256: "690e335554a8385bc9d787117d9eb52c0c03ee207a607e593de3c9d71b1cfe80" + url: "https://pub.dev" source: hosted version: "4.7.0" args: dependency: transitive description: name: args - url: "https://pub.dartlang.org" + sha256: "139d809800a412ebb26a3892da228b2d0ba36f0ef5d9a82166e5e52ec8d61611" + url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.2" asn1lib: dependency: transitive description: name: asn1lib - url: "https://pub.dartlang.org" + sha256: ab96a1cb3beeccf8145c52e449233fe68364c9641623acd3adad66f8184f1039 + url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.4.0" async: dependency: transitive description: name: async - url: "https://pub.dartlang.org" + sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 + url: "https://pub.dev" source: hosted - version: "2.9.0" + version: "2.10.0" bech32: dependency: transitive description: @@ -49,14 +54,16 @@ packages: dependency: transitive description: name: bip32 - url: "https://pub.dartlang.org" + sha256: "54787cd7a111e9d37394aabbf53d1fc5e2e0e0af2cd01c459147a97c0e3f8a97" + url: "https://pub.dev" source: hosted version: "2.0.0" bip39: dependency: transitive description: name: bip39 - url: "https://pub.dartlang.org" + sha256: de1ee27ebe7d96b84bb3a04a4132a0a3007dcdd5ad27dd14aa87a29d97c45edc + url: "https://pub.dev" source: hosted version: "1.0.6" bitcoin_flutter: @@ -72,126 +79,144 @@ packages: dependency: transitive description: name: boolean_selector - url: "https://pub.dartlang.org" + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" bs58check: dependency: transitive description: name: bs58check - url: "https://pub.dartlang.org" + sha256: c4a164d42b25c2f6bc88a8beccb9fc7d01440f3c60ba23663a20a70faf484ea9 + url: "https://pub.dev" source: hosted version: "1.0.2" build: dependency: transitive description: name: build - url: "https://pub.dartlang.org" + sha256: "3fbda25365741f8251b39f3917fb3c8e286a96fd068a5a242e11c2012d495777" + url: "https://pub.dev" source: hosted version: "2.3.1" build_config: dependency: transitive description: name: build_config - url: "https://pub.dartlang.org" + sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 + url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.1.1" build_daemon: dependency: transitive description: name: build_daemon - url: "https://pub.dartlang.org" + sha256: "6bc5544ea6ce4428266e7ea680e945c68806c4aae2da0eb5e9ccf38df8d6acbf" + url: "https://pub.dev" source: hosted version: "3.1.0" build_resolvers: dependency: "direct dev" description: name: build_resolvers - url: "https://pub.dartlang.org" + sha256: "687cf90a3951affac1bd5f9ecb5e3e90b60487f3d9cdc359bb310f8876bb02a6" + url: "https://pub.dev" source: hosted version: "2.0.10" build_runner: dependency: "direct dev" description: name: build_runner - url: "https://pub.dartlang.org" + sha256: b0a8a7b8a76c493e85f1b84bffa0588859a06197863dba8c9036b15581fd9727 + url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.3.3" build_runner_core: dependency: transitive description: name: build_runner_core - url: "https://pub.dartlang.org" + sha256: "14febe0f5bac5ae474117a36099b4de6f1dbc52df6c5e55534b3da9591bf4292" + url: "https://pub.dev" source: hosted - version: "7.2.4" + version: "7.2.7" built_collection: dependency: transitive description: name: built_collection - url: "https://pub.dartlang.org" + sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" + url: "https://pub.dev" source: hosted version: "5.1.1" built_value: dependency: transitive description: name: built_value - url: "https://pub.dartlang.org" + sha256: "169565c8ad06adb760c3645bf71f00bff161b00002cace266cad42c5d22a7725" + url: "https://pub.dev" source: hosted - version: "8.4.1" + version: "8.4.3" characters: dependency: transitive description: name: characters - url: "https://pub.dartlang.org" + sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + url: "https://pub.dev" source: hosted version: "1.2.1" checked_yaml: dependency: transitive description: name: checked_yaml - url: "https://pub.dartlang.org" + sha256: "3d1505d91afa809d177efd4eed5bb0eb65805097a1463abdd2add076effae311" + url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.0.2" clock: dependency: transitive description: name: clock - url: "https://pub.dartlang.org" + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" source: hosted version: "1.1.1" code_builder: dependency: transitive description: name: code_builder - url: "https://pub.dartlang.org" + sha256: "0d43dd1288fd145de1ecc9a3948ad4a6d5a82f0a14c4fdd0892260787d975cbe" + url: "https://pub.dev" source: hosted - version: "4.3.0" + version: "4.4.0" collection: dependency: transitive description: name: collection - url: "https://pub.dartlang.org" + sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 + url: "https://pub.dev" source: hosted - version: "1.16.0" + version: "1.17.0" convert: dependency: transitive description: name: convert - url: "https://pub.dartlang.org" + sha256: "196284f26f69444b7f5c50692b55ec25da86d9e500451dc09333bf2e3ad69259" + url: "https://pub.dev" source: hosted version: "3.0.2" crypto: dependency: transitive description: name: crypto - url: "https://pub.dartlang.org" + sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 + url: "https://pub.dev" source: hosted version: "3.0.2" cryptography: dependency: "direct main" description: name: cryptography - url: "https://pub.dartlang.org" + sha256: e0e37f79665cd5c86e8897f9abe1accfe813c0cc5299dab22256e22fddc1fef8 + url: "https://pub.dev" source: hosted version: "2.0.5" cw_core: @@ -205,44 +230,50 @@ packages: dependency: transitive description: name: dart_style - url: "https://pub.dartlang.org" + sha256: "7a03456c3490394c8e7665890333e91ae8a49be43542b616e414449ac358acd4" + url: "https://pub.dev" source: hosted version: "2.2.4" encrypt: dependency: "direct main" description: name: encrypt - url: "https://pub.dartlang.org" + sha256: "4fd4e4fdc21b9d7d4141823e1e6515cd94e7b8d84749504c232999fba25d9bbb" + url: "https://pub.dev" source: hosted version: "5.0.1" fake_async: dependency: transitive description: name: fake_async - url: "https://pub.dartlang.org" + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" source: hosted version: "1.3.1" ffi: dependency: transitive description: name: ffi - url: "https://pub.dartlang.org" + sha256: a38574032c5f1dd06c4aee541789906c12ccaab8ba01446e800d9c5b79c4a978 + url: "https://pub.dev" source: hosted version: "2.0.1" file: dependency: transitive description: name: file - url: "https://pub.dartlang.org" + sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + url: "https://pub.dev" source: hosted - version: "6.1.2" + version: "6.1.4" fixnum: dependency: transitive description: name: fixnum - url: "https://pub.dartlang.org" + sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" + url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "1.1.0" flutter: dependency: "direct main" description: flutter @@ -252,9 +283,10 @@ packages: dependency: "direct main" description: name: flutter_mobx - url: "https://pub.dartlang.org" + sha256: "0da4add0016387a7bf309a0d0c41d36c6b3ae25ed7a176409267f166509e723e" + url: "https://pub.dev" source: hosted - version: "2.0.6+4" + version: "2.0.6+5" flutter_test: dependency: "direct dev" description: flutter @@ -264,282 +296,306 @@ packages: dependency: transitive description: name: frontend_server_client - url: "https://pub.dartlang.org" + sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "3.2.0" glob: dependency: transitive description: name: glob - url: "https://pub.dartlang.org" + sha256: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c" + url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.1.1" graphs: dependency: transitive description: name: graphs - url: "https://pub.dartlang.org" + sha256: f9e130f3259f52d26f0cfc0e964513796dafed572fa52e45d2f8d6ca14db39b2 + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.2.0" hex: dependency: transitive description: name: hex - url: "https://pub.dartlang.org" + sha256: "4e7cd54e4b59ba026432a6be2dd9d96e4c5205725194997193bf871703b82c4a" + url: "https://pub.dev" source: hosted version: "0.2.0" hive: dependency: transitive description: name: hive - url: "https://pub.dartlang.org" + sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941" + url: "https://pub.dev" source: hosted version: "2.2.3" hive_generator: dependency: "direct dev" description: name: hive_generator - url: "https://pub.dartlang.org" + sha256: "81fd20125cb2ce8fd23623d7744ffbaf653aae93706c9bd3bf7019ea0ace3938" + url: "https://pub.dev" source: hosted version: "1.1.3" http: dependency: "direct main" description: name: http - url: "https://pub.dartlang.org" + sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" + url: "https://pub.dev" source: hosted version: "0.13.5" http_multi_server: dependency: transitive description: name: http_multi_server - url: "https://pub.dartlang.org" + sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" + url: "https://pub.dev" source: hosted version: "3.2.1" http_parser: dependency: transitive description: name: http_parser - url: "https://pub.dartlang.org" + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" source: hosted - version: "4.0.1" + version: "4.0.2" intl: dependency: "direct main" description: name: intl - url: "https://pub.dartlang.org" + sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91" + url: "https://pub.dev" source: hosted version: "0.17.0" io: dependency: transitive description: name: io - url: "https://pub.dartlang.org" + sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.0.4" js: dependency: transitive description: name: js - url: "https://pub.dartlang.org" + sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" + url: "https://pub.dev" source: hosted - version: "0.6.3" + version: "0.6.5" json_annotation: dependency: transitive description: name: json_annotation - url: "https://pub.dartlang.org" + sha256: c33da08e136c3df0190bd5bbe51ae1df4a7d96e7954d1d7249fea2968a72d317 + url: "https://pub.dev" source: hosted - version: "4.7.0" + version: "4.8.0" logging: dependency: transitive description: name: logging - url: "https://pub.dartlang.org" + sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" + url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.1.1" matcher: dependency: transitive description: name: matcher - url: "https://pub.dartlang.org" + sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" + url: "https://pub.dev" source: hosted - version: "0.12.12" + version: "0.12.13" material_color_utilities: dependency: transitive description: name: material_color_utilities - url: "https://pub.dartlang.org" + sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + url: "https://pub.dev" source: hosted - version: "0.1.5" + version: "0.2.0" meta: dependency: transitive description: name: meta - url: "https://pub.dartlang.org" + sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" + url: "https://pub.dev" source: hosted version: "1.8.0" mime: dependency: transitive description: name: mime - url: "https://pub.dartlang.org" + sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e + url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "1.0.4" mobx: dependency: "direct main" description: name: mobx - url: "https://pub.dartlang.org" + sha256: f1862bd92c6a903fab67338f27e2f731117c3cb9ea37cee1a487f9e4e0de314a + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.3+1" mobx_codegen: dependency: "direct dev" description: name: mobx_codegen - url: "https://pub.dartlang.org" + sha256: "86122e410d8ea24dda0c69adb5c2a6ccadd5ce02ad46e144764e0d0184a06181" + url: "https://pub.dev" source: hosted - version: "2.0.7+3" + version: "2.1.1" package_config: dependency: transitive description: name: package_config - url: "https://pub.dartlang.org" + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.dev" source: hosted version: "2.1.0" path: dependency: transitive description: name: path - url: "https://pub.dartlang.org" + sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b + url: "https://pub.dev" source: hosted version: "1.8.2" path_provider: dependency: "direct main" description: name: path_provider - url: "https://pub.dartlang.org" + sha256: dcea5feb97d8abf90cab9e9030b497fb7c3cbf26b7a1fe9e3ef7dcb0a1ddec95 + url: "https://pub.dev" source: hosted - version: "2.0.11" + version: "2.0.12" path_provider_android: dependency: transitive description: name: path_provider_android - url: "https://pub.dartlang.org" + sha256: a776c088d671b27f6e3aa8881d64b87b3e80201c64e8869b811325de7a76c15e + url: "https://pub.dev" source: hosted - version: "2.0.20" - path_provider_ios: + version: "2.0.22" + path_provider_foundation: dependency: transitive description: - name: path_provider_ios - url: "https://pub.dartlang.org" + name: path_provider_foundation + sha256: "62a68e7e1c6c459f9289859e2fae58290c981ce21d1697faf54910fe1faa4c74" + url: "https://pub.dev" source: hosted - version: "2.0.11" + version: "2.1.1" path_provider_linux: dependency: transitive description: name: path_provider_linux - url: "https://pub.dartlang.org" + sha256: ab0987bf95bc591da42dffb38c77398fc43309f0b9b894dcc5d6f40c4b26c379 + url: "https://pub.dev" source: hosted version: "2.1.7" - path_provider_macos: - dependency: transitive - description: - name: path_provider_macos - url: "https://pub.dartlang.org" - source: hosted - version: "2.0.6" path_provider_platform_interface: dependency: transitive description: name: path_provider_platform_interface - url: "https://pub.dartlang.org" + sha256: f0abc8ebd7253741f05488b4813d936b4d07c6bae3e86148a09e342ee4b08e76 + url: "https://pub.dev" source: hosted version: "2.0.5" path_provider_windows: dependency: transitive description: name: path_provider_windows - url: "https://pub.dartlang.org" + sha256: bcabbe399d4042b8ee687e17548d5d3f527255253b4a639f5f8d2094a9c2b45c + url: "https://pub.dev" source: hosted version: "2.1.3" - pedantic: - dependency: transitive - description: - name: pedantic - url: "https://pub.dartlang.org" - source: hosted - version: "1.11.1" platform: dependency: transitive description: name: platform - url: "https://pub.dartlang.org" + sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" + url: "https://pub.dev" source: hosted version: "3.1.0" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - url: "https://pub.dartlang.org" + sha256: dbf0f707c78beedc9200146ad3cb0ab4d5da13c246336987be6940f026500d3a + url: "https://pub.dev" source: hosted version: "2.1.3" pointycastle: dependency: transitive description: name: pointycastle - url: "https://pub.dartlang.org" + sha256: db7306cf0249f838d1a24af52b5a5887c5bf7f31d8bb4e827d071dc0939ad346 + url: "https://pub.dev" source: hosted version: "3.6.2" pool: dependency: transitive description: name: pool - url: "https://pub.dartlang.org" + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + url: "https://pub.dev" source: hosted - version: "1.5.0" + version: "1.5.1" process: dependency: transitive description: name: process - url: "https://pub.dartlang.org" + sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" + url: "https://pub.dev" source: hosted - version: "4.2.3" + version: "4.2.4" pub_semver: dependency: transitive description: name: pub_semver - url: "https://pub.dartlang.org" + sha256: "307de764d305289ff24ad257ad5c5793ce56d04947599ad68b3baa124105fc17" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.3" pubspec_parse: dependency: transitive description: name: pubspec_parse - url: "https://pub.dartlang.org" + sha256: "75f6614d6dde2dc68948dffbaa4fe5dae32cd700eb9fb763fe11dfb45a3c4d0a" + url: "https://pub.dev" source: hosted version: "1.2.1" rxdart: dependency: "direct main" description: name: rxdart - url: "https://pub.dartlang.org" + sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" + url: "https://pub.dev" source: hosted - version: "0.27.5" + version: "0.27.7" shelf: dependency: transitive description: name: shelf - url: "https://pub.dartlang.org" + sha256: c24a96135a2ccd62c64b69315a14adc5c3419df63b4d7c05832a346fdb73682c + url: "https://pub.dev" source: hosted version: "1.4.0" shelf_web_socket: dependency: transitive description: name: shelf_web_socket - url: "https://pub.dartlang.org" + sha256: a988c0e8d8ffbdb8a28aa7ec8e449c260f3deb808781fe1284d22c5bba7156e8 + url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.0.3" sky_engine: dependency: transitive description: flutter @@ -549,128 +605,146 @@ packages: dependency: transitive description: name: source_gen - url: "https://pub.dartlang.org" + sha256: "2d79738b6bbf38a43920e2b8d189e9a3ce6cc201f4b8fc76be5e4fe377b1c38d" + url: "https://pub.dev" source: hosted - version: "1.2.5" + version: "1.2.6" source_helper: dependency: transitive description: name: source_helper - url: "https://pub.dartlang.org" + sha256: "3b67aade1d52416149c633ba1bb36df44d97c6b51830c2198e934e3fca87ca1f" + url: "https://pub.dev" source: hosted version: "1.3.3" source_span: dependency: transitive description: name: source_span - url: "https://pub.dartlang.org" + sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.9.1" stack_trace: dependency: transitive description: name: stack_trace - url: "https://pub.dartlang.org" + sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.11.0" stream_channel: dependency: transitive description: name: stream_channel - url: "https://pub.dartlang.org" + sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" stream_transform: dependency: transitive description: name: stream_transform - url: "https://pub.dartlang.org" + sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" + url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "2.1.0" string_scanner: dependency: transitive description: name: string_scanner - url: "https://pub.dartlang.org" + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.2.0" term_glyph: dependency: transitive description: name: term_glyph - url: "https://pub.dartlang.org" + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" source: hosted version: "1.2.1" test_api: dependency: transitive description: name: test_api - url: "https://pub.dartlang.org" + sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 + url: "https://pub.dev" source: hosted - version: "0.4.12" + version: "0.4.16" timing: dependency: transitive description: name: timing - url: "https://pub.dartlang.org" + sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" + url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "1.0.1" typed_data: dependency: transitive description: name: typed_data - url: "https://pub.dartlang.org" + sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" + url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.3.1" unorm_dart: dependency: "direct main" description: name: unorm_dart - url: "https://pub.dartlang.org" + sha256: "5b35bff83fce4d76467641438f9e867dc9bcfdb8c1694854f230579d68cd8f4b" + url: "https://pub.dev" source: hosted version: "0.2.0" vector_math: dependency: transitive description: name: vector_math - url: "https://pub.dartlang.org" + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.4" watcher: dependency: transitive description: name: watcher - url: "https://pub.dartlang.org" + sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" + url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "1.0.2" web_socket_channel: dependency: transitive description: name: web_socket_channel - url: "https://pub.dartlang.org" + sha256: ca49c0bc209c687b887f30527fb6a9d80040b072cc2990f34b9bec3e7663101b + url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.3.0" win32: dependency: transitive description: name: win32 - url: "https://pub.dartlang.org" + sha256: c9ebe7ee4ab0c2194e65d3a07d8c54c5d00bb001b76081c4a04cdb8448b59e46 + url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "3.1.3" xdg_directories: dependency: transitive description: name: xdg_directories - url: "https://pub.dartlang.org" + sha256: bd512f03919aac5f1313eb8249f223bacf4927031bf60b02601f81f687689e86 + url: "https://pub.dev" source: hosted - version: "0.2.0+2" + version: "0.2.0+3" yaml: dependency: transitive description: name: yaml - url: "https://pub.dartlang.org" + sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" + url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "3.1.1" sdks: - dart: ">=2.17.5 <3.0.0" + dart: ">=2.19.0 <3.0.0" flutter: ">=3.0.0" diff --git a/cw_core/lib/crypto_currency.dart b/cw_core/lib/crypto_currency.dart index 85331ee31..90051f1f7 100644 --- a/cw_core/lib/crypto_currency.dart +++ b/cw_core/lib/crypto_currency.dart @@ -119,7 +119,7 @@ class CryptoCurrency extends EnumerableItem with Serializable { static const ape = CryptoCurrency(title: 'APE', tag: 'ETH', fullName: 'ApeCoin', raw: 30, name: 'ape', iconPath: 'assets/images/ape_icon.png'); static const avaxc = CryptoCurrency(title: 'AVAX', tag: 'C-CHAIN', raw: 31, name: 'avaxc', iconPath: 'assets/images/avaxc_icon.png'); static const btt = CryptoCurrency(title: 'BTT', tag: 'ETH', fullName: 'BitTorrent', raw: 32, name: 'btt', iconPath: 'assets/images/btt_icon.png'); - static const bttc = CryptoCurrency(title: 'BTTC', tag: 'BSC', fullName: 'BitTorrent-NEW', raw: 33, name: 'bttc', iconPath: 'assets/images/bttbsc_icon.png'); + static const bttc = CryptoCurrency(title: 'BTTC', tag: 'TRX', fullName: 'BitTorrent-NEW', raw: 33, name: 'bttc', iconPath: 'assets/images/bttbsc_icon.png'); static const doge = CryptoCurrency(title: 'DOGE', fullName: 'Dogecoin', raw: 34, name: 'doge', iconPath: 'assets/images/doge_icon.png'); static const firo = CryptoCurrency(title: 'FIRO', raw: 35, name: 'firo', iconPath: 'assets/images/firo_icon.png'); static const usdttrc20 = CryptoCurrency(title: 'USDT', tag: 'TRX', fullName: 'USDT Tether', raw: 36, name: 'usdttrc20', iconPath: 'assets/images/usdttrc20_icon.png'); diff --git a/cw_core/lib/monero_amount_format.dart b/cw_core/lib/monero_amount_format.dart index 912527b4e..0bf0031c9 100644 --- a/cw_core/lib/monero_amount_format.dart +++ b/cw_core/lib/monero_amount_format.dart @@ -15,4 +15,4 @@ double moneroAmountToDouble({required int amount}) => cryptoAmountToDouble(amount: amount, divider: moneroAmountDivider); int moneroParseAmount({required String amount}) => - (double.parse(amount) * moneroAmountDivider).toInt(); + (double.parse(amount) * moneroAmountDivider).round(); diff --git a/cw_core/pubspec.lock b/cw_core/pubspec.lock index 951a97ffb..06997e8f1 100644 --- a/cw_core/pubspec.lock +++ b/cw_core/pubspec.lock @@ -5,191 +5,218 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - url: "https://pub.dartlang.org" + sha256: "4897882604d919befd350648c7f91926a9d5de99e67b455bf0917cc2362f4bb8" + url: "https://pub.dev" source: hosted version: "47.0.0" analyzer: dependency: transitive description: name: analyzer - url: "https://pub.dartlang.org" + sha256: "690e335554a8385bc9d787117d9eb52c0c03ee207a607e593de3c9d71b1cfe80" + url: "https://pub.dev" source: hosted version: "4.7.0" args: dependency: transitive description: name: args - url: "https://pub.dartlang.org" + sha256: "139d809800a412ebb26a3892da228b2d0ba36f0ef5d9a82166e5e52ec8d61611" + url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.2" asn1lib: dependency: transitive description: name: asn1lib - url: "https://pub.dartlang.org" + sha256: ab96a1cb3beeccf8145c52e449233fe68364c9641623acd3adad66f8184f1039 + url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.4.0" async: dependency: transitive description: name: async - url: "https://pub.dartlang.org" + sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 + url: "https://pub.dev" source: hosted - version: "2.9.0" + version: "2.10.0" boolean_selector: dependency: transitive description: name: boolean_selector - url: "https://pub.dartlang.org" + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" build: dependency: transitive description: name: build - url: "https://pub.dartlang.org" + sha256: "3fbda25365741f8251b39f3917fb3c8e286a96fd068a5a242e11c2012d495777" + url: "https://pub.dev" source: hosted version: "2.3.1" build_config: dependency: transitive description: name: build_config - url: "https://pub.dartlang.org" + sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 + url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.1.1" build_daemon: dependency: transitive description: name: build_daemon - url: "https://pub.dartlang.org" + sha256: "6bc5544ea6ce4428266e7ea680e945c68806c4aae2da0eb5e9ccf38df8d6acbf" + url: "https://pub.dev" source: hosted version: "3.1.0" build_resolvers: dependency: "direct dev" description: name: build_resolvers - url: "https://pub.dartlang.org" + sha256: "687cf90a3951affac1bd5f9ecb5e3e90b60487f3d9cdc359bb310f8876bb02a6" + url: "https://pub.dev" source: hosted version: "2.0.10" build_runner: dependency: "direct dev" description: name: build_runner - url: "https://pub.dartlang.org" + sha256: b0a8a7b8a76c493e85f1b84bffa0588859a06197863dba8c9036b15581fd9727 + url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.3.3" build_runner_core: dependency: transitive description: name: build_runner_core - url: "https://pub.dartlang.org" + sha256: "14febe0f5bac5ae474117a36099b4de6f1dbc52df6c5e55534b3da9591bf4292" + url: "https://pub.dev" source: hosted - version: "7.2.4" + version: "7.2.7" built_collection: dependency: transitive description: name: built_collection - url: "https://pub.dartlang.org" + sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" + url: "https://pub.dev" source: hosted version: "5.1.1" built_value: dependency: transitive description: name: built_value - url: "https://pub.dartlang.org" + sha256: "169565c8ad06adb760c3645bf71f00bff161b00002cace266cad42c5d22a7725" + url: "https://pub.dev" source: hosted - version: "8.1.3" + version: "8.4.3" characters: dependency: transitive description: name: characters - url: "https://pub.dartlang.org" + sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + url: "https://pub.dev" source: hosted version: "1.2.1" checked_yaml: dependency: transitive description: name: checked_yaml - url: "https://pub.dartlang.org" + sha256: "3d1505d91afa809d177efd4eed5bb0eb65805097a1463abdd2add076effae311" + url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.0.2" clock: dependency: transitive description: name: clock - url: "https://pub.dartlang.org" + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" source: hosted version: "1.1.1" code_builder: dependency: transitive description: name: code_builder - url: "https://pub.dartlang.org" + sha256: "0d43dd1288fd145de1ecc9a3948ad4a6d5a82f0a14c4fdd0892260787d975cbe" + url: "https://pub.dev" source: hosted - version: "4.3.0" + version: "4.4.0" collection: dependency: transitive description: name: collection - url: "https://pub.dartlang.org" + sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 + url: "https://pub.dev" source: hosted - version: "1.16.0" + version: "1.17.0" convert: dependency: transitive description: name: convert - url: "https://pub.dartlang.org" + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.1.1" crypto: dependency: transitive description: name: crypto - url: "https://pub.dartlang.org" + sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 + url: "https://pub.dev" source: hosted version: "3.0.2" dart_style: dependency: transitive description: name: dart_style - url: "https://pub.dartlang.org" + sha256: "7a03456c3490394c8e7665890333e91ae8a49be43542b616e414449ac358acd4" + url: "https://pub.dev" source: hosted version: "2.2.4" encrypt: dependency: "direct main" description: name: encrypt - url: "https://pub.dartlang.org" + sha256: "4fd4e4fdc21b9d7d4141823e1e6515cd94e7b8d84749504c232999fba25d9bbb" + url: "https://pub.dev" source: hosted version: "5.0.1" fake_async: dependency: transitive description: name: fake_async - url: "https://pub.dartlang.org" + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" source: hosted version: "1.3.1" ffi: dependency: transitive description: name: ffi - url: "https://pub.dartlang.org" + sha256: a38574032c5f1dd06c4aee541789906c12ccaab8ba01446e800d9c5b79c4a978 + url: "https://pub.dev" source: hosted version: "2.0.1" file: dependency: transitive description: name: file - url: "https://pub.dartlang.org" + sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + url: "https://pub.dev" source: hosted - version: "6.1.2" + version: "6.1.4" fixnum: dependency: transitive description: name: fixnum - url: "https://pub.dartlang.org" + sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" + url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "1.1.0" flutter: dependency: "direct main" description: flutter @@ -199,9 +226,10 @@ packages: dependency: "direct main" description: name: flutter_mobx - url: "https://pub.dartlang.org" + sha256: "0da4add0016387a7bf309a0d0c41d36c6b3ae25ed7a176409267f166509e723e" + url: "https://pub.dev" source: hosted - version: "2.0.6+4" + version: "2.0.6+5" flutter_test: dependency: "direct dev" description: flutter @@ -211,268 +239,290 @@ packages: dependency: transitive description: name: frontend_server_client - url: "https://pub.dartlang.org" + sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "3.2.0" glob: dependency: transitive description: name: glob - url: "https://pub.dartlang.org" + sha256: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c" + url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.1.1" graphs: dependency: transitive description: name: graphs - url: "https://pub.dartlang.org" + sha256: f9e130f3259f52d26f0cfc0e964513796dafed572fa52e45d2f8d6ca14db39b2 + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.2.0" hive: dependency: transitive description: name: hive - url: "https://pub.dartlang.org" + sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941" + url: "https://pub.dev" source: hosted version: "2.2.3" hive_generator: dependency: "direct dev" description: name: hive_generator - url: "https://pub.dartlang.org" + sha256: "81fd20125cb2ce8fd23623d7744ffbaf653aae93706c9bd3bf7019ea0ace3938" + url: "https://pub.dev" source: hosted version: "1.1.3" http: dependency: "direct main" description: name: http - url: "https://pub.dartlang.org" + sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" + url: "https://pub.dev" source: hosted version: "0.13.5" http_multi_server: dependency: transitive description: name: http_multi_server - url: "https://pub.dartlang.org" + sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" + url: "https://pub.dev" source: hosted version: "3.2.1" http_parser: dependency: transitive description: name: http_parser - url: "https://pub.dartlang.org" + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" source: hosted - version: "4.0.1" + version: "4.0.2" intl: dependency: "direct main" description: name: intl - url: "https://pub.dartlang.org" + sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91" + url: "https://pub.dev" source: hosted version: "0.17.0" io: dependency: transitive description: name: io - url: "https://pub.dartlang.org" + sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.0.4" js: dependency: transitive description: name: js - url: "https://pub.dartlang.org" + sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" + url: "https://pub.dev" source: hosted - version: "0.6.3" + version: "0.6.5" json_annotation: dependency: transitive description: name: json_annotation - url: "https://pub.dartlang.org" + sha256: c33da08e136c3df0190bd5bbe51ae1df4a7d96e7954d1d7249fea2968a72d317 + url: "https://pub.dev" source: hosted - version: "4.6.0" + version: "4.8.0" logging: dependency: transitive description: name: logging - url: "https://pub.dartlang.org" + sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" + url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.1.1" matcher: dependency: transitive description: name: matcher - url: "https://pub.dartlang.org" + sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" + url: "https://pub.dev" source: hosted - version: "0.12.12" + version: "0.12.13" material_color_utilities: dependency: transitive description: name: material_color_utilities - url: "https://pub.dartlang.org" + sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + url: "https://pub.dev" source: hosted - version: "0.1.5" + version: "0.2.0" meta: dependency: transitive description: name: meta - url: "https://pub.dartlang.org" + sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" + url: "https://pub.dev" source: hosted version: "1.8.0" mime: dependency: transitive description: name: mime - url: "https://pub.dartlang.org" + sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e + url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "1.0.4" mobx: dependency: "direct main" description: name: mobx - url: "https://pub.dartlang.org" + sha256: f1862bd92c6a903fab67338f27e2f731117c3cb9ea37cee1a487f9e4e0de314a + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.3+1" mobx_codegen: dependency: "direct dev" description: name: mobx_codegen - url: "https://pub.dartlang.org" + sha256: "86122e410d8ea24dda0c69adb5c2a6ccadd5ce02ad46e144764e0d0184a06181" + url: "https://pub.dev" source: hosted - version: "2.0.7+3" + version: "2.1.1" package_config: dependency: transitive description: name: package_config - url: "https://pub.dartlang.org" + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.dev" source: hosted version: "2.1.0" path: dependency: transitive description: name: path - url: "https://pub.dartlang.org" + sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b + url: "https://pub.dev" source: hosted version: "1.8.2" path_provider: dependency: "direct main" description: name: path_provider - url: "https://pub.dartlang.org" + sha256: dcea5feb97d8abf90cab9e9030b497fb7c3cbf26b7a1fe9e3ef7dcb0a1ddec95 + url: "https://pub.dev" source: hosted - version: "2.0.11" + version: "2.0.12" path_provider_android: dependency: transitive description: name: path_provider_android - url: "https://pub.dartlang.org" + sha256: a776c088d671b27f6e3aa8881d64b87b3e80201c64e8869b811325de7a76c15e + url: "https://pub.dev" source: hosted - version: "2.0.20" - path_provider_ios: + version: "2.0.22" + path_provider_foundation: dependency: transitive description: - name: path_provider_ios - url: "https://pub.dartlang.org" + name: path_provider_foundation + sha256: "62a68e7e1c6c459f9289859e2fae58290c981ce21d1697faf54910fe1faa4c74" + url: "https://pub.dev" source: hosted - version: "2.0.11" + version: "2.1.1" path_provider_linux: dependency: transitive description: name: path_provider_linux - url: "https://pub.dartlang.org" + sha256: ab0987bf95bc591da42dffb38c77398fc43309f0b9b894dcc5d6f40c4b26c379 + url: "https://pub.dev" source: hosted version: "2.1.7" - path_provider_macos: - dependency: transitive - description: - name: path_provider_macos - url: "https://pub.dartlang.org" - source: hosted - version: "2.0.6" path_provider_platform_interface: dependency: transitive description: name: path_provider_platform_interface - url: "https://pub.dartlang.org" + sha256: f0abc8ebd7253741f05488b4813d936b4d07c6bae3e86148a09e342ee4b08e76 + url: "https://pub.dev" source: hosted - version: "2.0.4" + version: "2.0.5" path_provider_windows: dependency: transitive description: name: path_provider_windows - url: "https://pub.dartlang.org" + sha256: bcabbe399d4042b8ee687e17548d5d3f527255253b4a639f5f8d2094a9c2b45c + url: "https://pub.dev" source: hosted version: "2.1.3" - pedantic: - dependency: transitive - description: - name: pedantic - url: "https://pub.dartlang.org" - source: hosted - version: "1.11.1" platform: dependency: transitive description: name: platform - url: "https://pub.dartlang.org" + sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" + url: "https://pub.dev" source: hosted version: "3.1.0" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - url: "https://pub.dartlang.org" + sha256: dbf0f707c78beedc9200146ad3cb0ab4d5da13c246336987be6940f026500d3a + url: "https://pub.dev" source: hosted version: "2.1.3" pointycastle: dependency: transitive description: name: pointycastle - url: "https://pub.dartlang.org" + sha256: db7306cf0249f838d1a24af52b5a5887c5bf7f31d8bb4e827d071dc0939ad346 + url: "https://pub.dev" source: hosted version: "3.6.2" pool: dependency: transitive description: name: pool - url: "https://pub.dartlang.org" + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + url: "https://pub.dev" source: hosted - version: "1.5.0" + version: "1.5.1" process: dependency: transitive description: name: process - url: "https://pub.dartlang.org" + sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" + url: "https://pub.dev" source: hosted - version: "4.2.3" + version: "4.2.4" pub_semver: dependency: transitive description: name: pub_semver - url: "https://pub.dartlang.org" + sha256: "307de764d305289ff24ad257ad5c5793ce56d04947599ad68b3baa124105fc17" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.3" pubspec_parse: dependency: transitive description: name: pubspec_parse - url: "https://pub.dartlang.org" + sha256: "75f6614d6dde2dc68948dffbaa4fe5dae32cd700eb9fb763fe11dfb45a3c4d0a" + url: "https://pub.dev" source: hosted version: "1.2.1" shelf: dependency: transitive description: name: shelf - url: "https://pub.dartlang.org" + sha256: c24a96135a2ccd62c64b69315a14adc5c3419df63b4d7c05832a346fdb73682c + url: "https://pub.dev" source: hosted - version: "1.3.2" + version: "1.4.0" shelf_web_socket: dependency: transitive description: name: shelf_web_socket - url: "https://pub.dartlang.org" + sha256: a988c0e8d8ffbdb8a28aa7ec8e449c260f3deb808781fe1284d22c5bba7156e8 + url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.0.3" sky_engine: dependency: transitive description: flutter @@ -482,121 +532,138 @@ packages: dependency: transitive description: name: source_gen - url: "https://pub.dartlang.org" + sha256: "2d79738b6bbf38a43920e2b8d189e9a3ce6cc201f4b8fc76be5e4fe377b1c38d" + url: "https://pub.dev" source: hosted - version: "1.2.3" + version: "1.2.6" source_helper: dependency: transitive description: name: source_helper - url: "https://pub.dartlang.org" + sha256: "3b67aade1d52416149c633ba1bb36df44d97c6b51830c2198e934e3fca87ca1f" + url: "https://pub.dev" source: hosted version: "1.3.3" source_span: dependency: transitive description: name: source_span - url: "https://pub.dartlang.org" + sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.9.1" stack_trace: dependency: transitive description: name: stack_trace - url: "https://pub.dartlang.org" + sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.11.0" stream_channel: dependency: transitive description: name: stream_channel - url: "https://pub.dartlang.org" + sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" stream_transform: dependency: transitive description: name: stream_transform - url: "https://pub.dartlang.org" + sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" + url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "2.1.0" string_scanner: dependency: transitive description: name: string_scanner - url: "https://pub.dartlang.org" + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.2.0" term_glyph: dependency: transitive description: name: term_glyph - url: "https://pub.dartlang.org" + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" source: hosted version: "1.2.1" test_api: dependency: transitive description: name: test_api - url: "https://pub.dartlang.org" + sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 + url: "https://pub.dev" source: hosted - version: "0.4.12" + version: "0.4.16" timing: dependency: transitive description: name: timing - url: "https://pub.dartlang.org" + sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" + url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "1.0.1" typed_data: dependency: transitive description: name: typed_data - url: "https://pub.dartlang.org" + sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" + url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.3.1" vector_math: dependency: transitive description: name: vector_math - url: "https://pub.dartlang.org" + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.4" watcher: dependency: transitive description: name: watcher - url: "https://pub.dartlang.org" + sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" + url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "1.0.2" web_socket_channel: dependency: transitive description: name: web_socket_channel - url: "https://pub.dartlang.org" + sha256: ca49c0bc209c687b887f30527fb6a9d80040b072cc2990f34b9bec3e7663101b + url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.3.0" win32: dependency: transitive description: name: win32 - url: "https://pub.dartlang.org" + sha256: c9ebe7ee4ab0c2194e65d3a07d8c54c5d00bb001b76081c4a04cdb8448b59e46 + url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "3.1.3" xdg_directories: dependency: transitive description: name: xdg_directories - url: "https://pub.dartlang.org" + sha256: bd512f03919aac5f1313eb8249f223bacf4927031bf60b02601f81f687689e86 + url: "https://pub.dev" source: hosted - version: "0.2.0+2" + version: "0.2.0+3" yaml: dependency: transitive description: name: yaml - url: "https://pub.dartlang.org" + sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" + url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "3.1.1" sdks: - dart: ">=2.17.5 <3.0.0" + dart: ">=2.19.0 <3.0.0" flutter: ">=3.0.0" diff --git a/cw_haven/lib/haven_transaction_info.dart b/cw_haven/lib/haven_transaction_info.dart index 277370467..6ffb60e6b 100644 --- a/cw_haven/lib/haven_transaction_info.dart +++ b/cw_haven/lib/haven_transaction_info.dart @@ -8,7 +8,8 @@ import 'package:cw_haven/api/transaction_history.dart'; class HavenTransactionInfo extends TransactionInfo { HavenTransactionInfo(this.id, this.height, this.direction, this.date, - this.isPending, this.amount, this.accountIndex, this.addressIndex, this.fee); + this.isPending, this.amount, this.accountIndex, this.addressIndex, this.fee, + this.confirmations); HavenTransactionInfo.fromMap(Map map) : id = (map['hash'] ?? '') as String, @@ -22,6 +23,7 @@ class HavenTransactionInfo extends TransactionInfo { amount = map['amount'] as int, accountIndex = int.parse(map['accountIndex'] as String), addressIndex = map['addressIndex'] as int, + confirmations = map['confirmations'] as int, key = getTxKey((map['hash'] ?? '') as String), fee = map['fee'] as int? ?? 0; @@ -35,6 +37,7 @@ class HavenTransactionInfo extends TransactionInfo { amount = row.getAmount(), accountIndex = row.subaddrAccount, addressIndex = row.subaddrIndex, + confirmations = row.confirmations, key = null, //getTxKey(row.getHash()), fee = row.fee, assetType = row.getAssetType(); @@ -48,6 +51,7 @@ class HavenTransactionInfo extends TransactionInfo { final int amount; final int fee; final int addressIndex; + final int confirmations; late String recipientAddress; late String assetType; String? _fiatAmount; diff --git a/cw_haven/pubspec.lock b/cw_haven/pubspec.lock index 6d741c268..84a4fe16a 100644 --- a/cw_haven/pubspec.lock +++ b/cw_haven/pubspec.lock @@ -5,147 +5,168 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - url: "https://pub.dartlang.org" + sha256: "4897882604d919befd350648c7f91926a9d5de99e67b455bf0917cc2362f4bb8" + url: "https://pub.dev" source: hosted version: "47.0.0" analyzer: dependency: transitive description: name: analyzer - url: "https://pub.dartlang.org" + sha256: "690e335554a8385bc9d787117d9eb52c0c03ee207a607e593de3c9d71b1cfe80" + url: "https://pub.dev" source: hosted version: "4.7.0" args: dependency: transitive description: name: args - url: "https://pub.dartlang.org" + sha256: "139d809800a412ebb26a3892da228b2d0ba36f0ef5d9a82166e5e52ec8d61611" + url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.2" asn1lib: dependency: transitive description: name: asn1lib - url: "https://pub.dartlang.org" + sha256: ab96a1cb3beeccf8145c52e449233fe68364c9641623acd3adad66f8184f1039 + url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.4.0" async: dependency: transitive description: name: async - url: "https://pub.dartlang.org" + sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 + url: "https://pub.dev" source: hosted - version: "2.9.0" + version: "2.10.0" boolean_selector: dependency: transitive description: name: boolean_selector - url: "https://pub.dartlang.org" + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" build: dependency: transitive description: name: build - url: "https://pub.dartlang.org" + sha256: "3fbda25365741f8251b39f3917fb3c8e286a96fd068a5a242e11c2012d495777" + url: "https://pub.dev" source: hosted version: "2.3.1" build_config: dependency: transitive description: name: build_config - url: "https://pub.dartlang.org" + sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 + url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.1.1" build_daemon: dependency: transitive description: name: build_daemon - url: "https://pub.dartlang.org" + sha256: "6bc5544ea6ce4428266e7ea680e945c68806c4aae2da0eb5e9ccf38df8d6acbf" + url: "https://pub.dev" source: hosted version: "3.1.0" build_resolvers: dependency: "direct dev" description: name: build_resolvers - url: "https://pub.dartlang.org" + sha256: "687cf90a3951affac1bd5f9ecb5e3e90b60487f3d9cdc359bb310f8876bb02a6" + url: "https://pub.dev" source: hosted version: "2.0.10" build_runner: dependency: "direct dev" description: name: build_runner - url: "https://pub.dartlang.org" + sha256: b0a8a7b8a76c493e85f1b84bffa0588859a06197863dba8c9036b15581fd9727 + url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.3.3" build_runner_core: dependency: transitive description: name: build_runner_core - url: "https://pub.dartlang.org" + sha256: "14febe0f5bac5ae474117a36099b4de6f1dbc52df6c5e55534b3da9591bf4292" + url: "https://pub.dev" source: hosted - version: "7.2.4" + version: "7.2.7" built_collection: dependency: transitive description: name: built_collection - url: "https://pub.dartlang.org" + sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" + url: "https://pub.dev" source: hosted version: "5.1.1" built_value: dependency: transitive description: name: built_value - url: "https://pub.dartlang.org" + sha256: "169565c8ad06adb760c3645bf71f00bff161b00002cace266cad42c5d22a7725" + url: "https://pub.dev" source: hosted - version: "8.1.4" + version: "8.4.3" characters: dependency: transitive description: name: characters - url: "https://pub.dartlang.org" + sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + url: "https://pub.dev" source: hosted version: "1.2.1" checked_yaml: dependency: transitive description: name: checked_yaml - url: "https://pub.dartlang.org" + sha256: "3d1505d91afa809d177efd4eed5bb0eb65805097a1463abdd2add076effae311" + url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.0.2" clock: dependency: transitive description: name: clock - url: "https://pub.dartlang.org" + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" source: hosted version: "1.1.1" code_builder: dependency: transitive description: name: code_builder - url: "https://pub.dartlang.org" + sha256: "0d43dd1288fd145de1ecc9a3948ad4a6d5a82f0a14c4fdd0892260787d975cbe" + url: "https://pub.dev" source: hosted - version: "4.3.0" + version: "4.4.0" collection: dependency: transitive description: name: collection - url: "https://pub.dartlang.org" + sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 + url: "https://pub.dev" source: hosted - version: "1.16.0" + version: "1.17.0" convert: dependency: transitive description: name: convert - url: "https://pub.dartlang.org" + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.1.1" crypto: dependency: transitive description: name: crypto - url: "https://pub.dartlang.org" + sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 + url: "https://pub.dev" source: hosted version: "3.0.2" cw_core: @@ -159,44 +180,50 @@ packages: dependency: transitive description: name: dart_style - url: "https://pub.dartlang.org" + sha256: "7a03456c3490394c8e7665890333e91ae8a49be43542b616e414449ac358acd4" + url: "https://pub.dev" source: hosted version: "2.2.4" encrypt: dependency: transitive description: name: encrypt - url: "https://pub.dartlang.org" + sha256: "4fd4e4fdc21b9d7d4141823e1e6515cd94e7b8d84749504c232999fba25d9bbb" + url: "https://pub.dev" source: hosted version: "5.0.1" fake_async: dependency: transitive description: name: fake_async - url: "https://pub.dartlang.org" + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" source: hosted version: "1.3.1" ffi: dependency: "direct main" description: name: ffi - url: "https://pub.dartlang.org" + sha256: "13a6ccf6a459a125b3fcdb6ec73bd5ff90822e071207c663bfd1f70062d51d18" + url: "https://pub.dev" source: hosted version: "1.2.1" file: dependency: transitive description: name: file - url: "https://pub.dartlang.org" + sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + url: "https://pub.dev" source: hosted - version: "6.1.2" + version: "6.1.4" fixnum: dependency: transitive description: name: fixnum - url: "https://pub.dartlang.org" + sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" + url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "1.1.0" flutter: dependency: "direct main" description: flutter @@ -206,9 +233,10 @@ packages: dependency: "direct main" description: name: flutter_mobx - url: "https://pub.dartlang.org" + sha256: "0da4add0016387a7bf309a0d0c41d36c6b3ae25ed7a176409267f166509e723e" + url: "https://pub.dev" source: hosted - version: "2.0.6+4" + version: "2.0.6+5" flutter_test: dependency: "direct dev" description: flutter @@ -218,268 +246,290 @@ packages: dependency: transitive description: name: frontend_server_client - url: "https://pub.dartlang.org" + sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "3.2.0" glob: dependency: transitive description: name: glob - url: "https://pub.dartlang.org" + sha256: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c" + url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.1.1" graphs: dependency: transitive description: name: graphs - url: "https://pub.dartlang.org" + sha256: f9e130f3259f52d26f0cfc0e964513796dafed572fa52e45d2f8d6ca14db39b2 + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.2.0" hive: dependency: transitive description: name: hive - url: "https://pub.dartlang.org" + sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941" + url: "https://pub.dev" source: hosted version: "2.2.3" hive_generator: dependency: "direct dev" description: name: hive_generator - url: "https://pub.dartlang.org" + sha256: "81fd20125cb2ce8fd23623d7744ffbaf653aae93706c9bd3bf7019ea0ace3938" + url: "https://pub.dev" source: hosted version: "1.1.3" http: dependency: "direct main" description: name: http - url: "https://pub.dartlang.org" + sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" + url: "https://pub.dev" source: hosted version: "0.13.5" http_multi_server: dependency: transitive description: name: http_multi_server - url: "https://pub.dartlang.org" + sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" + url: "https://pub.dev" source: hosted version: "3.2.1" http_parser: dependency: transitive description: name: http_parser - url: "https://pub.dartlang.org" + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" source: hosted - version: "4.0.1" + version: "4.0.2" intl: dependency: "direct main" description: name: intl - url: "https://pub.dartlang.org" + sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91" + url: "https://pub.dev" source: hosted version: "0.17.0" io: dependency: transitive description: name: io - url: "https://pub.dartlang.org" + sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.0.4" js: dependency: transitive description: name: js - url: "https://pub.dartlang.org" + sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" + url: "https://pub.dev" source: hosted - version: "0.6.3" + version: "0.6.5" json_annotation: dependency: transitive description: name: json_annotation - url: "https://pub.dartlang.org" + sha256: c33da08e136c3df0190bd5bbe51ae1df4a7d96e7954d1d7249fea2968a72d317 + url: "https://pub.dev" source: hosted - version: "4.6.0" + version: "4.8.0" logging: dependency: transitive description: name: logging - url: "https://pub.dartlang.org" + sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" + url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.1.1" matcher: dependency: transitive description: name: matcher - url: "https://pub.dartlang.org" + sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" + url: "https://pub.dev" source: hosted - version: "0.12.12" + version: "0.12.13" material_color_utilities: dependency: transitive description: name: material_color_utilities - url: "https://pub.dartlang.org" + sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + url: "https://pub.dev" source: hosted - version: "0.1.5" + version: "0.2.0" meta: dependency: transitive description: name: meta - url: "https://pub.dartlang.org" + sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" + url: "https://pub.dev" source: hosted version: "1.8.0" mime: dependency: transitive description: name: mime - url: "https://pub.dartlang.org" + sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e + url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "1.0.4" mobx: dependency: "direct main" description: name: mobx - url: "https://pub.dartlang.org" + sha256: f1862bd92c6a903fab67338f27e2f731117c3cb9ea37cee1a487f9e4e0de314a + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.3+1" mobx_codegen: dependency: "direct dev" description: name: mobx_codegen - url: "https://pub.dartlang.org" + sha256: "86122e410d8ea24dda0c69adb5c2a6ccadd5ce02ad46e144764e0d0184a06181" + url: "https://pub.dev" source: hosted - version: "2.0.7+3" + version: "2.1.1" package_config: dependency: transitive description: name: package_config - url: "https://pub.dartlang.org" + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.dev" source: hosted version: "2.1.0" path: dependency: transitive description: name: path - url: "https://pub.dartlang.org" + sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b + url: "https://pub.dev" source: hosted version: "1.8.2" path_provider: dependency: "direct main" description: name: path_provider - url: "https://pub.dartlang.org" + sha256: dcea5feb97d8abf90cab9e9030b497fb7c3cbf26b7a1fe9e3ef7dcb0a1ddec95 + url: "https://pub.dev" source: hosted - version: "2.0.11" + version: "2.0.12" path_provider_android: dependency: transitive description: name: path_provider_android - url: "https://pub.dartlang.org" + sha256: a776c088d671b27f6e3aa8881d64b87b3e80201c64e8869b811325de7a76c15e + url: "https://pub.dev" source: hosted - version: "2.0.20" - path_provider_ios: + version: "2.0.22" + path_provider_foundation: dependency: transitive description: - name: path_provider_ios - url: "https://pub.dartlang.org" + name: path_provider_foundation + sha256: "62a68e7e1c6c459f9289859e2fae58290c981ce21d1697faf54910fe1faa4c74" + url: "https://pub.dev" source: hosted - version: "2.0.11" + version: "2.1.1" path_provider_linux: dependency: transitive description: name: path_provider_linux - url: "https://pub.dartlang.org" + sha256: ab0987bf95bc591da42dffb38c77398fc43309f0b9b894dcc5d6f40c4b26c379 + url: "https://pub.dev" source: hosted version: "2.1.7" - path_provider_macos: - dependency: transitive - description: - name: path_provider_macos - url: "https://pub.dartlang.org" - source: hosted - version: "2.0.6" path_provider_platform_interface: dependency: transitive description: name: path_provider_platform_interface - url: "https://pub.dartlang.org" + sha256: f0abc8ebd7253741f05488b4813d936b4d07c6bae3e86148a09e342ee4b08e76 + url: "https://pub.dev" source: hosted - version: "2.0.4" + version: "2.0.5" path_provider_windows: dependency: transitive description: name: path_provider_windows - url: "https://pub.dartlang.org" + sha256: a34ecd7fb548f8e57321fd8e50d865d266941b54e6c3b7758cf8f37c24116905 + url: "https://pub.dev" source: hosted version: "2.0.7" - pedantic: - dependency: transitive - description: - name: pedantic - url: "https://pub.dartlang.org" - source: hosted - version: "1.11.1" platform: dependency: transitive description: name: platform - url: "https://pub.dartlang.org" + sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" + url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.1.0" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - url: "https://pub.dartlang.org" + sha256: dbf0f707c78beedc9200146ad3cb0ab4d5da13c246336987be6940f026500d3a + url: "https://pub.dev" source: hosted version: "2.1.3" pointycastle: dependency: transitive description: name: pointycastle - url: "https://pub.dartlang.org" + sha256: db7306cf0249f838d1a24af52b5a5887c5bf7f31d8bb4e827d071dc0939ad346 + url: "https://pub.dev" source: hosted version: "3.6.2" pool: dependency: transitive description: name: pool - url: "https://pub.dartlang.org" + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + url: "https://pub.dev" source: hosted - version: "1.5.0" + version: "1.5.1" process: dependency: transitive description: name: process - url: "https://pub.dartlang.org" + sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" + url: "https://pub.dev" source: hosted - version: "4.2.3" + version: "4.2.4" pub_semver: dependency: transitive description: name: pub_semver - url: "https://pub.dartlang.org" + sha256: "307de764d305289ff24ad257ad5c5793ce56d04947599ad68b3baa124105fc17" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.3" pubspec_parse: dependency: transitive description: name: pubspec_parse - url: "https://pub.dartlang.org" + sha256: "75f6614d6dde2dc68948dffbaa4fe5dae32cd700eb9fb763fe11dfb45a3c4d0a" + url: "https://pub.dev" source: hosted version: "1.2.1" shelf: dependency: transitive description: name: shelf - url: "https://pub.dartlang.org" + sha256: c24a96135a2ccd62c64b69315a14adc5c3419df63b4d7c05832a346fdb73682c + url: "https://pub.dev" source: hosted - version: "1.3.2" + version: "1.4.0" shelf_web_socket: dependency: transitive description: name: shelf_web_socket - url: "https://pub.dartlang.org" + sha256: a988c0e8d8ffbdb8a28aa7ec8e449c260f3deb808781fe1284d22c5bba7156e8 + url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.0.3" sky_engine: dependency: transitive description: flutter @@ -489,121 +539,138 @@ packages: dependency: transitive description: name: source_gen - url: "https://pub.dartlang.org" + sha256: "2d79738b6bbf38a43920e2b8d189e9a3ce6cc201f4b8fc76be5e4fe377b1c38d" + url: "https://pub.dev" source: hosted - version: "1.2.3" + version: "1.2.6" source_helper: dependency: transitive description: name: source_helper - url: "https://pub.dartlang.org" + sha256: "3b67aade1d52416149c633ba1bb36df44d97c6b51830c2198e934e3fca87ca1f" + url: "https://pub.dev" source: hosted version: "1.3.3" source_span: dependency: transitive description: name: source_span - url: "https://pub.dartlang.org" + sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.9.1" stack_trace: dependency: transitive description: name: stack_trace - url: "https://pub.dartlang.org" + sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.11.0" stream_channel: dependency: transitive description: name: stream_channel - url: "https://pub.dartlang.org" + sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" stream_transform: dependency: transitive description: name: stream_transform - url: "https://pub.dartlang.org" + sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" + url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "2.1.0" string_scanner: dependency: transitive description: name: string_scanner - url: "https://pub.dartlang.org" + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.2.0" term_glyph: dependency: transitive description: name: term_glyph - url: "https://pub.dartlang.org" + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" source: hosted version: "1.2.1" test_api: dependency: transitive description: name: test_api - url: "https://pub.dartlang.org" + sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 + url: "https://pub.dev" source: hosted - version: "0.4.12" + version: "0.4.16" timing: dependency: transitive description: name: timing - url: "https://pub.dartlang.org" + sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" + url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "1.0.1" typed_data: dependency: transitive description: name: typed_data - url: "https://pub.dartlang.org" + sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" + url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.3.1" vector_math: dependency: transitive description: name: vector_math - url: "https://pub.dartlang.org" + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.4" watcher: dependency: transitive description: name: watcher - url: "https://pub.dartlang.org" + sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" + url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "1.0.2" web_socket_channel: dependency: transitive description: name: web_socket_channel - url: "https://pub.dartlang.org" + sha256: ca49c0bc209c687b887f30527fb6a9d80040b072cc2990f34b9bec3e7663101b + url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.3.0" win32: dependency: transitive description: name: win32 - url: "https://pub.dartlang.org" + sha256: c0e3a4f7be7dae51d8f152230b86627e3397c1ba8c3fa58e63d44a9f3edc9cef + url: "https://pub.dev" source: hosted version: "2.6.1" xdg_directories: dependency: transitive description: name: xdg_directories - url: "https://pub.dartlang.org" + sha256: bd512f03919aac5f1313eb8249f223bacf4927031bf60b02601f81f687689e86 + url: "https://pub.dev" source: hosted - version: "0.2.0+2" + version: "0.2.0+3" yaml: dependency: transitive description: name: yaml - url: "https://pub.dartlang.org" + sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" + url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "3.1.1" sdks: - dart: ">=2.17.5 <3.0.0" - flutter: ">=2.8.1" + dart: ">=2.19.0 <3.0.0" + flutter: ">=3.0.0" diff --git a/cw_monero/lib/monero_transaction_info.dart b/cw_monero/lib/monero_transaction_info.dart index 2dfdaf408..90cc3c279 100644 --- a/cw_monero/lib/monero_transaction_info.dart +++ b/cw_monero/lib/monero_transaction_info.dart @@ -8,7 +8,8 @@ import 'package:cw_monero/api/transaction_history.dart'; class MoneroTransactionInfo extends TransactionInfo { MoneroTransactionInfo(this.id, this.height, this.direction, this.date, - this.isPending, this.amount, this.accountIndex, this.addressIndex, this.fee); + this.isPending, this.amount, this.accountIndex, this.addressIndex, this.fee, + this.confirmations); MoneroTransactionInfo.fromMap(Map map) : id = (map['hash'] ?? '') as String, @@ -22,6 +23,7 @@ class MoneroTransactionInfo extends TransactionInfo { amount = map['amount'] as int, accountIndex = int.parse(map['accountIndex'] as String), addressIndex = map['addressIndex'] as int, + confirmations = map['confirmations'] as int, key = getTxKey((map['hash'] ?? '') as String), fee = map['fee'] as int ?? 0 { additionalInfo = { @@ -41,6 +43,7 @@ class MoneroTransactionInfo extends TransactionInfo { amount = row.getAmount(), accountIndex = row.subaddrAccount, addressIndex = row.subaddrIndex, + confirmations = row.confirmations, key = getTxKey(row.getHash()), fee = row.fee { additionalInfo = { @@ -59,6 +62,7 @@ class MoneroTransactionInfo extends TransactionInfo { final int amount; final int fee; final int addressIndex; + final int confirmations; String? recipientAddress; String? key; String? _fiatAmount; diff --git a/cw_monero/pubspec.lock b/cw_monero/pubspec.lock index 557550754..d75ee0928 100644 --- a/cw_monero/pubspec.lock +++ b/cw_monero/pubspec.lock @@ -5,147 +5,168 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - url: "https://pub.dartlang.org" + sha256: "4897882604d919befd350648c7f91926a9d5de99e67b455bf0917cc2362f4bb8" + url: "https://pub.dev" source: hosted version: "47.0.0" analyzer: dependency: transitive description: name: analyzer - url: "https://pub.dartlang.org" + sha256: "690e335554a8385bc9d787117d9eb52c0c03ee207a607e593de3c9d71b1cfe80" + url: "https://pub.dev" source: hosted version: "4.7.0" args: dependency: transitive description: name: args - url: "https://pub.dartlang.org" + sha256: "139d809800a412ebb26a3892da228b2d0ba36f0ef5d9a82166e5e52ec8d61611" + url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.2" asn1lib: dependency: transitive description: name: asn1lib - url: "https://pub.dartlang.org" + sha256: ab96a1cb3beeccf8145c52e449233fe68364c9641623acd3adad66f8184f1039 + url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.4.0" async: dependency: transitive description: name: async - url: "https://pub.dartlang.org" + sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 + url: "https://pub.dev" source: hosted - version: "2.9.0" + version: "2.10.0" boolean_selector: dependency: transitive description: name: boolean_selector - url: "https://pub.dartlang.org" + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" build: dependency: transitive description: name: build - url: "https://pub.dartlang.org" + sha256: "3fbda25365741f8251b39f3917fb3c8e286a96fd068a5a242e11c2012d495777" + url: "https://pub.dev" source: hosted version: "2.3.1" build_config: dependency: transitive description: name: build_config - url: "https://pub.dartlang.org" + sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 + url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.1.1" build_daemon: dependency: transitive description: name: build_daemon - url: "https://pub.dartlang.org" + sha256: "6bc5544ea6ce4428266e7ea680e945c68806c4aae2da0eb5e9ccf38df8d6acbf" + url: "https://pub.dev" source: hosted version: "3.1.0" build_resolvers: dependency: "direct dev" description: name: build_resolvers - url: "https://pub.dartlang.org" + sha256: "687cf90a3951affac1bd5f9ecb5e3e90b60487f3d9cdc359bb310f8876bb02a6" + url: "https://pub.dev" source: hosted version: "2.0.10" build_runner: dependency: "direct dev" description: name: build_runner - url: "https://pub.dartlang.org" + sha256: b0a8a7b8a76c493e85f1b84bffa0588859a06197863dba8c9036b15581fd9727 + url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.3.3" build_runner_core: dependency: transitive description: name: build_runner_core - url: "https://pub.dartlang.org" + sha256: "14febe0f5bac5ae474117a36099b4de6f1dbc52df6c5e55534b3da9591bf4292" + url: "https://pub.dev" source: hosted - version: "7.2.4" + version: "7.2.7" built_collection: dependency: transitive description: name: built_collection - url: "https://pub.dartlang.org" + sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" + url: "https://pub.dev" source: hosted version: "5.1.1" built_value: dependency: transitive description: name: built_value - url: "https://pub.dartlang.org" + sha256: "169565c8ad06adb760c3645bf71f00bff161b00002cace266cad42c5d22a7725" + url: "https://pub.dev" source: hosted - version: "8.1.3" + version: "8.4.3" characters: dependency: transitive description: name: characters - url: "https://pub.dartlang.org" + sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + url: "https://pub.dev" source: hosted version: "1.2.1" checked_yaml: dependency: transitive description: name: checked_yaml - url: "https://pub.dartlang.org" + sha256: "3d1505d91afa809d177efd4eed5bb0eb65805097a1463abdd2add076effae311" + url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.0.2" clock: dependency: transitive description: name: clock - url: "https://pub.dartlang.org" + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" source: hosted version: "1.1.1" code_builder: dependency: transitive description: name: code_builder - url: "https://pub.dartlang.org" + sha256: "0d43dd1288fd145de1ecc9a3948ad4a6d5a82f0a14c4fdd0892260787d975cbe" + url: "https://pub.dev" source: hosted - version: "4.3.0" + version: "4.4.0" collection: dependency: transitive description: name: collection - url: "https://pub.dartlang.org" + sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 + url: "https://pub.dev" source: hosted - version: "1.16.0" + version: "1.17.0" convert: dependency: transitive description: name: convert - url: "https://pub.dartlang.org" + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.1.1" crypto: dependency: transitive description: name: crypto - url: "https://pub.dartlang.org" + sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 + url: "https://pub.dev" source: hosted version: "3.0.2" cw_core: @@ -159,44 +180,50 @@ packages: dependency: transitive description: name: dart_style - url: "https://pub.dartlang.org" + sha256: "7a03456c3490394c8e7665890333e91ae8a49be43542b616e414449ac358acd4" + url: "https://pub.dev" source: hosted version: "2.2.4" encrypt: dependency: "direct main" description: name: encrypt - url: "https://pub.dartlang.org" + sha256: "4fd4e4fdc21b9d7d4141823e1e6515cd94e7b8d84749504c232999fba25d9bbb" + url: "https://pub.dev" source: hosted version: "5.0.1" fake_async: dependency: transitive description: name: fake_async - url: "https://pub.dartlang.org" + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" source: hosted version: "1.3.1" ffi: dependency: "direct main" description: name: ffi - url: "https://pub.dartlang.org" + sha256: "13a6ccf6a459a125b3fcdb6ec73bd5ff90822e071207c663bfd1f70062d51d18" + url: "https://pub.dev" source: hosted version: "1.2.1" file: dependency: transitive description: name: file - url: "https://pub.dartlang.org" + sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + url: "https://pub.dev" source: hosted - version: "6.1.2" + version: "6.1.4" fixnum: dependency: transitive description: name: fixnum - url: "https://pub.dartlang.org" + sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" + url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "1.1.0" flutter: dependency: "direct main" description: flutter @@ -206,9 +233,10 @@ packages: dependency: "direct main" description: name: flutter_mobx - url: "https://pub.dartlang.org" + sha256: "0da4add0016387a7bf309a0d0c41d36c6b3ae25ed7a176409267f166509e723e" + url: "https://pub.dev" source: hosted - version: "2.0.6+4" + version: "2.0.6+5" flutter_test: dependency: "direct dev" description: flutter @@ -218,268 +246,290 @@ packages: dependency: transitive description: name: frontend_server_client - url: "https://pub.dartlang.org" + sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "3.2.0" glob: dependency: transitive description: name: glob - url: "https://pub.dartlang.org" + sha256: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c" + url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.1.1" graphs: dependency: transitive description: name: graphs - url: "https://pub.dartlang.org" + sha256: f9e130f3259f52d26f0cfc0e964513796dafed572fa52e45d2f8d6ca14db39b2 + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.2.0" hive: dependency: transitive description: name: hive - url: "https://pub.dartlang.org" + sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941" + url: "https://pub.dev" source: hosted version: "2.2.3" hive_generator: dependency: "direct dev" description: name: hive_generator - url: "https://pub.dartlang.org" + sha256: "81fd20125cb2ce8fd23623d7744ffbaf653aae93706c9bd3bf7019ea0ace3938" + url: "https://pub.dev" source: hosted version: "1.1.3" http: dependency: "direct main" description: name: http - url: "https://pub.dartlang.org" + sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" + url: "https://pub.dev" source: hosted version: "0.13.5" http_multi_server: dependency: transitive description: name: http_multi_server - url: "https://pub.dartlang.org" + sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" + url: "https://pub.dev" source: hosted version: "3.2.1" http_parser: dependency: transitive description: name: http_parser - url: "https://pub.dartlang.org" + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" source: hosted - version: "4.0.1" + version: "4.0.2" intl: dependency: "direct main" description: name: intl - url: "https://pub.dartlang.org" + sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91" + url: "https://pub.dev" source: hosted version: "0.17.0" io: dependency: transitive description: name: io - url: "https://pub.dartlang.org" + sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.0.4" js: dependency: transitive description: name: js - url: "https://pub.dartlang.org" + sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" + url: "https://pub.dev" source: hosted - version: "0.6.3" + version: "0.6.5" json_annotation: dependency: transitive description: name: json_annotation - url: "https://pub.dartlang.org" + sha256: c33da08e136c3df0190bd5bbe51ae1df4a7d96e7954d1d7249fea2968a72d317 + url: "https://pub.dev" source: hosted - version: "4.6.0" + version: "4.8.0" logging: dependency: transitive description: name: logging - url: "https://pub.dartlang.org" + sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" + url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.1.1" matcher: dependency: transitive description: name: matcher - url: "https://pub.dartlang.org" + sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" + url: "https://pub.dev" source: hosted - version: "0.12.12" + version: "0.12.13" material_color_utilities: dependency: transitive description: name: material_color_utilities - url: "https://pub.dartlang.org" + sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + url: "https://pub.dev" source: hosted - version: "0.1.5" + version: "0.2.0" meta: dependency: transitive description: name: meta - url: "https://pub.dartlang.org" + sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" + url: "https://pub.dev" source: hosted version: "1.8.0" mime: dependency: transitive description: name: mime - url: "https://pub.dartlang.org" + sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e + url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "1.0.4" mobx: dependency: "direct main" description: name: mobx - url: "https://pub.dartlang.org" + sha256: f1862bd92c6a903fab67338f27e2f731117c3cb9ea37cee1a487f9e4e0de314a + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.3+1" mobx_codegen: dependency: "direct dev" description: name: mobx_codegen - url: "https://pub.dartlang.org" + sha256: "86122e410d8ea24dda0c69adb5c2a6ccadd5ce02ad46e144764e0d0184a06181" + url: "https://pub.dev" source: hosted - version: "2.0.7+3" + version: "2.1.1" package_config: dependency: transitive description: name: package_config - url: "https://pub.dartlang.org" + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.dev" source: hosted version: "2.1.0" path: dependency: transitive description: name: path - url: "https://pub.dartlang.org" + sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b + url: "https://pub.dev" source: hosted version: "1.8.2" path_provider: dependency: "direct main" description: name: path_provider - url: "https://pub.dartlang.org" + sha256: dcea5feb97d8abf90cab9e9030b497fb7c3cbf26b7a1fe9e3ef7dcb0a1ddec95 + url: "https://pub.dev" source: hosted - version: "2.0.11" + version: "2.0.12" path_provider_android: dependency: transitive description: name: path_provider_android - url: "https://pub.dartlang.org" + sha256: a776c088d671b27f6e3aa8881d64b87b3e80201c64e8869b811325de7a76c15e + url: "https://pub.dev" source: hosted - version: "2.0.20" - path_provider_ios: + version: "2.0.22" + path_provider_foundation: dependency: transitive description: - name: path_provider_ios - url: "https://pub.dartlang.org" + name: path_provider_foundation + sha256: "62a68e7e1c6c459f9289859e2fae58290c981ce21d1697faf54910fe1faa4c74" + url: "https://pub.dev" source: hosted - version: "2.0.11" + version: "2.1.1" path_provider_linux: dependency: transitive description: name: path_provider_linux - url: "https://pub.dartlang.org" + sha256: ab0987bf95bc591da42dffb38c77398fc43309f0b9b894dcc5d6f40c4b26c379 + url: "https://pub.dev" source: hosted version: "2.1.7" - path_provider_macos: - dependency: transitive - description: - name: path_provider_macos - url: "https://pub.dartlang.org" - source: hosted - version: "2.0.6" path_provider_platform_interface: dependency: transitive description: name: path_provider_platform_interface - url: "https://pub.dartlang.org" + sha256: f0abc8ebd7253741f05488b4813d936b4d07c6bae3e86148a09e342ee4b08e76 + url: "https://pub.dev" source: hosted - version: "2.0.4" + version: "2.0.5" path_provider_windows: dependency: transitive description: name: path_provider_windows - url: "https://pub.dartlang.org" + sha256: a34ecd7fb548f8e57321fd8e50d865d266941b54e6c3b7758cf8f37c24116905 + url: "https://pub.dev" source: hosted version: "2.0.7" - pedantic: - dependency: transitive - description: - name: pedantic - url: "https://pub.dartlang.org" - source: hosted - version: "1.11.1" platform: dependency: transitive description: name: platform - url: "https://pub.dartlang.org" + sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" + url: "https://pub.dev" source: hosted version: "3.1.0" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - url: "https://pub.dartlang.org" + sha256: dbf0f707c78beedc9200146ad3cb0ab4d5da13c246336987be6940f026500d3a + url: "https://pub.dev" source: hosted version: "2.1.3" pointycastle: dependency: transitive description: name: pointycastle - url: "https://pub.dartlang.org" + sha256: db7306cf0249f838d1a24af52b5a5887c5bf7f31d8bb4e827d071dc0939ad346 + url: "https://pub.dev" source: hosted version: "3.6.2" pool: dependency: transitive description: name: pool - url: "https://pub.dartlang.org" + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + url: "https://pub.dev" source: hosted - version: "1.5.0" + version: "1.5.1" process: dependency: transitive description: name: process - url: "https://pub.dartlang.org" + sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" + url: "https://pub.dev" source: hosted version: "4.2.4" pub_semver: dependency: transitive description: name: pub_semver - url: "https://pub.dartlang.org" + sha256: "307de764d305289ff24ad257ad5c5793ce56d04947599ad68b3baa124105fc17" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.3" pubspec_parse: dependency: transitive description: name: pubspec_parse - url: "https://pub.dartlang.org" + sha256: "75f6614d6dde2dc68948dffbaa4fe5dae32cd700eb9fb763fe11dfb45a3c4d0a" + url: "https://pub.dev" source: hosted version: "1.2.1" shelf: dependency: transitive description: name: shelf - url: "https://pub.dartlang.org" + sha256: c24a96135a2ccd62c64b69315a14adc5c3419df63b4d7c05832a346fdb73682c + url: "https://pub.dev" source: hosted - version: "1.3.2" + version: "1.4.0" shelf_web_socket: dependency: transitive description: name: shelf_web_socket - url: "https://pub.dartlang.org" + sha256: a988c0e8d8ffbdb8a28aa7ec8e449c260f3deb808781fe1284d22c5bba7156e8 + url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.0.3" sky_engine: dependency: transitive description: flutter @@ -489,121 +539,138 @@ packages: dependency: transitive description: name: source_gen - url: "https://pub.dartlang.org" + sha256: "2d79738b6bbf38a43920e2b8d189e9a3ce6cc201f4b8fc76be5e4fe377b1c38d" + url: "https://pub.dev" source: hosted - version: "1.2.3" + version: "1.2.6" source_helper: dependency: transitive description: name: source_helper - url: "https://pub.dartlang.org" + sha256: "3b67aade1d52416149c633ba1bb36df44d97c6b51830c2198e934e3fca87ca1f" + url: "https://pub.dev" source: hosted version: "1.3.3" source_span: dependency: transitive description: name: source_span - url: "https://pub.dartlang.org" + sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.9.1" stack_trace: dependency: transitive description: name: stack_trace - url: "https://pub.dartlang.org" + sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.11.0" stream_channel: dependency: transitive description: name: stream_channel - url: "https://pub.dartlang.org" + sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" stream_transform: dependency: transitive description: name: stream_transform - url: "https://pub.dartlang.org" + sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" + url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "2.1.0" string_scanner: dependency: transitive description: name: string_scanner - url: "https://pub.dartlang.org" + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.2.0" term_glyph: dependency: transitive description: name: term_glyph - url: "https://pub.dartlang.org" + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" source: hosted version: "1.2.1" test_api: dependency: transitive description: name: test_api - url: "https://pub.dartlang.org" + sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 + url: "https://pub.dev" source: hosted - version: "0.4.12" + version: "0.4.16" timing: dependency: transitive description: name: timing - url: "https://pub.dartlang.org" + sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" + url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "1.0.1" typed_data: dependency: transitive description: name: typed_data - url: "https://pub.dartlang.org" + sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" + url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.3.1" vector_math: dependency: transitive description: name: vector_math - url: "https://pub.dartlang.org" + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.4" watcher: dependency: transitive description: name: watcher - url: "https://pub.dartlang.org" + sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" + url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "1.0.2" web_socket_channel: dependency: transitive description: name: web_socket_channel - url: "https://pub.dartlang.org" + sha256: ca49c0bc209c687b887f30527fb6a9d80040b072cc2990f34b9bec3e7663101b + url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.3.0" win32: dependency: transitive description: name: win32 - url: "https://pub.dartlang.org" + sha256: c0e3a4f7be7dae51d8f152230b86627e3397c1ba8c3fa58e63d44a9f3edc9cef + url: "https://pub.dev" source: hosted version: "2.6.1" xdg_directories: dependency: transitive description: name: xdg_directories - url: "https://pub.dartlang.org" + sha256: bd512f03919aac5f1313eb8249f223bacf4927031bf60b02601f81f687689e86 + url: "https://pub.dev" source: hosted - version: "0.2.0+2" + version: "0.2.0+3" yaml: dependency: transitive description: name: yaml - url: "https://pub.dartlang.org" + sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" + url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "3.1.1" sdks: - dart: ">=2.17.5 <3.0.0" - flutter: ">=2.8.1" + dart: ">=2.19.0 <3.0.0" + flutter: ">=3.0.0" diff --git a/lib/anypay/any_pay_payment.dart b/lib/anypay/any_pay_payment.dart index 37bf7949e..0657b0526 100644 --- a/lib/anypay/any_pay_payment.dart +++ b/lib/anypay/any_pay_payment.dart @@ -57,7 +57,7 @@ class AnyPayPayment { List get outAddresses { return instructions - .map((instuction) => instuction.outputs.map((out) => out.address)) + .map((instruction) => instruction.outputs.map((out) => out.address)) .expand((e) => e) .toList(); } diff --git a/lib/anypay/anypay_api.dart b/lib/anypay/anypay_api.dart index 5eb9e460b..679d0eabf 100644 --- a/lib/anypay/anypay_api.dart +++ b/lib/anypay/anypay_api.dart @@ -80,7 +80,7 @@ class AnyPayApi { final response = await post(Uri.parse(uri), headers: headers, body: utf8.encode(json.encode(body))); if (response.statusCode == 400) { final decodedBody = json.decode(response.body) as Map; - throw Exception(decodedBody['message'] as String); + throw Exception(decodedBody['message'] as String? ?? 'Unexpected response\nError code: 400'); } if (response.statusCode != 200) { diff --git a/lib/core/address_validator.dart b/lib/core/address_validator.dart index 519cd92a3..22ad6a9d8 100644 --- a/lib/core/address_validator.dart +++ b/lib/core/address_validator.dart @@ -198,4 +198,26 @@ class AddressValidator extends TextValidator { return []; } } + + static String? getAddressFromStringPattern(CryptoCurrency type) { + switch (type) { + case CryptoCurrency.xmr: + return '([^0-9a-zA-Z]|^)4[0-9a-zA-Z]{94}([^0-9a-zA-Z]|\$)' + '|([^0-9a-zA-Z]|^)8[0-9a-zA-Z]{94}([^0-9a-zA-Z]|\$)' + '|([^0-9a-zA-Z]|^)[0-9a-zA-Z]{106}([^0-9a-zA-Z]|\$)'; + case CryptoCurrency.btc: + return '([^0-9a-zA-Z]|^)1[0-9a-zA-Z]{32}([^0-9a-zA-Z]|\$)' + '|([^0-9a-zA-Z]|^)1[0-9a-zA-Z]{33}([^0-9a-zA-Z]|\$)' + '|([^0-9a-zA-Z]|^)3[0-9a-zA-Z]{32}([^0-9a-zA-Z]|\$)' + '|([^0-9a-zA-Z]|^)3[0-9a-zA-Z]{33}([^0-9a-zA-Z]|\$)' + '|([^0-9a-zA-Z]|^)bc1[0-9a-zA-Z]{39}([^0-9a-zA-Z]|\$)' + '|([^0-9a-zA-Z]|^)bc1[0-9a-zA-Z]{59}([^0-9a-zA-Z]|\$)'; + case CryptoCurrency.ltc: + return '([^0-9a-zA-Z]|^)^L[a-zA-Z0-9]{26,33}([^0-9a-zA-Z]|\$)' + '|([^0-9a-zA-Z]|^)[LM][a-km-zA-HJ-NP-Z1-9]{26,33}([^0-9a-zA-Z]|\$)' + '|([^0-9a-zA-Z]|^)ltc[a-zA-Z0-9]{26,45}([^0-9a-zA-Z]|\$)'; + default: + return null; + } + } } diff --git a/lib/core/wallet_loading_service.dart b/lib/core/wallet_loading_service.dart index 5bae5b346..761c6acce 100644 --- a/lib/core/wallet_loading_service.dart +++ b/lib/core/wallet_loading_service.dart @@ -22,13 +22,13 @@ class WalletLoadingService { final wallet = await walletService.openWallet(name, password); if (type == WalletType.monero) { - await upateMoneroWalletPassword(wallet); + await updateMoneroWalletPassword(wallet); } return wallet; } - Future upateMoneroWalletPassword(WalletBase wallet) async { + Future updateMoneroWalletPassword(WalletBase wallet) async { final key = PreferencesKey.moneroWalletUpdateV1Key(wallet.name); var isPasswordUpdated = sharedPreferences.getBool(key) ?? false; @@ -37,8 +37,8 @@ class WalletLoadingService { } final password = generateWalletPassword(); - // Save new generated password with backup key for case - // if wallet will change password, but it will faild to updated in secure storage + // Save new generated password with backup key for case where + // wallet will change password, but it will fail to update in secure storage final bakWalletName = '#__${wallet.name}_bak__#'; await keyService.saveWalletPassword(walletName: bakWalletName, password: password); await wallet.changePassword(password); diff --git a/lib/entities/language_service.dart b/lib/entities/language_service.dart index 3bb096b19..968c3e843 100644 --- a/lib/entities/language_service.dart +++ b/lib/entities/language_service.dart @@ -23,7 +23,10 @@ class LanguageService { 'ar': 'العربية (Arabic)', 'tr': 'Türkçe (Turkish)', 'my': 'မြန်မာ (Burmese)', - 'id': 'Bahasa Indonesia (Indonesian)', + 'bg': 'Български (Bulgarian)', + 'cs': 'čeština (Czech)', + 'ur': 'اردو (Urdu)', + 'id': 'Bahasa Indonesia (Indonesian)' }; static const Map localeCountryCode = { @@ -46,7 +49,10 @@ class LanguageService { 'ar': 'sau', 'tr': 'tur', 'my': 'mmr', - 'id': 'idn', + 'bg': 'bgr', + 'cs': 'czk', + 'ur': 'pak', + 'id': 'idn' }; static final list = {}; diff --git a/lib/entities/openalias_record.dart b/lib/entities/openalias_record.dart index 9e2b3f680..842a711fe 100644 --- a/lib/entities/openalias_record.dart +++ b/lib/entities/openalias_record.dart @@ -1,5 +1,4 @@ import 'package:basic_utils/basic_utils.dart'; -import 'package:cw_core/wallet_type.dart'; class OpenaliasRecord { OpenaliasRecord({ @@ -22,69 +21,68 @@ class OpenaliasRecord { return formattedName; } - static Future fetchAddressAndName({ + static Future?> lookupOpenAliasRecord(String name) async { + try { + final txtRecord = await DnsUtils.lookupRecord(name, RRecordType.TXT, dnssec: true); + + return txtRecord; + } catch (e) { + print("${e.toString()}"); + return null; + } + } + + static OpenaliasRecord fetchAddressAndName({ required String formattedName, required String ticker, - }) async { + required List txtRecord, + }) { String address = formattedName; String name = formattedName; String note = ''; - if (formattedName.contains(".")) { - try { - final txtRecord = await DnsUtils.lookupRecord( - formattedName, RRecordType.TXT, - dnssec: true); + for (RRecord element in txtRecord) { + String record = element.data; - if (txtRecord != null) { - for (RRecord element in txtRecord) { - String record = element.data; + if (record.contains("oa1:$ticker") && record.contains("recipient_address")) { + record = record.replaceAll('\"', ""); - if (record.contains("oa1:$ticker") && - record.contains("recipient_address")) { - record = record.replaceAll('\"', ""); + final dataList = record.split(";"); - final dataList = record.split(";"); + address = dataList + .where((item) => (item.contains("recipient_address"))) + .toString() + .replaceAll("oa1:$ticker recipient_address=", "") + .replaceAll("(", "") + .replaceAll(")", "") + .trim(); - address = dataList - .where((item) => (item.contains("recipient_address"))) - .toString() - .replaceAll("oa1:$ticker recipient_address=", "") - .replaceAll("(", "") - .replaceAll(")", "") - .trim(); + final recipientName = dataList + .where((item) => (item.contains("recipient_name"))) + .toString() + .replaceAll("(", "") + .replaceAll(")", "") + .trim(); - final recipientName = dataList - .where((item) => (item.contains("recipient_name"))) - .toString() - .replaceAll("(", "") - .replaceAll(")", "") - .trim(); - - if (recipientName.isNotEmpty) { - name = recipientName.replaceAll("recipient_name=", ""); - } - - final description = dataList - .where((item) => (item.contains("tx_description"))) - .toString() - .replaceAll("(", "") - .replaceAll(")", "") - .trim(); - - if (description.isNotEmpty) { - note = description.replaceAll("tx_description=", ""); - } - - break; - } - } + if (recipientName.isNotEmpty) { + name = recipientName.replaceAll("recipient_name=", ""); } - } catch (e) { - print("${e.toString()}"); - } - } - return OpenaliasRecord(address: address, name: name, description: note); + final description = dataList + .where((item) => (item.contains("tx_description"))) + .toString() + .replaceAll("(", "") + .replaceAll(")", "") + .trim(); + + if (description.isNotEmpty) { + note = description.replaceAll("tx_description=", ""); + } + + break; + } + } + return OpenaliasRecord(address: address, name: name, description: note); +} } diff --git a/lib/entities/parse_address_from_domain.dart b/lib/entities/parse_address_from_domain.dart index 775f6e229..fce9d9a56 100644 --- a/lib/entities/parse_address_from_domain.dart +++ b/lib/entities/parse_address_from_domain.dart @@ -1,40 +1,75 @@ +import 'package:cake_wallet/core/address_validator.dart'; import 'package:cake_wallet/core/yat_service.dart'; import 'package:cake_wallet/entities/openalias_record.dart'; import 'package:cake_wallet/entities/parsed_address.dart'; import 'package:cake_wallet/entities/unstoppable_domain_address.dart'; import 'package:cake_wallet/entities/emoji_string_extension.dart'; +import 'package:cake_wallet/twitter/twitter_api.dart'; +import 'package:cw_core/crypto_currency.dart'; import 'package:cw_core/wallet_type.dart'; import 'package:cake_wallet/entities/fio_address_provider.dart'; class AddressResolver { - AddressResolver({required this.yatService, required this.walletType}); - + final YatService yatService; final WalletType walletType; - + static const unstoppableDomains = [ - 'crypto', - 'zil', - 'x', - 'coin', - 'wallet', - 'bitcoin', - '888', - 'nft', - 'dao', - 'blockchain' -]; + 'crypto', + 'zil', + 'x', + 'coin', + 'wallet', + 'bitcoin', + '888', + 'nft', + 'dao', + 'blockchain' + ]; + + static String? extractAddressByType({required String raw, required CryptoCurrency type}) { + final addressPattern = AddressValidator.getAddressFromStringPattern(type); + + if (addressPattern == null) { + throw 'Unexpected token: $type for getAddressFromStringPattern'; + } + + final match = RegExp(addressPattern).firstMatch(raw); + return match?.group(0)?.replaceAll(RegExp('[^0-9a-zA-Z]'), ''); + } Future resolve(String text, String ticker) async { try { - if (text.contains('@') && !text.contains('.')) { + if (text.startsWith('@') && !text.substring(1).contains('@')) { + final formattedName = text.substring(1); + final twitterUser = await TwitterApi.lookupUserByName(userName: formattedName); + final addressFromBio = extractAddressByType( + raw: twitterUser.description, type: CryptoCurrency.fromString(ticker)); + if (addressFromBio != null) { + return ParsedAddress.fetchTwitterAddress(address: addressFromBio, name: text); + } + final tweets = twitterUser.tweets; + if (tweets != null) { + var subString = StringBuffer(); + tweets.forEach((item) { + subString.writeln(item.text); + }); + final userTweetsText = subString.toString(); + final addressFromPinnedTweet = + extractAddressByType(raw: userTweetsText, type: CryptoCurrency.fromString(ticker)); + + if (addressFromPinnedTweet != null) { + return ParsedAddress.fetchTwitterAddress(address: addressFromPinnedTweet, name: text); + } + } + } + if (!text.startsWith('@') && text.contains('@') && !text.contains('.')) { final bool isFioRegistered = await FioAddressProvider.checkAvail(text); if (isFioRegistered) { final address = await FioAddressProvider.getPubAddress(text, ticker); return ParsedAddress.fetchFioAddress(address: address, name: text); - } - + } } if (text.hasOnlyEmojis) { if (walletType != WalletType.haven) { @@ -55,10 +90,14 @@ class AddressResolver { return ParsedAddress.fetchUnstoppableDomainAddress(address: address, name: text); } - final record = await OpenaliasRecord.fetchAddressAndName( - formattedName: formattedName, ticker: ticker); - return ParsedAddress.fetchOpenAliasAddress(record: record, name: text); - + if (formattedName.contains(".")) { + final txtRecord = await OpenaliasRecord.lookupOpenAliasRecord(formattedName); + if (txtRecord != null) { + final record = await OpenaliasRecord.fetchAddressAndName( + formattedName: formattedName, ticker: ticker, txtRecord: txtRecord); + return ParsedAddress.fetchOpenAliasAddress(record: record, name: text); + } + } } catch (e) { print(e.toString()); } diff --git a/lib/entities/parsed_address.dart b/lib/entities/parsed_address.dart index 09cecbf04..a73b44e33 100644 --- a/lib/entities/parsed_address.dart +++ b/lib/entities/parsed_address.dart @@ -1,8 +1,7 @@ import 'package:cake_wallet/entities/openalias_record.dart'; import 'package:cake_wallet/entities/yat_record.dart'; -import 'package:flutter/material.dart'; -enum ParseFrom { unstoppableDomains, openAlias, yatRecord, fio, notParsed } +enum ParseFrom { unstoppableDomains, openAlias, yatRecord, fio, notParsed, twitter } class ParsedAddress { ParsedAddress({ @@ -41,11 +40,7 @@ class ParsedAddress { ); } - factory ParsedAddress.fetchOpenAliasAddress({OpenaliasRecord? record, required String name}){ - final formattedName = OpenaliasRecord.formatDomainName(name); - if (record == null || record.address.contains(formattedName)) { - return ParsedAddress(addresses: [name]); - } + factory ParsedAddress.fetchOpenAliasAddress({required OpenaliasRecord record, required String name}){ return ParsedAddress( addresses: [record.address], name: record.name, @@ -62,6 +57,14 @@ class ParsedAddress { ); } + factory ParsedAddress.fetchTwitterAddress({required String address, required String name}){ + return ParsedAddress( + addresses: [address], + name: name, + parseFrom: ParseFrom.twitter, + ); + } + final List addresses; final String name; final String description; diff --git a/lib/entities/preferences_key.dart b/lib/entities/preferences_key.dart index 90d4dcad7..a44dcb3d9 100644 --- a/lib/entities/preferences_key.dart +++ b/lib/entities/preferences_key.dart @@ -29,6 +29,7 @@ class PreferencesKey { static const moneroWalletPasswordUpdateV1Base = 'monero_wallet_update_v1'; static const pinTimeOutDuration = 'pin_timeout_duration'; static const lastAuthTimeMilliseconds = 'last_auth_time_milliseconds'; + static const lastPopupDate = 'last_popup_date'; static String moneroWalletUpdateV1Key(String name) diff --git a/lib/exchange/changenow/changenow_exchange_provider.dart b/lib/exchange/changenow/changenow_exchange_provider.dart index a9fb7c9ca..3f18d43b1 100644 --- a/lib/exchange/changenow/changenow_exchange_provider.dart +++ b/lib/exchange/changenow/changenow_exchange_provider.dart @@ -143,6 +143,7 @@ class ChangeNowExchangeProvider extends ExchangeProvider { final inputAddress = responseJSON['payinAddress'] as String; final refundAddress = responseJSON['refundAddress'] as String; final extraId = responseJSON['payinExtraId'] as String?; + final payoutAddress = responseJSON['payoutAddress'] as String; return Trade( id: id, @@ -154,7 +155,8 @@ class ChangeNowExchangeProvider extends ExchangeProvider { extraId: extraId, createdAt: DateTime.now(), amount: responseJSON['fromAmount']?.toString() ?? _request.fromAmount, - state: TradeState.created); + state: TradeState.created, + payoutAddress: payoutAddress); } @override @@ -192,6 +194,7 @@ class ChangeNowExchangeProvider extends ExchangeProvider { final extraId = responseJSON['payinExtraId'] as String; final outputTransaction = responseJSON['payoutHash'] as String; final expiredAtRaw = responseJSON['validUntil'] as String; + final payoutAddress = responseJSON['payoutAddress'] as String; final expiredAt = DateTime.tryParse(expiredAtRaw)?.toLocal(); return Trade( @@ -204,7 +207,8 @@ class ChangeNowExchangeProvider extends ExchangeProvider { state: state, extraId: extraId, expiredAt: expiredAt, - outputTransaction: outputTransaction); + outputTransaction: outputTransaction, + payoutAddress: payoutAddress); } @override @@ -271,6 +275,10 @@ class ChangeNowExchangeProvider extends ExchangeProvider { switch(currency) { case CryptoCurrency.zec: return 'zec'; + case CryptoCurrency.usdcpoly: + return 'usdcmatic'; + case CryptoCurrency.maticpoly: + return 'maticmainnet'; default: return currency.title.toLowerCase(); } diff --git a/lib/exchange/sideshift/sideshift_exchange_provider.dart b/lib/exchange/sideshift/sideshift_exchange_provider.dart index 59d7964cb..2fc593988 100644 --- a/lib/exchange/sideshift/sideshift_exchange_provider.dart +++ b/lib/exchange/sideshift/sideshift_exchange_provider.dart @@ -150,6 +150,7 @@ class SideShiftExchangeProvider extends ExchangeProvider { refundAddress: settleAddress, state: TradeState.created, amount: _request.depositAmount, + payoutAddress: settleAddress, createdAt: DateTime.now(), ); } @@ -244,6 +245,7 @@ class SideShiftExchangeProvider extends ExchangeProvider { final inputAddress = responseJSON['depositAddress']['address'] as String; final expectedSendAmount = responseJSON['depositAmount'].toString(); final deposits = responseJSON['deposits'] as List?; + final settleAddress = responseJSON['settleAddress']['address'] as String; TradeState? state; String? status; @@ -264,6 +266,7 @@ class SideShiftExchangeProvider extends ExchangeProvider { amount: expectedSendAmount, state: state, expiredAt: expiredAt, + payoutAddress: settleAddress ); } diff --git a/lib/exchange/simpleswap/simpleswap_exchange_provider.dart b/lib/exchange/simpleswap/simpleswap_exchange_provider.dart index 2521c1486..6c5c23460 100644 --- a/lib/exchange/simpleswap/simpleswap_exchange_provider.dart +++ b/lib/exchange/simpleswap/simpleswap_exchange_provider.dart @@ -108,6 +108,7 @@ class SimpleSwapExchangeProvider extends ExchangeProvider { final responseJSON = json.decode(response.body) as Map; final id = responseJSON['id'] as String; final inputAddress = responseJSON['address_from'] as String; + final payoutAddress = responseJSON['address_to'] as String; final settleAddress = responseJSON['user_refund_address'] as String; final extraId = responseJSON['extra_id_from'] as String?; return Trade( @@ -120,6 +121,7 @@ class SimpleSwapExchangeProvider extends ExchangeProvider { extraId: extraId, state: TradeState.created, amount: _request.amount, + payoutAddress: payoutAddress, createdAt: DateTime.now(), ); } @@ -189,6 +191,7 @@ class SimpleSwapExchangeProvider extends ExchangeProvider { final expectedSendAmount = responseJSON['expected_amount'].toString(); final extraId = responseJSON['extra_id_from'] as String?; final status = responseJSON['status'] as String; + final payoutAddress = responseJSON['address_to'] as String; final state = TradeState.deserialize(raw: status); return Trade( @@ -200,6 +203,7 @@ class SimpleSwapExchangeProvider extends ExchangeProvider { inputAddress: inputAddress, amount: expectedSendAmount, state: state, + payoutAddress: payoutAddress, ); } @@ -231,6 +235,10 @@ class SimpleSwapExchangeProvider extends ExchangeProvider { return 'usdcpoly'; case CryptoCurrency.usdcsol: return 'usdcspl'; + case CryptoCurrency.matic: + return 'maticerc20'; + case CryptoCurrency.maticpoly: + return 'matic'; default: return currency.title.toLowerCase(); } diff --git a/lib/exchange/trade.dart b/lib/exchange/trade.dart index 99b73e789..f20a080b7 100644 --- a/lib/exchange/trade.dart +++ b/lib/exchange/trade.dart @@ -21,7 +21,8 @@ class Trade extends HiveObject { this.extraId, this.outputTransaction, this.refundAddress, - this.walletId}) { + this.walletId, + this.payoutAddress}) { if (provider != null) { providerRaw = provider.raw; } @@ -88,6 +89,9 @@ class Trade extends HiveObject { @HiveField(12) String? walletId; + @HiveField(13) + String? payoutAddress; + static Trade fromMap(Map map) { return Trade( id: map['id'] as String, diff --git a/lib/main.dart b/lib/main.dart index a8d0064f4..7ba1f204a 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,22 +1,12 @@ import 'dart:async'; -import 'dart:convert'; -import 'dart:io'; -import 'dart:isolate'; -import 'package:cake_wallet/bitcoin/bitcoin.dart'; import 'package:cake_wallet/core/auth_service.dart'; import 'package:cake_wallet/entities/language_service.dart'; import 'package:cake_wallet/buy/order.dart'; -import 'package:cake_wallet/entities/preferences_key.dart'; -import 'package:cake_wallet/ionia/ionia_category.dart'; -import 'package:cake_wallet/ionia/ionia_merchant.dart'; -import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart'; import 'package:cake_wallet/store/yat/yat_store.dart'; -import 'package:cake_wallet/themes/theme_list.dart'; -import 'package:cake_wallet/utils/show_pop_up.dart'; +import 'package:cake_wallet/utils/exception_handler.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:flutter_mailer/flutter_mailer.dart'; import 'package:hive/hive.dart'; import 'package:cake_wallet/di.dart'; import 'package:path_provider/path_provider.dart'; @@ -56,14 +46,12 @@ Future main() async { await runZonedGuarded(() async { WidgetsFlutterBinding.ensureInitialized(); - FlutterError.onError = (errorDetails) { - _onError(errorDetails); - }; + FlutterError.onError = ExceptionHandler.onError; /// A callback that is invoked when an unhandled error occurs in the root /// isolate. PlatformDispatcher.instance.onError = (error, stack) { - _onError(FlutterErrorDetails(exception: error, stack: stack)); + ExceptionHandler.onError(FlutterErrorDetails(exception: error, stack: stack)); return true; }; @@ -154,85 +142,10 @@ Future main() async { initialMigrationVersion: 19); runApp(App()); }, (error, stackTrace) async { - _onError(FlutterErrorDetails(exception: error, stack: stackTrace)); + ExceptionHandler.onError(FlutterErrorDetails(exception: error, stack: stackTrace)); }); } -void _saveException(String? error, StackTrace? stackTrace) async { - final appDocDir = await getApplicationDocumentsDirectory(); - - final file = File('${appDocDir.path}/error.txt'); - final exception = { - "${DateTime.now()}": { - "Error": error, - "StackTrace": stackTrace.toString(), - } - }; - - const String separator = - '''\n\n========================================================== - ==========================================================\n\n'''; - - await file.writeAsString( - jsonEncode(exception) + separator, - mode: FileMode.append, - ); -} - -void _sendExceptionFile() async { - try { - final appDocDir = await getApplicationDocumentsDirectory(); - - final file = File('${appDocDir.path}/error.txt'); - - final MailOptions mailOptions = MailOptions( - subject: 'Mobile App Issue', - recipients: ['support@cakewallet.com'], - attachments: [file.path], - ); - - final result = await FlutterMailer.send(mailOptions); - - // Clear file content if the error was sent or saved. - // On android we can't know if it was sent or saved - if (result.name == MailerResponse.sent.name || - result.name == MailerResponse.saved.name || - result.name == MailerResponse.android.name) { - file.writeAsString("", mode: FileMode.write); - } - } catch (e, s) { - _saveException(e.toString(), s); - } -} - -void _onError(FlutterErrorDetails errorDetails) { - _saveException(errorDetails.exception.toString(), errorDetails.stack); - - WidgetsBinding.instance.addPostFrameCallback( - (timeStamp) { - showPopUp( - context: navigatorKey.currentContext!, - builder: (context) { - return AlertWithTwoActions( - isDividerExist: true, - alertTitle: S.of(context).error, - alertContent: S.of(context).error_dialog_content, - rightButtonText: S.of(context).send, - leftButtonText: S.of(context).do_not_send, - actionRightButton: () { - Navigator.of(context).pop(); - _sendExceptionFile(); - }, - actionLeftButton: () { - Navigator.of(context).pop(); - }, - ); - }, - ); - }, - ); -} - Future initialSetup( {required SharedPreferences sharedPreferences, required Box nodes, diff --git a/lib/router.dart b/lib/router.dart index 896ddd99b..cb4952d0f 100644 --- a/lib/router.dart +++ b/lib/router.dart @@ -330,7 +330,7 @@ Route createRoute(RouteSettings settings) { getIt.get()); case Routes.pickerAddressBook: - final selectedCurrency = settings.arguments as CryptoCurrency; + final selectedCurrency = settings.arguments as CryptoCurrency?; return MaterialPageRoute( builder: (_) => getIt.get(param1: selectedCurrency)); diff --git a/lib/src/screens/backup/backup_page.dart b/lib/src/screens/backup/backup_page.dart index a055066c0..f819e88e5 100644 --- a/lib/src/screens/backup/backup_page.dart +++ b/lib/src/screens/backup/backup_page.dart @@ -1,10 +1,9 @@ import 'dart:io'; import 'package:cake_wallet/palette.dart'; +import 'package:cake_wallet/utils/share_util.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; -import 'package:share_plus/share_plus.dart'; -import 'package:cross_file/cross_file.dart'; import 'package:cake_wallet/utils/show_bar.dart'; import 'package:cake_wallet/routes.dart'; import 'package:cake_wallet/generated/i18n.dart'; @@ -110,7 +109,7 @@ class BackupPage extends BasePage { if (Platform.isAndroid) { onExportAndroid(context, backup); } else { - await share(backup); + await share(backup, context); } }, actionLeftButton: () => Navigator.of(dialogContext).pop()); @@ -140,18 +139,14 @@ class BackupPage extends BasePage { }, actionLeftButton: () async { Navigator.of(dialogContext).pop(); - await share(backup); + await share(backup, context); }); }); } - Future share(BackupExportFile backup) async { - const mimeType = 'application/*'; + Future share(BackupExportFile backup, BuildContext context) async { final path = await backupViewModelBase.saveBackupFileLocally(backup); - await Share.shareXFiles([XFile( - path, - name: backup.name, - mimeType: mimeType)]); + await ShareUtil.shareFile(filePath: path, fileName: backup.name, context: context); await backupViewModelBase.removeBackupFileLocally(backup); } } diff --git a/lib/src/screens/dashboard/dashboard_page.dart b/lib/src/screens/dashboard/dashboard_page.dart index c21365aa4..699e887ac 100644 --- a/lib/src/screens/dashboard/dashboard_page.dart +++ b/lib/src/screens/dashboard/dashboard_page.dart @@ -8,7 +8,6 @@ import 'package:cake_wallet/src/widgets/alert_with_one_action.dart'; import 'package:cake_wallet/themes/theme_base.dart'; import 'package:cake_wallet/utils/show_pop_up.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/cupertino.dart'; import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; import 'package:cake_wallet/src/screens/dashboard/widgets/menu_widget.dart'; @@ -229,7 +228,8 @@ class DashboardPage extends BasePage { } await Future.delayed(Duration(seconds: 1)); - await showPopUp( + if (context.mounted) { + await showPopUp( context: context, builder: (BuildContext context) { return AlertWithOneAction( @@ -239,6 +239,7 @@ class DashboardPage extends BasePage { buttonText: S.of(context).understand, buttonAction: () => Navigator.of(context).pop()); }); + } }); var needToPresentYat = false; diff --git a/lib/src/screens/dashboard/widgets/address_page.dart b/lib/src/screens/dashboard/widgets/address_page.dart index 9a06dc39d..a09eb2ba8 100644 --- a/lib/src/screens/dashboard/widgets/address_page.dart +++ b/lib/src/screens/dashboard/widgets/address_page.dart @@ -1,10 +1,8 @@ import 'package:cake_wallet/src/screens/base_page.dart'; -import 'package:cake_wallet/src/widgets/alert_with_one_action.dart'; import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart'; import 'package:cake_wallet/src/widgets/keyboard_done_button.dart'; -import 'package:cake_wallet/src/widgets/primary_button.dart'; -import 'package:cake_wallet/store/settings_store.dart'; import 'package:cake_wallet/themes/theme_base.dart'; +import 'package:cake_wallet/utils/share_util.dart'; import 'package:cake_wallet/utils/show_pop_up.dart'; import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart'; import 'package:flutter/material.dart'; @@ -15,7 +13,6 @@ import 'package:cake_wallet/generated/i18n.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:keyboard_actions/keyboard_actions.dart'; import 'package:mobx/mobx.dart'; -import 'package:share_plus/share_plus.dart'; class AddressPage extends BasePage { AddressPage({ @@ -100,7 +97,12 @@ class AddressPage extends BasePage { highlightColor: Colors.transparent, splashColor: Colors.transparent, iconSize: 25, - onPressed: () => Share.share(addressListViewModel.address.address), + onPressed: () { + ShareUtil.share( + text: addressListViewModel.address.address, + context: context, + ); + }, icon: shareImage, ), ) : null; @@ -115,7 +117,8 @@ class AddressPage extends BasePage { } await Future.delayed(Duration(seconds: 1)); - await showPopUp( + if (context.mounted) { + await showPopUp( context: context, builder: (BuildContext context) { return AlertWithTwoActions( @@ -129,6 +132,7 @@ class AddressPage extends BasePage { Navigator.of(context).pop(); }); }); + } }); return KeyboardActions( diff --git a/lib/src/screens/dashboard/widgets/transaction_raw.dart b/lib/src/screens/dashboard/widgets/transaction_raw.dart index 7ba6cbf0e..b7d8cef93 100644 --- a/lib/src/screens/dashboard/widgets/transaction_raw.dart +++ b/lib/src/screens/dashboard/widgets/transaction_raw.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import 'package:cw_core/transaction_direction.dart'; -import 'package:cake_wallet/generated/i18n.dart'; class TransactionRow extends StatelessWidget { TransactionRow( @@ -9,6 +8,7 @@ class TransactionRow extends StatelessWidget { required this.formattedAmount, required this.formattedFiatAmount, required this.isPending, + required this.title, required this.onTap}); final VoidCallback onTap; @@ -17,6 +17,7 @@ class TransactionRow extends StatelessWidget { final String formattedAmount; final String formattedFiatAmount; final bool isPending; + final String title; @override Widget build(BuildContext context) { @@ -49,11 +50,7 @@ class TransactionRow extends StatelessWidget { Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text( - (direction == TransactionDirection.incoming - ? S.of(context).received - : S.of(context).sent) + - (isPending ? S.of(context).pending : ''), + Text(title, style: TextStyle( fontSize: 16, fontWeight: FontWeight.w500, diff --git a/lib/src/screens/dashboard/widgets/transactions_page.dart b/lib/src/screens/dashboard/widgets/transactions_page.dart index 64f02c73c..cda23b8c9 100644 --- a/lib/src/screens/dashboard/widgets/transactions_page.dart +++ b/lib/src/screens/dashboard/widgets/transactions_page.dart @@ -60,7 +60,8 @@ class TransactionsPage extends StatelessWidget { formattedFiatAmount: dashboardViewModel.balanceViewModel.isFiatDisabled ? '' : item.formattedFiatAmount, - isPending: transaction.isPending)); + isPending: transaction.isPending, + title: item.formattedTitle + item.formattedStatus)); } if (item is TradeListItem) { diff --git a/lib/src/screens/exchange_trade/exchange_trade_page.dart b/lib/src/screens/exchange_trade/exchange_trade_page.dart index 5aacf3f1f..9eb17c762 100644 --- a/lib/src/screens/exchange_trade/exchange_trade_page.dart +++ b/lib/src/screens/exchange_trade/exchange_trade_page.dart @@ -112,7 +112,7 @@ class ExchangeTradeState extends State { width: 16, color: Theme.of(context).primaryTextTheme!.overline!.color!); - _setEffects(context); + _setEffects(); return Container( child: ScrollableWithBottomSection( @@ -165,14 +165,7 @@ class ExchangeTradeState extends State { .color! ) ), - child: QrImage( - data: trade.inputAddress ?? fetchingLabel, - backgroundColor: Colors.transparent, - foregroundColor: Theme.of(context) - .accentTextTheme! - .subtitle2! - .color!, - ), + child: QrImage(data: trade.inputAddress ?? fetchingLabel), )))), Spacer(flex: 3) ]), @@ -241,7 +234,7 @@ class ExchangeTradeState extends State { ); } - void _setEffects(BuildContext context) { + void _setEffects() { if (_effectsInstalled) { return; } @@ -252,12 +245,12 @@ class ExchangeTradeState extends State { WidgetsBinding.instance.addPostFrameCallback((_) { showPopUp( context: context, - builder: (BuildContext context) { + builder: (BuildContext popupContext) { return AlertWithOneAction( - alertTitle: S.of(context).error, + alertTitle: S.of(popupContext).error, alertContent: state.error, - buttonText: S.of(context).ok, - buttonAction: () => Navigator.of(context).pop()); + buttonText: S.of(popupContext).ok, + buttonAction: () => Navigator.of(popupContext).pop()); }); }); } @@ -266,118 +259,24 @@ class ExchangeTradeState extends State { WidgetsBinding.instance.addPostFrameCallback((_) { showPopUp( context: context, - builder: (BuildContext context) { + builder: (BuildContext popupContext) { return ConfirmSendingAlert( - alertTitle: S.of(context).confirm_sending, - amount: S.of(context).send_amount, + alertTitle: S.of(popupContext).confirm_sending, + amount: S.of(popupContext).send_amount, amountValue: widget.exchangeTradeViewModel.sendViewModel .pendingTransaction!.amountFormatted, - fee: S.of(context).send_fee, + fee: S.of(popupContext).send_fee, feeValue: widget.exchangeTradeViewModel.sendViewModel .pendingTransaction!.feeFormatted, - rightButtonText: S.of(context).ok, - leftButtonText: S.of(context).cancel, + rightButtonText: S.of(popupContext).ok, + leftButtonText: S.of(popupContext).cancel, actionRightButton: () async { - Navigator.of(context).pop(); + Navigator.of(popupContext).pop(); await widget.exchangeTradeViewModel.sendViewModel .commitTransaction(); - await showPopUp( - context: context, - builder: (BuildContext context) { - return Observer(builder: (_) { - final state = widget - .exchangeTradeViewModel.sendViewModel.state; - - if (state is TransactionCommitted) { - return Stack( - children: [ - Container( - color: Theme.of(context).backgroundColor, - child: Center( - child: Image.asset( - 'assets/images/birthday_cake.png'), - ), - ), - Center( - child: Padding( - padding: EdgeInsets.only( - top: 220, left: 24, right: 24), - child: Text( - S.of(context).send_success(widget - .exchangeTradeViewModel - .wallet - .currency - .toString()), - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 22, - fontWeight: FontWeight.bold, - color: Theme.of(context) - .primaryTextTheme! - .headline6! - .color, - decoration: TextDecoration.none, - ), - ), - ), - ), - Positioned( - left: 24, - right: 24, - bottom: 24, - child: PrimaryButton( - onPressed: () => - Navigator.of(context).pop(), - text: S.of(context).send_got_it, - color: Theme.of(context) - .accentTextTheme! - .bodyText1! - .color!, - textColor: Colors.white)) - ], - ); - } - - return Stack( - children: [ - Container( - color: Theme.of(context).backgroundColor, - child: Center( - child: Image.asset( - 'assets/images/birthday_cake.png'), - ), - ), - BackdropFilter( - filter: ImageFilter.blur( - sigmaX: 3.0, sigmaY: 3.0), - child: Container( - decoration: BoxDecoration( - color: Theme.of(context) - .backgroundColor - .withOpacity(0.25)), - child: Center( - child: Padding( - padding: EdgeInsets.only(top: 220), - child: Text( - S.of(context).send_sending, - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 22, - fontWeight: FontWeight.bold, - color: Theme.of(context).primaryTextTheme!.headline6!.color!, - decoration: TextDecoration.none, - ), - ), - ), - ), - ), - ) - ], - ); - }); - }); + transactionStatePopup(); }, - actionLeftButton: () => Navigator.of(context).pop(), + actionLeftButton: () => Navigator.of(popupContext).pop(), feeFiatAmount: widget.exchangeTradeViewModel .pendingTransactionFeeFiatAmountFormatted, fiatAmountValue: widget.exchangeTradeViewModel @@ -392,12 +291,12 @@ class ExchangeTradeState extends State { WidgetsBinding.instance.addPostFrameCallback((_) { showPopUp( context: context, - builder: (BuildContext context) { + builder: (BuildContext popupContext) { return AlertWithOneAction( - alertTitle: S.of(context).sending, - alertContent: S.of(context).transaction_sent, - buttonText: S.of(context).ok, - buttonAction: () => Navigator.of(context).pop()); + alertTitle: S.of(popupContext).sending, + alertContent: S.of(popupContext).transaction_sent, + buttonText: S.of(popupContext).ok, + buttonAction: () => Navigator.of(popupContext).pop()); }); }); } @@ -405,4 +304,102 @@ class ExchangeTradeState extends State { _effectsInstalled = true; } + + void transactionStatePopup() { + showPopUp( + context: context, + builder: (BuildContext popupContext) { + return Observer(builder: (_) { + final state = widget + .exchangeTradeViewModel.sendViewModel.state; + + if (state is TransactionCommitted) { + return Stack( + children: [ + Container( + color: Theme.of(popupContext).backgroundColor, + child: Center( + child: Image.asset( + 'assets/images/birthday_cake.png'), + ), + ), + Center( + child: Padding( + padding: EdgeInsets.only( + top: 220, left: 24, right: 24), + child: Text( + S.of(popupContext).send_success(widget + .exchangeTradeViewModel + .wallet + .currency + .toString()), + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 22, + fontWeight: FontWeight.bold, + color: Theme.of(popupContext) + .primaryTextTheme! + .headline6! + .color, + decoration: TextDecoration.none, + ), + ), + ), + ), + Positioned( + left: 24, + right: 24, + bottom: 24, + child: PrimaryButton( + onPressed: () => + Navigator.of(popupContext).pop(), + text: S.of(popupContext).send_got_it, + color: Theme.of(popupContext) + .accentTextTheme! + .bodyText1! + .color!, + textColor: Colors.white)) + ], + ); + } + + return Stack( + children: [ + Container( + color: Theme.of(popupContext).backgroundColor, + child: Center( + child: Image.asset( + 'assets/images/birthday_cake.png'), + ), + ), + BackdropFilter( + filter: ImageFilter.blur( + sigmaX: 3.0, sigmaY: 3.0), + child: Container( + decoration: BoxDecoration( + color: Theme.of(popupContext) + .backgroundColor + .withOpacity(0.25)), + child: Center( + child: Padding( + padding: EdgeInsets.only(top: 220), + child: Text( + S.of(popupContext).send_sending, + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 22, + fontWeight: FontWeight.bold, + color: Theme.of(popupContext).primaryTextTheme!.headline6!.color!, + decoration: TextDecoration.none, + ), + ), + ), + ), + ), + ) + ], + ); + }); + }); + } } diff --git a/lib/src/screens/ionia/cards/ionia_payment_status_page.dart b/lib/src/screens/ionia/cards/ionia_payment_status_page.dart index e02a3cee8..4096560db 100644 --- a/lib/src/screens/ionia/cards/ionia_payment_status_page.dart +++ b/lib/src/screens/ionia/cards/ionia_payment_status_page.dart @@ -157,7 +157,8 @@ class _IoniaPaymentStatusPageBodyBodyState extends State<_IoniaPaymentStatusPage Container( padding: EdgeInsets.only(left: 40, right: 40, bottom: 20), child: Text( - S.of(context).proceed_after_one_minute, + widget.viewModel.payingByBitcoin ? S.of(context).bitcoin_payments_require_1_confirmation + : S.of(context).proceed_after_one_minute, style: textMedium( color: Theme.of(context).primaryTextTheme!.headline6!.color!, ).copyWith(fontWeight: FontWeight.w500), diff --git a/lib/src/screens/receive/fullscreen_qr_page.dart b/lib/src/screens/receive/fullscreen_qr_page.dart index 165adff12..0966c8ac8 100644 --- a/lib/src/screens/receive/fullscreen_qr_page.dart +++ b/lib/src/screens/receive/fullscreen_qr_page.dart @@ -1,7 +1,6 @@ import 'package:cake_wallet/src/screens/receive/widgets/qr_image.dart'; import 'package:cake_wallet/themes/theme_base.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/cupertino.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; class FullscreenQRPage extends BasePage { @@ -69,14 +68,10 @@ class FullscreenQRPage extends BasePage { child: AspectRatio( aspectRatio: 1.0, child: Container( - padding: EdgeInsets.all(5), + padding: EdgeInsets.all(10), decoration: BoxDecoration( border: Border.all(width: 3, color: Theme.of(context).accentTextTheme!.headline2!.backgroundColor!)), - child: QrImage( - data: qrData, - backgroundColor: isLight ? Colors.transparent : Colors.black, - foregroundColor: Theme.of(context).accentTextTheme!.headline2!.backgroundColor!, - ), + child: QrImage(data: qrData), ), ), ), diff --git a/lib/src/screens/receive/receive_page.dart b/lib/src/screens/receive/receive_page.dart index 71ee578a0..4a573b2e1 100644 --- a/lib/src/screens/receive/receive_page.dart +++ b/lib/src/screens/receive/receive_page.dart @@ -1,13 +1,11 @@ import 'package:cake_wallet/src/widgets/keyboard_done_button.dart'; import 'package:cake_wallet/src/widgets/section_divider.dart'; import 'package:cake_wallet/themes/theme_base.dart'; +import 'package:cake_wallet/utils/share_util.dart'; import 'package:cake_wallet/utils/show_pop_up.dart'; -import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart'; import 'package:cw_core/wallet_type.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; -import 'package:share_plus/share_plus.dart'; import 'package:cake_wallet/routes.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/di.dart'; @@ -101,7 +99,12 @@ class ReceivePage extends BasePage { highlightColor: Colors.transparent, splashColor: Colors.transparent, iconSize: 25, - onPressed: () => Share.share(addressListViewModel.address.address), + onPressed: () { + ShareUtil.share( + text: addressListViewModel.address.address, + context: context, + ); + }, icon: shareImage ) ); diff --git a/lib/src/screens/receive/widgets/qr_image.dart b/lib/src/screens/receive/widgets/qr_image.dart index c0c1b0666..6e17dbcfc 100644 --- a/lib/src/screens/receive/widgets/qr_image.dart +++ b/lib/src/screens/receive/widgets/qr_image.dart @@ -1,30 +1,29 @@ import 'package:flutter/material.dart'; -import 'package:qr/qr.dart'; -import 'package:cake_wallet/src/screens/receive/widgets/qr_painter.dart'; +import 'package:qr_flutter/qr_flutter.dart' as qr; class QrImage extends StatelessWidget { QrImage({ - required String data, + required this.data, this.size = 100.0, - this.backgroundColor, - Color foregroundColor = Colors.black, - int version = 9, // Previous value: 7 something happened after flutter upgrade monero wallets addresses are longer than ver. 7 ??? - int errorCorrectionLevel = QrErrorCorrectLevel.L, - }) : _painter = QrPainter(data, foregroundColor, version, errorCorrectionLevel); + this.version = 9, // Previous value: 7 something happened after flutter upgrade monero wallets addresses are longer than ver. 7 ??? + this.errorCorrectionLevel = qr.QrErrorCorrectLevel.L, + }); - final QrPainter _painter; - final Color? backgroundColor; final double size; + final String data; + final int version; + final int errorCorrectionLevel; @override Widget build(BuildContext context) { - return Container( - width: size, - height: size, - color: backgroundColor, - child: CustomPaint( - painter: _painter, - ), + return qr.QrImage( + data: data, + errorCorrectionLevel: errorCorrectionLevel, + version: version, + size: size, + foregroundColor: Colors.black, + backgroundColor: Colors.white, + padding: EdgeInsets.zero, ); } -} \ No newline at end of file +} diff --git a/lib/src/screens/receive/widgets/qr_painter.dart b/lib/src/screens/receive/widgets/qr_painter.dart deleted file mode 100644 index e4af59f1a..000000000 --- a/lib/src/screens/receive/widgets/qr_painter.dart +++ /dev/null @@ -1,47 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:qr/qr.dart'; - -class QrPainter extends CustomPainter { - QrPainter( - String data, - this.color, - this.version, - this.errorCorrectionLevel, - ) : this._qr = QrCode(version, errorCorrectionLevel)..addData(data) { - _p.color = this.color; - _qrImage = QrImage(_qr); - } - - final int version; - final int errorCorrectionLevel; - final Color color; - - final QrCode _qr; - final _p = Paint()..style = PaintingStyle.fill; - late QrImage _qrImage; - - @override - void paint(Canvas canvas, Size size) { - final squareSize = size.shortestSide / _qr.moduleCount; - for (int x = 0; x < _qr.moduleCount; x++) { - for (int y = 0; y < _qr.moduleCount; y++) { - if (_qrImage.isDark(y, x)) { - final squareRect = Rect.fromLTWH( - x * squareSize, y * squareSize, squareSize, squareSize); - canvas.drawRect(squareRect, _p); - } - } - } - } - - @override - bool shouldRepaint(CustomPainter oldDelegate) { - if (oldDelegate is QrPainter) { - return this.color != oldDelegate.color || - this.errorCorrectionLevel != oldDelegate.errorCorrectionLevel || - this.version != oldDelegate.version; - } - - return false; - } -} diff --git a/lib/src/screens/receive/widgets/qr_widget.dart b/lib/src/screens/receive/widgets/qr_widget.dart index 99bea1adc..a590293a6 100644 --- a/lib/src/screens/receive/widgets/qr_widget.dart +++ b/lib/src/screens/receive/widgets/qr_widget.dart @@ -89,11 +89,7 @@ class QRWidget extends StatelessWidget { color: Theme.of(context).accentTextTheme!.headline2!.backgroundColor!, ), ), - child: QrImage( - data: addressListViewModel.uri.toString(), - backgroundColor: isLight ? Colors.transparent : Colors.black, - foregroundColor: Theme.of(context).accentTextTheme!.headline2!.backgroundColor!, - ), + child: QrImage(data: addressListViewModel.uri.toString()), ), ), ), diff --git a/lib/src/screens/seed/wallet_seed_page.dart b/lib/src/screens/seed/wallet_seed_page.dart index 8de1526e8..64895db36 100644 --- a/lib/src/screens/seed/wallet_seed_page.dart +++ b/lib/src/screens/seed/wallet_seed_page.dart @@ -1,12 +1,11 @@ import 'package:cake_wallet/palette.dart'; import 'package:cake_wallet/themes/theme_base.dart'; import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart'; +import 'package:cake_wallet/utils/share_util.dart'; import 'package:cake_wallet/utils/show_bar.dart'; import 'package:cake_wallet/utils/show_pop_up.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:share_plus/share_plus.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/widgets/primary_button.dart'; @@ -159,8 +158,12 @@ class WalletSeedPage extends BasePage { child: Container( padding: EdgeInsets.only(right: 8.0), child: PrimaryButton( - onPressed: () => - Share.share(walletSeedViewModel.seed), + onPressed: () { + ShareUtil.share( + text: walletSeedViewModel.seed, + context: context, + ); + }, text: S.of(context).save, color: Colors.green, textColor: Colors.white), diff --git a/lib/src/screens/send/send_page.dart b/lib/src/screens/send/send_page.dart index 2cd849f34..881536944 100644 --- a/lib/src/screens/send/send_page.dart +++ b/lib/src/screens/send/send_page.dart @@ -339,7 +339,7 @@ class SendPage extends BasePage { showErrorValidationAlert(context); return; } - + await sendViewModel.createTransaction(); }, @@ -379,7 +379,8 @@ class SendPage extends BasePage { if (state is ExecutedSuccessfullyState) { WidgetsBinding.instance.addPostFrameCallback((_) { - showPopUp( + if (context.mounted) { + showPopUp( context: context, builder: (BuildContext context) { return ConfirmSendingAlert( @@ -423,6 +424,7 @@ class SendPage extends BasePage { }, actionLeftButton: () => Navigator.of(context).pop()); }); + } }); } diff --git a/lib/src/screens/send/widgets/extract_address_from_parsed.dart b/lib/src/screens/send/widgets/extract_address_from_parsed.dart index 4ddd6ada0..a293835a3 100644 --- a/lib/src/screens/send/widgets/extract_address_from_parsed.dart +++ b/lib/src/screens/send/widgets/extract_address_from_parsed.dart @@ -19,13 +19,18 @@ Future extractAddressFromParsed( address = parsedAddress.addresses.first; break; case ParseFrom.openAlias: - title = S.of(context).openalias_alert_title; - content = S.of(context).openalias_alert_content(parsedAddress.name); + title = S.of(context).address_detected; + content = S.of(context).extracted_address_content('${parsedAddress.name} (OpenAlias)'); address = parsedAddress.addresses.first; break; case ParseFrom.fio: title = S.of(context).address_detected; - content = S.of(context).openalias_alert_content(parsedAddress.name); + content = S.of(context).extracted_address_content('${parsedAddress.name} (FIO)'); + address = parsedAddress.addresses.first; + break; + case ParseFrom.twitter: + title = S.of(context).address_detected; + content = S.of(context).extracted_address_content('${parsedAddress.name} (Twitter)'); address = parsedAddress.addresses.first; break; case ParseFrom.yatRecord: diff --git a/lib/src/screens/settings/connection_sync_page.dart b/lib/src/screens/settings/connection_sync_page.dart index bf60a4405..9d2ce3cda 100644 --- a/lib/src/screens/settings/connection_sync_page.dart +++ b/lib/src/screens/settings/connection_sync_page.dart @@ -2,6 +2,7 @@ import 'package:cake_wallet/src/screens/settings/widgets/settings_cell_with_arro import 'package:cake_wallet/utils/show_pop_up.dart'; import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart'; import 'package:cw_core/node.dart'; +import 'package:cw_core/wallet_type.dart'; import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; @@ -35,10 +36,11 @@ class ConnectionSyncPage extends BasePage { handler: (context) => _presentReconnectAlert(context), ), StandardListSeparator(padding: EdgeInsets.symmetric(horizontal: 24)), - SettingsCellWithArrow( - title: S.current.rescan, - handler: (context) => Navigator.of(context).pushNamed(Routes.rescan), - ), + if (dashboardViewModel.hasRescan) + SettingsCellWithArrow( + title: S.current.rescan, + handler: (context) => Navigator.of(context).pushNamed(Routes.rescan), + ), StandardListSeparator(padding: EdgeInsets.symmetric(horizontal: 24)), NodeHeaderListRow( title: S.of(context).add_new_node, diff --git a/lib/src/screens/settings/widgets/settings_link_provider_cell.dart b/lib/src/screens/settings/widgets/settings_link_provider_cell.dart index 51fcc16d5..e64d6543b 100644 --- a/lib/src/screens/settings/widgets/settings_link_provider_cell.dart +++ b/lib/src/screens/settings/widgets/settings_link_provider_cell.dart @@ -30,6 +30,8 @@ class SettingsLinkProviderCell extends StandardListRow { color: Palette.blueCraiola)); static void _launchUrl(String url) async { - if (await canLaunch(url)) await launch(url, forceSafariVC: false); + try { + await launch(url, forceSafariVC: false); + } catch (e) {} } -} \ No newline at end of file +} diff --git a/lib/src/screens/wallet_list/wallet_menu.dart b/lib/src/screens/wallet_list/wallet_menu.dart deleted file mode 100644 index c354881a3..000000000 --- a/lib/src/screens/wallet_list/wallet_menu.dart +++ /dev/null @@ -1,131 +0,0 @@ -import 'package:cake_wallet/src/screens/wallet_list/wallet_menu_item.dart'; -import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart'; -import 'package:cake_wallet/utils/show_pop_up.dart'; -import 'package:cake_wallet/view_model/wallet_list/wallet_list_view_model.dart'; -import 'package:flutter/material.dart'; -import 'package:cake_wallet/routes.dart'; -import 'package:cake_wallet/generated/i18n.dart'; -import 'package:cake_wallet/view_model/wallet_list/wallet_list_item.dart'; -import 'package:cake_wallet/src/screens/auth/auth_page.dart'; -import 'package:cake_wallet/palette.dart'; - -class WalletMenu { - WalletMenu(this.context, this.walletListViewModel); - - final WalletListViewModel walletListViewModel; - final BuildContext context; - - final List menuItems = [ - WalletMenuItem( - title: S.current.wallet_list_load_wallet, - firstGradientColor: Palette.cornflower, - secondGradientColor: Palette.royalBlue, - image: Image.asset('assets/images/load.png', - height: 24, width: 24, color: Colors.white)), - WalletMenuItem( - title: S.current.show_seed, - firstGradientColor: Palette.moderateOrangeYellow, - secondGradientColor: Palette.moderateOrange, - image: Image.asset('assets/images/eye_action.png', - height: 24, width: 24, color: Colors.white)), - WalletMenuItem( - title: S.current.remove, - firstGradientColor: Palette.lightRed, - secondGradientColor: Palette.persianRed, - image: Image.asset('assets/images/trash.png', - height: 24, width: 24, color: Colors.white)), - WalletMenuItem( - title: S.current.rescan, - firstGradientColor: Palette.shineGreen, - secondGradientColor: Palette.moderateGreen, - image: Image.asset('assets/images/scanner.png', - height: 24, width: 24, color: Colors.white)) - ]; - - List generateItemsForWalletMenu(bool isCurrentWallet) { - final items = []; - - if (!isCurrentWallet) items.add(menuItems[0]); - if (isCurrentWallet) items.add(menuItems[1]); - if (!isCurrentWallet) items.add(menuItems[2]); - if (isCurrentWallet) items.add(menuItems[3]); - - return items; - } - - Future action( - int index, WalletListItem wallet) async { - switch (index) { - case 0: - await Navigator.of(context).pushNamed(Routes.auth, arguments: - (bool isAuthenticatedSuccessfully, AuthPageState auth) async { - if (!isAuthenticatedSuccessfully) { - return; - } - - try { - auth.changeProcessText( - S.of(context).wallet_list_loading_wallet(wallet.name)); - await walletListViewModel.loadWallet(wallet); - auth.close(); - Navigator.of(context).pop(); - } catch (e) { - auth.changeProcessText(S - .of(context) - .wallet_list_failed_to_load(wallet.name, e.toString())); - } - }); - break; - case 1: - await Navigator.of(context).pushNamed(Routes.auth, arguments: - (bool isAuthenticatedSuccessfully, AuthPageState auth) async { - if (!isAuthenticatedSuccessfully) { - return; - } - auth.close(); - await Navigator.of(context).pushNamed(Routes.seed, arguments: false); - }); - break; - case 2: - final isComfirmed = await showPopUp( - context: context, - builder: (BuildContext context) { - return AlertWithTwoActions( - alertTitle: 'Remove wallet', - alertContent: S.of(context).confirm_delete_wallet, - leftButtonText: S.of(context).cancel, - rightButtonText: S.of(context).remove, - actionLeftButton: () => Navigator.of(context).pop(false), - actionRightButton: () => Navigator.of(context).pop(true)); - }); - - if (isComfirmed == null || !isComfirmed) { - return; - } - - await Navigator.of(context).pushNamed(Routes.auth, arguments: - (bool isAuthenticatedSuccessfully, AuthPageState auth) async { - if (!isAuthenticatedSuccessfully) { - return; - } - - try { - auth.changeProcessText( - S.of(context).wallet_list_removing_wallet(wallet.name)); - await walletListViewModel.remove(wallet); - auth.close(); - } catch (e) { - auth.changeProcessText(S - .of(context) - .wallet_list_failed_to_remove(wallet.name, e.toString())); - } - }); - break; - case 3: - await Navigator.of(context).pushNamed(Routes.rescan); - break; - default: - break; - } - } -} diff --git a/lib/src/screens/wallet_list/wallet_menu_item.dart b/lib/src/screens/wallet_list/wallet_menu_item.dart deleted file mode 100644 index 6d66a5f8d..000000000 --- a/lib/src/screens/wallet_list/wallet_menu_item.dart +++ /dev/null @@ -1,16 +0,0 @@ -import 'dart:ui'; -import 'package:flutter/cupertino.dart'; - -class WalletMenuItem { - WalletMenuItem({ - required this.title, - required this.firstGradientColor, - required this.secondGradientColor, - required this.image - }); - - final String title; - final Color firstGradientColor; - final Color secondGradientColor; - final Image image; -} \ No newline at end of file diff --git a/lib/src/screens/wallet_list/widgets/wallet_menu_alert.dart b/lib/src/screens/wallet_list/widgets/wallet_menu_alert.dart deleted file mode 100644 index 00dd3a2f5..000000000 --- a/lib/src/screens/wallet_list/widgets/wallet_menu_alert.dart +++ /dev/null @@ -1,112 +0,0 @@ -import 'dart:ui'; -import 'package:cake_wallet/palette.dart'; -import 'package:cake_wallet/src/screens/wallet_list/wallet_menu.dart'; -import 'package:cake_wallet/src/screens/wallet_list/wallet_menu_item.dart'; -import 'package:cake_wallet/view_model/wallet_list/wallet_list_item.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:cake_wallet/src/widgets/alert_background.dart'; -import 'package:cake_wallet/src/widgets/alert_close_button.dart'; - -class WalletMenuAlert extends StatelessWidget { - WalletMenuAlert({ - required this.wallet, - required this.walletMenu, - required this.items - }); - - final WalletListItem wallet; - final WalletMenu walletMenu; - final List items; - final closeButton = Image.asset('assets/images/close.png', - color: Palette.darkBlueCraiola, - ); - - @override - Widget build(BuildContext context) { - return AlertBackground( - child: Stack( - alignment: Alignment.center, - children: [ - Padding( - padding: EdgeInsets.only( - left: 24, - right: 24, - ), - child: ClipRRect( - borderRadius: BorderRadius.all(Radius.circular(14)), - child: Container( - color: Theme.of(context).textTheme!.bodyText1!.decorationColor!, - padding: EdgeInsets.only(left: 24), - child: ListView.separated( - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), - itemCount: items.length, - separatorBuilder: (context, _) => Container( - height: 1, - color: Theme.of(context).accentTextTheme!.subtitle1!.backgroundColor!, - ), - itemBuilder: (_, index) { - final item = items[index]; - - return GestureDetector( - onTap: () { - Navigator.of(context).pop(); - walletMenu.action( - walletMenu.menuItems.indexOf(item), - wallet); - }, - child: Container( - height: 60, - child: Row( - mainAxisSize: MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Container( - height: 32, - width: 32, - decoration: BoxDecoration( - borderRadius: BorderRadius.all( - Radius.circular(4)), - gradient: LinearGradient( - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - colors: [ - item.firstGradientColor, - item.secondGradientColor - ] - ) - ), - child: Center( - child: item.image, - ), - ), - SizedBox(width: 12), - Expanded( - child: Text( - item.title, - style: TextStyle( - color: Theme.of(context).primaryTextTheme!.headline6!.color!, - fontSize: 18, - fontFamily: 'Lato', - fontWeight: FontWeight.w500, - decoration: TextDecoration.none - ), - ) - ) - ], - ), - ), - ); - }, - ), - ), - ), - ), - AlertCloseButton(image: closeButton) - ], - ), - ); - } -} \ No newline at end of file diff --git a/lib/twitter/twitter_api.dart b/lib/twitter/twitter_api.dart new file mode 100644 index 000000000..41f5df61d --- /dev/null +++ b/lib/twitter/twitter_api.dart @@ -0,0 +1,37 @@ +import 'dart:convert'; +import 'package:cake_wallet/twitter/twitter_user.dart'; +import 'package:http/http.dart' as http; +import 'package:cake_wallet/.secrets.g.dart' as secrets; + +class TwitterApi { + static const twitterBearerToken = secrets.twitterBearerToken; + static const httpsScheme = 'https'; + static const apiHost = 'api.twitter.com'; + static const userPath = '/2/users/by/username/'; + + static Future lookupUserByName({required String userName}) async { + final queryParams = {'user.fields': 'description', 'expansions': 'pinned_tweet_id'}; + + final headers = {'authorization': 'Bearer $twitterBearerToken'}; + + final uri = Uri( + scheme: httpsScheme, + host: apiHost, + path: userPath + userName, + queryParameters: queryParams, + ); + + var response = await http.get(uri, headers: headers); + + if (response.statusCode != 200) { + throw Exception('Unexpected http status: ${response.statusCode}'); + } + final responseJSON = json.decode(response.body) as Map; + + if (responseJSON['errors'] != null) { + throw Exception(responseJSON['errors'][0]['detail']); + } + + return TwitterUser.fromJson(responseJSON); + } +} diff --git a/lib/twitter/twitter_user.dart b/lib/twitter/twitter_user.dart new file mode 100644 index 000000000..ac373fd62 --- /dev/null +++ b/lib/twitter/twitter_user.dart @@ -0,0 +1,45 @@ +class TwitterUser { + TwitterUser( + {required this.id, + required this.username, + required this.name, + required this.description, + this.tweets}); + + final String id; + final String username; + final String name; + final String description; + final List? tweets; + + factory TwitterUser.fromJson(Map json) { + return TwitterUser( + id: json['data']['id'] as String, + username: json['data']['username'] as String, + name: json['data']['name'] as String, + description: json['data']['description'] as String? ?? '', + tweets: json['includes'] != null + ? List.from(json['includes']['tweets'] as List) + .map((e) => Tweet.fromJson(e as Map)) + .toList() + : null, + ); + } +} + +class Tweet { + Tweet({ + required this.id, + required this.text, + }); + + final String id; + final String text; + + factory Tweet.fromJson(Map json) { + return Tweet( + id: json['id'] as String, + text: json['text'] as String, + ); + } +} diff --git a/lib/utils/exception_handler.dart b/lib/utils/exception_handler.dart new file mode 100644 index 000000000..ed9f00fcb --- /dev/null +++ b/lib/utils/exception_handler.dart @@ -0,0 +1,134 @@ +import 'dart:convert'; +import 'dart:io'; + +import 'package:cake_wallet/entities/preferences_key.dart'; +import 'package:cake_wallet/generated/i18n.dart'; +import 'package:cake_wallet/main.dart'; +import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart'; +import 'package:cake_wallet/utils/show_pop_up.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_mailer/flutter_mailer.dart'; +import 'package:path_provider/path_provider.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +class ExceptionHandler { + static bool _hasError = false; + static const _coolDownDurationInDays = 7; + + static void _saveException(String? error, StackTrace? stackTrace) async { + final appDocDir = await getApplicationDocumentsDirectory(); + + final file = File('${appDocDir.path}/error.txt'); + final exception = { + "${DateTime.now()}": { + "Error": error, + "StackTrace": stackTrace.toString(), + } + }; + + const String separator = '''\n\n========================================================== + ==========================================================\n\n'''; + + await file.writeAsString( + jsonEncode(exception) + separator, + mode: FileMode.append, + ); + } + + static void _sendExceptionFile() async { + try { + final appDocDir = await getApplicationDocumentsDirectory(); + + final file = File('${appDocDir.path}/error.txt'); + + final MailOptions mailOptions = MailOptions( + subject: 'Mobile App Issue', + recipients: ['support@cakewallet.com'], + attachments: [file.path], + ); + + final result = await FlutterMailer.send(mailOptions); + + // Clear file content if the error was sent or saved. + // On android we can't know if it was sent or saved + if (result.name == MailerResponse.sent.name || + result.name == MailerResponse.saved.name || + result.name == MailerResponse.android.name) { + file.writeAsString("", mode: FileMode.write); + } + } catch (e, s) { + _saveException(e.toString(), s); + } + } + + static void onError(FlutterErrorDetails errorDetails) async { + if (kDebugMode) { + FlutterError.presentError(errorDetails); + return; + } + + if (_ignoreError(errorDetails.exception.toString())) { + return; + } + + _saveException(errorDetails.exception.toString(), errorDetails.stack); + + final sharedPrefs = await SharedPreferences.getInstance(); + + final lastPopupDate = + DateTime.tryParse(sharedPrefs.getString(PreferencesKey.lastPopupDate) ?? '') ?? + DateTime.now().subtract(Duration(days: _coolDownDurationInDays + 1)); + + final durationSinceLastReport = DateTime.now().difference(lastPopupDate).inDays; + + if (_hasError || durationSinceLastReport < _coolDownDurationInDays) { + return; + } + _hasError = true; + + sharedPrefs.setString(PreferencesKey.lastPopupDate, DateTime.now().toString()); + + WidgetsBinding.instance.addPostFrameCallback( + (timeStamp) async { + await showPopUp( + context: navigatorKey.currentContext!, + builder: (context) { + return AlertWithTwoActions( + isDividerExist: true, + alertTitle: S.of(context).error, + alertContent: S.of(context).error_dialog_content, + rightButtonText: S.of(context).send, + leftButtonText: S.of(context).do_not_send, + actionRightButton: () { + Navigator.of(context).pop(); + _sendExceptionFile(); + }, + actionLeftButton: () { + Navigator.of(context).pop(); + }, + ); + }, + ); + + _hasError = false; + }, + ); + } + + /// Ignore User related errors or system errors + static bool _ignoreError(String error) => + _ignoredErrors.any((element) => error.contains(element)); + + static const List _ignoredErrors = const [ + "errno = 103", // SocketException: Software caused connection abort + "errno = 9", // SocketException: Bad file descriptor + "errno = 32", // SocketException: Write failed (OS Error: Broken pipe) + "errno = 60", // SocketException: Operation timed out + "errno = 110", // SocketException: Connection timed out + "errno = 54", // SocketException: Connection reset by peer + "errno = 49", // SocketException: Can't assign requested address + "errno = 28", // OS Error: No space left on device + "PERMISSION_NOT_GRANTED", + ]; +} diff --git a/lib/utils/share_util.dart b/lib/utils/share_util.dart new file mode 100644 index 000000000..518590fdd --- /dev/null +++ b/lib/utils/share_util.dart @@ -0,0 +1,37 @@ +import 'package:flutter/material.dart'; +import 'package:share_plus/share_plus.dart'; +import 'package:cross_file/cross_file.dart'; + +class ShareUtil { + static const _mimeType = 'application/*'; + + static void share({required String text, required BuildContext context}) { + Share.share( + text, + sharePositionOrigin: _sharePosition(context), + ); + } + + static Future shareFile({ + required String filePath, + required String fileName, + required BuildContext context, + }) async { + Share.shareXFiles( + [ + XFile( + filePath, + name: fileName, + mimeType: _mimeType, + ) + ], + sharePositionOrigin: _sharePosition(context), + ); + } + + static Rect? _sharePosition(BuildContext context) { + final box = context.findRenderObject() as RenderBox?; + + return box!.localToGlobal(Offset.zero) & box.size; + } +} diff --git a/lib/view_model/dashboard/dashboard_view_model.dart b/lib/view_model/dashboard/dashboard_view_model.dart index 57720d92f..12bd21058 100644 --- a/lib/view_model/dashboard/dashboard_view_model.dart +++ b/lib/view_model/dashboard/dashboard_view_model.dart @@ -239,7 +239,7 @@ abstract class DashboardViewModelBase with Store { WalletBase, TransactionInfo> wallet; - bool get hasRescan => wallet.type == WalletType.monero; + bool get hasRescan => wallet.type == WalletType.monero || wallet.type == WalletType.haven; BalanceViewModel balanceViewModel; diff --git a/lib/view_model/dashboard/transaction_list_item.dart b/lib/view_model/dashboard/transaction_list_item.dart index 35f30a937..0f16bdfe8 100644 --- a/lib/view_model/dashboard/transaction_list_item.dart +++ b/lib/view_model/dashboard/transaction_list_item.dart @@ -1,5 +1,7 @@ import 'package:cake_wallet/entities/balance_display_mode.dart'; import 'package:cake_wallet/entities/fiat_currency.dart'; +import 'package:cake_wallet/generated/i18n.dart'; +import 'package:cw_core/transaction_direction.dart'; import 'package:cw_core/transaction_info.dart'; import 'package:cake_wallet/store/settings_store.dart'; import 'package:cake_wallet/view_model/dashboard/action_list_item.dart'; @@ -11,6 +13,7 @@ import 'package:cake_wallet/view_model/dashboard/balance_view_model.dart'; import 'package:cw_core/keyable.dart'; import 'package:cw_core/wallet_type.dart'; + class TransactionListItem extends ActionListItem with Keyable { TransactionListItem( {required this.transaction, @@ -35,6 +38,30 @@ class TransactionListItem extends ActionListItem with Keyable { ? '---' : transaction.amountFormatted(); } + String get formattedTitle { + if (transaction.direction == TransactionDirection.incoming) { + return S.current.received; + } + + return S.current.sent; + } + + String get formattedPendingStatus { + if (transaction.confirmations >= 0 && transaction.confirmations < 10) { + return ' (${transaction.confirmations}/10)'; + } + return ''; + } + + String get formattedStatus { + if (transaction.direction == TransactionDirection.incoming) { + if (balanceViewModel.wallet.type == WalletType.monero || + balanceViewModel.wallet.type == WalletType.haven) { + return formattedPendingStatus; + } + } + return transaction.isPending ? S.current.pending : ''; + } String get formattedFiatAmount { var amount = ''; diff --git a/lib/view_model/exchange/exchange_trade_view_model.dart b/lib/view_model/exchange/exchange_trade_view_model.dart index 10ddf25e4..541b74396 100644 --- a/lib/view_model/exchange/exchange_trade_view_model.dart +++ b/lib/view_model/exchange/exchange_trade_view_model.dart @@ -18,19 +18,18 @@ import 'package:cake_wallet/generated/i18n.dart'; part 'exchange_trade_view_model.g.dart'; -class ExchangeTradeViewModel = ExchangeTradeViewModelBase - with _$ExchangeTradeViewModel; +class ExchangeTradeViewModel = ExchangeTradeViewModelBase with _$ExchangeTradeViewModel; abstract class ExchangeTradeViewModelBase with Store { ExchangeTradeViewModelBase( {required this.wallet, - required this.trades, - required this.tradesStore, - required this.sendViewModel}) - : trade = tradesStore.trade!, - isSendable = tradesStore.trade!.from == wallet.currency || - tradesStore.trade!.provider == ExchangeProviderDescription.xmrto, - items = ObservableList() { + required this.trades, + required this.tradesStore, + required this.sendViewModel}) + : trade = tradesStore.trade!, + isSendable = tradesStore.trade!.from == wallet.currency || + tradesStore.trade!.provider == ExchangeProviderDescription.xmrto, + items = ObservableList() { switch (trade.provider) { case ExchangeProviderDescription.xmrto: _provider = XMRTOExchangeProvider(); @@ -67,22 +66,20 @@ abstract class ExchangeTradeViewModelBase with Store { @computed String get extraInfo => trade.from == CryptoCurrency.xlm - ? '\n\n' + S.current.xlm_extra_info - : trade.from == CryptoCurrency.xrp - ? '\n\n' + S.current.xrp_extra_info - : ''; + ? '\n\n' + S.current.xlm_extra_info + : trade.from == CryptoCurrency.xrp + ? '\n\n' + S.current.xrp_extra_info + : ''; @computed - String get pendingTransactionFiatAmountValueFormatted => - sendViewModel.isFiatDisabled - ? '' : sendViewModel.pendingTransactionFiatAmount - + ' ' + sendViewModel.fiat.title; + String get pendingTransactionFiatAmountValueFormatted => sendViewModel.isFiatDisabled + ? '' + : sendViewModel.pendingTransactionFiatAmount + ' ' + sendViewModel.fiat.title; @computed - String get pendingTransactionFeeFiatAmountFormatted => - sendViewModel.isFiatDisabled - ? '' : sendViewModel.pendingTransactionFeeFiatAmount - + ' ' + sendViewModel.fiat.title; + String get pendingTransactionFeeFiatAmountFormatted => sendViewModel.isFiatDisabled + ? '' + : sendViewModel.pendingTransactionFeeFiatAmount + ' ' + sendViewModel.fiat.title; @observable ObservableList items; @@ -122,6 +119,8 @@ abstract class ExchangeTradeViewModelBase with Store { } void _updateItems() { + final tagFrom = trade.from.tag != null ? '${trade.from.tag}' + ' ' : ''; + final tagTo = trade.to.tag != null ? '${trade.to.tag}' + ' ' : ''; items.clear(); items.add(ExchangeTradeItem( title: "${trade.provider.title} ${S.current.id}", data: '${trade.id}', isCopied: true)); @@ -130,22 +129,22 @@ abstract class ExchangeTradeViewModelBase with Store { final title = trade.from == CryptoCurrency.xrp ? S.current.destination_tag : trade.from == CryptoCurrency.xlm - ? S.current.memo - : S.current.extra_id; + ? S.current.memo + : S.current.extra_id; - items.add(ExchangeTradeItem( - title: title, data: '${trade.extraId}', isCopied: false)); + items.add(ExchangeTradeItem(title: title, data: '${trade.extraId}', isCopied: false)); } items.addAll([ + ExchangeTradeItem(title: S.current.amount, data: '${trade.amount}', isCopied: false), ExchangeTradeItem( - title: S.current.amount, data: '${trade.amount}', isCopied: false), - ExchangeTradeItem( - title: S.current.status, data: '${trade.state}', isCopied: false), - ExchangeTradeItem( - title: S.current.widgets_address + ':', + title: S.current.send_to_this_address('${trade.from}', tagFrom) + ':', data: trade.inputAddress ?? '', isCopied: true), + ExchangeTradeItem( + title: S.current.arrive_in_this_address('${trade.to}', tagTo) + ':', + data: trade.payoutAddress ?? '', + isCopied: true), ]); } } diff --git a/lib/view_model/exchange/exchange_view_model.dart b/lib/view_model/exchange/exchange_view_model.dart index 5c1f696b8..d310e6278 100644 --- a/lib/view_model/exchange/exchange_view_model.dart +++ b/lib/view_model/exchange/exchange_view_model.dart @@ -192,7 +192,7 @@ abstract class ExchangeViewModelBase with Store { ObservableList get templates => _exchangeTemplateStore.templates; - + @computed TransactionPriority get transactionPriority { final priority = _settingsStore.priority[wallet.type]; @@ -308,10 +308,11 @@ abstract class ExchangeViewModelBase with Store { Future _calculateBestRate() async { final amount = double.tryParse(isFixedRateMode ? receiveAmount : depositAmount) ?? 1; + final _providers = _tradeAvailableProviders + .where((element) => !isFixedRateMode || element.supportsFixedRate).toList(); + final result = await Future.wait( - _tradeAvailableProviders - .where((element) => !isFixedRateMode || element.supportsFixedRate) - .map((element) => element.fetchRate( + _providers.map((element) => element.fetchRate( from: depositCurrency, to: receiveCurrency, amount: amount, @@ -324,7 +325,12 @@ abstract class ExchangeViewModelBase with Store { for (int i=0;i _timer; + bool get payingByBitcoin => paymentInfo.anyPayPayment.chain == AnyPayChain.btc; + Timer? _timer; @action diff --git a/lib/view_model/support_view_model.dart b/lib/view_model/support_view_model.dart index 5fa81b288..15c25968f 100644 --- a/lib/view_model/support_view_model.dart +++ b/lib/view_model/support_view_model.dart @@ -7,7 +7,6 @@ import 'package:flutter/material.dart'; import 'package:mobx/mobx.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:cake_wallet/wallet_type_utils.dart'; -import 'package:cake_wallet/wallet_type_utils.dart'; part 'support_view_model.g.dart'; @@ -19,7 +18,9 @@ abstract class SupportViewModelBase with Store { RegularListItem( title: S.current.faq, handler: (BuildContext context) async { - if (await canLaunch(url)) await launch(url); + try { + await launch(url); + } catch (e) {} }, ), LinkListItem( @@ -42,7 +43,7 @@ abstract class SupportViewModelBase with Store { title: 'Telegram', icon: 'assets/images/Telegram.png', linkTitle: '@cakewallet_bot', - link: 'https:t.me/cakewallet_bot'), + link: 'https://t.me/cakewallet_bot'), LinkListItem( title: 'Twitter', icon: 'assets/images/Twitter.png', @@ -84,7 +85,7 @@ abstract class SupportViewModelBase with Store { // link: 'mailto:support@y.at') ]; - static const url = 'https://cakewallet.com/guide/'; + static const url = 'https://guides.cakewallet.com'; List items; } \ No newline at end of file diff --git a/pubspec_base.yaml b/pubspec_base.yaml index b37fd519c..2caa9052f 100644 --- a/pubspec_base.yaml +++ b/pubspec_base.yaml @@ -6,7 +6,7 @@ dependencies: flutter_cupertino_localizations: ^1.0.1 intl: ^0.17.0 url_launcher: ^6.1.4 - qr: ^3.0.1 + qr_flutter: ^4.0.0 uuid: 3.0.6 shared_preferences: ^2.0.15 flutter_secure_storage: diff --git a/res/values/strings_ar.arb b/res/values/strings_ar.arb index 250f29a70..8222467bd 100644 --- a/res/values/strings_ar.arb +++ b/res/values/strings_ar.arb @@ -398,8 +398,7 @@ "biometric_auth_reason":"امسح بصمة إصبعك للمصادقة", "version":"الإصدار ${currentVersion}", - "openalias_alert_title":"تم ايجاد العنوان", - "openalias_alert_content":"سوف ترسل الأموال إلى\n${recipient_name}", + "extracted_address_content":"سوف ترسل الأموال إلى\n${recipient_name}", "card_address":"العنوان:", "buy":"اشتري", @@ -678,5 +677,10 @@ "enabled":"ممكنة", "tor_only":"Tor فقط", "unmatched_currencies": "عملة محفظتك الحالية لا تتطابق مع عملة QR الممسوحة ضوئيًا", - "orbot_running_alert": "يرجى التأكد من تشغيل Orbot قبل الاتصال بهذه العقدة." + "orbot_running_alert": "يرجى التأكد من تشغيل Orbot قبل الاتصال بهذه العقدة.", + "bitcoin_payments_require_1_confirmation": "تتطلب مدفوعات Bitcoin تأكيدًا واحدًا ، والذي قد يستغرق 20 دقيقة أو أكثر. شكرا لصبرك! سيتم إرسال بريد إلكتروني إليك عند تأكيد الدفع.", + "send_to_this_address" : "أرسل ${currency} ${tag}إلى هذا العنوان", + "arrive_in_this_address" : "سيصل ${currency} ${tag}إلى هذا العنوان", + "do_not_send": "لا ترسل", + "error_dialog_content": "عفوًا ، لقد حصلنا على بعض الخطأ.\n\nيرجى إرسال تقرير التعطل إلى فريق الدعم لدينا لتحسين التطبيق." } diff --git a/res/values/strings_bg.arb b/res/values/strings_bg.arb new file mode 100644 index 000000000..2099abc19 --- /dev/null +++ b/res/values/strings_bg.arb @@ -0,0 +1,688 @@ +{ + "welcome" : "Добре дошли в", + "cake_wallet" : "Cake Wallet", + "first_wallet_text" : "Невероятен портфейл за Monero, Bitcoin, Litecoin и Haven", + "please_make_selection" : "Моля, изберете отдолу за създаване или възстановяване на портфейл.", + "create_new" : "Създаване на нов портфейл", + "restore_wallet" : "Възстановяване на портфейл", + + "monero_com": "Monero.com от Cake Wallet", + "monero_com_wallet_text": "Невероятен портфейл за Monero", + + "haven_app": "Haven от Cake Wallet", + "haven_app_wallet_text": "Невероятен портфейл за Haven", + + "accounts" : "Профили", + "edit" : "Промени", + "account" : "Профил", + "add" : "Добави", + + + "address_book" : "Адресна книга", + "contact" : "Контакт", + "please_select" : "Моля, изберете:", + "cancel" : "Откажи", + "ok" : "Ок", + "contact_name" : "Име на контакт", + "reset" : "Нулиране", + "save" : "Запази", + "address_remove_contact" : "Премахни контакт", + "address_remove_content" : "Сигурни ли сте, че искате да премахнете избрания контакт?", + + + "authenticated" : "Удостоверено", + "authentication" : "Удостоверяване", + "failed_authentication" : "Неуспешно удостоверяване. ${state_error}", + + + "wallet_menu" : "Меню", + "Blocks_remaining" : "${status} оставащи блока", + "please_try_to_connect_to_another_node" : "Моля, опитайте се да се свържете към друг node.", + "xmr_hidden" : "Скрит", + "xmr_available_balance" : "Наличен баланс", + "xmr_full_balance" : "Пълен баланс", + "send" : "Изпрати", + "receive" : "Получи", + "transactions" : "Транзакции", + "incoming" : "Входящи", + "outgoing" : "Изходящи", + "transactions_by_date" : "Транзакции по дата", + "trades" : "Trades", + "filter_by": "Филтрирай по", + "today" : "Днес", + "yesterday" : "Вчера", + "received" : "Получени", + "sent" : "Изпратени", + "pending" : " (чакащи)", + "rescan" : "Сканирай отново", + "reconnect" : "Reconnect", + "wallets" : "Портфейли", + "show_seed" : "Покажи seed", + "show_keys" : "Покажи seed/keys", + "address_book_menu" : "Адресна книга", + "reconnection" : "Свързване отново", + "reconnect_alert_text" : "Сигурни ли сте, че искате да се свържете отново?", + + + "exchange" : "Exchange", + "clear" : "Изчисти", + "refund_address" : "Refund address", + "change_exchange_provider" : "Промяна на Exchange Provider", + "you_will_send" : "Обръщане от", + "you_will_get" : "Обръщане в", + "amount_is_guaranteed" : "Сумата за получаване е гарантирана", + "amount_is_estimate" : "Сумата за получаване е ", + "powered_by" : "Powered by ${title}", + "error" : "Грешка", + "estimated" : "Изчислено", + "min_value" : "Мин: ${value} ${currency}", + "max_value" : "Макс: ${value} ${currency}", + "change_currency" : "Смени валута", + "overwrite_amount" : "Промени сума", + "qr_payment_amount" : "Този QR код съдържа сума за плащане. Искате ли да промените стойността?", + + "copy_id" : "Копиране на ID", + "exchange_result_write_down_trade_id" : "Моля, запишете trade ID-то, за да продължите.", + "trade_id" : "Trade ID:", + "copied_to_clipboard" : "Копирано", + "saved_the_trade_id" : "Запазих trade ID-то", + "fetching" : "Обработване", + "id" : "ID: ", + "amount" : "Сума: ", + "payment_id" : "Payment ID: ", + "status" : "Статус: ", + "offer_expires_in" : "Предложението изтича след: ", + "trade_is_powered_by" : "This trade is powered by ${provider}", + "copy_address" : "Copy Address", + "exchange_result_confirm" : "By pressing confirm, you will be sending ${fetchingLabel} ${from} from your wallet called ${walletName} to the address shown below. Or you can send from your external wallet to the below address/QR code.\n\nPlease press confirm to continue or go back to change the amounts.", + "exchange_result_description" : "You must send a minimum of ${fetchingLabel} ${from} to the address shown on the next page. If you send an amount lower than ${fetchingLabel} ${from} it may not get converted and it may not be refunded.", + "exchange_result_write_down_ID" : "*Please copy or write down your ID shown above.", + "confirm" : "Потвърждаване", + "confirm_sending" : "Потвърждаване на изпращането", + "commit_transaction_amount_fee" : "Изпълняване на транзакция\nСума: ${amount}\nТакса: ${fee}", + "sending" : "Изпращане", + "transaction_sent" : "Сумата е изпратена!", + "expired" : "Изтекло", + "time" : "${minutes} мин ${seconds} сек", + "send_xmr" : "Изпращане на XMR", + "exchange_new_template" : "Нов шаблон", + + "faq" : "FAQ", + + + "enter_your_pin" : "Въведете PIN", + "loading_your_wallet" : "Зареждане на портфейл", + + + "new_wallet" : "Нов портфейл", + "wallet_name" : "Име на портфейл", + "continue_text" : "Напред", + "choose_wallet_currency" : "Изберете валута за портфейла:", + + + "node_new" : "Нов Node", + "node_address" : "Нов адрес", + "node_port" : "Node порт", + "login" : "Влизане", + "password" : "Парола", + "nodes" : "Nodes", + "node_reset_settings_title" : "Възстановяване на настройки", + "nodes_list_reset_to_default_message" : "Сигурни ли сте, че искате да възстановите фабричните настройки?", + "change_current_node" : "Сигурни ли сте, че искате да промените сегашния node на ${node}?", + "change" : "Промени", + "remove_node" : "Премахни node", + "remove_node_message" : "Сигурни ли сте, че искате да премахнете избрания node?", + "remove" : "Премахни", + "delete" : "Изтрий", + "add_new_node" : "Добави нов node", + "change_current_node_title" : "Промени сегашния node", + "node_test" : "Тест", + "node_connection_successful" : "Връзката бе установена успешно", + "node_connection_failed" : "Връзката не можа да бъде установена", + "new_node_testing" : "Тестване на нов node", + + + "use" : "Смяна на ", + "digit_pin" : "-цифрен PIN", + + + "share_address" : "Сподели адрес", + "receive_amount" : "Сума", + "subaddresses" : "Подадреси", + "addresses" : "Адреси", + "scan_qr_code" : "Сканирайте QR кода, за да получите адреса", + "qr_fullscreen" : "Натиснете, за да отворите QR кода на цял екран", + "rename" : "Промяна на името", + "choose_account" : "Избиране на профил", + "create_new_account" : "Създаване на нов профил", + "accounts_subaddresses" : "Профили и подадреси", + + + "restore_restore_wallet" : "Възстановяване на портфейл", + "restore_title_from_seed_keys" : "Възстановяване от seed/keys", + "restore_description_from_seed_keys" : "Възстановете своя портфейл от seed/keys, които сте съхранили на сигурно място", + "restore_next" : "Next", + "restore_title_from_backup" : "Възстановяване от резервно копие", + "restore_description_from_backup" : "Можете да възстановите цялото приложение Cake Wallet от своя резервен файл", + "restore_seed_keys_restore" : "Възстановяне от Seed/Keys", + "restore_title_from_seed" : "Възстановяване от seed", + "restore_description_from_seed" : "Възстановяване на портфейл от кода от 13 или 25 думи", + "restore_title_from_keys" : "Възстановяване от keys", + "restore_description_from_keys" : "Възстановяване на портфейл от генерираните от Вашите тайни ключове клавиши", + "restore_wallet_name" : "Име на портфейл", + "restore_address" : "Адреси", + "restore_view_key_private" : "View key (таен)", + "restore_spend_key_private" : "Spend key (публичен)", + "restore_recover" : "Възстановяване", + "restore_wallet_restore_description" : "Описание на възстановяване на портфейл", + "restore_new_seed" : "Нов seed", + "restore_active_seed" : "Активиране на seed", + "restore_bitcoin_description_from_seed" : "Възстановяване на портфейл чрез код от 24 думи", + "restore_bitcoin_description_from_keys" : "Възстановяване на портфейл чрез WIF, изведен от Вашите private keys", + "restore_bitcoin_title_from_keys" : "Възстановяване от WIF", + "restore_from_date_or_blockheight" : "Моля, въведете дата няколко дни преди създаването на този портфейл. Ако знаете blockheight-а, въведето него вместо това", + + + "seed_reminder" : "Моля, запишете го в случай на загуба на устройството.", + "seed_title" : "Seed", + "seed_share" : "Споделяне на seed", + "copy" : "Копиране", + + + "seed_language_choose" : "Моля, изберете език на seed-а:", + "seed_choose" : "Изберете език на seed-а", + "seed_language_next" : "Следващ", + "seed_language_english" : "Английски", + "seed_language_chinese" : "Китайски", + "seed_language_dutch" : "Нидерландски", + "seed_language_german" : "Немски", + "seed_language_japanese" : "Японски", + "seed_language_portuguese" : "Португалски", + "seed_language_russian" : "Руски", + "seed_language_spanish" : "Испански", + "seed_language_french": "Френски", + "seed_language_italian": "Италиански", + + + "send_title" : "Изпращане", + "send_your_wallet" : "Вашият портфейл", + "send_address" : "${cryptoCurrency} адрес", + "send_payment_id" : "Payment ID (не е задължително)", + "all" : "ALL", + "send_error_minimum_value" : "Минималната сума е 0.01", + "send_error_currency" : "Валутата може да съдържа само числа", + "send_estimated_fee" : "Изчислена такса:", + "send_priority" : "В момента таксата е на ${transactionPriority} приоритетност.\nПриоритетността на транзакцията може да бъде променена в настройките", + "send_creating_transaction" : "Създаване на транзакция", + "send_templates" : "Шаблони", + "send_new" : "Ново", + "send_amount" : "Сума:", + "send_fee" : "Такса:", + "send_name" : "Име", + "send_got_it" : "Готово", + "send_sending" : "Изпращане...", + "send_success" : "Вашите ${crypto} бяха успешно изпратени", + + + "settings_title" : "Настройки", + "settings_nodes" : "Nodes", + "settings_current_node" : "Сегашен node", + "settings_wallets" : "Портфейли", + "settings_display_balance" : "Показване на баланс", + "settings_currency" : "Валута", + "settings_fee_priority" : "Таксова приоритетност", + "settings_save_recipient_address" : "Запазване адрес на получател", + "settings_personal" : "Лични", + "settings_change_pin" : "Промяна на PIN", + "settings_change_language" : "Промяна на езика", + "settings_allow_biometrical_authentication" : "Позволяване на биометрично удостоверяване.", + "settings_dark_mode" : "Тъмен режим", + "settings_transactions" : "Транзакции", + "settings_trades" : "Сделки", + "settings_display_on_dashboard_list" : "Показване на таблото", + "settings_all" : "Всичко", + "settings_only_trades" : "Само сделки", + "settings_only_transactions" : "Само транзакции", + "settings_none" : "Липсва", + "settings_support" : "Поддръжка", + "settings_terms_and_conditions" : "Условия", + "pin_is_incorrect" : "Грешен PIN", + + + "setup_pin" : "Настройване на PIN", + "enter_your_pin_again" : "Въведете своя PIN отново", + "setup_successful" : "Вашият PIN бе успешно настроен!", + + + "wallet_keys" : "Seed/keys на портфейла", + "wallet_seed" : "Seed на портфейла", + "private_key" : "Таен ключ", + "public_key" : "Публичен ключ", + "view_key_private" : "View key (таен)", + "view_key_public" : "View key (публичен)", + "spend_key_private" : "Spend key (таен)", + "spend_key_public" : "Spend key (публичен)", + "copied_key_to_clipboard" : "Копиран ключ: ${key}", + + + "new_subaddress_title" : "Нов адрес", + "new_subaddress_label_name" : "Име на Label", + "new_subaddress_create" : "Създаване", + + "address_label" : "Адресен label", + + "subaddress_title" : "Лист от подадреси", + + + "trade_details_title" : "Подробности на сделката", + "trade_details_id" : "ID", + "trade_details_state" : "Статус", + "trade_details_fetching" : "Обработка", + "trade_details_provider" : "Provider", + "trade_details_created_at" : "Създадено", + "trade_details_pair" : "Pair", + "trade_details_copied" : "${title} копирано", + + + "trade_history_title" : "История на сделките", + + + "transaction_details_title" : "Подробности на транзакцията", + "transaction_details_transaction_id" : "Transaction ID", + "transaction_details_date" : "Дата", + "transaction_details_height" : "Height", + "transaction_details_amount" : "Сума", + "transaction_details_fee" : "Такса", + "transaction_details_copied" : "${title} копирано", + "transaction_details_recipient_address" : "Адрес на получател", + + + "wallet_list_title" : "Monero портфейл", + "wallet_list_create_new_wallet" : "Създаване на нов портфейл", + "wallet_list_restore_wallet" : "Възстановяване на портфейл", + "wallet_list_load_wallet" : "Зареждане на портфейл", + "wallet_list_loading_wallet" : "Зареждане на портфейл ${wallet_name}", + "wallet_list_failed_to_load" : "Грешка при зареждането на портфейл ${wallet_name}. ${error}", + "wallet_list_removing_wallet" : "Премахване на портфейл ${wallet_name}", + "wallet_list_failed_to_remove" : "Грешка при премахването на портфейл${wallet_name}. ${error}", + + + "widgets_address" : "Адрес", + "widgets_restore_from_blockheight" : "Възстановяване от blockheight", + "widgets_restore_from_date" : "Възстановяване от дата", + "widgets_or" : "или", + "widgets_seed" : "Seed", + + + "router_no_route" : "Няма дефиниран път за ${name}", + + + "error_text_account_name" : "Името на профила може да съдържа само букви и числа \nи трябва да е между 1 и 15 символа", + "error_text_contact_name" : "Името на контакта не може да съдържа символите ` , ' \" \nи и трябва да е между 1 и 32 символа", + "error_text_address" : "Адресът на портфейла трябва да отговаря \n на вида криптовалута", + "error_text_node_address" : "Моля, въведете iPv4 адрес", + "error_text_node_port" : "Node port-ът е цяло число между 0 и 65535", + "error_text_payment_id" : "Payment ID-то може да съдържа само между 16 и 64 шестнайсетични символа", + "error_text_xmr" : "XMR сумата не може да надхвърля наличния баланс.\nБроят на цифрите след десетичната запетая може да бъде най-много 12", + "error_text_fiat" : "Сумата не може да надвишава наличния баланс.\nThe number of fraction digits must be less or equal to 2", + "error_text_subaddress_name" : "Името на подадреса не може да съдържат символите ` , ' \" \n и трябва да е между 1 и 20 символа", + "error_text_amount" : "Сумата може да съдържа само числа", + "error_text_wallet_name" : "Името на портфейла може да съдържа само букви, цифри, и символите _ и - \n и трябва да е между 1 и 33 символа", + "error_text_keys" : "Ключовете за портфейл може да съдържат само 64 шестнайсетични символа", + "error_text_crypto_currency" : "Броят на цифрите след десетичната запетая\nможе да бъде най-много 12", + "error_text_minimal_limit" : "Сделка за ${provider} не беше създадена. Сумата е по-малко от минималната: ${min} ${currency}", + "error_text_maximum_limit" : "Сделка за ${provider} не беше създадена. Сумата надвишава максималната: ${max} ${currency}", + "error_text_limits_loading_failed" : "Сделка за ${provider} не беше създадена. Неуспешно зареждане на лимити", + "error_text_template" : "Имената на шаблони и адреси не могат да съдържат ` , ' \" \nи трябва да са между 1 и 106 символа.", + + + "auth_store_ban_timeout" : "ban_timeout", + "auth_store_banned_for" : "Забрана за ", + "auth_store_banned_minutes" : " минути", + "auth_store_incorrect_password" : "Грешен PIN", + "wallet_store_monero_wallet" : "Monero портфейл", + "wallet_restoration_store_incorrect_seed_length" : "Грешна дължина на seed-а", + + + "full_balance" : "Пълен баланс", + "available_balance" : "Наличен баланс", + "hidden_balance" : "Скрит баланс", + + + "sync_status_syncronizing" : "СИНХРОНИЗИРАНЕ", + "sync_status_syncronized" : "СИНХРОНИЗИРАНО", + "sync_status_not_connected" : "НЯМА ВРЪЗКА", + "sync_status_starting_sync" : "ЗАПОЧВАНЕ НА СИНХРОНИЗАЦИЯ", + "sync_status_failed_connect" : "НЕУСПЕШНО СВЪРЗВАНЕ", + "sync_status_connecting" : "СВЪРЗВАНЕ", + "sync_status_connected" : "СВЪРЗВАНЕ", + "sync_status_attempting_sync" : "ОПИТ ЗА СИНХРОНИЗАЦИЯ", + + + "transaction_priority_slow" : "Бавно", + "transaction_priority_regular" : "Обичайно", + "transaction_priority_medium" : "Средно", + "transaction_priority_fast" : "Бързо", + "transaction_priority_fastest" : "Най-бързо", + + + "trade_for_not_created" : "Сделка за ${title} не бе създадена.", + "trade_not_created" : "Сделка не бе създадена.", + "trade_id_not_found" : "Сделка ${tradeId} на ${title} не бе намерена.", + "trade_not_found" : "Сделката не бе намерена.", + + + "trade_state_pending" : "Изчаква се", + "trade_state_confirming" : "Потвърждава се", + "trade_state_trading" : "Trading", + "trade_state_traded" : "Traded", + "trade_state_complete" : "Завършено", + "trade_state_to_be_created" : "Изчаква създаване", + "trade_state_unpaid" : "Неплатено", + "trade_state_underpaid" : "Недостатъчно плащане", + "trade_state_paid_unconfirmed" : "Непотвърдено плащане", + "trade_state_paid" : "Платено", + "trade_state_btc_sent" : "Btc изпратен", + "trade_state_timeout" : "Време за изчакване", + "trade_state_created" : "Създадено", + "trade_state_finished" : "Завършено", + + "change_language" : "Смяна на езика", + "change_language_to" : "Смяна на езика на ${language}?", + + "paste" : "Поставяне", + "restore_from_seed_placeholder" : "Моля, въведете своя seed тук", + "add_new_word" : "Добавяне на нова дума", + "incorrect_seed" : "Въведеният текст е невалиден.", + + "biometric_auth_reason" : "Сканирайте своя пръстов отпечатък", + "version" : "Версия ${currentVersion}", + + "extracted_address_content" : "Ще изпратите средства на \n${recipient_name}", + + "card_address" : "Адрес:", + "buy" : "Купуване", + "sell": "Продаване", + + "placeholder_transactions" : "Вашите транзакции ще се покажат тук", + "placeholder_contacts" : "Вашите контакти ще се покажат тук", + + "template" : "Шаблон", + "confirm_delete_template" : "Този шаблон ще бъде изтрит. Искате ли да продължите?", + "confirm_delete_wallet" : "Този портфейл ще бъде изтрит. Искате ли да продължите?", + + "picker_description" : "За да изберете ChangeNOW или MorphToken, моля, първо променете своя trading pair", + + "change_wallet_alert_title" : "Смяна на сегашния портфейл", + "change_wallet_alert_content" : "Искате ли да смените сегашния портфейл на ${wallet_name}?", + + "creating_new_wallet" : "Създаване на нов портфейл", + "creating_new_wallet_error" : "Грешка: ${description}", + + "seed_alert_title" : "Внимание", + "seed_alert_content" : "Seed-ът е единственият начин да възстановите портфейла си. Записахте ли го?", + "seed_alert_back" : "Назад", + "seed_alert_yes" : "Да", + + "exchange_sync_alert_content" : "Моля, изчакайте синхронизирането на Вашия портфейл", + + "pre_seed_title" : "ВАЖНО", + "pre_seed_description" : "На следващата страница ще видите поредица от ${words} думи. Това е вашият таен личен seed и е единственият начин да възстановите портфейла си. Отговорността за съхранението му на сигурно място извън приложението на Cake Wallet е изцяло ВАША.", + "pre_seed_button_text" : "Разбирам. Покажи seed", + + "xmr_to_error" : "XMR.TO грешка", + "xmr_to_error_description" : "Невалидна сума - най-много 8 цифри след десетичната запетая", + + "provider_error" : "Грешка на ${provider} ", + + "use_ssl" : "Използване на SSL", + "trusted" : "Надежден", + + "color_theme" : "Цвят", + "light_theme" : "Светло", + "bright_theme" : "Ярко", + "dark_theme" : "Тъмно", + "enter_your_note" : "Въвеждане на бележка…", + "note_optional" : "Бележка (не е задължително)", + "note_tap_to_change" : "Бележка (натиснете за промяна)", + "view_in_block_explorer" : "Вижте в Block Explorer", + "view_transaction_on" : "Вижте транзакция на ", + "transaction_key" : "Transaction Key", + "confirmations" : "потвърждения", + "recipient_address" : "Адрес на получател", + + "extra_id" : "Допълнително ID:", + "destination_tag" : "Destination tag:", + "memo" : "Мемо:", + + "backup" : "Резервно копие", + "change_password" : "Смяна на парола", + "backup_password" : "Парола за възстановяване", + "write_down_backup_password" : "Моля, запишете своята парола за възстановяване. Тя се използва за импортиране на резервни копия на Вашите файлове.", + "export_backup" : "Експортиране на резервно копие", + "save_backup_password" : "Моля, запишете своята парола за възстановяване. Импортирането на резервни копия не е възможно без нея.", + "backup_file" : "Резервно копие", + + "edit_backup_password" : "Промяна на паролата за възстановяване", + "save_backup_password_alert" : "Запазване на паролата за възстановяване", + "change_backup_password_alert" : "Предишните резервни копия не могат да бъдат импортирани с новата парола. Те ще се използва само за нови такива. Are you sure that you want to change backup password?", + + "enter_backup_password" : "Въведете парола за възстановяване", + "select_backup_file" : "Избор на резервно копие", + "import" : "Импортиране", + "please_select_backup_file" : "Моля, изберете резервно копие и въведете парола за възстановяване.", + + "fixed_rate" : "Постоянен обменен курс", + "fixed_rate_alert" : "Ще можете да въведете сумата за получаване, когато е избранен постоянен обменен курс. Искате ли да изберете постоянен обменен курс?", + + "xlm_extra_info" : "Не забравяйте да дадете Memo ID-то, докато изпращате XLM транзакцията за обмена", + "xrp_extra_info" : "Не забравяйте да дадете Destination Tag-а, когато изпращате XRP транзакцията за обмена", + + "exchange_incorrect_current_wallet_for_xmr" : "Ако искате да обмените XMR от своя Cake Wallet Monero баланс, първо изберете своя Monero портфейл.", + "confirmed" : "Потвърдено", + "unconfirmed" : "Непотвърдено", + "displayable" : "Възможност за показване", + + "submit_request" : "изпращане на заявка", + + "buy_alert_content" : "В момента поддържаме покупката само на Bitcoin и Litecoin. За да закупите Bitcoin или Litecoin, създайте или изберете своя Bitcoin или Litecoin портфейл.", + "sell_alert_content": "В момента поддържаме само продажбата на Bitcoin. За да продавате Bitcoin, създайте или изберете своя Bitcoin портфейл.", + + "outdated_electrum_wallet_description" : "Нови Bitcoin портфейли, създадени в Cake, сега имат seed от 24 думи. Трябва да създадете нов Bitcoin адрес и да прехвърлите всичките си средства в него и веднага да спрете използването на стари портфейли. Моля, напревете това незабавно, за да подсигурите средствата си.", + "understand" : "Разбирам", + + "apk_update" : "APK ъпдейт", + + "buy_bitcoin" : "Купуване на Bitcoin", + "buy_with" : "Купуване чрез", + "moonpay_alert_text" : "Сумата трябва да бъде най-малко ${minAmount} ${fiatCurrency}", + + "outdated_electrum_wallet_receive_warning": "Ако този адрес има seed от 12 думи и е създаден чрез Cake, НЕ добавяйте Bitcoin в него. Всякакъв Bitcoin, изпратен на този адрес, може да бъде загубен завинаги. Създайте нов портфейл от 24 думи (натиснете менюто горе, вдясно, изберете Портфейли, изберете Създаване на нов портфейл, след това изберете Bitcoin) и НЕЗАБАВНО преместете своя Bitcoin там. Нови (такива с 24 думи) Bitcoin портфейли от Cake са надеждни", + "do_not_show_me": "Не показвай повече това", + + "unspent_coins_title" : "Неизползвани монети", + "unspent_coins_details_title" : "Подробности за неизползваните монети", + "freeze" : "Замразяване", + "frozen" : "Замразени", + "coin_control" : "Управление на монетите (не е задължително)", + + "address_detected" : "Открит е адрес", + "address_from_domain" : "Този адрес е от ${domain} на Unstoppable Domains", + + "add_receiver" : "Добавяне на друг получател (не е задължително)", + + "manage_yats" : "Управление на Yats", + "yat_alert_title" : "Търгувайте с крипто много по-лесно чрез Yat", + "yat_alert_content" : "Потребителите на Cake Wallet вече могат да изпращат и получават любимите си валути чрез неповторимо потребителско име от емоджита.", + "get_your_yat" : "Получете своя Yat", + "connect_an_existing_yat" : "Добавете съществуващ Yat", + "connect_yats": "Добавете Yats", + "yat_address" : "Yat Адрес", + "yat" : "Yat", + "address_from_yat" : "Този адрес е от ${emoji} в Yat", + "yat_error" : "Yat грешка", + "yat_error_content" : "Няма адреси, свързани с този Yat. Опитайте с друг Yat", + "choose_address" : "\n\nМоля, изберете адреса:", + "yat_popup_title" : "Адресът на вашия портфейл може да съдържа емоджита.", + "yat_popup_content" : "Вече можете да изпращате и да получавате крипто в Cake Wallet с вашия Yat - кратко потребителско име във формата на емоджи. Управлявайте своите Yats по всяко време в настройките", + "second_intro_title" : "Един емоджи адрес, обединяващ всички останали.", + "second_intro_content" : "Вашият Yat е уникален адрес във формата на емоджи, който играе ролята на всички Ваши дълги шестнайсетични портфейли за всяка валута.", + "third_intro_title" : "Yat добре се сработва с други", + "third_intro_content" : "Yats също живее извън Cake Wallet. Всеки адрес на портфейл може да бъде заменен с Yat!", + "learn_more" : "Научете още", + "search": "Търсене", + "search_language": "Търсене на език", + "search_currency": "Търсене на валута", + "new_template" : "Нов шаблон", + "electrum_address_disclaimer": "Нови адреси се генерират всеки път, когато използвате този, но и предишните продължават да работят", + "wallet_name_exists": "Вече има портфейл с това име. Моля, изберете друго име или преименувайте другия портфейл.", + "market_place": "Магазин", + "cake_pay_title": "Cake Pay Gift Карти", + "cake_pay_subtitle": "Купете гифткарти на намалени цени (само за САЩ)", + "cake_pay_web_cards_title": "Cake Pay Онлайн Карти", + "cake_pay_web_cards_subtitle": "Купете световно признати предплатени и гифт карти", + "about_cake_pay": "Cake Pay Ви позволява лесно да купувате предплатени карти, които веднага могат да се използват с над 150,000 търговци на територията на САЩ.", + "cake_pay_account_note": "Регистрайте се само с един имейл, за да виждате и купувате карти. За някои има дори и отстъпка!", + "already_have_account": "Вече имате профил?", + "create_account": "Създаване на профил", + "privacy_policy": "Политика за поверителността", + "welcome_to_cakepay": "Добре дошли в Cake Pay!", + "sign_up": "Регистрация", + "forgot_password": "Забравена парола", + "reset_password": "Нулиране на парола", + "gift_cards": "Gift Карти", + "setup_your_debit_card": "Настройте своята дебитна карта", + "no_id_required": "Без нужда от документ за самоличност. Използвайте навсякъде", + "how_to_use_card": "Как се ползва тази карта", + "purchase_gift_card": "Купуване на Gift Card", + "verification": "Потвърждаване", + "fill_code": "Моля, въведето кода за потвърждаване, изпратен на Вашия имейл", + "dont_get_code": "Не получихте код?", + "resend_code": "Повторно изпращане", + "debit_card": "Дебитна карта", + "cakepay_prepaid_card": "CakePay предплатена дебитна карта", + "no_id_needed": "Без нужда от документ за самоличност!", + "frequently_asked_questions": "Често задавани въпроси", + "debit_card_terms": "Съхранението и използването на данните от вашата платежна карта в този дигитален портфейл подлежат на условията на съответното съгласие за картодържец от издателя на картата.", + "please_reference_document": "Моля, вижте документите по-долу за повече информация.", + "cardholder_agreement": "Съгласие за картодържец", + "e_sign_consent": "E-Sign съгласие", + "agree_and_continue": "Съгласяване и продължаване", + "email_address": "Имейл адрес", + "agree_to": "Чрез създаването на акаунт вие се съгласявате с ", + "and": "и", + "enter_code": "Въведете код", + "congratulations": "Поздравления!", + "you_now_have_debit_card": "Вече имате дебитна карта", + "min_amount" : "Мин: ${value}", + "max_amount" : "Макс: ${value}", + "enter_amount": "Въведете сума", + "billing_address_info": "Ако Ви попитат за билинг адрес, въведето своя адрес за доставка", + "order_physical_card": "Поръчка на физическа карта", + "add_value": "Добавяне на стойност", + "activate": "Активиране", + "get_a": "Вземете ", + "digital_and_physical_card": " дигитална или физическа предплатена дебитна карта", + "get_card_note": ", която можете да заредите с дигитална валута. Без нужда от допълнителна информация!", + "signup_for_card_accept_terms": "Регистрайте се за картата и приемете условията.", + "add_fund_to_card": "Добавете предплатени средства в картите (до ${value})", + "use_card_info_two": "Средствата се обръщат в USD, когато биват запазени в предплатената карта, а не в дигитална валута.", + "use_card_info_three": "Използвайте дигиталната карта онлайн или чрез безконтактен метод на плащане.", + "optionally_order_card": "По желание поръчайте и физическа карта.", + "hide_details" : "Скриване на подробностите", + "show_details" : "Показване на подробностите", + "upto": "до ${value}", + "discount": "Спестете ${value}%", + "gift_card_amount": "Сума в Gift Card", + "bill_amount": "Искана сума", + "you_pay": "Вие плащате", + "tip": "Tip:", + "custom": "персонализирано", + "by_cake_pay": "от Cake Pay", + "expires": "Изтича", + "mm": "мм", + "yy": "гг", + "online": "Онлайн", + "offline": "Офлайн", + "gift_card_number": "Номер на Gift Card", + "pin_number": "PIN код", + "total_saving": "Общо спестявания", + "last_30_days": "Последните 30 дни", + "avg_savings": "Средни спестявания", + "view_all": "Виж всички", + "active_cards": "Активни карти", + "delete_account": "Изтриване на акаунт", + "cards": "Карти", + "active": "Активиране", + "redeemed": "Използвани", + "gift_card_balance_note": "Гифткарти с наличен баланс ще се покажат тук", + "gift_card_redeemed_note": "Използваните гифткарти ще се покажат тук", + "logout": "Logout", + "add_tip": "Add Tip", + "percentageOf": "от ${amount}", + "is_percentage": "е", + "search_category": "Търсене в категория", + "mark_as_redeemed": "Отбележи като използван", + "more_options": "Още настройки", + "awaiting_payment_confirmation": "Чака се потвърждение на плащането", + "transaction_sent_notice": "Ако процесът продължи повече от 1 минута, проверете някой block explorer и своя имейл.", + "agree": "Съгласен/а съм", + "in_store": "In Store", + "generating_gift_card": "Създаване на Gift Card", + "payment_was_received": "Плащането бе получено.", + "proceed_after_one_minute": "Ако процесът продължи повече от 1 минута, проверете своя имейл.", + "order_id": "ID на поръчка", + "gift_card_is_generated": "Gift Card бе създадена", + "open_gift_card": "Отвори Gift Card", + "contact_support": "Свържи се с отдел поддръжка", + "gift_cards_unavailable": "В момента гифткарти могат да бъдат закупени само с Monero, Bitcoin и Litecoin", + "introducing_cake_pay": "Запознайте се с Cake Pay!", + "cake_pay_learn_more": "Купете и използвайте гифткарти директно в приложението!\nПлъзнете отляво надясно, за да научите още.", + "automatic": "Автоматично", + "fixed_pair_not_supported": "Този fixed pair не се поддържа от избраната борса", + "variable_pair_not_supported": "Този variable pair не се поддържа от избраната борса", + "none_of_selected_providers_can_exchange": "Нито един от избраните provider-ъри не може да направи този превод", + "choose_one": "Изберете едно", + "choose_from_available_options": "Изберете от следните опции:", + "custom_redeem_amount": "Персонализирана сума за използване", + "add_custom_redemption": "Добавете персонализиран Redemption", + "remaining": "оставащи", + "delete_wallet": "Изтриване на портфейл", + "delete_wallet_confirm_message" : "Сигурни ли сте, че искате да изтриете протфейла ${wallet_name}?", + "low_fee": "Ниска такса", + "low_fee_alert": "Използвате ниска приоритетност в мрежата. Това може да доведе до дълго чакане, различни обменни курсове или отказани сделки. Препоръчваме използването на по-висока такса.", + "ignor": "Игнориране", + "use_suggested": "Използване на предложеното", + "do_not_share_warning_text" : "Не споделяйте това с никого, дори и отдел поддръжка.\n\nПарите Ви могат и ще бъдат откраднати!", + "help": "Помощ", + "all_transactions": "Всички транзакции", + "all_trades": "Всички сделкки", + "connection_sync": "Свързване и синхронизиране", + "security_and_backup": "Сигурност и резервни копия", + "create_backup": "Създаване на резервно копие", + "privacy_settings": "Настройки за поверителност", + "privacy": "Поверителност", + "display_settings": "Настройки на екрана", + "other_settings": "Други настройки", + "require_pin_after": "Въведете PIN след", + "always": "Винаги", + "minutes_to_pin_code": "${minute} минути", + "disable_exchange": "Деактивиране на борса", + "advanced_privacy_settings": "Допълнителни настройки за поверителност", + "settings_can_be_changed_later": "Тези настройки могат да бъдат променени по-късно от приложението", + "add_custom_node": "Добавяне на нов персонализиран Node", + "disable_fiat": "Деактивиране на fiat", + "fiat_api": "Fiat API", + "disabled": "Деактивирано", + "enabled": "Активирано", + "tor_only": "Само чрез Tor", + "unmatched_currencies": "Валутата на този портфейл не съвпада с тази от сканирания QR код", + "orbot_running_alert": "Моля, включете Orbot преди да свържете към този node.", + "contact_list_contacts": "Контакти", + "contact_list_wallets": "Моите портфейли", + "bitcoin_payments_require_1_confirmation": "Плащанията с Bitcoin изискват потвърждение, което може да отнеме 20 минути или повече. Благодарим за търпението! Ще получите имейл, когато плащането е потвърдено.", + "send_to_this_address" : "Send ${currency} ${tag}to this address", + "arrive_in_this_address" : "${currency} ${tag}ще отидат на този адрес", + "do_not_send": "Не изпращай", + "error_dialog_content": "Получихме грешка.\n\nМоля, изпратете доклада до нашия отдел поддръжка, за да подобрим приложението." +} diff --git a/res/values/strings_cs.arb b/res/values/strings_cs.arb new file mode 100644 index 000000000..cc66b8144 --- /dev/null +++ b/res/values/strings_cs.arb @@ -0,0 +1,688 @@ +{ + "welcome" : "Vítejte v", + "cake_wallet" : "Cake Wallet", + "first_wallet_text" : "Úžasná peněženka pro Monero, Bitcoin, Litecoin a Haven", + "please_make_selection" : "Prosím vyberte si níže, jestli chcete vytvořit, nebo obnovit peněženku.", + "create_new" : "Vytvořit novou peněženku", + "restore_wallet" : "Obnovit peněženku", + + "monero_com": "Monero.com od Cake Wallet", + "monero_com_wallet_text": "Úžasná peněženka pro Monero", + + "haven_app": "Haven od Cake Wallet", + "haven_app_wallet_text": "Úžasná peněženka pro Haven", + + "accounts" : "Účty", + "edit" : "Upravit", + "account" : "Účet", + "add" : "Přidat", + + + "address_book" : "Adresář", + "contact" : "Kontakt", + "please_select" : "Zvolte si:", + "cancel" : "Zrušit", + "ok" : "OK", + "contact_name" : "Jméno kontaktu", + "reset" : "Vymazat", + "save" : "Uložit", + "address_remove_contact" : "Smazat kontakt", + "address_remove_content" : "Opravdu chcete smazat označený kontakt?", + + + "authenticated" : "Ověřeno", + "authentication" : "Ověřování", + "failed_authentication" : "Ověřování selhalo. ${state_error}", + + + "wallet_menu" : "Menu", + "Blocks_remaining" : "Zbývá ${status} bloků", + "please_try_to_connect_to_another_node" : "Zkuste se prosím připojit k jinému uzlu", + "xmr_hidden" : "Skryto", + "xmr_available_balance" : "Zůstatek (dostupný)", + "xmr_full_balance" : "Zůstatek (celkový)", + "send" : "Poslat", + "receive" : "Přijmout", + "transactions" : "Transakce", + "incoming" : "Příchozí", + "outgoing" : "Odchozí", + "transactions_by_date" : "Transakce podle data", + "trades" : "Obchody", + "filter_by": "Filtrovat podle", + "today" : "Dnes", + "yesterday" : "Včera", + "received" : "Přijato", + "sent" : "Odesláno", + "pending" : " (čeká)", + "rescan" : "Znovu prohledat", + "reconnect" : "Znovu připojit", + "wallets" : "Peněženky", + "show_seed" : "Zobrazit seed", + "show_keys" : "Zobrazit seed/klíče", + "address_book_menu" : "Adresář", + "reconnection" : "Znovu připojit", + "reconnect_alert_text" : "Opravdu se chcete znovu připojit?", + + + "exchange" : "Směnit", + "clear" : "Smazat", + "refund_address" : "Adresa pro vrácení", + "change_exchange_provider" : "Změnit směnárnu", + "you_will_send" : "Směnit z", + "you_will_get" : "Směnit na", + "amount_is_guaranteed" : "Částka, kterou dostanete, je konečná", + "amount_is_estimate" : "Částka, kterou dostanete, je jen odhad.", + "powered_by" : "Zajišťuje ${title}", + "error" : "Chyba", + "estimated" : "Odhadováno", + "min_value" : "Min: ${value} ${currency}", + "max_value" : "Max: ${value} ${currency}", + "change_currency" : "Změnit měnu", + "overwrite_amount" : "Přepsat částku", + "qr_payment_amount" : "Tento QR kód obsahuje i částku. Chcete přepsat současnou hodnotu?", + + "copy_id" : "Kopírovat ID", + "exchange_result_write_down_trade_id" : "Prosím zkopírujte si, nebo zapište si ID transakce (trade ID) pro pokračování.", + "trade_id" : "ID transakce (trade ID):", + "copied_to_clipboard" : "Zkopírováno do schránky", + "saved_the_trade_id" : "Uložil jsem si ID transakce (trade ID)", + "fetching" : "Načítá se", + "id" : "ID: ", + "amount" : "Částka: ", + "payment_id" : "ID platby: ", + "status" : "Status: ", + "offer_expires_in" : "Nabídka vyprší: ", + "trade_is_powered_by" : "Tento obchod zajišťuje ${provider}", + "copy_address" : "Zkopírovat adresu", + "exchange_result_confirm" : "Po stisknutí Potvrdit odešlete ${fetchingLabel} ${from} ze své peněženky s názvem ${walletName} na adresu uvedenou níže. Nebo můžete prostředky poslat ze své externí peněženky na níže uvedenou adresu/QR kód.\n\nProsím stiskněte Potvrdit pro pokračování, nebo se vraťte zpět pro změnu částky.", + "exchange_result_description" : "Musíte poslat minimálně ${fetchingLabel} ${from} na adresu uvedenou na následující stránce. Pokud pošlete nižší částku než ${fetchingLabel} ${from} nemusí dojít ke směně, ani k jejímu vrácení.", + "exchange_result_write_down_ID" : "*Prosím zkopírujte si, nebo zapište si výše uvedené ID.", + "confirm" : "Potvrdit", + "confirm_sending" : "Potvrdit odeslání", + "commit_transaction_amount_fee" : "Odeslat transakci\nČástka: ${amount}\nPoplatek: ${fee}", + "sending" : "Odesílání", + "transaction_sent" : "Transakce odeslána!", + "expired" : "Vypršelo", + "time" : "${minutes}m ${seconds}s", + "send_xmr" : "Odeslat XMR", + "exchange_new_template" : "Nová šablona", + + "faq" : "FAQ", + + + "enter_your_pin" : "Zadejte svůj PIN", + "loading_your_wallet" : "Načítám peněženku", + + + "new_wallet" : "Nová peněženka", + "wallet_name" : "Název peněženky", + "continue_text" : "Pokračovat", + "choose_wallet_currency" : "Prosím zvolte si měnu pro peněženku:", + + + "node_new" : "Nový uzel", + "node_address" : "Adresa uzlu", + "node_port" : "Port uzlu", + "login" : "Login", + "password" : "Heslo", + "nodes" : "Uzly", + "node_reset_settings_title" : "Zrušit nastavení", + "nodes_list_reset_to_default_message" : "Opravdu chcete zrušit nastavení a vrátit výchozí hodnotu?", + "change_current_node" : "Opravdu chcete změnit současný uzel na ${node}?", + "change" : "Změnit", + "remove_node" : "Odstranit uzel", + "remove_node_message" : "Opravdu chcete odstranit označený uzel?", + "remove" : "Odstranit", + "delete" : "Smazat", + "add_new_node" : "Přidat nový uzel", + "change_current_node_title" : "Změnit současný uzel", + "node_test" : "Otestovat", + "node_connection_successful" : "Připojení bylo úspěšné", + "node_connection_failed" : "Připojení selhalo", + "new_node_testing" : "Testování nového uzlu", + + + "use" : "Přepnout na ", + "digit_pin" : "-číselný PIN", + + + "share_address" : "Sdílet adresu", + "receive_amount" : "Částka", + "subaddresses" : "Subadresy", + "addresses" : "Adresy", + "scan_qr_code" : "Naskenujte QR kód pro získání adresy", + "qr_fullscreen" : "Poklepáním otevřete QR kód na celé obrazovce", + "rename" : "Přejmenovat", + "choose_account" : "Zvolte částku", + "create_new_account" : "Vytvořit nový účet", + "accounts_subaddresses" : "Účty a subadresy", + + + "restore_restore_wallet" : "Obnovit peněženku", + "restore_title_from_seed_keys" : "Obnovit ze seedu/klíčů", + "restore_description_from_seed_keys" : "Obnovte svou peněženku ze seedu/klíčů, které jste si uložili na bezpečném místě", + "restore_next" : "Další", + "restore_title_from_backup" : "Obnovit ze zálohy", + "restore_description_from_backup" : "Můžete obnovit celou Cake Wallet aplikaci ze souboru se zálohou", + "restore_seed_keys_restore" : "Obnovit ze seedu/klíčů", + "restore_title_from_seed" : "Obnovit ze seedu", + "restore_description_from_seed" : "Obnovte svou peněženku pomocí kombinace 25, nebo 13 slov", + "restore_title_from_keys" : "Obnovit z klíčů", + "restore_description_from_keys" : "Obnovte svou peněženku pomocí generovaných stisků kláves uložených z vašich soukromých klíčů", + "restore_wallet_name" : "Jméno peněženky", + "restore_address" : "Adresa", + "restore_view_key_private" : "Klíč pro zobrazení (soukromý)", + "restore_spend_key_private" : "Klíč pro platby (soukromý)", + "restore_recover" : "Obnovit", + "restore_wallet_restore_description" : "Popis obnovení peněženky", + "restore_new_seed" : "Nový seed", + "restore_active_seed" : "Aktivní seed", + "restore_bitcoin_description_from_seed" : "Obnovte svou peněženku pomocí kombinace 24 slov", + "restore_bitcoin_description_from_keys" : "Obnovte svou peněženku pomocí vygenerovaného WIF řetězce z vašich soukromých klíčů", + "restore_bitcoin_title_from_keys" : "Obnovit z WIF", + "restore_from_date_or_blockheight" : "Prosím zadejte datum z doby několik dnů před tím, než jste si zakládali tuto peněženku. Nebo místo toho zadejte výšku bloku, pokud ji znáte.", + + + "seed_reminder" : "Prosím zapište si toto pro případ ztráty, nebo poškození telefonu", + "seed_title" : "Seed", + "seed_share" : "Sdílet seed", + "copy" : "Kopírovat", + + + "seed_language_choose" : "Prosím zvolte si jazyk seedu:", + "seed_choose" : "Zvolte si jazyk seedu", + "seed_language_next" : "Další", + "seed_language_english" : "Angličtina", + "seed_language_chinese" : "Čínština", + "seed_language_dutch" : "Nizozemština", + "seed_language_german" : "Němčina", + "seed_language_japanese" : "Japonština", + "seed_language_portuguese" : "Portugalština", + "seed_language_russian" : "Ruština", + "seed_language_spanish" : "Španělština", + "seed_language_french": "Francouzština", + "seed_language_italian": "Italština", + + + "send_title" : "Poslat", + "send_your_wallet" : "Vaše peněženka", + "send_address" : "${cryptoCurrency} adresa", + "send_payment_id" : "ID platby (nepovinné)", + "all" : "VŠE", + "send_error_minimum_value" : "Minimální částka je 0,01", + "send_error_currency" : "Měna může obsahovat pouze čísla", + "send_estimated_fee" : "Odhadovaný poplatek:", + "send_priority" : "Momentálně je poplatek nastaven na prioritu: ${transactionPriority}.\nPriorita transakce může být upravena v nastavení.", + "send_creating_transaction" : "Vytváření transakce", + "send_templates" : "Šablony", + "send_new" : "Nová", + "send_amount" : "Částka:", + "send_fee" : "Poplatek:", + "send_name" : "Název", + "send_got_it" : "Rozumím", + "send_sending" : "Odesílání...", + "send_success" : "Vaše ${crypto} bylo úspěšně odesláno", + + + "settings_title" : "Nastavení", + "settings_nodes" : "Uzly", + "settings_current_node" : "Aktuální uzel", + "settings_wallets" : "Peněženky", + "settings_display_balance" : "Zobrazovat zůstatek", + "settings_currency" : "Měna", + "settings_fee_priority" : "Priorita (poplatky)", + "settings_save_recipient_address" : "Ukládat adresu příjemce", + "settings_personal" : "Osobní", + "settings_change_pin" : "Změnit PIN", + "settings_change_language" : "Změnit jazyk", + "settings_allow_biometrical_authentication" : "Povolit biometrické ověření", + "settings_dark_mode" : "Tmavý režim", + "settings_transactions" : "Transakce", + "settings_trades" : "Obchody", + "settings_display_on_dashboard_list" : "Zobrazit na seznamu na dashboardu", + "settings_all" : "VŠE", + "settings_only_trades" : "Pouze obchody", + "settings_only_transactions" : "Pouze transakce", + "settings_none" : "Žádný", + "settings_support" : "Podpora", + "settings_terms_and_conditions" : "Obchodní podmínky", + "pin_is_incorrect" : "PIN není správný", + + + "setup_pin" : "Nastavit PIN", + "enter_your_pin_again" : "Zadejte znovu svůj PIN", + "setup_successful" : "Váš PIN byl úspěšně nastaven!", + + + "wallet_keys" : "Seed/klíče peněženky", + "wallet_seed" : "Seed peněženky", + "private_key" : "Soukromý klíč", + "public_key" : "Veřejný klíč", + "view_key_private" : "Klíč pro zobrazení (soukromý)", + "view_key_public" : "Klíč pro zobrazení (veřejný)", + "spend_key_private" : "Klíč pro platby (soukromý)", + "spend_key_public" : "Klíč pro platby (veřejný)", + "copied_key_to_clipboard" : "Zkopírován ${key} do schránky", + + + "new_subaddress_title" : "Nová adresa", + "new_subaddress_label_name" : "Popisek", + "new_subaddress_create" : "Vytvořit", + + "address_label" : "Popisek adresy", + + "subaddress_title" : "Seznam subadres", + + + "trade_details_title" : "Podrobnosti k obchodu", + "trade_details_id" : "ID", + "trade_details_state" : "Stav", + "trade_details_fetching" : "Získávám", + "trade_details_provider" : "Poskytovatel", + "trade_details_created_at" : "Vytvořeno v", + "trade_details_pair" : "Pár", + "trade_details_copied" : "${title} zkopírováno do schránky", + + + "trade_history_title" : "Historie obchodů", + + + "transaction_details_title" : "Podrobnosti o transakci", + "transaction_details_transaction_id" : "ID transakce", + "transaction_details_date" : "Datum", + "transaction_details_height" : "Výška", + "transaction_details_amount" : "Částka", + "transaction_details_fee" : "Poplatek", + "transaction_details_copied" : "${title} zkopírováno do schránky", + "transaction_details_recipient_address" : "Adresa příjemce", + + + "wallet_list_title" : "Monero Wallet", + "wallet_list_create_new_wallet" : "Vytvořit novou peněženku", + "wallet_list_restore_wallet" : "Obnovit peněženku", + "wallet_list_load_wallet" : "Načíst peněženku", + "wallet_list_loading_wallet" : "Načítám ${wallet_name} peněženku", + "wallet_list_failed_to_load" : "Chyba při načítání ${wallet_name} peněženky. ${error}", + "wallet_list_removing_wallet" : "Odstraňuji ${wallet_name} peněženku", + "wallet_list_failed_to_remove" : "Chyba při odstraňování ${wallet_name} peněženky. ${error}", + + + "widgets_address" : "Adresa", + "widgets_restore_from_blockheight" : "Obnovit z výšky bloku", + "widgets_restore_from_date" : "Obnovit z data", + "widgets_or" : "nebo", + "widgets_seed" : "Seed", + + + "router_no_route" : "Pro ${name} není definována žádná cesta", + + + "error_text_account_name" : "Název účtu může obsahovat jen písmena a čísla\na musí mít délku 1 až 15 znaků", + "error_text_contact_name" : "Jméno kontaktu nemůže obsahovat symboly ` , ' \" \na musí mít délku 1 až 32 znaků", + "error_text_address" : "Adresa peněženky musí odpovídat typu\nkryptoměny", + "error_text_node_address" : "prosím zadejte IPv4 adresu", + "error_text_node_port" : "Port uzlu musí být číslo mezi 0 a 65535", + "error_text_payment_id" : "ID platby se musí skládat z 16 až 64 hexadecimálních znaků", + "error_text_xmr" : "Hodnota XMR nemůže překročit dostupný zůstatek.\nPočet desetinných míst musí být menší, nebo roven 12", + "error_text_fiat" : "Částka nemůže překročit dostupný zůstatek.\nPočet desetinných míst musí být menší, nebo roven 2", + "error_text_subaddress_name" : "Subadresa nemůže obsahovat symboly ` , ' \" \na musí mít délku 1 až 20 znaků", + "error_text_amount" : "Částka může obsahovat pouze čísla", + "error_text_wallet_name" : "Jméno peněženky může obsahovat pouze písmena, čísla, symbol _ \na musí mít délku 1 až 33 znaků", + "error_text_keys" : "Klíče peněženky musí obsahovat 64 hexadecimálních znaků", + "error_text_crypto_currency" : "Počet desetinných míst\nmusí být menší, nebo roven 12", + "error_text_minimal_limit" : "Obchod pro ${provider} nebyl vytvořen. Částka je menší než minimální hodnota: ${min} ${currency}", + "error_text_maximum_limit" : "Obchod pro ${provider} nebyl vytvořen. Částka je větší než maximální hodnota: ${max} ${currency}", + "error_text_limits_loading_failed" : "Obchod pro ${provider} nebyl vytvořen. Selhalo načítání limitů", + "error_text_template" : "Jméno šablony a adresa nemohou obsahovat symboly ` , ' \" \na musí mít délku 1 až 106 znaků", + + + "auth_store_ban_timeout" : "ban_timeout", + "auth_store_banned_for" : "Zablokován na ", + "auth_store_banned_minutes" : " minut", + "auth_store_incorrect_password" : "Nesprávný PIN", + "wallet_store_monero_wallet" : "Monero Wallet", + "wallet_restoration_store_incorrect_seed_length" : "Nesprávná délka seedu", + + + "full_balance" : "Celkový zůstatek", + "available_balance" : "Dostupný zůstatek", + "hidden_balance" : "Skrytý zůstatek", + + + "sync_status_syncronizing" : "SYNCHRONIZUJI", + "sync_status_syncronized" : "SYNCHRONIZOVÁNO", + "sync_status_not_connected" : "NEPŘIPOJENO", + "sync_status_starting_sync" : "SPOUŠTĚNÍ SYNCHRONIZACE", + "sync_status_failed_connect" : "ODPOJENO", + "sync_status_connecting" : "PŘIPOJOVÁNÍ", + "sync_status_connected" : "PŘIPOJENO", + "sync_status_attempting_sync" : "ZAHAJUJI SYNCHR.", + + + "transaction_priority_slow" : "Pomalá", + "transaction_priority_regular" : "Běžná", + "transaction_priority_medium" : "Střední", + "transaction_priority_fast" : "Rychlá", + "transaction_priority_fastest" : "Nejrychlejší", + + + "trade_for_not_created" : "Obchod pro ${title} nebyl vytvořen.", + "trade_not_created" : "Obchod nebyl vytvořen", + "trade_id_not_found" : "Obchod ${tradeId} z ${title} nenalezen.", + "trade_not_found" : "Obchod nenalezen.", + + + "trade_state_pending" : "Čekající", + "trade_state_confirming" : "Ověřování", + "trade_state_trading" : "Obchoduji", + "trade_state_traded" : "Zobchodováno", + "trade_state_complete" : "Kompletní", + "trade_state_to_be_created" : "Bude vytvořen", + "trade_state_unpaid" : "Nezaplaceno", + "trade_state_underpaid" : "Zaplaceno méně", + "trade_state_paid_unconfirmed" : "Nepotvrzeně zaplaceno", + "trade_state_paid" : "Zaplaceno", + "trade_state_btc_sent" : "BTC odesláno", + "trade_state_timeout" : "Vypršel časový limit", + "trade_state_created" : "Vytvořeno", + "trade_state_finished" : "Hotovo", + + "change_language" : "Změnit jazyk", + "change_language_to" : "Změnit jazyk na ${language}?", + + "paste" : "Vložit", + "restore_from_seed_placeholder" : "Prosím zadejte, nebo vložte ze schránky svůj seed.", + "add_new_word" : "Přidat nové slovo", + "incorrect_seed" : "Zadaný text není správný.", + + "biometric_auth_reason" : "Naskenujte otisk prstu pro ověření", + "version" : "Verze ${currentVersion}", + + "extracted_address_content" : "Prostředky budete posílat na\n${recipient_name}", + + "card_address" : "Adresa:", + "buy" : "Koupit", + "sell": "Prodat", + + "placeholder_transactions" : "Vaše transakce budou zobrazeny zde", + "placeholder_contacts" : "Vaše kontakty budou zobrazeny zde", + + "template" : "Šablona", + "confirm_delete_template" : "Tato akce smaže tuto šablonu. Přejete si pokračovat?", + "confirm_delete_wallet" : "Tato akce smaže tuto peněženku. Přejete si pokračovat?", + + "picker_description" : "Pro volbu ChangeNOW, nebo MorphToken si prosím vyberte nejprve pár pro obchodování", + + "change_wallet_alert_title" : "Přepnout peněženku", + "change_wallet_alert_content" : "Opravdu chcete změnit aktivní peněženku na ${wallet_name}?", + + "creating_new_wallet" : "Vytvářím novou peněženku", + "creating_new_wallet_error" : "Chyba: ${description}", + + "seed_alert_title" : "Pozor", + "seed_alert_content" : "Tento seed představuje jedinou možnost, jak obnovit peněženku. Zapsali jste si ho?", + "seed_alert_back" : "Zpět", + "seed_alert_yes" : "Ano", + + "exchange_sync_alert_content" : "Prosím počkejte, dokud nebude vaše peněženka synchronizována", + + "pre_seed_title" : "DŮLEŽITÉ", + "pre_seed_description" : "Na následující stránce uvidíte sérii ${words} slov. Je to váš tzv. seed a je to JEDINÁ možnost, jak můžete později obnovit svou peněženku v případě ztráty nebo poruchy. Je VAŠÍ zodpovědností zapsat si ho a uložit si ho na bezpečném místě mimo aplikaci Cake Wallet.", + "pre_seed_button_text" : "Rozumím. Ukaž mi můj seed.", + + "xmr_to_error" : "XMR.TO chyba", + "xmr_to_error_description" : "Neplatná částka. Maximálně lze použít 8 desetinných míst", + + "provider_error" : "${provider} chyba", + + "use_ssl" : "Použít SSL", + "trusted" : "Důvěřovat", + + "color_theme" : "Barevný motiv", + "light_theme" : "Světlý", + "bright_theme" : "Jasný", + "dark_theme" : "Tmavý", + "enter_your_note" : "Zadejte poznámku…", + "note_optional" : "Poznámka (nepovinné)", + "note_tap_to_change" : "Poznámka (poklepáním upravit)", + "view_in_block_explorer" : "Zobrazit v Block Exploreru", + "view_transaction_on" : "Zobrazit transakci na ", + "transaction_key" : "Klíč transakce", + "confirmations" : "Potvrzení", + "recipient_address" : "Adresa příjemce", + + "extra_id" : "Extra ID:", + "destination_tag" : "Destination Tag:", + "memo" : "Memo:", + + "backup" : "Záloha", + "change_password" : "Změnit heslo", + "backup_password" : "Heslo pro zálohy", + "write_down_backup_password" : "Prosím zapište si své heslo pro zálohy, které se používá pro import vašich souborů se zálohami.", + "export_backup" : "Exportovat zálohu", + "save_backup_password" : "Prosím ujistěte se, že máte uschováno heslo pro zálohy. Bez něj nebudete moci naimportovat soubory se zálohami.", + "backup_file" : "Soubor se zálohou", + + "edit_backup_password" : "Upravit heslo pro zálohy", + "save_backup_password_alert" : "Uložit heslo pro zálohy", + "change_backup_password_alert" : "Vaše předchozí soubory se zálohami nebude možné naimportovat s novým heslem. Nové heslo bude použito pouze pro nové zálohy. Opravdu chcete změnit heslo pro zálohy?", + + "enter_backup_password" : "Zde zadejte své heslo pro zálohy", + "select_backup_file" : "Vybrat soubor se zálohou", + "import" : "Importovat", + "please_select_backup_file" : "Prosím vyberte soubor se zálohou a zadejte heslo pro zálohy.", + + "fixed_rate" : "Pevný kurz", + "fixed_rate_alert" : "Když je zvolený pevný kurz, můžete zadat konkrétní částku, kterou chcete dostat. Chcete se přepnout do režimu s pevným kurzem?", + + "xlm_extra_info" : "Prosím nezapomeňte zadat Memo ID, když posíláte XLM transakce ke směně", + "xrp_extra_info" : "Prosím nezapomeňte zadat Destination Tag, když posíláte XRP transakce ke směně", + + "exchange_incorrect_current_wallet_for_xmr" : "Pokud chcete směnit XMR z Monero částky v Cake Wallet, prosím přepněte se nejprve do své Monero peněženky.", + "confirmed" : "Potvrzeno", + "unconfirmed" : "Nepotvrzeno", + "displayable" : "Zobrazitelné", + + "submit_request" : "odeslat požadavek", + + "buy_alert_content" : "V současné době podporujeme nákup pouze Bitcoinu a Litecoinu. Pro nákup Bitcoinu, nebo Litecoinu si prosím vytvořte Bitcoinovou, nebo Litecoinovou peněženku, nebo se do ní přepněte.", + "sell_alert_content": "V současné době podporujeme pouze prodej Bitcoinu. Pro prodej Bitcoinu si prosím vytvořte Bitcoinovou peněženku, nebo se do ní přepněte.", + + "outdated_electrum_wallet_description" : "Nové Bitcoinové peněženky vytvořené v Cake mají nyní seed se 24 slovy. Je třeba si vytvořit novou Bitcoinovou peněženku se 24 slovy, převést na ni všechny prostředky a přestat používat seed se 12 slovy. Prosím udělejte to hned pro zabezpečení svých prostředků.", + "understand" : "Rozumím", + + "apk_update" : "aktualizace APK", + + "buy_bitcoin" : "Nakoupit Bitcoin", + "buy_with" : "Nakoupit pomocí", + "moonpay_alert_text" : "Částka musí být větší nebo rovna ${minAmount} ${fiatCurrency}", + + "outdated_electrum_wallet_receive_warning": "Tato peněženka má seed se 12 slovy a byla vytvořena pomocí Cake, NEUKLÁDEJTE Bitcoin na tuto peněženku. Jakékoliv BTC převedené na tuto peněženku může být ztraceno. Vytvořte si novou peněženku s 24 slovy (otevřete menu vpravo nahoře, vyberte Peněženky, zvolte Vytvořit novou peněženku a pak zvolte Bitcoin) a IHNED tam přesuňte své BTC. Nové (24-slovní) BTC peněženky z Cake jsou bezpečné", + "do_not_show_me": "Příště nezobrazovat", + + "unspent_coins_title" : "Neutracené mince", + "unspent_coins_details_title" : "Podrobnosti o neutracených mincích", + "freeze" : "Zmrazit", + "frozen" : "Zmraženo", + "coin_control" : "Volba mincí (nepovinné)", + + "address_detected" : "Adresa detekována", + "address_from_domain" : "Tato adresa je z ${domain} na Unstoppable Domains", + + "add_receiver" : "Přidat dalšího příjemce (nepovinné)", + + "manage_yats" : "Spravovat Yaty", + "yat_alert_title" : "Posílejte a přijímejte crypto jednodušeji s Yat", + "yat_alert_content" : "Uživatelé Cake Wallet mohou nyní posílat a přijímat všechny své oblíbené měny pomocí něco jako uživatelského jména tvořeného emoji.", + "get_your_yat" : "Získat Yat", + "connect_an_existing_yat" : "Připojit existující Yat", + "connect_yats": "Připojit Yaty", + "yat_address" : "Yat adresa", + "yat" : "Yat", + "address_from_yat" : "Tato adresa je z ${emoji} na Yatu", + "yat_error" : "Yat chyba", + "yat_error_content" : "Žádná adresa není spojena s tímto Yatem. Zkuste jiný Yat", + "choose_address" : "\n\nProsím vyberte adresu:", + "yat_popup_title" : "Adresa Vaší peněženky může být emojifikována.", + "yat_popup_content" : "Nyní můžete posílat a přijímat crypto v Cake Wallet se svým Yatem - krátkým uživatelským jménem složeným z emoji. Spravujte kdykoliv Yaty na stránce s nastavením", + "second_intro_title" : "Jedna emoji adresa vládne všem", + "second_intro_content" : "Váš Yat je jediná unikátní emoji adresa, která nahrazuje všechny Vaše dlouhé hexadecimální adresy pro všechny Vaše měny.", + "third_intro_title" : "Yat dobře spolupracuje s ostatními", + "third_intro_content" : "Yat existuje i mimo Cake Wallet. Jakákoliv adresa peněženky na světě může být nahrazena Yatem!", + "learn_more" : "Zjistit více", + "search": "Hledat", + "search_language": "Hledat jazyk", + "search_currency": "Hledat měnu", + "new_template" : "Nová šablona", + "electrum_address_disclaimer": "Po každém použití je generována nová adresa, ale předchozí adresy také stále fungují", + "wallet_name_exists": "Peněženka s tímto názvem už existuje. Prosím zvolte si jiný název, nebo nejprve přejmenujte nejprve druhou peněženku.", + "market_place": "Obchod", + "cake_pay_title": "Cake Pay dárkové karty", + "cake_pay_subtitle": "Kupte si zlevněné dárkové karty (pouze USA)", + "cake_pay_web_cards_title": "Cake Pay webové karty", + "cake_pay_web_cards_subtitle": "Kupte si celosvětové předplacené a dárkové karty", + "about_cake_pay": "Cake Pay umožňuje jednoduše nakupovat dárkové karty pomocí virtuálních prostředků, které lze okamžitě uplatnit u více než 150 000 obchodníků ve Spojených státech.", + "cake_pay_account_note": "Přihlaste se svou e-mailovou adresou pro zobrazení a nákup karet. Některé jsou dostupné ve slevě!", + "already_have_account": "Máte už účet?", + "create_account": "Vytvořit účet", + "privacy_policy": "Zásady ochrany soukromí", + "welcome_to_cakepay": "Vítejte v Cake Pay!", + "sign_up": "Registrovat se", + "forgot_password": "Zapomenuté heslo", + "reset_password": "Resetovat heslo", + "gift_cards": "Dárkové karty", + "setup_your_debit_card": "Nastavit debetní kartu", + "no_id_required": "Žádní ID není potřeba. Dobijte si a utrácejte kdekoliv", + "how_to_use_card": "Jak použít tuto kartu", + "purchase_gift_card": "Objednat dárkovou kartu", + "verification": "Ověření", + "fill_code": "Prosím vyplňte ověřovací kód zaslaný na Váš e-mail", + "dont_get_code": "Nepřišel Vám kód?", + "resend_code": "Prosím poslat znovu", + "debit_card": "Debetní karta", + "cakepay_prepaid_card": "CakePay předplacená debetní karta", + "no_id_needed": "Žádné ID není potřeba!", + "frequently_asked_questions": "Často kladené otázky", + "debit_card_terms": "Uložení a použití vašeho čísla platební karty (a přihlašovací údaje k vašemu číslu karty) v této digitální peněžence se řídí Obchodními podmínkami smlouvy příslušného držitele karty s vydavatelem karty (v jejich nejaktuálnější verzi).", + "please_reference_document": "Více informací naleznete v dokumentu níže.", + "cardholder_agreement": "Smlouva držitele karty", + "e_sign_consent": "E-Sign souhlas", + "agree_and_continue": "Souhlasím & pokračovat", + "email_address": "E-mailová adresa", + "agree_to": "Vytvořením účtu souhlasíte s ", + "and": "a", + "enter_code": "Zadejte kód", + "congratulations": "Gratulujeme!", + "you_now_have_debit_card": "Nyní máte debetní kartu", + "min_amount" : "Min: ${value}", + "max_amount" : "Max: ${value}", + "enter_amount": "Zadejte částku", + "billing_address_info": "Při dotazu na fakturační adresu, zadejte svou doručovací adresu", + "order_physical_card": "Objednat fyzickou kartu", + "add_value": "Přidat hodnotu", + "activate": "Aktivovat", + "get_a": "Získejte ", + "digital_and_physical_card": " digitální a fyzické předplacené debetní karty,", + "get_card_note": " které můžete nabít digitální měnou. Žádné další informace nejsou vyžadovány!", + "signup_for_card_accept_terms": "Zaregistrujte se pro kartu a souhlaste s podmínkami.", + "add_fund_to_card": "Všechny předplacené prostředky na kartě (až ${value})", + "use_card_info_two": "Prostředky jsou převedeny na USD, když jsou drženy na předplaceném účtu, nikoliv na digitální měnu.", + "use_card_info_three": "Použijte tuto digitální kartu online nebo bezkontaktními platebními metodami.", + "optionally_order_card": "Volitelně objednat fyzickou kartu.", + "hide_details" : "Skrýt detaily", + "show_details" : "Zobrazit detaily", + "upto": "až ${value}", + "discount": "Ušetříte ${value}%", + "gift_card_amount": "Hodnota dárkové karty", + "bill_amount": "Účtovaná částka", + "you_pay": "Zaplatíte", + "tip": "Spropitné:", + "custom": "vlastní", + "by_cake_pay": "od Cake Pay", + "expires": "Vyprší", + "mm": "MM", + "yy": "YY", + "online": "Online", + "offline": "Offline", + "gift_card_number": "Číslo dárkové karty", + "pin_number": "Číslo PIN", + "total_saving": "Celkem ušetřeno", + "last_30_days": "Posledních 30 dnů", + "avg_savings": "Prům. ušetřeno", + "view_all": "Zobrazit vše", + "active_cards": "Aktivní karty", + "delete_account": "Smazat účet", + "cards": "Karty", + "active": "Aktivní", + "redeemed": "Uplatněné", + "gift_card_balance_note": "Dárkové karty se zbývající částkou se zobrazí zde", + "gift_card_redeemed_note": "Dárkové karty, které jste uplatnili, se zobrazí zde", + "logout": "Odhlásit", + "add_tip": "Přidat spropitné", + "percentageOf": "z ${amount}", + "is_percentage": "je", + "search_category": "Hledat kategorii", + "mark_as_redeemed": "Označit jako uplatněný", + "more_options": "Více možností", + "awaiting_payment_confirmation": "Čeká se na potvrzení platby", + "transaction_sent_notice": "Pokud proces nepokročí během 1 minuty, zkontrolujte block explorer a svůj e-mail.", + "agree": "Souhlasím", + "in_store": "V obchodě", + "generating_gift_card": "Generuji dárkovou kartu", + "payment_was_received": "Vaše platba byla přijata.", + "proceed_after_one_minute": "Pokud proces nepokročí během 1 minuty, zkontrolujte svůj e-mail.", + "order_id": "ID objednávky", + "gift_card_is_generated": "Generuje se dárková karta", + "open_gift_card": "Otevřít dárkovou kartu", + "contact_support": "Kontaktovat podporu", + "gift_cards_unavailable": "Dárkové karty jsou v tuto chvíli dostupné pro zakoupení pouze pomocí Monera, Bitcoinu a Litecoinu.", + "introducing_cake_pay": "Představujeme Cake Pay!", + "cake_pay_learn_more": "Okamžitý nákup a uplatnění dárkových karet v aplikaci!\nPřejeďte prstem zleva doprava pro další informace.", + "automatic": "Automatický", + "fixed_pair_not_supported": "Tento pár s pevným kurzem není ve zvolené směnárně podporován", + "variable_pair_not_supported": "Tento pár s tržním kurzem není ve zvolené směnárně podporován", + "none_of_selected_providers_can_exchange": "Žádný ze zvolených poskytovatelů nemůže provést tuto směnu", + "choose_one": "Zvolte si", + "choose_from_available_options": "Zvolte si z dostupných možností:", + "custom_redeem_amount": "Vlastní částka pro uplatnění", + "add_custom_redemption": "Přidat vlastní uplatnění", + "remaining": "zbývá", + "delete_wallet": "Smazat peněženku", + "delete_wallet_confirm_message" : "Opravdu chcete smazat ${wallet_name} peněženku?", + "low_fee": "Nízký poplatek", + "low_fee_alert": "Momentálně máte nastavené nízké poplatky pro transakce. To může způsobovat dlouhé čekání, změnu směnného kurzu, nebo zrušení směny. Doporučujeme nastavit vyšší poplatek.", + "ignor": "Ignorovat", + "use_suggested": "Použít doporučený", + "do_not_share_warning_text" : "Toto nesdílejte s nikým jiným, ani s podporou.\n\nJinak mohou být Vaše prostředky ukradeny!", + "help": "pomoc", + "all_transactions": "Všechny transakce", + "all_trades": "Všechny obchody", + "connection_sync": "Připojení a synch.", + "security_and_backup": "Bezpečnost a zálohy", + "create_backup": "Vytvořit zálohu", + "privacy_settings": "Nastavení soukromí", + "privacy": "Soukromí", + "display_settings": "Nastavení zobrazení", + "other_settings": "Další nastavení", + "require_pin_after": "Vyžadovat PIN po", + "always": "Vždy", + "minutes_to_pin_code": "${minute} minutách", + "disable_exchange": "Zakázat směnárny", + "advanced_privacy_settings": "Pokročilá nastavení soukromí", + "settings_can_be_changed_later": "Tato nastavení mohou být změněna později v nastavení v této aplikaci", + "add_custom_node": "Přidat vlastní uzel", + "disable_fiat": "Zakázat fiat", + "fiat_api": "Fiat API", + "disabled": "Zakázáno", + "enabled": "Povoleno", + "tor_only": "Pouze Tor", + "unmatched_currencies": "Měna vaší současné peněženky neodpovídá té v naskenovaném QR kódu", + "orbot_running_alert": "Prosím ujistěte se, že je Orbot spuštěný, před tím, než se připojíte k tomuto uzlu.", + "contact_list_contacts": "Kontakty", + "contact_list_wallets": "Moje peněženky", + "bitcoin_payments_require_1_confirmation": "U plateb Bitcoinem je vyžadováno alespoň 1 potvrzení, což může trvat 20 minut i déle. Děkujeme za vaši trpělivost! Až bude platba potvrzena, budete informováni e-mailem.", + "send_to_this_address" : "Poslat ${currency} ${tag}na tuto adresu", + "arrive_in_this_address" : "${currency} ${tag}přijde na tuto adresu", + "do_not_send": "Neodesílat", + "error_dialog_content": "Nastala chyba.\n\nProsím odešlete zprávu o chybě naší podpoře, aby mohli zajistit opravu." +} diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index a3fd4f585..6483305a4 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -398,8 +398,7 @@ "biometric_auth_reason" : "Scannen Sie Ihren Fingerabdruck zur Authentifizierung", "version" : "Version ${currentVersion}", - "openalias_alert_title" : "Adresse Erkannt", - "openalias_alert_content" : "Sie senden Geld an\n${recipient_name}", + "extracted_address_content" : "Sie senden Geld an\n${recipient_name}", "card_address" : "Adresse:", "buy" : "Kaufen", @@ -681,6 +680,9 @@ "orbot_running_alert": "Bitte stellen Sie sicher, dass Orbot läuft, bevor Sie sich mit diesem Knoten verbinden.", "contact_list_contacts": "Kontakte", "contact_list_wallets": "Meine Geldbörsen", + "bitcoin_payments_require_1_confirmation": "Bitcoin-Zahlungen erfordern 1 Bestätigung, was 20 Minuten oder länger dauern kann. Danke für Ihre Geduld! Sie erhalten eine E-Mail, wenn die Zahlung bestätigt ist.", + "send_to_this_address" : "Senden Sie ${currency} ${tag}an diese Adresse", + "arrive_in_this_address" : "${currency} ${tag}wird an dieser Adresse ankommen", "do_not_send": "Nicht senden", "error_dialog_content": "Hoppla, wir haben einen Fehler.\n\nBitte senden Sie den Absturzbericht an unser Support-Team, um die Anwendung zu verbessern." } diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index 87629cbd8..655350304 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -398,8 +398,7 @@ "biometric_auth_reason" : "Scan your fingerprint to authenticate", "version" : "Version ${currentVersion}", - "openalias_alert_title" : "Address Detected", - "openalias_alert_content" : "You will be sending funds to\n${recipient_name}", + "extracted_address_content" : "You will be sending funds to\n${recipient_name}", "card_address" : "Address:", "buy" : "Buy", @@ -681,6 +680,9 @@ "orbot_running_alert": "Please make sure Orbot is running prior to connecting to this node.", "contact_list_contacts": "Contacts", "contact_list_wallets": "My Wallets", + "bitcoin_payments_require_1_confirmation": "Bitcoin payments require 1 confirmation, which can take 20 minutes or longer. Thanks for your patience! You will be emailed when the payment is confirmed.", + "send_to_this_address" : "Send ${currency} ${tag}to this address", + "arrive_in_this_address" : "${currency} ${tag}will arrive in this address", "do_not_send": "Don't send", "error_dialog_content": "Oops, we got some error.\n\nPlease send the crash report to our support team to make the application better." } diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb index b6d4cd358..51d4bb0e3 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -398,8 +398,7 @@ "biometric_auth_reason" : "Escanee su huella digital para autenticar", "version" : "Versión ${currentVersion}", - "openalias_alert_title" : "Destinatario detectado", - "openalias_alert_content" : "Enviará fondos a\n${recipient_name}", + "extracted_address_content" : "Enviará fondos a\n${recipient_name}", "card_address" : "Dirección:", "buy" : "Comprar", @@ -681,6 +680,9 @@ "orbot_running_alert": "Asegúrese de que Orbot se esté ejecutando antes de conectarse a este nodo.", "contact_list_contacts": "Contactos", "contact_list_wallets": "Mis billeteras", + "bitcoin_payments_require_1_confirmation": "Los pagos de Bitcoin requieren 1 confirmación, que puede demorar 20 minutos o más. ¡Gracias por su paciencia! Se le enviará un correo electrónico cuando se confirme el pago.", + "send_to_this_address" : "Enviar ${currency} ${tag}a esta dirección", + "arrive_in_this_address" : "${currency} ${tag}llegará a esta dirección", "do_not_send": "no enviar", "error_dialog_content": "Vaya, tenemos un error.\n\nEnvíe el informe de bloqueo a nuestro equipo de soporte para mejorar la aplicación." } diff --git a/res/values/strings_fr.arb b/res/values/strings_fr.arb index 7b9e8da07..5e412d4f1 100644 --- a/res/values/strings_fr.arb +++ b/res/values/strings_fr.arb @@ -396,8 +396,7 @@ "biometric_auth_reason" : "Scannez votre empreinte digitale pour vous authentifier", "version" : "Version ${currentVersion}", - "openalias_alert_title" : "Adresse Détectée", - "openalias_alert_content" : "Vous allez envoyer des fonds à\n${recipient_name}", + "extracted_address_content" : "Vous allez envoyer des fonds à\n${recipient_name}", "card_address" : "Adresse :", "buy" : "Acheter", @@ -675,10 +674,13 @@ "disabled": "Désactivé", "enabled": "Activé", "tor_only": "Tor uniquement", - "orbot_running_alert": "Veuillez vous assurer qu'Orbot est en cours d'exécution avant de vous connecter à ce nœud.", "unmatched_currencies": "La devise de votre portefeuille (wallet) actuel ne correspond pas à celle du QR code scanné", + "orbot_running_alert": "Veuillez vous assurer qu'Orbot est en cours d'exécution avant de vous connecter à ce nœud.", "contact_list_contacts": "Contacts", "contact_list_wallets": "Mes portefeuilles (wallets)", + "bitcoin_payments_require_1_confirmation": "Les paiements Bitcoin nécessitent 1 confirmation, ce qui peut prendre 20 minutes ou plus. Merci pour votre patience! Vous serez averti par e-mail lorsque le paiement sera confirmé.", + "send_to_this_address" : "Envoyez ${currency} ${tag}à cette adresse", + "arrive_in_this_address" : "${currency} ${tag}arrivera à cette adresse", "do_not_send": "N'envoyez pas", "error_dialog_content": "Oups, nous avons eu une erreur.\n\nVeuillez envoyer le rapport de plantage à notre équipe d'assistance pour améliorer l'application." } diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb index c8e454aae..1a3ddff74 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -398,8 +398,7 @@ "biometric_auth_reason" : "प्रमाणित करने के लिए अपने फ़िंगरप्रिंट को स्कैन करें", "version" : "संस्करण ${currentVersion}", - "openalias_alert_title" : "पता मिला", - "openalias_alert_content" : "आपको धनराशि भेजी जाएगी\n${recipient_name}", + "extracted_address_content" : "आपको धनराशि भेजी जाएगी\n${recipient_name}", "card_address" : "पता:", "buy" : "खरीदें", @@ -677,10 +676,13 @@ "disabled": "अक्षम", "enabled": "सक्रिय", "tor_only": "Tor केवल", - "orbot_running_alert": "कृपया सुनिश्चित करें कि इस नोड से कनेक्ट करने से पहले Orbot चल रहा है।", "unmatched_currencies": "आपके वर्तमान वॉलेट की मुद्रा स्कैन किए गए क्यूआर से मेल नहीं खाती" , + "orbot_running_alert": "कृपया सुनिश्चित करें कि इस नोड से कनेक्ट करने से पहले Orbot चल रहा है।", "contact_list_contacts": "संपर्क", "contact_list_wallets": "मेरा बटुआ", + "bitcoin_payments_require_1_confirmation": "बिटकॉइन भुगतान के लिए 1 पुष्टिकरण की आवश्यकता होती है, जिसमें 20 मिनट या अधिक समय लग सकता है। आपके धैर्य के लिए धन्यवाद! भुगतान की पुष्टि होने पर आपको ईमेल किया जाएगा।", + "send_to_this_address" : "इस पते पर ${currency} ${tag}भेजें", + "arrive_in_this_address" : "${currency} ${tag}इस पते पर पहुंचेंगे", "do_not_send": "मत भेजो", "error_dialog_content": "ओह, हमसे कुछ गड़बड़ी हुई है.\n\nएप्लिकेशन को बेहतर बनाने के लिए कृपया क्रैश रिपोर्ट हमारी सहायता टीम को भेजें।" } diff --git a/res/values/strings_hr.arb b/res/values/strings_hr.arb index 239a175c2..c012ca72d 100644 --- a/res/values/strings_hr.arb +++ b/res/values/strings_hr.arb @@ -398,8 +398,7 @@ "biometric_auth_reason" : "Skenirajte svoj otisak prsta za autentifikaciju", "version" : "Verzija ${currentVersion}", - "openalias_alert_title" : "Otkrivena je adresa", - "openalias_alert_content" : "Poslat ćete sredstva primatelju\n${recipient_name}", + "extracted_address_content" : "Poslat ćete sredstva primatelju\n${recipient_name}", "card_address" : "Adresa:", "buy" : "Kupi", @@ -681,6 +680,9 @@ "orbot_running_alert": "Provjerite radi li Orbot prije spajanja na ovaj čvor.", "contact_list_contacts": "Kontakti", "contact_list_wallets": "Moji novčanici", + "bitcoin_payments_require_1_confirmation": "Bitcoin plaćanja zahtijevaju 1 potvrdu, što može potrajati 20 minuta ili dulje. Hvala na Vašem strpljenju! Dobit ćete e-poruku kada plaćanje bude potvrđeno.", + "send_to_this_address" : "Pošaljite ${currency} ${tag}na ovu adresu", + "arrive_in_this_address" : "${currency} ${tag}će stići na ovu adresu", "do_not_send": "Ne šalji", "error_dialog_content": "Ups, imamo grešku.\n\nPošaljite izvješće o padu našem timu za podršku kako bismo poboljšali aplikaciju." } diff --git a/res/values/strings_it.arb b/res/values/strings_it.arb index f3ddf8af2..4048e0866 100644 --- a/res/values/strings_it.arb +++ b/res/values/strings_it.arb @@ -398,8 +398,7 @@ "biometric_auth_reason" : "Scansiona la tua impronta per autenticarti", "version" : "Versione ${currentVersion}", - "openalias_alert_title" : "Indirizzo Rilevato", - "openalias_alert_content" : "Invierai i tuoi fondi a\n${recipient_name}", + "extracted_address_content" : "Invierai i tuoi fondi a\n${recipient_name}", "card_address" : "Indirizzo:", "buy" : "Comprare", @@ -681,6 +680,9 @@ "orbot_running_alert": "Assicurati che Orbot sia in esecuzione prima di connetterti a questo nodo.", "contact_list_contacts": "Contatti", "contact_list_wallets": "I miei portafogli", + "bitcoin_payments_require_1_confirmation": "I pagamenti in bitcoin richiedono 1 conferma, che può richiedere 20 minuti o più. Grazie per la vostra pazienza! Riceverai un'e-mail quando il pagamento sarà confermato.", + "send_to_this_address" : "Invia ${currency} ${tag}a questo indirizzo", + "arrive_in_this_address" : "${currency} ${tag}arriverà a questo indirizzo", "do_not_send": "Non inviare", "error_dialog_content": "Ups, imamo grešku.\n\nPošaljite izvješće o padu našem timu za podršku kako bismo poboljšali aplikaciju." } diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb index b3746aaa1..831056785 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -398,8 +398,7 @@ "biometric_auth_reason" : "प指紋をスキャンして認証する", "version" : "バージョン ${currentVersion}", - "openalias_alert_title" : "アドレスが検出されました", - "openalias_alert_content" : "に送金します\n${recipient_name}", + "extracted_address_content" : "に送金します\n${recipient_name}", "card_address" : "住所:", "buy" : "購入", @@ -681,6 +680,9 @@ "orbot_running_alert": "このノードに接続する前に、Orbot が実行されていることを確認してください", "contact_list_contacts": "連絡先", "contact_list_wallets": "マイウォレット", + "bitcoin_payments_require_1_confirmation": "ビットコインの支払いには 1 回の確認が必要で、これには 20 分以上かかる場合があります。お待ち頂きまして、ありがとうございます!支払いが確認されると、メールが送信されます。", + "send_to_this_address" : "${currency} ${tag}をこのアドレスに送金", + "arrive_in_this_address" : "${currency} ${tag}はこの住所に到着します", "do_not_send": "送信しない", "error_dialog_content": "Spiacenti, abbiamo riscontrato un errore.\n\nSi prega di inviare il rapporto sull'arresto anomalo al nostro team di supporto per migliorare l'applicazione." } diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb index db6778fd6..2c2d564ae 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -398,8 +398,7 @@ "biometric_auth_reason" : "지문을 스캔하여 인증", "version" : "버전 ${currentVersion}", - "openalias_alert_title" : "주소 감지됨", - "openalias_alert_content" : "당신은에 자금을 보낼 것입니다\n${recipient_name}", + "extracted_address_content" : "당신은에 자금을 보낼 것입니다\n${recipient_name}", "card_address" : "주소:", "buy" : "구입", @@ -681,6 +680,9 @@ "orbot_running_alert": "이 노드에 연결하기 전에 Orbot이 실행 중인지 확인하십시오.", "contact_list_contacts": "콘택트 렌즈", "contact_list_wallets": "내 지갑", + "bitcoin_payments_require_1_confirmation": "비트코인 결제는 1번의 확인이 필요하며 20분 이상이 소요될 수 있습니다. 기다려 주셔서 감사합니다! 결제가 확인되면 이메일이 전송됩니다.", + "send_to_this_address" : "이 주소로 ${currency} ${tag}송금", + "arrive_in_this_address" : "${currency} ${tag}이(가) 이 주소로 도착합니다", "do_not_send": "보내지 마세요", "error_dialog_content": "죄송합니다. 오류가 발생했습니다.\n\n응용 프로그램을 개선하려면 지원 팀에 충돌 보고서를 보내주십시오." } diff --git a/res/values/strings_my.arb b/res/values/strings_my.arb index 352b8d191..401f5af3a 100644 --- a/res/values/strings_my.arb +++ b/res/values/strings_my.arb @@ -398,8 +398,7 @@ "biometric_auth_reason" : "စစ်မှန်ကြောင်းအထောက်အထားပြရန် သင့်လက်ဗွေကို စကန်ဖတ်ပါ။", "version" : "ဗားရှင်း ${currentVersion}", - "openalias_alert_title" : "လိပ်စာကို ရှာတွေ့သည်။", - "openalias_alert_content" : "သင်သည် \n${recipient_name} သို့ ရန်ပုံငွေများ ပေးပို့ပါမည်", + "extracted_address_content" : "သင်သည် \n${recipient_name} သို့ ရန်ပုံငွေများ ပေးပို့ပါမည်", "card_address" : "လိပ်စာ-", "buy" : "ဝယ်ပါ။", @@ -678,6 +677,12 @@ "enabled" : "ဖွင့်ထားသည်။", "tor_only" : "Tor သာ", "unmatched_currencies" : "သင့်လက်ရှိပိုက်ဆံအိတ်၏ငွေကြေးသည် စကင်ဖတ်ထားသော QR နှင့် မကိုက်ညီပါ။", + "orbot_running_alert": "ဤ node သို့မချိတ်ဆက်မီ Orbot အလုပ်လုပ်နေကြောင်း သေချာပါစေ။", "contact_list_contacts" : "အဆက်အသွယ်များ", - "contact_list_wallets" : "ကျွန်ုပ်၏ ပိုက်ဆံအိတ်များ" + "contact_list_wallets" : "ကျွန်ုပ်၏ ပိုက်ဆံအိတ်များ", + "bitcoin_payments_require_1_confirmation": "Bitcoin ငွေပေးချေမှုများသည် မိနစ် 20 သို့မဟုတ် ထို့ထက်ပိုကြာနိုင်သည် 1 အတည်ပြုချက် လိုအပ်သည်။ မင်းရဲ့စိတ်ရှည်မှုအတွက် ကျေးဇူးတင်ပါတယ်။ ငွေပေးချေမှုကို အတည်ပြုပြီးသောအခါ သင့်ထံ အီးမေးလ်ပို့ပါမည်။", + "send_to_this_address" : "ဤလိပ်စာသို့ ${currency} ${tag}သို့ ပို့ပါ။", + "arrive_in_this_address" : "${currency} ${tag}ဤလိပ်စာသို့ ရောက်ရှိပါမည်။", + "do_not_send": "မပို့ပါနှင့်", + "error_dialog_content": "အိုး၊ ကျွန်ုပ်တို့တွင် အမှားအယွင်းအချို့ရှိသည်။\n\nအပလီကေးရှင်းကို ပိုမိုကောင်းမွန်စေရန်အတွက် ပျက်စီးမှုအစီရင်ခံစာကို ကျွန်ုပ်တို့၏ပံ့ပိုးကူညီရေးအဖွဲ့ထံ ပေးပို့ပါ။" } diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index faac8f702..a3a043b75 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -398,8 +398,7 @@ "biometric_auth_reason" : "Scan uw vingerafdruk om te verifiëren", "version" : "Versie ${currentVersion}", - "openalias_alert_title" : "Adres Gedetecteerd", - "openalias_alert_content" : "U stuurt geld naar\n${recipient_name}", + "extracted_address_content" : "U stuurt geld naar\n${recipient_name}", "card_address" : "Adres:", "buy" : "Kopen", @@ -681,6 +680,9 @@ "orbot_running_alert": "Zorg ervoor dat Orbot actief is voordat u verbinding maakt met dit knooppunt.", "contact_list_contacts": "Contacten", "contact_list_wallets": "Mijn portefeuilles", + "bitcoin_payments_require_1_confirmation": "Bitcoin-betalingen vereisen 1 bevestiging, wat 20 minuten of langer kan duren. Dank voor uw geduld! U ontvangt een e-mail wanneer de betaling is bevestigd.", + "send_to_this_address" : "Stuur ${currency} ${tag}naar dit adres", + "arrive_in_this_address" : "${currency} ${tag}komt aan op dit adres", "do_not_send": "Niet sturen", "error_dialog_content": "Oeps, er is een fout opgetreden.\n\nStuur het crashrapport naar ons ondersteuningsteam om de applicatie te verbeteren." } diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index 0f0e14959..3c9b60eaa 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -398,8 +398,7 @@ "biometric_auth_reason" : "Zeskanuj swój odcisk palca, aby uwierzytelnić", "version" : "Wersja ${currentVersion}", - "openalias_alert_title" : "Wykryto Adres", - "openalias_alert_content" : "Wysyłasz środki na\n${recipient_name}", + "extracted_address_content" : "Wysyłasz środki na\n${recipient_name}", "card_address" : "Adres:", "buy" : "Kup", @@ -675,12 +674,15 @@ "disable_fiat": "Wyłącz waluty FIAT", "fiat_api": "API Walut FIAT", "disabled": "Wyłączone", - "orbot_running_alert": "Upewnij się, że Orbot działa przed połączeniem z tym węzłem.", "enabled": "Włączone", "tor_only": "Tylko sieć Tor", "unmatched_currencies": "Waluta Twojego obecnego portfela nie zgadza się z waluctą zeskanowanego kodu QR", + "orbot_running_alert": "Upewnij się, że Orbot działa przed połączeniem z tym węzłem.", "contact_list_contacts": "Łączność", "contact_list_wallets": "Moje portfele", + "bitcoin_payments_require_1_confirmation": "Płatności Bitcoin wymagają 1 potwierdzenia, co może zająć 20 minut lub dłużej. Dziękuję za cierpliwość! Otrzymasz wiadomość e-mail, gdy płatność zostanie potwierdzona.", + "send_to_this_address" : "Wyślij ${currency} ${tag}na ten adres", + "arrive_in_this_address" : "${currency} ${tag}dotrze na ten adres", "do_not_send": "Nie wysyłaj", "error_dialog_content": "Ups, wystąpił błąd.\n\nPrześlij raport o awarii do naszego zespołu wsparcia, aby ulepszyć aplikację." } diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb index 90d477369..39cef5f67 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -398,8 +398,7 @@ "biometric_auth_reason" : "Digitalize sua impressão digital para autenticar", "version" : "Versão ${currentVersion}", - "openalias_alert_title" : "Endereço Detectado", - "openalias_alert_content" : "Você enviará fundos para\n${recipient_name}", + "extracted_address_content" : "Você enviará fundos para\n${recipient_name}", "card_address" : "Endereço:", "buy" : "Comprar", @@ -680,6 +679,9 @@ "orbot_running_alert": "Certifique-se de que o Orbot esteja em execução antes de se conectar a este nó.", "contact_list_contacts": "Contatos", "contact_list_wallets": "minhas carteiras", + "bitcoin_payments_require_1_confirmation": "Os pagamentos em Bitcoin exigem 1 confirmação, o que pode levar 20 minutos ou mais. Obrigado pela sua paciência! Você receberá um e-mail quando o pagamento for confirmado.", + "send_to_this_address" : "Envie ${currency} ${tag}para este endereço", + "arrive_in_this_address" : "${currency} ${tag}chegará neste endereço", "do_not_send": "não envie", "error_dialog_content": "Ops, houve algum erro.\n\nPor favor, envie o relatório de falha para nossa equipe de suporte para melhorar o aplicativo." } diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb index 8789dd4a0..50c183f1b 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -398,8 +398,7 @@ "biometric_auth_reason" : "Отсканируйте свой отпечаток пальца для аутентификации", "version" : "Версия ${currentVersion}", - "openalias_alert_title" : "Адрес Обнаружен", - "openalias_alert_content" : "Вы будете отправлять средства\n${recipient_name}", + "extracted_address_content" : "Вы будете отправлять средства\n${recipient_name}", "card_address" : "Адрес:", "buy" : "Купить", @@ -681,6 +680,9 @@ "orbot_running_alert": "Перед подключением к этому узлу убедитесь, что Orbot запущен.", "contact_list_contacts": "Контакты", "contact_list_wallets": "Мои кошельки", + "bitcoin_payments_require_1_confirmation": "Биткойн-платежи требуют 1 подтверждения, что может занять 20 минут или дольше. Спасибо тебе за твое терпение! Вы получите электронное письмо, когда платеж будет подтвержден.", + "send_to_this_address" : "Отправить ${currency} ${tag}на этот адрес", + "arrive_in_this_address" : "${currency} ${tag}придет на этот адрес", "do_not_send": "Не отправлять", "error_dialog_content": "Ой, у нас какая-то ошибка.\n\nПожалуйста, отправьте отчет о сбое в нашу службу поддержки, чтобы сделать приложение лучше." } diff --git a/res/values/strings_th.arb b/res/values/strings_th.arb index 5e1428fac..2ecf1bf75 100644 --- a/res/values/strings_th.arb +++ b/res/values/strings_th.arb @@ -396,8 +396,7 @@ "biometric_auth_reason" : "สแกนลายนิ้วมือของคุณเพื่อยืนยันตัวตน", "version" : "เวอร์ชัน ${currentVersion}", - "openalias_alert_title" : "พบที่อยู่", - "openalias_alert_content" : "คุณกำลังจะส่งเงินไปยัง\n${recipient_name}", + "extracted_address_content" : "คุณกำลังจะส่งเงินไปยัง\n${recipient_name}", "card_address" : "ที่อยู่:", "buy" : "ซื้อ", @@ -679,6 +678,9 @@ "orbot_running_alert": "โปรดตรวจสอบว่า Orbot กำลังทำงานก่อนที่จะเชื่อมต่อกับโหนดนี้", "contact_list_contacts": "ติดต่อ", "contact_list_wallets": "กระเป๋าเงินของฉัน", + "bitcoin_payments_require_1_confirmation": "การชำระเงินด้วย Bitcoin ต้องการการยืนยัน 1 ครั้ง ซึ่งอาจใช้เวลา 20 นาทีหรือนานกว่านั้น ขอบคุณสำหรับความอดทนของคุณ! คุณจะได้รับอีเมลเมื่อการชำระเงินได้รับการยืนยัน", + "send_to_this_address" : "ส่ง ${currency} ${tag}ไปยังที่อยู่นี้", + "arrive_in_this_address" : "${currency} ${tag}จะมาถึงที่อยู่นี้", "do_not_send": "อย่าส่ง", "error_dialog_content": "อ๊ะ เราพบข้อผิดพลาดบางอย่าง\n\nโปรดส่งรายงานข้อขัดข้องไปยังทีมสนับสนุนของเราเพื่อปรับปรุงแอปพลิเคชันให้ดียิ่งขึ้น" } diff --git a/res/values/strings_tr.arb b/res/values/strings_tr.arb index 678b3609f..08dec0649 100644 --- a/res/values/strings_tr.arb +++ b/res/values/strings_tr.arb @@ -398,8 +398,7 @@ "biometric_auth_reason" : "Kimlik doğrulaması için parmak izini okutun", "version" : "Sürüm ${currentVersion}", - "openalias_alert_title" : "Adres tespit edildi", - "openalias_alert_content" : "Parayı buraya gönderceksin:\n${recipient_name}", + "extracted_address_content" : "Parayı buraya gönderceksin:\n${recipient_name}", "card_address" : "Adres:", "buy" : "Alış", @@ -678,6 +677,12 @@ "enabled": "Etkin", "tor_only": "Yalnızca Tor", "unmatched_currencies": "Mevcut cüzdanınızın para birimi taranan QR ile eşleşmiyor", + "orbot_running_alert": "Lütfen bu düğüme bağlanmadan önce Orbot'un çalıştığından emin olun.", "contact_list_contacts": "Rehberim", - "contact_list_wallets": "Cüzdanlarım" + "contact_list_wallets": "Cüzdanlarım", + "bitcoin_payments_require_1_confirmation": "Bitcoin ödemeleri, 20 dakika veya daha uzun sürebilen 1 onay gerektirir. Sabrınız için teşekkürler! Ödeme onaylandığında e-posta ile bilgilendirileceksiniz.", + "send_to_this_address" : "Bu adrese ${currency} ${tag}gönder", + "arrive_in_this_address" : "${currency} ${tag}bu adrese ulaşacak", + "do_not_send": "Gönderme", + "error_dialog_content": "Hay aksi, bir hatamız var.\n\nUygulamayı daha iyi hale getirmek için lütfen kilitlenme raporunu destek ekibimize gönderin." } diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb index b6ac3a511..19cf7946d 100644 --- a/res/values/strings_uk.arb +++ b/res/values/strings_uk.arb @@ -397,8 +397,7 @@ "biometric_auth_reason" : "Відскануйте свій відбиток пальця для аутентифікації", "version" : "Версія ${currentVersion}", - "openalias_alert_title" : "Виявлено адресу", - "openalias_alert_content" : "Ви будете відправляти кошти\n${recipient_name}", + "extracted_address_content" : "Ви будете відправляти кошти\n${recipient_name}", "card_address" : "Адреса:", "buy" : "Купити", @@ -680,6 +679,9 @@ "orbot_running_alert": "Перед підключенням до цього вузла переконайтеся, що Orbot запущено.", "contact_list_contacts": "Контакти", "contact_list_wallets": "Мої гаманці", + "bitcoin_payments_require_1_confirmation": "Платежі Bitcoin потребують 1 підтвердження, яке може зайняти 20 хвилин або більше. Дякую за Ваше терпіння! Ви отримаєте електронний лист, коли платіж буде підтверджено.", + "send_to_this_address" : "Надіслати ${currency} ${tag}на цю адресу", + "arrive_in_this_address" : "${currency} ${tag}надійде на цю адресу", "do_not_send": "Не надсилайте", "error_dialog_content": "На жаль, ми отримали помилку.\n\nБудь ласка, надішліть звіт про збій нашій команді підтримки, щоб покращити додаток." } diff --git a/res/values/strings_ur.arb b/res/values/strings_ur.arb new file mode 100644 index 000000000..c3d6d8765 --- /dev/null +++ b/res/values/strings_ur.arb @@ -0,0 +1,689 @@ +{ + "welcome" : "میں خوش آمدید", + "cake_wallet" : "Cake والیٹ", + "first_wallet_text" : "Monero، Bitcoin، Litecoin، اور Haven کے لیے زبردست پرس", + "please_make_selection" : "اپنا بٹوہ بنانے یا بازیافت کرنے کے لیے براہ کرم ذیل میں ایک انتخاب کریں۔", + "create_new" : "نیا والیٹ بنائیں", + "restore_wallet" : "والیٹ کو بحال کریں۔", + + "monero_com" : "Monero.com بذریعہ Cake والیٹ", + "monero_com_wallet_text" : "Monero کے لئے بہت اچھا پرس", + + "haven_app" : "Haven از Cake والیٹ", + "haven_app_wallet_text" : "Havek کے لیے زبردست پرس", + + "accounts" : "اکاؤنٹس", + "edit" : "ترمیم", + "account" : "کھاتہ", + "add" : "شامل کریں۔", + + + "address_book" : "ایڈریس بک", + "contact" : "رابطہ کریں۔", + "please_select" : "براہ مہربانی منتخب کریں:", + "cancel" : "منسوخ کریں۔", + "ok" : "ٹھیک ہے", + "contact_name" : "رابطے کا نام", + "reset" : "دوبارہ ترتیب دیں۔", + "save" : "محفوظ کریں۔", + "address_remove_contact" : "رابطہ ہٹا دیں۔", + "address_remove_content" : "کیا آپ واقعی منتخب رابطہ کو ہٹانا چاہتے ہیں؟", + + + "authenticated" : "تصدیق شدہ", + "authentication" : "تصدیق", + "failed_authentication" : "ناکام تصدیق۔ ${state_error}", + + + "wallet_menu" : "مینو", + "Blocks_remaining" : "${status} بلاکس باقی ہیں۔", + "please_try_to_connect_to_another_node" : "براہ کرم کسی دوسرے نوڈ سے جڑنے کی کوشش کریں۔", + "xmr_hidden" : "پوشیدہ", + "xmr_available_balance" : "دستیاب بیلنس", + "xmr_full_balance" : "مکمل بیلنس", + "send" : "بھیجیں", + "receive" : "وصول کریں۔", + "transactions" : "لین دین", + "incoming" : "آنے والا", + "outgoing" : "سبکدوش ہونے والے", + "transactions_by_date" : "تاریخ کے لحاظ سے لین دین", + "trades" : "تجارت", + "filter_by" : "کی طرف سے فلٹر", + "today" : "آج", + "yesterday" : "کل", + "received" : "موصول ہوا۔", + "sent" : "بھیجا", + "pending" : " (زیر التواء)", + "rescan" : "دوبارہ اسکین کریں۔", + "reconnect" : "دوبارہ جڑیں۔", + "wallets" : "بٹوے", + "show_seed" : "بیج دکھائیں۔", + "show_keys" : "بیج / چابیاں دکھائیں۔", + "address_book_menu" : "ایڈریس بک", + "reconnection" : "دوبارہ رابطہ", + "reconnect_alert_text" : "کیا آپ واقعی دوبارہ جڑنا چاہتے ہیں؟", + + + "exchange" : "تبادلہ", + "clear" : "صاف", + "refund_address" : "رقم کی واپسی کا پتہ", + "change_exchange_provider" : "ایکسچینج فراہم کنندہ کو تبدیل کریں۔", + "you_will_send" : "سے تبدیل کریں۔", + "you_will_get" : "میں تبدیل کریں۔", + "amount_is_guaranteed" : "وصول شدہ رقم کی ضمانت ہے۔", + "amount_is_estimate" : "وصول شدہ رقم ایک تخمینہ ہے۔", + "powered_by" : "${title} کے ذریعے تقویت یافتہ", + "error" : "خرابی", + "estimated" : "تخمینہ لگایا", + "min_value" : "کم سے کم: ${value} ${currency}", + "max_value" : "زیادہ سے زیادہ: ${value} ${currency}", + "change_currency" : "کرنسی تبدیل کریں", + "overwrite_amount" : "رقم کو اوور رائٹ کریں۔", + "qr_payment_amount" : "اس QR کوڈ میں ادائیگی کی رقم شامل ہے۔ کیا آپ موجودہ قدر کو اوور رائٹ کرنا چاہتے ہیں؟", + + "copy_id" : "کاپی ID", + "exchange_result_write_down_trade_id" : "جاری رکھنے کے لیے براہ کرم تجارتی ID کاپی کریں یا لکھیں۔", + "trade_id" : "تجارتی ID:", + "copied_to_clipboard" : "کلپ بورڈ پر کاپی کیا گیا۔", + "saved_the_trade_id" : "میں نے تجارتی ID محفوظ کر لی ہے۔", + "fetching" : "لا رہا ہے۔", + "id" : "ID:", + "amount" : "رقم کی رقم:", + "payment_id" : "ادائیگی کی شناخت:", + "status" : "حالت:", + "offer_expires_in" : "پیشکش کی میعاد اس وقت ختم ہو جاتی ہے:", + "trade_is_powered_by" : "یہ تجارت ${provider} کے ذریعے تقویت یافتہ ہے", + "copy_address" : "ایڈریس کاپی کریں۔", + "exchange_result_confirm" : "تصدیق کو دبانے سے، آپ اپنے بٹوے سے ${fetchingLabel} ${from} بھیجیں گے جسے ${walletName} کہتے ہیں نیچے دکھائے گئے پتے پر۔ یا آپ اپنے بیرونی والیٹ سے نیچے دیئے گئے پتے/QR کوڈ پر بھیج سکتے ہیں۔\\n\\nجاری رکھنے کے لیے براہ کرم تصدیق کو دبائیں یا رقم تبدیل کرنے کے لیے واپس جائیں۔", + "exchange_result_description" : "آپ کو اگلے صفحہ پر دکھائے گئے پتے پر کم از کم ${fetchingLabel} ${from} بھیجنا ہوگا۔ اگر آپ ${fetchingLabel} ${from} سے کم رقم بھیجتے ہیں تو یہ تبدیل نہیں ہوسکتی ہے اور اسے واپس نہیں کیا جاسکتا ہے۔", + "exchange_result_write_down_ID" : "*براہ کرم اوپر دکھائی گئی اپنی ID کاپی کریں یا لکھیں۔", + "confirm" : "تصدیق کریں۔", + "confirm_sending" : "بھیجنے کی تصدیق کریں۔", + "commit_transaction_amount_fee" : "لین دین کا ارتکاب کریں\\nرقم: ${amount}\\nفیس: ${fee}", + "sending" : "بھیج رہا ہے۔", + "transaction_sent" : "لین دین بھیجا گیا!", + "expired" : "میعاد ختم", + "time" : "${minutes}m ${seconds}s", + "send_xmr" : "XMR بھیجیں۔", + "exchange_new_template" : "نیا سانچہ", + + "faq" : "عمومی سوالات", + + + "enter_your_pin" : "اپنا PIN درج کریں۔", + "loading_your_wallet" : "آپ کا بٹوہ لوڈ ہو رہا ہے۔", + + + "new_wallet" : "نیا پرس", + "wallet_name" : "بٹوے کا نام", + "continue_text" : "جاری رہے", + "choose_wallet_currency" : "براہ کرم والیٹ کرنسی کا انتخاب کریں:", + + + "node_new" : "نیا نوڈ", + "node_address" : "نوڈ ایڈریس", + "node_port" : "نوڈ پورٹ", + "login" : "لاگ ان کریں", + "password" : "پاس ورڈ", + "nodes" : "نوڈس", + "node_reset_settings_title" : "ترتیبات کو دوبارہ ترتیب دیں۔", + "nodes_list_reset_to_default_message" : "کیا آپ واقعی ترتیبات کو ڈیفالٹ پر دوبارہ ترتیب دینا چاہتے ہیں؟", + "change_current_node" : "کیا آپ یقینی طور پر موجودہ نوڈ کو ${node} میں تبدیل کرنا چاہتے ہیں؟", + "change" : "تبدیلی", + "remove_node" : "نوڈ کو ہٹا دیں۔", + "remove_node_message" : "کیا آپ واقعی منتخب نوڈ کو ہٹانا چاہتے ہیں؟", + "remove" : "دور", + "delete" : "حذف کریں۔", + "add_new_node" : "نیا نوڈ شامل کریں۔", + "change_current_node_title" : "موجودہ نوڈ کو تبدیل کریں۔", + "node_test" : "پرکھ", + "node_connection_successful" : "کنکشن کامیاب رہا۔", + "node_connection_failed" : "کنکشن ناکام ہو گیا تھا۔", + "new_node_testing" : "نیا نوڈ ٹیسٹنگ", + + + "use" : "تبدیل کرنا", + "digit_pin" : "-ہندسوں کا پن", + + + "share_address" : "پتہ شیئر کریں۔", + "receive_amount" : "رقم", + "subaddresses" : "ذیلی پتے", + "addresses" : "پتے", + "scan_qr_code" : "پتہ حاصل کرنے کے لیے QR کوڈ اسکین کریں۔", + "qr_fullscreen" : "فل سکرین QR کوڈ کھولنے کے لیے تھپتھپائیں۔", + "rename" : "نام تبدیل کریں۔", + "choose_account" : "اکاؤنٹ کا انتخاب کریں۔", + "create_new_account" : "نیا اکاؤنٹ بنانے", + "accounts_subaddresses" : "اکاؤنٹس اور ذیلی پتے", + + + "restore_restore_wallet" : "والیٹ کو بحال کریں۔", + "restore_title_from_seed_keys" : "بیج / چابیاں سے بحال کریں۔", + "restore_description_from_seed_keys" : "اپنے بٹوے کو بیج / چابیاں سے واپس حاصل کریں جنہیں آپ نے محفوظ جگہ پر محفوظ کیا ہے۔", + "restore_next" : "اگلے", + "restore_title_from_backup" : "بیک اپ سے بحال کریں۔", + "restore_description_from_backup" : "آپ اپنی بیک اپ فائل سے پوری کیک والیٹ ایپ کو بحال کر سکتے ہیں۔", + "restore_seed_keys_restore" : "بیج/کیز کی بحالی", + "restore_title_from_seed" : "بیج سے بحال کریں۔", + "restore_description_from_seed" : "اپنے بٹوے کو 25 لفظ یا 13 الفاظ کے مجموعہ کوڈ سے بحال کریں۔", + "restore_title_from_keys" : "چابیاں سے بحال کریں۔", + "restore_description_from_keys" : "اپنے بٹوے کو اپنی نجی کلیدوں سے محفوظ کردہ کی اسٹروکس سے بحال کریں۔", + "restore_wallet_name" : "بٹوے کا نام", + "restore_address" : "پتہ", + "restore_view_key_private" : "کلید دیکھیں (نجی)", + "restore_spend_key_private" : "خرچ کی کلید (نجی)", + "restore_recover" : "بحال کریں۔", + "restore_wallet_restore_description" : "والیٹ کی بحالی کی تفصیل", + "restore_new_seed" : "نیا بیج", + "restore_active_seed" : "فعال بیج", + "restore_bitcoin_description_from_seed" : "24 الفاظ کے مجموعہ کوڈ سے اپنے بٹوے کو بحال کریں۔", + "restore_bitcoin_description_from_keys" : "اپنی نجی کلیدوں سے تیار کردہ WIF سٹرنگ سے اپنے بٹوے کو بحال کریں۔", + "restore_bitcoin_title_from_keys" : "WIF سے بحال کریں۔", + "restore_from_date_or_blockheight" : "براہ کرم یہ پرس بنانے سے چند دن پہلے کی تاریخ درج کریں۔ یا اگر آپ کو بلاک ہائیٹ معلوم ہے تو براہ کرم اس کی بجائے اسے درج کریں۔", + + + "seed_reminder" : "اگر آپ اپنا فون کھو دیتے ہیں یا صاف کرتے ہیں تو براہ کرم یہ لکھ دیں۔", + "seed_title" : "بیج", + "seed_share" : "بیج بانٹیں۔", + "copy" : "کاپی", + + + "seed_language_choose" : "براہ کرم بیج کی زبان کا انتخاب کریں:", + "seed_choose" : "بیج کی زبان کا انتخاب کریں۔", + "seed_language_next" : "اگلے", + "seed_language_english" : "انگریزی", + "seed_language_chinese" : "چینی", + "seed_language_dutch" : "ڈچ", + "seed_language_german" : "جرمن", + "seed_language_japanese" : "جاپانی", + "seed_language_portuguese" : "پرتگالی", + "seed_language_russian" : "روسی", + "seed_language_spanish" : "ہسپانوی", + "seed_language_french" : "فرانسیسی", + "seed_language_italian" : "اطالوی", + + + "send_title" : "بھیجیں", + "send_your_wallet" : "آپ کا بٹوہ", + "send_address" : "${cryptoCurrency} پتہ", + "send_payment_id" : "ادائیگی کی شناخت (اختیاری)", + "all" : "تمام", + "send_error_minimum_value" : "رقم کی کم از کم قیمت 0.01 ہے۔", + "send_error_currency" : "کرنسی صرف نمبروں پر مشتمل ہو سکتی ہے۔", + "send_estimated_fee" : "تخمینی فیس:", + "send_priority" : "فی الحال فیس ${transactionPriority} کی ترجیح پر سیٹ ہے۔\\nٹرانزیکشن کی ترجیح سیٹنگز میں ایڈجسٹ کی جا سکتی ہے۔", + "send_creating_transaction" : "لین دین کی تخلیق", + "send_templates" : "ٹیمپلیٹس", + "send_new" : "نئی", + "send_amount" : "رقم:", + "send_fee" : "فیس:", + "send_name" : "نام", + "send_got_it" : "یہ مل گیا", + "send_sending" : "بھیج رہا ہے...", + "send_success" : "آپ کا ${crypto} کامیابی کے ساتھ بھیج دیا گیا۔", + + + "settings_title" : "ترتیبات", + "settings_nodes" : "نوڈس", + "settings_current_node" : "موجودہ نوڈ", + "settings_wallets" : "بٹوے", + "settings_display_balance" : "ڈسپلے بیلنس", + "settings_currency" : "کرنسی", + "settings_fee_priority" : "فیس کی ترجیح", + "settings_save_recipient_address" : "وصول کنندہ کا پتہ محفوظ کریں۔", + "settings_personal" : "ذاتی", + "settings_change_pin" : "پن تبدیل کریں۔", + "settings_change_language" : "زبان تبدیل کریں", + "settings_allow_biometrical_authentication" : "بایومیٹریکل تصدیق کی اجازت دیں۔", + "settings_dark_mode" : "ڈارک موڈ", + "settings_transactions" : "لین دین", + "settings_trades" : "تجارت", + "settings_display_on_dashboard_list" : "ڈیش بورڈ کی فہرست پر ڈسپلے کریں۔", + "settings_all" : "تمام", + "settings_only_trades" : "صرف تجارت", + "settings_only_transactions" : "صرف لین دین", + "settings_none" : "کوئی نہیں۔", + "settings_support" : "حمایت", + "settings_terms_and_conditions" : "شرائط و ضوابط", + "pin_is_incorrect" : "PIN غلط ہے۔", + + + "setup_pin" : "PIN سیٹ اپ کریں۔", + "enter_your_pin_again" : "اپنا پن دوبارہ درج کریں۔", + "setup_successful" : "آپ کا PIN کامیابی کے ساتھ ترتیب دیا گیا ہے!", + + + "wallet_keys" : "بٹوے کے بیج / چابیاں", + "wallet_seed" : "بٹوے کا بیج", + "private_key" : "نجی کلید", + "public_key" : "عوامی کلید", + "view_key_private" : "کلید دیکھیں (نجی)", + "view_key_public" : "کلید دیکھیں (عوامی)", + "spend_key_private" : "خرچ کی کلید (نجی)", + "spend_key_public" : "خرچ کی کلید (عوامی)", + "copied_key_to_clipboard" : "${key} کو کلپ بورڈ پر کاپی کیا گیا۔", + + + "new_subaddress_title" : "نیا پتہ", + "new_subaddress_label_name" : "لیبل کا نام", + "new_subaddress_create" : "بنانا", + + "address_label" : "پتے کا خانہ", + + "subaddress_title" : "ذیلی ایڈریس کی فہرست", + + + "trade_details_title" : "تجارت کی تفصیلات", + "trade_details_id" : "ID", + "trade_details_state" : "حالت", + "trade_details_fetching" : "لا رہا ہے۔", + "trade_details_provider" : "فراہم کرنے والا", + "trade_details_created_at" : "پر تخلیق کیا گیا۔", + "trade_details_pair" : "جوڑا", + "trade_details_copied" : "${title} کو کلپ بورڈ پر کاپی کیا گیا۔", + + + "trade_history_title" : "تجارتی تاریخ", + + + "transaction_details_title" : "لین دین کی تفصیلات", + "transaction_details_transaction_id" : "ٹرانزیکشن ID", + "transaction_details_date" : "تاریخ", + "transaction_details_height" : "اونچائی", + "transaction_details_amount" : "رقم", + "transaction_details_fee" : "فیس", + "transaction_details_copied" : "${title} کو کلپ بورڈ پر کاپی کیا گیا۔", + "transaction_details_recipient_address" : "وصول کنندگان کے پتے", + + + "wallet_list_title" : "Monero والیٹ", + "wallet_list_create_new_wallet" : "نیا والیٹ بنائیں", + "wallet_list_restore_wallet" : "والیٹ کو بحال کریں۔", + "wallet_list_load_wallet" : "پرس لوڈ کریں۔", + "wallet_list_loading_wallet" : "${wallet_name} والیٹ لوڈ ہو رہا ہے۔", + "wallet_list_failed_to_load" : "${wallet_name} والیٹ لوڈ کرنے میں ناکام۔ ${error}", + "wallet_list_removing_wallet" : "${wallet_name} والیٹ کو ہٹایا جا رہا ہے۔", + "wallet_list_failed_to_remove" : "${wallet_name} والیٹ کو ہٹانے میں ناکام۔ ${error}", + + + "widgets_address" : "پتہ", + "widgets_restore_from_blockheight" : "بلاک ہائیٹ سے بحال کریں۔", + "widgets_restore_from_date" : "تاریخ سے بحال کریں۔", + "widgets_or" : "یا", + "widgets_seed" : "بیج", + + + "router_no_route" : "${name} کے لیے کوئی راستہ متعین نہیں ہے", + + + "error_text_account_name" : "اکاؤنٹ کا نام صرف حروف، اعداد پر مشتمل ہو سکتا ہے\\nاور 1 سے 15 حروف کے درمیان ہونا چاہیے۔", + "error_text_contact_name" : "رابطہ کے نام میں ` , \\' \" علامات\\nنہیں ہو سکتے اور 1 سے 32 حروف کے درمیان ہونا چاہیے", + "error_text_address" : "والیٹ کا پتہ cryptocurrency کی قسم\\nکے مطابق ہونا چاہیے۔", + "error_text_node_address" : "براہ کرم ایک iPv4 پتہ درج کریں۔", + "error_text_node_port" : "نوڈ پورٹ میں صرف 0 اور 65535 کے درمیان نمبر ہوسکتے ہیں۔", + "error_text_payment_id" : "ادائیگی کی ID ہیکس میں صرف 16 سے 64 حروف پر مشتمل ہو سکتی ہے۔", + "error_text_xmr" : "XMR قدر دستیاب بیلنس سے زیادہ نہیں ہو سکتی۔\\nفرکشن ہندسوں کی تعداد 12 سے کم یا اس کے برابر ہونی چاہیے۔", + "error_text_fiat" : "رقم کی قدر دستیاب بیلنس سے زیادہ نہیں ہو سکتی۔\\nفرکشن ہندسوں کی تعداد 2 کے برابر یا کم ہونی چاہیے۔", + "error_text_subaddress_name" : "ذیلی پتے کے نام میں ` , \\ ' \" علامتیں نہیں ہو سکتی ہیں اور 1 اور 20 حروف کے درمیان ہونی چاہئیں", + "error_text_amount" : "رقم صرف اعداد پر مشتمل ہو سکتی ہے۔", + "error_text_wallet_name" : "والیٹ کے نام میں صرف حروف، اعداد، _ - علامتیں\\nاور 1 سے 33 حروف کے درمیان ہونی چاہئیں", + "error_text_keys" : "والیٹ کیز ہیکس میں صرف 64 حروف پر مشتمل ہو سکتی ہیں۔", + "error_text_crypto_currency" : "کسر ہندسوں کی تعداد\\n12 سے کم یا مساوی ہونی چاہیے۔", + "error_text_minimal_limit" : "${provider} کے لیے تجارت نہیں بنائی گئی ہے۔ رقم کم سے کم ہے: ${min} ${currency}", + "error_text_maximum_limit" : "${provider} کے لیے تجارت نہیں بنائی گئی ہے۔ رقم زیادہ سے زیادہ سے زیادہ ہے: ${max} ${currency}", + "error_text_limits_loading_failed" : "${provider} کے لیے تجارت نہیں بنائی گئی ہے۔ حدود کی لوڈنگ ناکام ہو گئی۔", + "error_text_template" : "ٹیمپلیٹ کا نام اور پتہ `` , \\' \" علامتوں پر مشتمل نہیں ہو سکتا ہے اور 1 اور 106 حروف کے درمیان ہونا چاہیے", + + + "auth_store_ban_timeout" : "پابندی_وقت ختم", + "auth_store_banned_for" : "کے لیے پابندی لگا دی گئی۔", + "auth_store_banned_minutes" : " منٹ", + "auth_store_incorrect_password" : "غلط PIN", + "wallet_store_monero_wallet" : "مونیرو والیٹ", + "wallet_restoration_store_incorrect_seed_length" : "غلط بیج کی لمبائی", + + + "full_balance" : "مکمل بیلنس", + "available_balance" : "دستیاب بیلنس", + "hidden_balance" : "پوشیدہ بیلنس", + + + "sync_status_syncronizing" : "مطابقت پذیری", + "sync_status_syncronized" : "مطابقت پذیر", + "sync_status_not_connected" : "منسلک نہیں", + "sync_status_starting_sync" : "مطابقت پذیری شروع کر رہا ہے۔", + "sync_status_failed_connect" : "منقطع", + "sync_status_connecting" : "جڑ رہا ہے۔", + "sync_status_connected" : "منسلک", + "sync_status_attempting_sync" : "ہم آہنگی کی کوشش کر رہا ہے۔", + + + "transaction_priority_slow" : "سست", + "transaction_priority_regular" : "باقاعدہ", + "transaction_priority_medium" : "درمیانہ", + "transaction_priority_fast" : "تیز", + "transaction_priority_fastest" : "تیز ترین", + + + "trade_for_not_created" : "${title} کے لیے تجارت نہیں بنائی گئی ہے۔", + "trade_not_created" : "تجارت پیدا نہیں ہوئی۔", + "trade_id_not_found" : "ٹریڈ ${tradeId} از ${title} نہیں ملا۔", + "trade_not_found" : "تجارت نہیں ملی۔", + + + "trade_state_pending" : "زیر التواء", + "trade_state_confirming" : "تصدیق کر رہا ہے۔", + "trade_state_trading" : "تجارت", + "trade_state_traded" : "تجارت کی۔", + "trade_state_complete" : "مکمل", + "trade_state_to_be_created" : "پیدا کیا جائے۔", + "trade_state_unpaid" : "بلا معاوضہ", + "trade_state_underpaid" : "کم معاوضہ", + "trade_state_paid_unconfirmed" : "غیر تصدیق شدہ ادائیگی", + "trade_state_paid" : "ادا کیا", + "trade_state_btc_sent" : "Btc بھیجا گیا۔", + "trade_state_timeout" : "وقت ختم", + "trade_state_created" : "بنایا", + "trade_state_finished" : "ختم", + + "change_language" : "زبان تبدیل کریں", + "change_language_to" : "زبان کو ${language} میں تبدیل کریں؟", + + "paste" : "چسپاں کریں۔", + "restore_from_seed_placeholder" : "براہ کرم اپنا بیج یہاں درج کریں یا پیسٹ کریں۔", + "add_new_word" : "نیا لفظ شامل کریں۔", + "incorrect_seed" : "درج کردہ متن درست نہیں ہے۔", + + "biometric_auth_reason" : "تصدیق کرنے کے لیے اپنے فنگر پرنٹ کو اسکین کریں۔", + "version" : "ورژن ${currentVersion}", + + + "openalias_alert_title" : "پتہ کا پتہ چلا", + "openalias_alert_content" : "آپ کو فنڈز بھیجیں گے\\n${recipient_name}", + + "card_address" : "پتہ:", + "buy" : "خریدنے", + "sell" : "بیچنا", + + "placeholder_transactions" : "آپ کے لین دین یہاں دکھائے جائیں گے۔", + "placeholder_contacts" : "آپ کے رابطے یہاں دکھائے جائیں گے۔", + + "template" : "سانچے", + "confirm_delete_template" : "یہ عمل اس ٹیمپلیٹ کو حذف کر دے گا۔ کیا آپ جاری رکھنا چاہتے ہیں؟", + "confirm_delete_wallet" : "اس کارروائی سے یہ پرس حذف ہو جائے گا۔ کیا آپ جاری رکھنا چاہتے ہیں؟", + + "picker_description" : "ChangeNOW یا MorphToken کو منتخب کرنے کے لیے، براہ کرم پہلے اپنا تجارتی جوڑا تبدیل کریں۔", + + "change_wallet_alert_title" : "موجودہ پرس تبدیل کریں۔", + "change_wallet_alert_content" : "کیا آپ موجودہ والیٹ کو ${wallet_name} میں تبدیل کرنا چاہتے ہیں؟", + + "creating_new_wallet" : "نیا پرس بنانا", + "creating_new_wallet_error" : "خرابی: ${description}", + + "seed_alert_title" : "توجہ", + "seed_alert_content" : "بیج آپ کے بٹوے کو بازیافت کرنے کا واحد طریقہ ہے۔ کیا آپ نے اسے لکھا ہے؟", + "seed_alert_back" : "واپس جاو", + "seed_alert_yes" : "ہاں میرے پاس ہے", + + "exchange_sync_alert_content" : "براہ کرم اس وقت تک انتظار کریں جب تک آپ کا بٹوہ مطابقت پذیر نہ ہو جائے۔", + + "pre_seed_title" : "اہم", + "pre_seed_description" : "اگلے صفحے پر آپ کو ${words} الفاظ کا ایک سلسلہ نظر آئے گا۔ یہ آپ کا انوکھا اور نجی بیج ہے اور یہ آپ کے بٹوے کو ضائع یا خرابی کی صورت میں بازیافت کرنے کا واحد طریقہ ہے۔ اسے لکھنا اور اسے کیک والیٹ ایپ سے باہر کسی محفوظ جگہ پر اسٹور کرنا آپ کی ذمہ داری ہے۔", + "pre_seed_button_text" : "میں سمجھتا ہوں۔ مجھے میرا بیج دکھاؤ", + + "xmr_to_error" : "XMR.TO غلطی", + "xmr_to_error_description" : "غلط رقم۔ اعشاریہ پوائنٹ کے بعد زیادہ سے زیادہ 8 ہندسے", + + "provider_error" : "${provider} خرابی۔", + + "use_ssl" : "SSL استعمال کریں۔", + "trusted" : "قابل اعتماد", + + "color_theme" : "رنگین تھیم", + "light_theme" : "روشنی", + "bright_theme" : "روشن", + "dark_theme" : "اندھیرا", + "enter_your_note" : "اپنا نوٹ درج کریں…", + "note_optional" : "نوٹ (اختیاری)", + "note_tap_to_change" : "نوٹ (تبدیل کرنے کے لیے تھپتھپائیں)", + "view_in_block_explorer" : "بلاک ایکسپلورر میں دیکھیں", + "view_transaction_on" : "لین دین دیکھیں آن", + "transaction_key" : "لین دین کی کلید", + "confirmations" : "تصدیقات", + "recipient_address" : "وصول کنندہ کا پتہ", + + "extra_id" : "اضافی ID:", + "destination_tag" : "منزل کا ٹیگ:", + "memo" : "میمو:", + + "backup" : "بیک اپ", + "change_password" : "پاس ورڈ تبدیل کریں", + "backup_password" : "بیک اپ پاس ورڈ", + "write_down_backup_password" : "براہ کرم اپنا بیک اپ پاس ورڈ لکھیں، جو آپ کی بیک اپ فائلوں کی درآمد کے لیے استعمال ہوتا ہے۔", + "export_backup" : "بیک اپ برآمد کریں۔", + "save_backup_password" : "براہ کرم یقینی بنائیں کہ آپ نے اپنا بیک اپ پاس ورڈ محفوظ کر لیا ہے۔ آپ اس کے بغیر اپنی بیک اپ فائلیں درآمد نہیں کر سکیں گے۔", + "backup_file" : "بیک اپ فائل", + + "edit_backup_password" : "بیک اپ پاس ورڈ میں ترمیم کریں۔", + "save_backup_password_alert" : "بیک اپ پاس ورڈ محفوظ کریں۔", + "change_backup_password_alert" : "آپ کی پچھلی بیک اپ فائلیں نئے بیک اپ پاس ورڈ کے ساتھ درآمد کرنے کے لیے دستیاب نہیں ہوں گی۔ نیا بیک اپ پاس ورڈ صرف نئی بیک اپ فائلوں کے لیے استعمال کیا جائے گا۔ کیا آپ واقعی بیک اپ پاس ورڈ تبدیل کرنا چاہتے ہیں؟", + + "enter_backup_password" : "یہاں بیک اپ پاس ورڈ درج کریں۔", + "select_backup_file" : "بیک اپ فائل کو منتخب کریں۔", + "import" : "درآمد کریں۔", + "please_select_backup_file" : "براہ کرم بیک اپ فائل منتخب کریں اور بیک اپ پاس ورڈ درج کریں۔", + + "fixed_rate" : "مقررہ شرح", + "fixed_rate_alert" : "فکسڈ ریٹ موڈ چیک ہونے پر آپ وصولی رقم درج کر سکیں گے۔ کیا آپ فکسڈ ریٹ موڈ پر سوئچ کرنا چاہتے ہیں؟", + + "xlm_extra_info" : "ایکسچینج کے لیے XLM ٹرانزیکشن بھیجتے وقت براہ کرم میمو ID بتانا نہ بھولیں۔", + "xrp_extra_info" : "ایکسچینج کے لیے XRP ٹرانزیکشن بھیجتے وقت ڈیسٹینیشن ٹیگ بتانا نہ بھولیں۔", + + "exchange_incorrect_current_wallet_for_xmr" : "اگر آپ اپنے Cake والیٹ Monero بیلنس سے XMR کا تبادلہ کرنا چاہتے ہیں، تو براہ کرم پہلے اپنے Monero والیٹ پر جائیں۔", + "confirmed" : "تصدیق شدہ", + "unconfirmed" : "غیر تصدیق شدہ", + "displayable" : "قابل نمائش", + + "submit_request" : "درخواست بھیج دو", + + "buy_alert_content" : "فی الحال ہم صرف Bitcoin اور Litecoin کی خریداری کی حمایت کرتے ہیں۔ Bitcoin یا Litecoin خریدنے کے لیے، براہ کرم اپنا Bitcoin یا Litecoin والیٹ بنائیں یا اس میں سوئچ کریں۔", + "sell_alert_content" : "ہم فی الحال صرف Bitcoin کی فروخت کی حمایت کرتے ہیں۔ Bitcoin فروخت کرنے کے لیے، براہ کرم اپنا Bitcoin والیٹ بنائیں یا اس میں سوئچ کریں۔", + + "outdated_electrum_wallet_description" : "Cake میں بنائے گئے نئے Bitcoin بٹوے میں اب 24 الفاظ کا بیج ہے۔ یہ لازمی ہے کہ آپ ایک نیا Bitcoin والیٹ بنائیں اور اپنے تمام فنڈز کو نئے 24 الفاظ والے والیٹ میں منتقل کریں، اور 12 الفاظ کے بیج والے بٹوے کا استعمال بند کریں۔ براہ کرم اپنے فنڈز کو محفوظ بنانے کے لیے فوری طور پر ایسا کریں۔", + "understand" : "میں سمجھتا ہوں۔", + + "apk_update" : "APK اپ ڈیٹ", + + "buy_bitcoin" : "Bitcoin خریدیں۔", + "buy_with" : "کے ساتھ خریدیں۔", + "moonpay_alert_text" : "رقم کی قدر ${minAmount} ${fiatCurrency} کے برابر یا زیادہ ہونی چاہیے۔", + + "outdated_electrum_wallet_receive_warning" : "اگر اس پرس میں 12 الفاظ کا بیج ہے اور اسے Cake میں بنایا گیا ہے، تو اس بٹوے میں Bitcoin جمع نہ کریں۔ اس بٹوے میں منتقل کیا گیا کوئی بھی BTC ضائع ہو سکتا ہے۔ ایک نیا 24 الفاظ والا والیٹ بنائیں (اوپر دائیں جانب مینو کو تھپتھپائیں، Wallets کو منتخب کریں، نیا والیٹ بنائیں، پھر Bitcoin کو منتخب کریں) اور فوری طور پر اپنے BTC کو وہاں منتقل کریں۔ Cake کے نئے (24-لفظوں) BTC بٹوے محفوظ ہیں۔", + "do_not_show_me" : "مجھے یہ دوبارہ مت دکھانا", + + "unspent_coins_title" : "غیر خرچ شدہ سکے ۔", + "unspent_coins_details_title" : "غیر خرچ شدہ سککوں کی تفصیلات", + "freeze" : "منجمد", + "frozen" : "منجمد", + "coin_control" : "سکے کنٹرول (اختیاری)", + + "address_detected" : "پتہ کا پتہ چلا", + "address_from_domain" : "یہ پتہ نہ رکنے والے ڈومینز پر ${domain} کا ہے۔", + + "add_receiver" : "دوسرا وصول کنندہ شامل کریں (اختیاری)", + + "manage_yats" : "یاٹس کا انتظام کریں۔", + "yat_alert_title" : "Yat کے ساتھ زیادہ آسانی سے کریپٹو بھیجیں اور وصول کریں۔", + "yat_alert_content" : "Cake والیٹ کے صارفین اب ایک قسم کے ایموجی پر مبنی صارف نام کے ساتھ اپنی تمام پسندیدہ کرنسیاں بھیج اور وصول کر سکتے ہیں۔", + "get_your_yat" : "اپنی Yat حاصل کریں۔", + "connect_an_existing_yat" : "ایک موجودہ Yat کو جوڑیں۔", + "connect_yats" : "Yats کو جوڑیں۔", + "yat_address" : "Yat ایڈریس", + "yat" : "Yat", + "address_from_yat" : "یہ پتہ Yat پر ${emoji} کا ہے۔", + "yat_error" : "Yat غلطی", + "yat_error_content" : "اس Yat کے ساتھ کوئی پتے منسلک نہیں ہیں۔ ایک اور یات آزمائیں۔", + "choose_address" : "\\n\\nبراہ کرم پتہ منتخب کریں:", + "yat_popup_title" : "آپ کے بٹوے کا پتہ ایموجائز کیا جا سکتا ہے۔", + "yat_popup_content" : "اب آپ Cake Wallet میں اپنے Yat کے ساتھ کرپٹو بھیج اور وصول کر سکتے ہیں - ایک مختصر، ایموجی پر مبنی صارف نام۔ ترتیبات کی سکرین پر کسی بھی وقت Yats کا نظم کریں۔", + "second_intro_title" : "ان سب پر حکمرانی کے لیے ایک ایموجی ایڈریس", + "second_intro_content" : "آپ کا Yat ایک منفرد ایموجی ایڈریس ہے جو آپ کی تمام کرنسیوں کے لیے آپ کے تمام لمبے ہیکسا ڈیسیمل پتوں کی جگہ لے لیتا ہے۔", + "third_intro_title" : "Yat دوسروں کے ساتھ اچھی طرح کھیلتا ہے۔", + "third_intro_content" : "Yats بھی Cake والیٹ سے باہر رہتے ہیں۔ زمین پر کسی بھی بٹوے کے پتے کو Yat سے تبدیل کیا جا سکتا ہے!", + "learn_more" : "اورجانیے", + "search" : "تلاش کریں۔", + "search_language" : "زبان تلاش کریں۔", + "search_currency" : "کرنسی تلاش کریں۔", + "new_template" : "نیا سانچہ", + "electrum_address_disclaimer" : "جب بھی آپ ایک کا استعمال کرتے ہیں تو ہم نئے پتے تیار کرتے ہیں، لیکن پچھلے پتے کام کرتے رہتے ہیں۔", + "wallet_name_exists" : "اس نام کا پرس پہلے سے موجود ہے۔ براہ کرم ایک مختلف نام منتخب کریں یا پہلے دوسرے بٹوے کا نام تبدیل کریں۔", + "market_place" : "بازار", + "cake_pay_title" : "Cake پے گفٹ کارڈز", + "cake_pay_subtitle" : "رعایتی گفٹ کارڈز خریدیں (صرف امریکہ)", + "cake_pay_web_cards_title" : "Cake پے ویب کارڈز", + "cake_pay_web_cards_subtitle" : "دنیا بھر میں پری پیڈ کارڈز اور گفٹ کارڈز خریدیں۔", + "about_cake_pay" : "Cake پے آپ کو ورچوئل اثاثوں کے ساتھ گفٹ کارڈز آسانی سے خریدنے کی اجازت دیتا ہے، جو ریاستہائے متحدہ میں 150,000 سے زیادہ تاجروں پر فوری طور پر خرچ کیے جا سکتے ہیں۔", + "cake_pay_account_note" : "کارڈز دیکھنے اور خریدنے کے لیے صرف ایک ای میل ایڈریس کے ساتھ سائن اپ کریں۔ کچھ رعایت پر بھی دستیاب ہیں!", + "already_have_account" : "پہلے سے ہی اکاؤنٹ ہے؟", + "create_account" : "اکاؤنٹ بنائیں", + "privacy_policy" : "رازداری کی پالیسی", + "welcome_to_cakepay" : "Cake پے میں خوش آمدید!", + "sign_up" : "سائن اپ", + "forgot_password" : "پاسورڈ بھول گے", + "reset_password" : "پاس ورڈ ری سیٹ", + "gift_cards" : "گفٹ کارڈز", + "setup_your_debit_card" : "اپنا ڈیبٹ کارڈ ترتیب دیں۔", + "no_id_required" : "کوئی ID درکار نہیں۔ ٹاپ اپ اور کہیں بھی خرچ کریں۔", + "how_to_use_card" : "اس کارڈ کو استعمال کرنے کا طریقہ", + "purchase_gift_card" : "گفٹ کارڈ خریدیں۔", + "verification" : "تصدیق", + "fill_code" : "براہ کرم اپنے ای میل پر فراہم کردہ تصدیقی کوڈ کو پُر کریں۔", + "dont_get_code" : "کوڈ نہیں ملتا؟", + "resend_code" : "براہ کرم اسے دوبارہ بھیجیں۔", + "debit_card" : "ڈیبٹ کارڈ", + "cakepay_prepaid_card" : "Cake پے پری پیڈ ڈیبٹ کارڈ", + "no_id_needed" : "شناخت کی ضرورت نہیں!", + "frequently_asked_questions" : "اکثر پوچھے گئے سوالات", + "debit_card_terms" : "اس ڈیجیٹل والیٹ میں آپ کے ادائیگی کارڈ نمبر (اور آپ کے ادائیگی کارڈ نمبر سے متعلقہ اسناد) کا ذخیرہ اور استعمال ادائیگی کارڈ جاری کنندہ کے ساتھ قابل اطلاق کارڈ ہولڈر کے معاہدے کی شرائط و ضوابط کے ساتھ مشروط ہے، جیسا کہ وقتاً فوقتاً نافذ ہوتا ہے۔", + "please_reference_document" : "مزید معلومات کے لیے براہ کرم نیچے دی گئی دستاویزات کا حوالہ دیں۔", + "cardholder_agreement" : "کارڈ ہولڈر کا معاہدہ", + "e_sign_consent" : "ای سائن کنسنٹ", + "agree_and_continue" : "اتفاق کریں اور جاری رکھیں", + "email_address" : "ای میل اڈریس", + "agree_to" : "اکاؤنٹ بنا کر آپ اس سے اتفاق کرتے ہیں۔", + "and" : "اور", + "enter_code" : "کوڈ درج کریں", + "congratulations" : "مبارک ہو!", + "you_now_have_debit_card" : "اب آپ کے پاس ڈیبٹ کارڈ ہے۔", + "min_amount" : "کم سے کم: ${value}", + "max_amount" : "زیادہ سے زیادہ: ${value}", + "enter_amount" : "رقم درج کریں۔", + "billing_address_info" : "اگر آپ سے بلنگ کا پتہ پوچھا جائے تو اپنا شپنگ ایڈریس فراہم کریں۔", + "order_physical_card" : "فزیکل کارڈ آرڈر کریں۔", + "add_value" : "قدر شامل کریں۔", + "activate" : "محرک کریں", + "get_a" : "حاصل", + "digital_and_physical_card" : " ڈیجیٹل اور فزیکل پری پیڈ ڈیبٹ کارڈ", + "get_card_note" : " جسے آپ ڈیجیٹل کرنسیوں کے ساتھ دوبارہ لوڈ کر سکتے ہیں۔ کوئی اضافی معلومات کی ضرورت نہیں!", + "signup_for_card_accept_terms" : "کارڈ کے لیے سائن اپ کریں اور شرائط کو قبول کریں۔", + "add_fund_to_card" : "کارڈز میں پری پیڈ فنڈز شامل کریں (${value} تک)", + "use_card_info_two" : "رقوم کو امریکی ڈالر میں تبدیل کیا جاتا ہے جب پری پیڈ اکاؤنٹ میں رکھا جاتا ہے، ڈیجیٹل کرنسیوں میں نہیں۔", + "use_card_info_three" : "ڈیجیٹل کارڈ آن لائن یا کنٹیکٹ لیس ادائیگی کے طریقوں کے ساتھ استعمال کریں۔", + "optionally_order_card" : "اختیاری طور پر ایک فزیکل کارڈ آرڈر کریں۔", + "hide_details" : "تفصیلات چھپائیں۔", + "show_details" : "تفصیلات دکھائیں", + "upto" : "${value} تک", + "discount" : "${value}% بچائیں", + "gift_card_amount" : "گفٹ کارڈ کی رقم", + "bill_amount" : "بل رقم", + "you_pay" : "تم ادا کرو", + "tip" : "ٹپ:", + "custom" : "اپنی مرضی کے مطابق", + "by_cake_pay" : "Cake پے کے ذریعے", + "expires" : "میعاد ختم", + "mm" : "MM", + "yy" : "YY", + "online" : "آن لائن", + "offline" : "آف لائن", + "gift_card_number" : "گفٹ کارڈ نمبر", + "pin_number" : "پن نمبر", + "total_saving" : "کل بچت", + "last_30_days" : "آخری 30 دن", + "avg_savings" : "اوسط بچت", + "view_all" : "سب دیکھیں", + "active_cards" : "فعال کارڈز", + "delete_account" : "کھاتہ مٹا دو", + "cards" : "کارڈز", + "active" : "فعال", + "redeemed" : "چھڑایا", + "gift_card_balance_note" : "باقی بیلنس والے گفٹ کارڈز یہاں ظاہر ہوں گے۔", + "gift_card_redeemed_note" : "آپ نے جن گفٹ کارڈز کو بھنایا ہے وہ یہاں ظاہر ہوں گے۔", + "logout" : "لاگ آوٹ", + "add_tip" : "ٹپ شامل کریں۔", + "percentageOf" : "${amount} کا", + "is_percentage" : "ہے", + "search_category" : "زمرہ تلاش کریں۔", + "mark_as_redeemed" : "ریڈیم کے بطور نشان زد کریں۔", + "more_options" : "مزید زرائے", + "awaiting_payment_confirmation" : "ادائیگی کی تصدیق کے منتظر", + "transaction_sent_notice" : "اگر اسکرین 1 منٹ کے بعد آگے نہیں بڑھتی ہے، تو بلاک ایکسپلورر اور اپنا ای میل چیک کریں۔", + "agree" : "متفق", + "in_store" : "اسٹور میں", + "generating_gift_card" : "گفٹ کارڈ تیار کرنا", + "payment_was_received" : "آپ کی ادائیگی موصول ہو گئی۔", + "proceed_after_one_minute" : "اگر اسکرین 1 منٹ کے بعد آگے نہیں بڑھتی ہے تو اپنا ای میل چیک کریں۔", + "order_id" : "ID آرڈر کریں۔", + "gift_card_is_generated" : "گفٹ کارڈ بنتا ہے۔", + "open_gift_card" : "گفٹ کارڈ کھولیں۔", + "contact_support" : "سپورٹ سے رابطہ کریں۔", + "gift_cards_unavailable" : "گفٹ کارڈز اس وقت صرف Monero، Bitcoin اور Litecoin کے ساتھ خریداری کے لیے دستیاب ہیں۔", + "introducing_cake_pay" : "Cake پے کا تعارف!", + "cake_pay_learn_more" : "ایپ میں فوری طور پر گفٹ کارڈز خریدیں اور بھنائیں!\\nمزید جاننے کے لیے بائیں سے دائیں سوائپ کریں۔", + "automatic" : "خودکار", + "fixed_pair_not_supported" : "یہ مقررہ جوڑا منتخب کردہ تبادلے کے ساتھ تعاون یافتہ نہیں ہے۔", + "variable_pair_not_supported" : "یہ متغیر جوڑا منتخب ایکسچینجز کے ساتھ تعاون یافتہ نہیں ہے۔", + "none_of_selected_providers_can_exchange" : "منتخب فراہم کنندگان میں سے کوئی بھی یہ تبادلہ نہیں کر سکتا", + "choose_one" : "ایک کا انتخاب کریں", + "choose_from_available_options" : "دستیاب اختیارات میں سے انتخاب کریں:", + "custom_redeem_amount" : "حسب ضرورت چھڑانے کی رقم", + "add_custom_redemption" : "حسب ضرورت چھٹکارا شامل کریں۔", + "remaining" : "باقی", + "delete_wallet" : "پرس کو حذف کریں۔", + "delete_wallet_confirm_message" : "کیا آپ واقعی ${wallet_name} والیٹ کو حذف کرنا چاہتے ہیں؟", + "low_fee" : "کم فیس", + "low_fee_alert" : "آپ فی الحال کم نیٹ ورک فیس کی ترجیح استعمال کر رہے ہیں۔ یہ طویل انتظار، مختلف شرحوں، یا منسوخ شدہ تجارتوں کا سبب بن سکتا ہے۔ ہم بہتر تجربہ کے لیے زیادہ فیس مقرر کرنے کی تجویز کرتے ہیں۔", + "ignor" : "نظر انداز کرنا", + "use_suggested" : "تجویز کردہ استعمال کریں۔", + "do_not_share_warning_text" : "سپورٹ سمیت کسی اور کے ساتھ ان کا اشتراک نہ کریں۔\\n\\nآپ کے فنڈز چوری ہو سکتے ہیں اور ہو جائیں گے!", + "help" : "مدد", + "all_transactions" : "تمام لین دین", + "all_trades" : "تمام تجارت", + "connection_sync" : "کنکشن اور مطابقت پذیری", + "security_and_backup" : "سیکیورٹی اور بیک اپ", + "create_backup" : "بیک اپ بنائیں", + "privacy_settings" : "رازداری کی ترتیبات", + "privacy" : "رازداری", + "display_settings" : "ڈسپلے کی ترتیبات", + "other_settings" : "دیگر ترتیبات", + "require_pin_after" : "اس کے بعد PIN کی ضرورت ہے۔", + "always" : "ہمیشہ", + "minutes_to_pin_code" : "${minute} منٹ", + "disable_exchange" : "تبادلے کو غیر فعال کریں۔", + "advanced_privacy_settings" : "اعلی درجے کی رازداری کی ترتیبات", + "settings_can_be_changed_later" : "ان ترتیبات کو بعد میں ایپ کی ترتیبات میں تبدیل کیا جا سکتا ہے۔", + "add_custom_node" : "نیا کسٹم نوڈ شامل کریں۔", + "disable_fiat" : "فیاٹ کو غیر فعال کریں۔", + "fiat_api" : "Fiat API", + "disabled" : "معذور", + "enabled" : "فعال", + "tor_only" : "صرف Tor", + "unmatched_currencies" : "آپ کے پرس کی موجودہ کرنسی اسکین شدہ QR سے مماثل نہیں ہے۔", + "orbot_running_alert" : "براہ کرم یقینی بنائیں کہ اس نوڈ سے منسلک ہونے سے پہلے Orbot چل رہا ہے۔", + "contact_list_contacts" : "رابطے", + "contact_list_wallets" : "میرے بٹوے", + "send_to_this_address" : "اس پتے پر ${currency} ${tag} بھیجیں۔", + "arrive_in_this_address" : "${currency} ${tag}اس پتے پر پہنچے گا۔", + "do_not_send" : "مت بھیجیں۔", + "error_dialog_content" : "افوہ، ہمیں کچھ خرابی ملی۔\n\nایپلی کیشن کو بہتر بنانے کے لیے براہ کرم کریش رپورٹ ہماری سپورٹ ٹیم کو بھیجیں۔" +} diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb index ba2f3f839..52fc9cd7a 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -398,8 +398,7 @@ "biometric_auth_reason" : "扫描指纹进行身份认证", "version" : "版本 ${currentVersion}", - "openalias_alert_title" : "检测到地址", - "openalias_alert_content" : "您将汇款至\n${recipient_name}", + "extracted_address_content" : "您将汇款至\n${recipient_name}", "card_address" : "地址:", "buy" : "购买", @@ -679,6 +678,9 @@ "orbot_running_alert": "请确保 Orbot 在连接到此节点之前正在运行。", "contact_list_contacts": "联系人", "contact_list_wallets": "我的钱包", + "bitcoin_payments_require_1_confirmation": "比特币支付需要 1 次确认,这可能需要 20 分钟或更长时间。谢谢你的耐心!确认付款后,您将收到电子邮件。", + "send_to_this_address" : "发送 ${currency} ${tag}到这个地址", + "arrive_in_this_address" : "${currency} ${tag}将到达此地址", "do_not_send": "不要发送", "error_dialog_content": "糟糕,我们遇到了一些错误。\n\n请将崩溃报告发送给我们的支持团队,以改进应用程序。" } diff --git a/scripts/android/app_env.sh b/scripts/android/app_env.sh index c74d97c0f..eabd192ce 100644 --- a/scripts/android/app_env.sh +++ b/scripts/android/app_env.sh @@ -14,14 +14,14 @@ TYPES=($MONERO_COM $CAKEWALLET $HAVEN) APP_ANDROID_TYPE=$1 MONERO_COM_NAME="Monero.com" -MONERO_COM_VERSION="1.2.5" -MONERO_COM_BUILD_NUMBER=36 +MONERO_COM_VERSION="1.2.7" +MONERO_COM_BUILD_NUMBER=38 MONERO_COM_BUNDLE_ID="com.monero.app" MONERO_COM_PACKAGE="com.monero.app" CAKEWALLET_NAME="Cake Wallet" -CAKEWALLET_VERSION="4.5.6" -CAKEWALLET_BUILD_NUMBER=141 +CAKEWALLET_VERSION="4.5.8" +CAKEWALLET_BUILD_NUMBER=144 CAKEWALLET_BUNDLE_ID="com.cakewallet.cake_wallet" CAKEWALLET_PACKAGE="com.cakewallet.cake_wallet" diff --git a/scripts/ios/app_env.sh b/scripts/ios/app_env.sh index 8588bfcb2..f0dea9b4c 100644 --- a/scripts/ios/app_env.sh +++ b/scripts/ios/app_env.sh @@ -13,13 +13,13 @@ TYPES=($MONERO_COM $CAKEWALLET $HAVEN) APP_IOS_TYPE=$1 MONERO_COM_NAME="Monero.com" -MONERO_COM_VERSION="1.2.5" -MONERO_COM_BUILD_NUMBER=33 +MONERO_COM_VERSION="1.2.7" +MONERO_COM_BUILD_NUMBER=35 MONERO_COM_BUNDLE_ID="com.cakewallet.monero" CAKEWALLET_NAME="Cake Wallet" -CAKEWALLET_VERSION="4.5.6" -CAKEWALLET_BUILD_NUMBER=138 +CAKEWALLET_VERSION="4.5.8" +CAKEWALLET_BUILD_NUMBER=140 CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet" HAVEN_NAME="Haven" diff --git a/tool/utils/secret_key.dart b/tool/utils/secret_key.dart index e5202a829..d0fa39bfc 100644 --- a/tool/utils/secret_key.dart +++ b/tool/utils/secret_key.dart @@ -29,6 +29,7 @@ class SecretKey { SecretKey('anypayToken', () => ''), SecretKey('onramperApiKey', () => ''), SecretKey('ioniaClientId', () => ''), + SecretKey('twitterBearerToken', () => ''), ]; final String name;