From 38da6e73d4d6a1ca5a7c13698c58475f70f22919 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Wed, 23 Nov 2022 18:06:09 +0200 Subject: [PATCH 001/190] Wrap app in zone guard --- lib/main.dart | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 3cd5679b3..193240518 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -42,9 +42,16 @@ final navigatorKey = GlobalKey(); final rootKey = GlobalKey(); Future main() async { - try { + + await runZonedGuarded(() async { WidgetsFlutterBinding.ensureInitialized(); + // FlutterError.onError = ; + + // Isolate.current.addErrorListener(RawReceivePort((pair) async { + // final List errorAndStacktrace = pair; + // }).sendPort); + final appDir = await getApplicationDocumentsDirectory(); await Hive.close(); Hive.init(appDir.path); @@ -130,7 +137,7 @@ Future main() async { secureStorage: secureStorage, initialMigrationVersion: 17); runApp(App()); - } catch (e, stacktrace) { + }, (error, stackTrace) { runApp(MaterialApp( debugShowCheckedModeBanner: true, home: Scaffold( @@ -138,10 +145,10 @@ Future main() async { margin: EdgeInsets.only(top: 50, left: 20, right: 20, bottom: 20), child: Text( - 'Error:\n${e.toString()}\nStacktrace: $stacktrace', + 'Error:\n${error.toString()}\nStacktrace: $stackTrace', style: TextStyle(fontSize: 22), ))))); - } + }); } Future initialSetup( From 68c20641b959844bb5495e48126190bfb69d8c05 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Wed, 23 Nov 2022 23:02:18 +0200 Subject: [PATCH 002/190] Save exceptions locally --- lib/main.dart | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 193240518..541415f13 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,4 +1,7 @@ import 'dart:async'; +import 'dart:convert'; +import 'dart:io'; +import 'dart:isolate'; import 'package:cake_wallet/bitcoin/bitcoin.dart'; import 'package:cake_wallet/entities/language_service.dart'; import 'package:cake_wallet/buy/order.dart'; @@ -46,11 +49,24 @@ Future main() async { await runZonedGuarded(() async { WidgetsFlutterBinding.ensureInitialized(); - // FlutterError.onError = ; + FlutterError.onError = (errorDetails) { + _saveException(errorDetails.exception.toString(), errorDetails.stack); + }; - // Isolate.current.addErrorListener(RawReceivePort((pair) async { - // final List errorAndStacktrace = pair; - // }).sendPort); + PlatformDispatcher.instance.onError = (error, stack) { + _saveException(error.toString(), stack); + return true; + }; + + Isolate.current.addErrorListener(RawReceivePort((pair) async { + final errorAndStacktrace = pair as List; + _saveException( + errorAndStacktrace.first, + errorAndStacktrace.last == null + ? null + : StackTrace.fromString(errorAndStacktrace.last!), + ); + }).sendPort); final appDir = await getApplicationDocumentsDirectory(); await Hive.close(); @@ -151,6 +167,17 @@ Future main() async { }); } +void _saveException(String? error, StackTrace? stackTrace) async { + final file = File('/error.txt'); + final exception = { + "${DateTime.now()}": { + "error": error, + "stackTrace": stackTrace.toString(), + } + }; + await file.writeAsString(jsonEncode(exception), mode: FileMode.append); +} + Future initialSetup( {required SharedPreferences sharedPreferences, required Box nodes, From 34746c31c8848fa17ec54152b55d09e95aebf72d Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Thu, 24 Nov 2022 16:27:29 +0200 Subject: [PATCH 003/190] Save exceptions to local file --- lib/main.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/main.dart b/lib/main.dart index 541415f13..ba5b78e44 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -154,6 +154,7 @@ Future main() async { initialMigrationVersion: 17); runApp(App()); }, (error, stackTrace) { + _saveException(error.toString(), stackTrace); runApp(MaterialApp( debugShowCheckedModeBanner: true, home: Scaffold( From 7b99e409a9e0c9a4eba92698557923e1b251eecb Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Fri, 25 Nov 2022 18:59:47 +0200 Subject: [PATCH 004/190] Send error file via email --- lib/main.dart | 67 +++++++++++++++++------- lib/src/screens/failure_page.dart | 87 +++++++++++++++++++++++++++++++ pubspec_base.yaml | 1 + 3 files changed, 135 insertions(+), 20 deletions(-) create mode 100644 lib/src/screens/failure_page.dart diff --git a/lib/main.dart b/lib/main.dart index ba5b78e44..4ffb168f6 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -5,9 +5,12 @@ import 'dart:isolate'; import 'package:cake_wallet/bitcoin/bitcoin.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/screens/failure_page.dart'; import 'package:cake_wallet/store/yat/yat_store.dart'; +import 'package:cake_wallet/themes/theme_list.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -50,24 +53,28 @@ Future main() async { WidgetsFlutterBinding.ensureInitialized(); FlutterError.onError = (errorDetails) { + print("@@@@@@@@@@@@@@@"); + print("FlutterError.onError"); + print(errorDetails); _saveException(errorDetails.exception.toString(), errorDetails.stack); }; + ErrorWidget.builder = (errorDetails) { + return FailurePage( + error: errorDetails.exception.toString(), + stackTrace: errorDetails.stack, + ); + }; + + /// A callback that is invoked when an unhandled error occurs in the root + /// isolate. PlatformDispatcher.instance.onError = (error, stack) { + print("@@@@@@@@@@@@@@@"); + print("PlatformDispatcher.instance.onError"); _saveException(error.toString(), stack); return true; }; - Isolate.current.addErrorListener(RawReceivePort((pair) async { - final errorAndStacktrace = pair as List; - _saveException( - errorAndStacktrace.first, - errorAndStacktrace.last == null - ? null - : StackTrace.fromString(errorAndStacktrace.last!), - ); - }).sendPort); - final appDir = await getApplicationDocumentsDirectory(); await Hive.close(); Hive.init(appDir.path); @@ -153,29 +160,49 @@ Future main() async { secureStorage: secureStorage, initialMigrationVersion: 17); runApp(App()); - }, (error, stackTrace) { + }, (error, stackTrace) async { _saveException(error.toString(), stackTrace); - runApp(MaterialApp( + final sharedPreferences = await SharedPreferences.getInstance(); + final theme = ThemeList.deserialize( + raw: sharedPreferences.getInt(PreferencesKey.currentTheme) ?? 0); + + final savedLanguageCode = + sharedPreferences.getString(PreferencesKey.currentLanguageCode) ?? + await LanguageService.localeDetection(); + runApp( + MaterialApp( debugShowCheckedModeBanner: true, + theme: theme.themeData, + localizationsDelegates: [ + S.delegate, + GlobalCupertinoLocalizations.delegate, + GlobalMaterialLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + ], + supportedLocales: S.delegate.supportedLocales, + locale: Locale(savedLanguageCode), home: Scaffold( - body: Container( - margin: - EdgeInsets.only(top: 50, left: 20, right: 20, bottom: 20), - child: Text( - 'Error:\n${error.toString()}\nStacktrace: $stackTrace', - style: TextStyle(fontSize: 22), - ))))); + body: FailurePage( + error: error.toString(), + stackTrace: stackTrace, + ), + ), + ), + ); }); } void _saveException(String? error, StackTrace? stackTrace) async { - final file = File('/error.txt'); + final appDocDir = await getApplicationDocumentsDirectory(); + + final file = File('${appDocDir.path}/error.txt'); final exception = { "${DateTime.now()}": { "error": error, "stackTrace": stackTrace.toString(), } }; + await file.writeAsString(jsonEncode(exception), mode: FileMode.append); } diff --git a/lib/src/screens/failure_page.dart b/lib/src/screens/failure_page.dart new file mode 100644 index 000000000..ea3d75fcb --- /dev/null +++ b/lib/src/screens/failure_page.dart @@ -0,0 +1,87 @@ +import 'dart:io'; + +import 'package:cake_wallet/generated/i18n.dart'; +import 'package:cake_wallet/src/widgets/primary_button.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_mailer/flutter_mailer.dart'; +import 'package:path_provider/path_provider.dart'; + +class FailurePage extends StatelessWidget { + final String? error; + final StackTrace? stackTrace; + + FailurePage({Key? key, this.error, this.stackTrace}); + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + return Scaffold( + backgroundColor: Colors.grey.shade400, + body: Center( + child: Padding( + padding: EdgeInsets.symmetric( + horizontal: MediaQuery.of(context).size.width * 0.2), + child: Column( + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Icon( + Icons.warning, + color: theme.errorColor, + size: 50, + ), + Padding( + padding: const EdgeInsets.symmetric(vertical: 20), + child: Text( + "Oops, we got some error.", + style: theme.textTheme.headline1?.copyWith(fontSize: 20), + ), + ), + Text( + "Please send crash report to our support team to make the application better.", + textAlign: TextAlign.center, + style: theme.textTheme.headline1?.copyWith(fontSize: 16), + ), + Padding( + padding: const EdgeInsets.symmetric(vertical: 20), + child: PrimaryButton( + onPressed: _sendExceptionFile, + text: S.of(context).send, + textColor: Colors.white, + color: theme.accentTextTheme.bodyText1!.color!, + ), + ), + PrimaryButton( + onPressed: () { + }, + text: "Don't Send", + color: Theme.of(context).accentTextTheme.caption!.color!, + textColor: + Theme.of(context).primaryTextTheme.headline6!.color!, + ), + ], + ), + ), + ), + ); + } + + void _sendExceptionFile() async { + final appDocDir = await getApplicationDocumentsDirectory(); + + final file = File('${appDocDir.path}/error.txt'); + + print(file.readAsStringSync()); + + final MailOptions mailOptions = MailOptions( + subject: 'Mobile App Issue', + recipients: ['support@cakewallet.com'], + attachments: [file.path], + ); + + await FlutterMailer.send(mailOptions); + + // clear file content + // file.writeAsString("", mode: FileMode.write); + } +} diff --git a/pubspec_base.yaml b/pubspec_base.yaml index 248a06de0..fe5e6efc4 100644 --- a/pubspec_base.yaml +++ b/pubspec_base.yaml @@ -61,6 +61,7 @@ dependencies: permission_handler: ^10.0.0 device_display_brightness: ^0.0.6 platform_device_id: ^1.0.1 + flutter_mailer: ^2.0.1 cake_backup: git: url: https://github.com/cake-tech/cake_backup.git From 51ea377a52febaeab9ea61b526e9623e772408c9 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Sun, 27 Nov 2022 14:44:35 +0200 Subject: [PATCH 005/190] Temporarily comment run app on error of run zone guard --- lib/main.dart | 58 +++++++++++++++++++++++++++------------------------ 1 file changed, 31 insertions(+), 27 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 4ffb168f6..da0b2c531 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -161,34 +161,38 @@ Future main() async { initialMigrationVersion: 17); runApp(App()); }, (error, stackTrace) async { + print("@@@@@@@@@@@@@@@@"); + print(error); + print(stackTrace); _saveException(error.toString(), stackTrace); - final sharedPreferences = await SharedPreferences.getInstance(); - final theme = ThemeList.deserialize( - raw: sharedPreferences.getInt(PreferencesKey.currentTheme) ?? 0); - - final savedLanguageCode = - sharedPreferences.getString(PreferencesKey.currentLanguageCode) ?? - await LanguageService.localeDetection(); - runApp( - MaterialApp( - debugShowCheckedModeBanner: true, - theme: theme.themeData, - localizationsDelegates: [ - S.delegate, - GlobalCupertinoLocalizations.delegate, - GlobalMaterialLocalizations.delegate, - GlobalWidgetsLocalizations.delegate, - ], - supportedLocales: S.delegate.supportedLocales, - locale: Locale(savedLanguageCode), - home: Scaffold( - body: FailurePage( - error: error.toString(), - stackTrace: stackTrace, - ), - ), - ), - ); + // TODO: this will trigger even there is no fatal error occurred so better not build a new app instance + // final sharedPreferences = await SharedPreferences.getInstance(); + // final theme = ThemeList.deserialize( + // raw: sharedPreferences.getInt(PreferencesKey.currentTheme) ?? 0); + // + // final savedLanguageCode = + // sharedPreferences.getString(PreferencesKey.currentLanguageCode) ?? + // await LanguageService.localeDetection(); + // runApp( + // MaterialApp( + // debugShowCheckedModeBanner: true, + // theme: theme.themeData, + // localizationsDelegates: [ + // S.delegate, + // GlobalCupertinoLocalizations.delegate, + // GlobalMaterialLocalizations.delegate, + // GlobalWidgetsLocalizations.delegate, + // ], + // supportedLocales: S.delegate.supportedLocales, + // locale: Locale(savedLanguageCode), + // home: Scaffold( + // body: FailurePage( + // error: error.toString(), + // stackTrace: stackTrace, + // ), + // ), + // ), + // ); }); } From 03ea516e63384b9b5e4d28d4d483ddbf875dc36f Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Tue, 29 Nov 2022 14:03:14 +0200 Subject: [PATCH 006/190] Add initial alert for errors --- lib/main.dart | 76 +++++++++++++++++++++++++++------------------------ 1 file changed, 41 insertions(+), 35 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index da0b2c531..afa5804a0 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -9,8 +9,10 @@ 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/screens/failure_page.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:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -53,13 +55,19 @@ Future main() async { WidgetsFlutterBinding.ensureInitialized(); FlutterError.onError = (errorDetails) { - print("@@@@@@@@@@@@@@@"); - print("FlutterError.onError"); - print(errorDetails); + print("@@@@@@@@@@@@@@@@@ in on error"); + print(errorDetails.exception.toString()); + _onError(errorDetails); _saveException(errorDetails.exception.toString(), errorDetails.stack); }; ErrorWidget.builder = (errorDetails) { + print("@@@@@@@@@@@@@@@@@ in widget error"); + // TODO: uncomment + // if (kDebugMode) { + // return ErrorWidget(errorDetails.exception); + // } + return FailurePage( error: errorDetails.exception.toString(), stackTrace: errorDetails.stack, @@ -161,38 +169,8 @@ Future main() async { initialMigrationVersion: 17); runApp(App()); }, (error, stackTrace) async { - print("@@@@@@@@@@@@@@@@"); - print(error); - print(stackTrace); - _saveException(error.toString(), stackTrace); - // TODO: this will trigger even there is no fatal error occurred so better not build a new app instance - // final sharedPreferences = await SharedPreferences.getInstance(); - // final theme = ThemeList.deserialize( - // raw: sharedPreferences.getInt(PreferencesKey.currentTheme) ?? 0); - // - // final savedLanguageCode = - // sharedPreferences.getString(PreferencesKey.currentLanguageCode) ?? - // await LanguageService.localeDetection(); - // runApp( - // MaterialApp( - // debugShowCheckedModeBanner: true, - // theme: theme.themeData, - // localizationsDelegates: [ - // S.delegate, - // GlobalCupertinoLocalizations.delegate, - // GlobalMaterialLocalizations.delegate, - // GlobalWidgetsLocalizations.delegate, - // ], - // supportedLocales: S.delegate.supportedLocales, - // locale: Locale(savedLanguageCode), - // home: Scaffold( - // body: FailurePage( - // error: error.toString(), - // stackTrace: stackTrace, - // ), - // ), - // ), - // ); + print("@@@@@@@@@@@@@@@@ in run zone guard"); + _onError(FlutterErrorDetails(exception: error, stack: stackTrace)); }); } @@ -210,6 +188,34 @@ void _saveException(String? error, StackTrace? stackTrace) async { await file.writeAsString(jsonEncode(exception), mode: FileMode.append); } +void _onError(FlutterErrorDetails details) { + print("#############"); + print(details.exception.toString()); + WidgetsBinding.instance.addPostFrameCallback( + (timeStamp) { + showPopUp( + context: navigatorKey.currentContext!, + builder: (context) { + return AlertWithTwoActions( + isDividerExist: true, + alertTitle: S.of(context).error, + alertContent: "Oops, we got some error.\n\nPlease send crash report to our support team to make the application better.", + rightButtonText: S.of(context).send, + leftButtonText: "Don't send", + actionRightButton: () async { + Navigator.of(context).pop(); + }, + actionLeftButton: () { + Navigator.of(context).pop(); + _saveException(details.exception.toString(), details.stack); + }, + ); + }, + ); + }, + ); +} + Future initialSetup( {required SharedPreferences sharedPreferences, required Box nodes, From e579839596ea5f634d340c7815a9eb102ffb35e5 Mon Sep 17 00:00:00 2001 From: Serhii Date: Wed, 4 Jan 2023 13:59:59 +0200 Subject: [PATCH 007/190] fix header color --- lib/src/widgets/collapsible_standart_list.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/src/widgets/collapsible_standart_list.dart b/lib/src/widgets/collapsible_standart_list.dart index 1a4aef2bc..514308b45 100644 --- a/lib/src/widgets/collapsible_standart_list.dart +++ b/lib/src/widgets/collapsible_standart_list.dart @@ -48,6 +48,8 @@ class CollapsibleSectionList extends SectionStandardList { child: ListTileTheme( contentPadding: EdgeInsets.only(right: 16,top:sectionIndex>0?26:0), child: ExpansionTile( + textColor: themeColor, + iconColor: themeColor, title: sectionTitleBuilder == null ? Container() : Container(child: buildTitle(items, sectionIndex, context)), From b8293ac0aeb001fa262da82f7fcd1fefbb339c19 Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Thu, 5 Jan 2023 09:40:05 +0100 Subject: [PATCH 008/190] replace webview plugin with inappwebview plugin to check camera permission once in app --- android/app/src/main/AndroidManifestBase.xml | 10 +++++++ lib/main.dart | 3 +- lib/src/screens/buy/buy_webview_page.dart | 31 ++++++++------------ pubspec_base.yaml | 2 +- 4 files changed, 26 insertions(+), 20 deletions(-) diff --git a/android/app/src/main/AndroidManifestBase.xml b/android/app/src/main/AndroidManifestBase.xml index 22278d5f1..9faf1c704 100644 --- a/android/app/src/main/AndroidManifestBase.xml +++ b/android/app/src/main/AndroidManifestBase.xml @@ -6,6 +6,7 @@ + + + + diff --git a/lib/main.dart b/lib/main.dart index 11eee146b..f93eed545 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -11,6 +11,7 @@ import 'package:flutter/services.dart'; import 'package:hive/hive.dart'; import 'package:cake_wallet/di.dart'; import 'package:path_provider/path_provider.dart'; +import 'package:permission_handler/permission_handler.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; @@ -44,7 +45,7 @@ final rootKey = GlobalKey(); Future main() async { try { WidgetsFlutterBinding.ensureInitialized(); - + await Permission.camera.request(); final appDir = await getApplicationDocumentsDirectory(); await Hive.close(); Hive.init(appDir.path); diff --git a/lib/src/screens/buy/buy_webview_page.dart b/lib/src/screens/buy/buy_webview_page.dart index 7c0ca903f..3c6089c19 100644 --- a/lib/src/screens/buy/buy_webview_page.dart +++ b/lib/src/screens/buy/buy_webview_page.dart @@ -9,11 +9,10 @@ import 'package:cake_wallet/src/screens/base_page.dart'; import 'package:cake_wallet/store/dashboard/orders_store.dart'; import 'package:cake_wallet/view_model/buy/buy_view_model.dart'; import 'package:flutter/material.dart'; -import 'package:webview_flutter/webview_flutter.dart'; +import 'package:flutter_inappwebview/flutter_inappwebview.dart'; class BuyWebViewPage extends BasePage { - BuyWebViewPage({required this.buyViewModel, - required this.ordersStore, required this.url}); + BuyWebViewPage({required this.buyViewModel, required this.ordersStore, required this.url}); final OrdersStore ordersStore; final String url; @@ -46,12 +45,12 @@ class BuyWebViewPageBody extends StatefulWidget { class BuyWebViewPageBodyState extends State { BuyWebViewPageBodyState() - : _webViewkey = GlobalKey(), - _isSaving = false, - orderId = ''; + : _webViewkey = GlobalKey(), + _isSaving = false, + orderId = ''; String orderId; - WebViewController? _webViewController; + InAppWebViewController? _webViewController; GlobalKey _webViewkey; Timer? _timer; bool _isSaving; @@ -63,8 +62,6 @@ class BuyWebViewPageBodyState extends State { _isSaving = false; widget.ordersStore.orderId = ''; - if (Platform.isAndroid) WebView.platform = SurfaceAndroidWebView(); - if (widget.buyViewModel.selectedProvider is WyreBuyProvider) { _saveOrder(keyword: 'completed', splitSymbol: '/'); } @@ -76,31 +73,29 @@ class BuyWebViewPageBodyState extends State { @override Widget build(BuildContext context) { - return WebView( + return InAppWebView( key: _webViewkey, - initialUrl: widget.url, - javascriptMode: JavascriptMode.unrestricted, - onWebViewCreated: (WebViewController controller) => + initialUrlRequest: URLRequest(url: Uri.tryParse(widget.url ?? '')), + onWebViewCreated: (InAppWebViewController controller) => setState(() => _webViewController = controller)); } void _saveOrder({required String keyword, required String splitSymbol}) { _timer?.cancel(); _timer = Timer.periodic(Duration(seconds: 1), (timer) async { - try { if (_webViewController == null || _isSaving) { return; } - final url = await _webViewController!.currentUrl(); - + final url = await _webViewController!.getUrl(); + final urlString = url.toString(); if (url == null) { throw Exception('_saveOrder: Url is null'); } - if (url!.contains(keyword)) { - final urlParts = url!.split(splitSymbol); + if (urlString.toString().contains(keyword)) { + final urlParts = urlString.split(splitSymbol); orderId = urlParts.last; widget.ordersStore.orderId = orderId; diff --git a/pubspec_base.yaml b/pubspec_base.yaml index 00e1a39b1..8c9b75379 100644 --- a/pubspec_base.yaml +++ b/pubspec_base.yaml @@ -38,7 +38,7 @@ dependencies: auto_size_text: ^3.0.0 dotted_border: ^2.0.0+2 smooth_page_indicator: ^1.0.0+2 - webview_flutter: ^3.0.4 + flutter_inappwebview: ^5.7.2+3 flutter_spinkit: ^5.1.0 uni_links: ^0.5.1 lottie: ^1.3.0 From e53602afa362f4f3bae4d0220f94c2c9f71e3623 Mon Sep 17 00:00:00 2001 From: Serhii Date: Thu, 5 Jan 2023 12:53:05 +0200 Subject: [PATCH 009/190] Add alert for onion nodes --- lib/src/screens/settings/connection_sync_page.dart | 2 +- lib/view_model/node_list/node_list_view_model.dart | 5 +++++ res/values/strings_de.arb | 3 ++- res/values/strings_en.arb | 3 ++- res/values/strings_es.arb | 3 ++- res/values/strings_fr.arb | 3 ++- res/values/strings_hi.arb | 3 ++- res/values/strings_hr.arb | 3 ++- res/values/strings_it.arb | 3 ++- res/values/strings_ja.arb | 3 ++- res/values/strings_ko.arb | 3 ++- res/values/strings_nl.arb | 3 ++- res/values/strings_pl.arb | 3 ++- res/values/strings_pt.arb | 3 ++- res/values/strings_ru.arb | 3 ++- res/values/strings_uk.arb | 3 ++- res/values/strings_zh.arb | 3 ++- 17 files changed, 36 insertions(+), 16 deletions(-) diff --git a/lib/src/screens/settings/connection_sync_page.dart b/lib/src/screens/settings/connection_sync_page.dart index 0e56d6e58..bf60a4405 100644 --- a/lib/src/screens/settings/connection_sync_page.dart +++ b/lib/src/screens/settings/connection_sync_page.dart @@ -73,7 +73,7 @@ class ConnectionSyncPage extends BasePage { builder: (BuildContext context) { return AlertWithTwoActions( alertTitle: S.of(context).change_current_node_title, - alertContent: S.of(context).change_current_node(node.uriRaw), + alertContent: nodeListViewModel.getAlertContent(node.uriRaw), leftButtonText: S.of(context).cancel, rightButtonText: S.of(context).change, actionLeftButton: () => Navigator.of(context).pop(), diff --git a/lib/view_model/node_list/node_list_view_model.dart b/lib/view_model/node_list/node_list_view_model.dart index a50720d9d..deb1f29cf 100644 --- a/lib/view_model/node_list/node_list_view_model.dart +++ b/lib/view_model/node_list/node_list_view_model.dart @@ -1,3 +1,4 @@ +import 'package:cake_wallet/generated/i18n.dart'; import 'package:hive/hive.dart'; import 'package:mobx/mobx.dart'; import 'package:cw_core/wallet_base.dart'; @@ -30,6 +31,10 @@ abstract class NodeListViewModelBase with Store { return node; } + String getAlertContent(String uri) => + S.current.change_current_node(uri) + + '${uri.endsWith('.onion') || uri.contains('.onion:') ? '\n' + S.current.orbot_running_alert : ''}'; + final ObservableList nodes; final SettingsStore settingsStore; final WalletBase wallet; diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index 3382b73f8..27e2e5fed 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -677,5 +677,6 @@ "disabled": "Deaktiviert", "enabled": "Ermöglicht", "tor_only": "Nur Tor", - "unmatched_currencies": "Die Währung Ihres aktuellen Wallets stimmt nicht mit der des gescannten QR überein" + "unmatched_currencies": "Die Währung Ihres aktuellen Wallets stimmt nicht mit der des gescannten QR überein", + "orbot_running_alert": "Please make sure Orbot is running prior to connecting to this node." } diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index 548ba35c0..b15d59d83 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -677,5 +677,6 @@ "disabled": "Disabled", "enabled": "Enabled", "tor_only": "Tor only", - "unmatched_currencies": "Your current wallet's currency does not match that of the scanned QR" + "unmatched_currencies": "Your current wallet's currency does not match that of the scanned QR", + "orbot_running_alert": "Please make sure Orbot is running prior to connecting to this node." } diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb index db0a813b4..71df23039 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -677,5 +677,6 @@ "disabled": "Desactivado", "enabled": "Activado", "tor_only": "solo Tor", - "unmatched_currencies": "La moneda de su billetera actual no coincide con la del QR escaneado" + "unmatched_currencies": "La moneda de su billetera actual no coincide con la del QR escaneado", + "orbot_running_alert": "Asegúrese de que Orbot se esté ejecutando antes de conectarse a este nodo." } diff --git a/res/values/strings_fr.arb b/res/values/strings_fr.arb index 2168e31a2..f2bb7b382 100644 --- a/res/values/strings_fr.arb +++ b/res/values/strings_fr.arb @@ -675,5 +675,6 @@ "disabled": "Handicapé", "enabled": "Activé", "tor_only": "Tor uniquement", - "unmatched_currencies": "La devise de votre portefeuille actuel ne correspond pas à celle du QR scanné" + "unmatched_currencies": "La devise de votre portefeuille actuel ne correspond pas à celle du QR scanné", + "orbot_running_alert": "Veuillez vous assurer qu'Orbot est en cours d'exécution avant de vous connecter à ce nœud." } diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb index 9acf7657c..607073a91 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -677,5 +677,6 @@ "disabled": "अक्षम", "enabled": "सक्रिय", "tor_only": "Tor केवल", - "unmatched_currencies": "आपके वर्तमान वॉलेट की मुद्रा स्कैन किए गए क्यूआर से मेल नहीं खाती" + "unmatched_currencies": "आपके वर्तमान वॉलेट की मुद्रा स्कैन किए गए क्यूआर से मेल नहीं खाती", + "orbot_running_alert": "कृपया सुनिश्चित करें कि इस नोड से कनेक्ट करने से पहले Orbot चल रहा है।" } diff --git a/res/values/strings_hr.arb b/res/values/strings_hr.arb index dacd3952b..8a2526366 100644 --- a/res/values/strings_hr.arb +++ b/res/values/strings_hr.arb @@ -677,5 +677,6 @@ "disabled": "Onemogućeno", "enabled": "Omogućeno", "tor_only": "Samo Tor", - "unmatched_currencies": "Valuta vašeg trenutnog novčanika ne odgovara onoj na skeniranom QR-u" + "unmatched_currencies": "Valuta vašeg trenutnog novčanika ne odgovara onoj na skeniranom QR-u", + "orbot_running_alert": "Provjerite radi li Orbot prije spajanja na ovaj čvor." } diff --git a/res/values/strings_it.arb b/res/values/strings_it.arb index ac0ad5833..b15793926 100644 --- a/res/values/strings_it.arb +++ b/res/values/strings_it.arb @@ -677,5 +677,6 @@ "disabled": "Disabilitato", "enabled": "Abilitato", "tor_only": "Solo Tor", - "unmatched_currencies": "La valuta del tuo portafoglio attuale non corrisponde a quella del QR scansionato" + "unmatched_currencies": "La valuta del tuo portafoglio attuale non corrisponde a quella del QR scansionato", + "orbot_running_alert": "Assicurati che Orbot sia in esecuzione prima di connetterti a questo nodo." } diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb index fc1abc280..4a0380363 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -677,5 +677,6 @@ "disabled": "無効", "enabled": "有効", "tor_only": "Torのみ", - "unmatched_currencies": "現在のウォレットの通貨がスキャンされたQRの通貨と一致しません" + "unmatched_currencies": "現在のウォレットの通貨がスキャンされたQRの通貨と一致しません", + "orbot_running_alert": "このノードに接続する前に、Orbot が実行されていることを確認してください" } diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb index b30529038..ec9c5dc19 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -677,5 +677,6 @@ "disabled": "장애가 있는", "enabled": "사용", "tor_only": "Tor 뿐", - "unmatched_currencies": "현재 지갑의 통화가 스캔한 QR의 통화와 일치하지 않습니다." + "unmatched_currencies": "현재 지갑의 통화가 스캔한 QR의 통화와 일치하지 않습니다.", + "orbot_running_alert": "이 노드에 연결하기 전에 Orbot이 실행 중인지 확인하십시오." } diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index 734347991..ef9f05974 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -677,5 +677,6 @@ "disabled": "Gehandicapt", "enabled": "Ingeschakeld", "tor_only": "Alleen Tor", - "unmatched_currencies": "De valuta van uw huidige portemonnee komt niet overeen met die van de gescande QR" + "unmatched_currencies": "De valuta van uw huidige portemonnee komt niet overeen met die van de gescande QR", + "orbot_running_alert": "Zorg ervoor dat Orbot actief is voordat u verbinding maakt met dit knooppunt." } diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index b7806d2a4..e761a5721 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -677,5 +677,6 @@ "disabled": "Wyłączone", "enabled": "Włączony", "tor_only": "Tylko Tor", - "unmatched_currencies": "Waluta Twojego obecnego portfela nie odpowiada walucie zeskanowanego kodu QR" + "unmatched_currencies": "Waluta Twojego obecnego portfela nie odpowiada walucie zeskanowanego kodu QR", + "orbot_running_alert": "Upewnij się, że Orbot działa przed połączeniem z tym węzłem." } diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb index 80177d22c..b77050c4e 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -676,5 +676,6 @@ "disabled": "Desabilitado", "enabled": "Habilitado", "tor_only": "Tor apenas", - "unmatched_currencies": "A moeda da sua carteira atual não corresponde à do QR digitalizado" + "unmatched_currencies": "A moeda da sua carteira atual não corresponde à do QR digitalizado", + "orbot_running_alert": "Certifique-se de que o Orbot esteja em execução antes de se conectar a este nó." } diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb index eb63a974f..e6192503a 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -677,5 +677,6 @@ "disabled": "Отключено", "enabled": "Включено", "tor_only": "Только Tor", - "unmatched_currencies": "Валюта вашего текущего кошелька не соответствует валюте отсканированного QR-кода." + "unmatched_currencies": "Валюта вашего текущего кошелька не соответствует валюте отсканированного QR-кода.", + "orbot_running_alert": "Перед подключением к этому узлу убедитесь, что Orbot запущен." } diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb index 20cbfaf6f..293b91a96 100644 --- a/res/values/strings_uk.arb +++ b/res/values/strings_uk.arb @@ -676,5 +676,6 @@ "disabled": "Вимкнено", "enabled": "Увімкнено", "tor_only": "Тільки Tor", - "unmatched_currencies": "Валюта вашого гаманця не збігається з валютою сканованого QR-коду" + "unmatched_currencies": "Валюта вашого гаманця не збігається з валютою сканованого QR-коду", + "orbot_running_alert": "Перед підключенням до цього вузла переконайтеся, що Orbot запущено." } diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb index 248eabda1..f4d808210 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -675,5 +675,6 @@ "disabled": "禁用", "enabled": "启用", "tor_only": "仅限 Tor", - "unmatched_currencies": "您当前钱包的货币与扫描的 QR 的货币不匹配" + "unmatched_currencies": "您当前钱包的货币与扫描的 QR 的货币不匹配", + "orbot_running_alert": "请确保 Orbot 在连接到此节点之前正在运行。" } From d21c879db147b1614061d29fd9251e2e3e6c5448 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Thu, 5 Jan 2023 15:54:48 +0200 Subject: [PATCH 010/190] Update Ubuntu version --- .github/workflows/pr_test_build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr_test_build.yml b/.github/workflows/pr_test_build.yml index 00fd16199..ac2ba7ebd 100644 --- a/.github/workflows/pr_test_build.yml +++ b/.github/workflows/pr_test_build.yml @@ -7,7 +7,7 @@ on: jobs: test: - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 From d8f29a4ac39a175923fc66cee5f723e54ea0ce5d Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Thu, 5 Jan 2023 16:10:38 +0200 Subject: [PATCH 011/190] Force build externals to check compatibility with ubuntu version --- .github/workflows/pr_test_build.yml | 38 +++++++++++++++-------------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/.github/workflows/pr_test_build.yml b/.github/workflows/pr_test_build.yml index ac2ba7ebd..b6c08fc38 100644 --- a/.github/workflows/pr_test_build.yml +++ b/.github/workflows/pr_test_build.yml @@ -34,27 +34,29 @@ jobs: ./install_ndk.sh source ./app_env.sh cakewallet ./app_config.sh - - - name: Cache Externals - id: cache-externals - uses: actions/cache@v3 - with: - path: | - /opt/android/cake_wallet/cw_haven/android/.cxx - /opt/android/cake_wallet/cw_haven/ios/External - /opt/android/cake_wallet/cw_monero/android/.cxx - /opt/android/cake_wallet/cw_monero/ios/External - /opt/android/cake_wallet/cw_shared_external/ios/External - key: ${{ hashFiles('**/build_monero.sh', '**/build_haven.sh') }} - - - if: ${{ steps.cache-externals.outputs.cache-hit != 'true' }} - name: Generate Externals - run: | - cd /opt/android/cake_wallet/scripts/android/ - source ./app_env.sh cakewallet ./build_all.sh ./copy_monero_deps.sh +# - name: Cache Externals +# id: cache-externals +# uses: actions/cache@v3 +# with: +# path: | +# /opt/android/cake_wallet/cw_haven/android/.cxx +# /opt/android/cake_wallet/cw_haven/ios/External +# /opt/android/cake_wallet/cw_monero/android/.cxx +# /opt/android/cake_wallet/cw_monero/ios/External +# /opt/android/cake_wallet/cw_shared_external/ios/External +# key: ${{ hashFiles('**/build_monero.sh', '**/build_haven.sh') }} +# +# - if: ${{ steps.cache-externals.outputs.cache-hit != 'true' }} +# name: Generate Externals +# run: | +# cd /opt/android/cake_wallet/scripts/android/ +# source ./app_env.sh cakewallet +# ./build_all.sh +# ./copy_monero_deps.sh + - name: Install Flutter dependencies run: | cd /opt/android/cake_wallet From 5881b553367a68d34a175c410487c00c636dec52 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Thu, 5 Jan 2023 18:02:59 +0200 Subject: [PATCH 012/190] Re-add caching after ensuring everything is working with the new Ubuntu version --- .github/workflows/pr_test_build.yml | 38 ++++++++++++++--------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/.github/workflows/pr_test_build.yml b/.github/workflows/pr_test_build.yml index b6c08fc38..ac2ba7ebd 100644 --- a/.github/workflows/pr_test_build.yml +++ b/.github/workflows/pr_test_build.yml @@ -34,29 +34,27 @@ jobs: ./install_ndk.sh source ./app_env.sh cakewallet ./app_config.sh + + - name: Cache Externals + id: cache-externals + uses: actions/cache@v3 + with: + path: | + /opt/android/cake_wallet/cw_haven/android/.cxx + /opt/android/cake_wallet/cw_haven/ios/External + /opt/android/cake_wallet/cw_monero/android/.cxx + /opt/android/cake_wallet/cw_monero/ios/External + /opt/android/cake_wallet/cw_shared_external/ios/External + key: ${{ hashFiles('**/build_monero.sh', '**/build_haven.sh') }} + + - if: ${{ steps.cache-externals.outputs.cache-hit != 'true' }} + name: Generate Externals + run: | + cd /opt/android/cake_wallet/scripts/android/ + source ./app_env.sh cakewallet ./build_all.sh ./copy_monero_deps.sh -# - name: Cache Externals -# id: cache-externals -# uses: actions/cache@v3 -# with: -# path: | -# /opt/android/cake_wallet/cw_haven/android/.cxx -# /opt/android/cake_wallet/cw_haven/ios/External -# /opt/android/cake_wallet/cw_monero/android/.cxx -# /opt/android/cake_wallet/cw_monero/ios/External -# /opt/android/cake_wallet/cw_shared_external/ios/External -# key: ${{ hashFiles('**/build_monero.sh', '**/build_haven.sh') }} -# -# - if: ${{ steps.cache-externals.outputs.cache-hit != 'true' }} -# name: Generate Externals -# run: | -# cd /opt/android/cake_wallet/scripts/android/ -# source ./app_env.sh cakewallet -# ./build_all.sh -# ./copy_monero_deps.sh - - name: Install Flutter dependencies run: | cd /opt/android/cake_wallet From 3dbf5d8b8cb49bd47c755c523fcfe251bb54f80b Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Fri, 6 Jan 2023 08:08:36 +0100 Subject: [PATCH 013/190] update onramperpage webview --- lib/src/screens/buy/buy_webview_page.dart | 3 +++ lib/src/screens/buy/onramper_page.dart | 20 +++++++++----------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/lib/src/screens/buy/buy_webview_page.dart b/lib/src/screens/buy/buy_webview_page.dart index 3c6089c19..c51aaee83 100644 --- a/lib/src/screens/buy/buy_webview_page.dart +++ b/lib/src/screens/buy/buy_webview_page.dart @@ -75,6 +75,9 @@ class BuyWebViewPageBodyState extends State { Widget build(BuildContext context) { return InAppWebView( key: _webViewkey, + initialOptions: InAppWebViewGroupOptions( + crossPlatform: InAppWebViewOptions(transparentBackground: true), + ), initialUrlRequest: URLRequest(url: Uri.tryParse(widget.url ?? '')), onWebViewCreated: (InAppWebViewController controller) => setState(() => _webViewController = controller)); diff --git a/lib/src/screens/buy/onramper_page.dart b/lib/src/screens/buy/onramper_page.dart index b766fd388..1eb052f74 100644 --- a/lib/src/screens/buy/onramper_page.dart +++ b/lib/src/screens/buy/onramper_page.dart @@ -4,8 +4,8 @@ import 'package:cake_wallet/src/screens/base_page.dart'; import 'package:cake_wallet/store/settings_store.dart'; import 'package:cw_core/wallet_base.dart'; import 'package:flutter/material.dart'; -import 'package:webview_flutter/webview_flutter.dart'; import 'package:cake_wallet/.secrets.g.dart' as secrets; +import 'package:flutter_inappwebview/flutter_inappwebview.dart'; class OnRamperPage extends BasePage { OnRamperPage({ @@ -70,17 +70,15 @@ class OnRamperPageBody extends StatefulWidget { class OnRamperPageBodyState extends State { OnRamperPageBodyState(); - @override - void initState() { - super.initState(); - if (Platform.isAndroid) WebView.platform = SurfaceAndroidWebView(); - } - @override Widget build(BuildContext context) { - return WebView( - initialUrl: widget.uri.toString(), - backgroundColor: widget.backgroundColor, - javascriptMode: JavascriptMode.unrestricted); + return InAppWebView( + initialOptions: InAppWebViewGroupOptions( + crossPlatform: InAppWebViewOptions(transparentBackground: true), + ), + initialUrlRequest: URLRequest(url: Uri.tryParse(widget.uri.toString(), + ), + ) + ); } } From e904c0a7b751cee11031dd953ddf035df2d7f872 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Fri, 6 Jan 2023 19:42:37 +0200 Subject: [PATCH 014/190] Show popup on un-caught exceptions to send errors via email --- lib/main.dart | 65 ++++++++++++++--------- lib/src/screens/failure_page.dart | 87 ------------------------------- pubspec_base.yaml | 2 +- 3 files changed, 40 insertions(+), 114 deletions(-) delete mode 100644 lib/src/screens/failure_page.dart diff --git a/lib/main.dart b/lib/main.dart index d9f35805a..8e565e763 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -9,7 +9,6 @@ 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/screens/failure_page.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'; @@ -17,6 +16,7 @@ import 'package:cake_wallet/utils/show_pop_up.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'; @@ -57,31 +57,14 @@ Future main() async { WidgetsFlutterBinding.ensureInitialized(); FlutterError.onError = (errorDetails) { - print("@@@@@@@@@@@@@@@@@ in on error"); - print(errorDetails.exception.toString()); _onError(errorDetails); - _saveException(errorDetails.exception.toString(), errorDetails.stack); - }; - - ErrorWidget.builder = (errorDetails) { - print("@@@@@@@@@@@@@@@@@ in widget error"); - // TODO: uncomment - // if (kDebugMode) { - // return ErrorWidget(errorDetails.exception); - // } - - return FailurePage( - error: errorDetails.exception.toString(), - stackTrace: errorDetails.stack, - ); }; /// A callback that is invoked when an unhandled error occurs in the root /// isolate. PlatformDispatcher.instance.onError = (error, stack) { - print("@@@@@@@@@@@@@@@"); - print("PlatformDispatcher.instance.onError"); - _saveException(error.toString(), stack); + _onError(FlutterErrorDetails(exception: error, stack: stack)); + return true; }; @@ -187,12 +170,42 @@ void _saveException(String? error, StackTrace? stackTrace) async { } }; - await file.writeAsString(jsonEncode(exception), mode: FileMode.append); + String separator = "\n\n==========================================================" + + "\n==========================================================\n\n"; + + await file.writeAsString( + jsonEncode(exception) + separator, + mode: FileMode.append, + ); } -void _onError(FlutterErrorDetails details) { - print("#############"); - print(details.exception.toString()); +void _sendExceptionFile() async { + final appDocDir = await getApplicationDocumentsDirectory(); + + final file = File('${appDocDir.path}/error.txt'); + + print(file.readAsStringSync()); + + 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); + } +} + +void _onError(FlutterErrorDetails errorDetails) { + _saveException(errorDetails.exception.toString(), errorDetails.stack); + WidgetsBinding.instance.addPostFrameCallback( (timeStamp) { showPopUp( @@ -204,12 +217,12 @@ void _onError(FlutterErrorDetails details) { alertContent: "Oops, we got some error.\n\nPlease send crash report to our support team to make the application better.", rightButtonText: S.of(context).send, leftButtonText: "Don't send", - actionRightButton: () async { + actionRightButton: () { Navigator.of(context).pop(); + _sendExceptionFile(); }, actionLeftButton: () { Navigator.of(context).pop(); - _saveException(details.exception.toString(), details.stack); }, ); }, diff --git a/lib/src/screens/failure_page.dart b/lib/src/screens/failure_page.dart deleted file mode 100644 index ea3d75fcb..000000000 --- a/lib/src/screens/failure_page.dart +++ /dev/null @@ -1,87 +0,0 @@ -import 'dart:io'; - -import 'package:cake_wallet/generated/i18n.dart'; -import 'package:cake_wallet/src/widgets/primary_button.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_mailer/flutter_mailer.dart'; -import 'package:path_provider/path_provider.dart'; - -class FailurePage extends StatelessWidget { - final String? error; - final StackTrace? stackTrace; - - FailurePage({Key? key, this.error, this.stackTrace}); - - @override - Widget build(BuildContext context) { - final theme = Theme.of(context); - return Scaffold( - backgroundColor: Colors.grey.shade400, - body: Center( - child: Padding( - padding: EdgeInsets.symmetric( - horizontal: MediaQuery.of(context).size.width * 0.2), - child: Column( - mainAxisSize: MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Icon( - Icons.warning, - color: theme.errorColor, - size: 50, - ), - Padding( - padding: const EdgeInsets.symmetric(vertical: 20), - child: Text( - "Oops, we got some error.", - style: theme.textTheme.headline1?.copyWith(fontSize: 20), - ), - ), - Text( - "Please send crash report to our support team to make the application better.", - textAlign: TextAlign.center, - style: theme.textTheme.headline1?.copyWith(fontSize: 16), - ), - Padding( - padding: const EdgeInsets.symmetric(vertical: 20), - child: PrimaryButton( - onPressed: _sendExceptionFile, - text: S.of(context).send, - textColor: Colors.white, - color: theme.accentTextTheme.bodyText1!.color!, - ), - ), - PrimaryButton( - onPressed: () { - }, - text: "Don't Send", - color: Theme.of(context).accentTextTheme.caption!.color!, - textColor: - Theme.of(context).primaryTextTheme.headline6!.color!, - ), - ], - ), - ), - ), - ); - } - - void _sendExceptionFile() async { - final appDocDir = await getApplicationDocumentsDirectory(); - - final file = File('${appDocDir.path}/error.txt'); - - print(file.readAsStringSync()); - - final MailOptions mailOptions = MailOptions( - subject: 'Mobile App Issue', - recipients: ['support@cakewallet.com'], - attachments: [file.path], - ); - - await FlutterMailer.send(mailOptions); - - // clear file content - // file.writeAsString("", mode: FileMode.write); - } -} diff --git a/pubspec_base.yaml b/pubspec_base.yaml index 7981c6690..59ce2867d 100644 --- a/pubspec_base.yaml +++ b/pubspec_base.yaml @@ -61,7 +61,7 @@ dependencies: permission_handler: ^10.0.0 device_display_brightness: ^0.0.6 platform_device_id: ^1.0.1 - flutter_mailer: ^2.0.1 + flutter_mailer: ^2.0.2 cake_backup: git: url: https://github.com/cake-tech/cake_backup.git From a373253fd294320847bd3ef9805564ebd44e92bc Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Mon, 9 Jan 2023 18:16:50 +0200 Subject: [PATCH 015/190] Add localizations for error dialog content --- lib/main.dart | 9 ++++----- res/values/strings_de.arb | 4 +++- res/values/strings_en.arb | 4 +++- res/values/strings_es.arb | 4 +++- res/values/strings_fr.arb | 4 +++- res/values/strings_hi.arb | 4 +++- res/values/strings_hr.arb | 4 +++- res/values/strings_it.arb | 4 +++- res/values/strings_ja.arb | 4 +++- res/values/strings_ko.arb | 4 +++- res/values/strings_nl.arb | 4 +++- res/values/strings_pl.arb | 4 +++- res/values/strings_pt.arb | 4 +++- res/values/strings_ru.arb | 4 +++- res/values/strings_th.arb | 4 +++- res/values/strings_uk.arb | 4 +++- res/values/strings_zh.arb | 4 +++- 17 files changed, 52 insertions(+), 21 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 8e565e763..a6594a097 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -154,7 +154,6 @@ Future main() async { initialMigrationVersion: 19); runApp(App()); }, (error, stackTrace) async { - print("@@@@@@@@@@@@@@@@ in run zone guard"); _onError(FlutterErrorDetails(exception: error, stack: stackTrace)); }); } @@ -165,8 +164,8 @@ void _saveException(String? error, StackTrace? stackTrace) async { final file = File('${appDocDir.path}/error.txt'); final exception = { "${DateTime.now()}": { - "error": error, - "stackTrace": stackTrace.toString(), + "Error": error, + "StackTrace": stackTrace.toString(), } }; @@ -214,9 +213,9 @@ void _onError(FlutterErrorDetails errorDetails) { return AlertWithTwoActions( isDividerExist: true, alertTitle: S.of(context).error, - alertContent: "Oops, we got some error.\n\nPlease send crash report to our support team to make the application better.", + alertContent: S.of(context).error_dialog_content, rightButtonText: S.of(context).send, - leftButtonText: "Don't send", + leftButtonText: S.of(context).do_not_send, actionRightButton: () { Navigator.of(context).pop(); _sendExceptionFile(); diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index 9ba0a7553..65057fce2 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -679,5 +679,7 @@ "tor_only": "Nur Tor", "unmatched_currencies": "Die Währung Ihres aktuellen Wallets stimmt nicht mit der des gescannten QR überein", "contact_list_contacts": "Kontakte", - "contact_list_wallets": "Meine Geldbörsen" + "contact_list_wallets": "Meine Geldbörsen", + "do_not_send": "Nicht senden", + "error_dialog_content": "Hoppla, wir haben einen Fehler.\n\nBitte senden Sie einen 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 e9a0c4d49..1be48ce47 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -679,5 +679,7 @@ "tor_only": "Tor only", "unmatched_currencies": "Your current wallet's currency does not match that of the scanned QR", "contact_list_contacts": "Contacts", - "contact_list_wallets": "My Wallets" + "contact_list_wallets": "My Wallets", + "do_not_send": "Don't send", + "error_dialog_content": "Oops, we got some error.\n\nPlease send 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 10c866676..a5ed4fe9e 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -679,5 +679,7 @@ "tor_only": "solo Tor", "unmatched_currencies": "La moneda de su billetera actual no coincide con la del QR escaneado", "contact_list_contacts": "Contactos", - "contact_list_wallets": "Mis billeteras" + "contact_list_wallets": "Mis billeteras", + "do_not_send": "no enviar", + "error_dialog_content": "Vaya, tenemos un error.\n\nEnvíe un informe de fallas 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 99fbcd282..1d8eed7eb 100644 --- a/res/values/strings_fr.arb +++ b/res/values/strings_fr.arb @@ -677,5 +677,7 @@ "tor_only": "Tor uniquement", "unmatched_currencies": "La devise de votre portefeuille (wallet) actuel ne correspond pas à celle du QR code scanné", "contact_list_contacts": "Contacts", - "contact_list_wallets": "Mes portefeuilles (wallets)" + "contact_list_wallets": "Mes portefeuilles (wallets)", + "do_not_send": "N'envoyez pas", + "error_dialog_content": "Oups, nous avons eu une erreur.\n\nVeuillez envoyer un 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 a5c27ddb4..df324f40b 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -679,5 +679,7 @@ "tor_only": "Tor केवल", "unmatched_currencies": "आपके वर्तमान वॉलेट की मुद्रा स्कैन किए गए क्यूआर से मेल नहीं खाती" , "contact_list_contacts": "संपर्क", - "contact_list_wallets": "मेरा बटुआ" + "contact_list_wallets": "मेरा बटुआ", + "do_not_send": "मत भेजो", + "error_dialog_content": "ओह, हमसे कुछ गड़बड़ी हुई है.\n\nएप्लिकेशन को बेहतर बनाने के लिए कृपया हमारी सहायता टीम को क्रैश रिपोर्ट भेजें।" } diff --git a/res/values/strings_hr.arb b/res/values/strings_hr.arb index 9aa9f0b4f..97c39195c 100644 --- a/res/values/strings_hr.arb +++ b/res/values/strings_hr.arb @@ -679,5 +679,7 @@ "tor_only": "Samo Tor", "unmatched_currencies": "Valuta vašeg trenutnog novčanika ne odgovara onoj na skeniranom QR-u", "contact_list_contacts": "Kontakti", - "contact_list_wallets": "Moji novčanici" + "contact_list_wallets": "Moji novčanici", + "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 e90fc20c2..59cbf5909 100644 --- a/res/values/strings_it.arb +++ b/res/values/strings_it.arb @@ -679,5 +679,7 @@ "tor_only": "Solo Tor", "unmatched_currencies": "La valuta del tuo portafoglio attuale non corrisponde a quella del QR scansionato", "contact_list_contacts": "Contatti", - "contact_list_wallets": "I miei portafogli" + "contact_list_wallets": "I miei portafogli", + "do_not_send": "Non inviare", + "error_dialog_content": "Spiacenti, abbiamo riscontrato un errore.\n\nSi prega di inviare un rapporto sugli arresti anomali al nostro team di supporto per migliorare l'applicazione." } diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb index 3c5a5d951..86d2bbaef 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -679,5 +679,7 @@ "tor_only": "Torのみ", "unmatched_currencies": "現在のウォレットの通貨がスキャンされたQRの通貨と一致しません", "contact_list_contacts": "連絡先", - "contact_list_wallets": "マイウォレット" + "contact_list_wallets": "マイウォレット", + "do_not_send": "送信しない", + "error_dialog_content": "エラーが発生しました。\n\nアプリケーションを改善するために、クラッシュ レポートをサポート チームに送信してください。" } diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb index 216a3a143..847321465 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -679,5 +679,7 @@ "tor_only": "Tor 뿐", "unmatched_currencies": "현재 지갑의 통화가 스캔한 QR의 통화와 일치하지 않습니다.", "contact_list_contacts": "콘택트 렌즈", - "contact_list_wallets": "내 지갑" + "contact_list_wallets": "내 지갑", + "do_not_send": "보내지 마세요", + "error_dialog_content": "죄송합니다. 오류가 발생했습니다.\n\n응용 프로그램을 개선하려면 지원 팀에 충돌 보고서를 보내주십시오." } diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index 9ac0cd1d1..d3bca52b6 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -679,5 +679,7 @@ "tor_only": "Alleen Tor", "unmatched_currencies": "De valuta van uw huidige portemonnee komt niet overeen met die van de gescande QR", "contact_list_contacts": "Contacten", - "contact_list_wallets": "Mijn portefeuilles" + "contact_list_wallets": "Mijn portefeuilles", + "do_not_send": "Niet sturen", + "error_dialog_content": "Oeps, er is een fout opgetreden.\n\nStuur een crashrapport naar ons ondersteuningsteam om de applicatie te verbeteren." } diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index 11bf637e5..4d93b8ee8 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -679,5 +679,7 @@ "tor_only": "Tylko Tor", "unmatched_currencies": "Waluta Twojego obecnego portfela nie odpowiada walucie zeskanowanego kodu QR", "contact_list_contacts": "Łączność", - "contact_list_wallets": "Moje portfele" + "contact_list_wallets": "Moje portfele", + "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 8529aadb8..acdb861af 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -678,5 +678,7 @@ "tor_only": "Tor apenas", "unmatched_currencies": "A moeda da sua carteira atual não corresponde à do QR digitalizado", "contact_list_contacts": "Contatos", - "contact_list_wallets": "minhas carteiras" + "contact_list_wallets": "minhas carteiras", + "do_not_send": "não envie", + "error_dialog_content": "Ops, houve algum erro.\n\nEnvie um 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 1ba5fd85c..dadcc67e4 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -679,5 +679,7 @@ "tor_only": "Только Tor", "unmatched_currencies": "Валюта вашего текущего кошелька не соответствует валюте отсканированного QR-кода.", "contact_list_contacts": "Контакты", - "contact_list_wallets": "Мои кошельки" + "contact_list_wallets": "Мои кошельки", + "do_not_send": "Не отправлять", + "error_dialog_content": "Ой, у нас какая-то ошибка.\n\nПожалуйста, отправьте отчет о сбое в нашу службу поддержки, чтобы сделать приложение лучше." } diff --git a/res/values/strings_th.arb b/res/values/strings_th.arb index 242a8d110..60a09b747 100644 --- a/res/values/strings_th.arb +++ b/res/values/strings_th.arb @@ -677,5 +677,7 @@ "tor_only" : "Tor เท่านั้น", "unmatched_currencies" : "สกุลเงินของกระเป๋าปัจจุบันของคุณไม่ตรงกับของ QR ที่สแกน", "contact_list_contacts": "ติดต่อ", - "contact_list_wallets": "กระเป๋าเงินของฉัน" + "contact_list_wallets": "กระเป๋าเงินของฉัน", + "do_not_send": "อย่าส่ง", + "error_dialog_content": "อ๊ะ เราพบข้อผิดพลาดบางอย่าง\n\nโปรดส่งรายงานข้อขัดข้องไปยังทีมสนับสนุนของเราเพื่อปรับปรุงแอปพลิเคชันให้ดียิ่งขึ้น" } diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb index 4fad9a19d..284b59c29 100644 --- a/res/values/strings_uk.arb +++ b/res/values/strings_uk.arb @@ -678,5 +678,7 @@ "tor_only": "Тільки Tor", "unmatched_currencies": "Валюта вашого гаманця не збігається з валютою сканованого QR-коду", "contact_list_contacts": "Контакти", - "contact_list_wallets": "Мої гаманці" + "contact_list_wallets": "Мої гаманці", + "do_not_send": "Не надсилайте", + "error_dialog_content": "На жаль, ми отримали помилку.\n\nБудь ласка, надішліть звіт про збій нашій команді підтримки, щоб покращити додаток." } diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb index 7c0f4ab74..d04831cc2 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -677,5 +677,7 @@ "tor_only": "仅限 Tor", "unmatched_currencies": "您当前钱包的货币与扫描的 QR 的货币不匹配", "contact_list_contacts": "联系人", - "contact_list_wallets": "我的钱包" + "contact_list_wallets": "我的钱包", + "do_not_send": "不要发送", + "error_dialog_content": "糟糕,我们遇到了一些错误。\n\n请将崩溃报告发送给我们的支持团队,以改进应用程序。" } From 8d68ccfc7b0a3a7491d3665da798c9b41c21e4a9 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Mon, 9 Jan 2023 20:03:26 +0200 Subject: [PATCH 016/190] Ignore UI issues from exceptions report --- lib/main.dart | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index a6594a097..126bd213f 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -57,7 +57,10 @@ Future main() async { WidgetsFlutterBinding.ensureInitialized(); FlutterError.onError = (errorDetails) { - _onError(errorDetails); + // if not a UI error + if (errorDetails.library != "widgets library") { + _onError(errorDetails); + } }; /// A callback that is invoked when an unhandled error occurs in the root @@ -193,8 +196,8 @@ void _sendExceptionFile() async { 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 + // 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) { From e4af355b2493dc3aaba6246f7bad54d58cbab877 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Mon, 9 Jan 2023 20:31:24 +0200 Subject: [PATCH 017/190] Fix Translation typo [skip ci] --- README.md | 1 + res/values/strings_de.arb | 2 +- res/values/strings_en.arb | 2 +- res/values/strings_es.arb | 2 +- res/values/strings_fr.arb | 2 +- res/values/strings_hi.arb | 2 +- res/values/strings_it.arb | 2 +- res/values/strings_ja.arb | 2 +- res/values/strings_nl.arb | 2 +- res/values/strings_pt.arb | 2 +- 10 files changed, 10 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index f485ca244..e4d057e94 100644 --- a/README.md +++ b/README.md @@ -100,6 +100,7 @@ Edit the applicable `strings_XX.arb` file in `res/values/` and open a pull reque - Japanese - Chinese - Korean +- Thai ## Add a new language diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index 65057fce2..a8a4f8086 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -681,5 +681,5 @@ "contact_list_contacts": "Kontakte", "contact_list_wallets": "Meine Geldbörsen", "do_not_send": "Nicht senden", - "error_dialog_content": "Hoppla, wir haben einen Fehler.\n\nBitte senden Sie einen Absturzbericht an unser Support-Team, um die Anwendung zu verbessern." + "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 1be48ce47..07937b0e7 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -681,5 +681,5 @@ "contact_list_contacts": "Contacts", "contact_list_wallets": "My Wallets", "do_not_send": "Don't send", - "error_dialog_content": "Oops, we got some error.\n\nPlease send crash report to our support team to make the application better." + "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 a5ed4fe9e..b69978d6f 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -681,5 +681,5 @@ "contact_list_contacts": "Contactos", "contact_list_wallets": "Mis billeteras", "do_not_send": "no enviar", - "error_dialog_content": "Vaya, tenemos un error.\n\nEnvíe un informe de fallas a nuestro equipo de soporte para mejorar la aplicación." + "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 1d8eed7eb..df8f1e48d 100644 --- a/res/values/strings_fr.arb +++ b/res/values/strings_fr.arb @@ -679,5 +679,5 @@ "contact_list_contacts": "Contacts", "contact_list_wallets": "Mes portefeuilles (wallets)", "do_not_send": "N'envoyez pas", - "error_dialog_content": "Oups, nous avons eu une erreur.\n\nVeuillez envoyer un rapport de plantage à notre équipe d'assistance pour améliorer l'application." + "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 df324f40b..40df82dc0 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -681,5 +681,5 @@ "contact_list_contacts": "संपर्क", "contact_list_wallets": "मेरा बटुआ", "do_not_send": "मत भेजो", - "error_dialog_content": "ओह, हमसे कुछ गड़बड़ी हुई है.\n\nएप्लिकेशन को बेहतर बनाने के लिए कृपया हमारी सहायता टीम को क्रैश रिपोर्ट भेजें।" + "error_dialog_content": "ओह, हमसे कुछ गड़बड़ी हुई है.\n\nएप्लिकेशन को बेहतर बनाने के लिए कृपया क्रैश रिपोर्ट हमारी सहायता टीम को भेजें।" } diff --git a/res/values/strings_it.arb b/res/values/strings_it.arb index 59cbf5909..d48a96baa 100644 --- a/res/values/strings_it.arb +++ b/res/values/strings_it.arb @@ -681,5 +681,5 @@ "contact_list_contacts": "Contatti", "contact_list_wallets": "I miei portafogli", "do_not_send": "Non inviare", - "error_dialog_content": "Spiacenti, abbiamo riscontrato un errore.\n\nSi prega di inviare un rapporto sugli arresti anomali al nostro team di supporto per migliorare l'applicazione." + "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 86d2bbaef..d928b960e 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -681,5 +681,5 @@ "contact_list_contacts": "連絡先", "contact_list_wallets": "マイウォレット", "do_not_send": "送信しない", - "error_dialog_content": "エラーが発生しました。\n\nアプリケーションを改善するために、クラッシュ レポートをサポート チームに送信してください。" + "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_nl.arb b/res/values/strings_nl.arb index d3bca52b6..eabb30216 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -681,5 +681,5 @@ "contact_list_contacts": "Contacten", "contact_list_wallets": "Mijn portefeuilles", "do_not_send": "Niet sturen", - "error_dialog_content": "Oeps, er is een fout opgetreden.\n\nStuur een crashrapport naar ons ondersteuningsteam om de applicatie te verbeteren." + "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_pt.arb b/res/values/strings_pt.arb index acdb861af..cd7a79b0e 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -680,5 +680,5 @@ "contact_list_contacts": "Contatos", "contact_list_wallets": "minhas carteiras", "do_not_send": "não envie", - "error_dialog_content": "Ops, houve algum erro.\n\nEnvie um relatório de falha para nossa equipe de suporte para melhorar o aplicativo." + "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." } From f3bface5e8786bf8e5c831d16d5c01dcc06919ff Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Tue, 10 Jan 2023 18:01:03 +0100 Subject: [PATCH 018/190] update webview permission implementation --- ios/Podfile | 2 +- ios/Podfile.lock | 48 +++++++++++++++++--------- lib/main.dart | 2 -- lib/src/screens/buy/onramper_page.dart | 16 +++++---- 4 files changed, 41 insertions(+), 27 deletions(-) diff --git a/ios/Podfile b/ios/Podfile index b29d40484..8ced976e3 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -platform :ios, '11.0' +platform :ios, '13.0' source 'https://github.com/CocoaPods/Specs.git' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 3a810430d..c3ebfa6e2 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -7,7 +7,7 @@ PODS: - connectivity (0.0.1): - Flutter - Reachability - - CryptoSwift (1.3.2) + - CryptoSwift (1.6.0) - cw_haven (0.0.1): - cw_haven/Boost (= 0.0.1) - cw_haven/Haven (= 0.0.1) @@ -67,14 +67,14 @@ PODS: - Flutter - devicelocale (0.0.1): - Flutter - - DKImagePickerController/Core (4.3.2): + - DKImagePickerController/Core (4.3.4): - DKImagePickerController/ImageDataManager - DKImagePickerController/Resource - - DKImagePickerController/ImageDataManager (4.3.2) - - DKImagePickerController/PhotoGallery (4.3.2): + - DKImagePickerController/ImageDataManager (4.3.4) + - DKImagePickerController/PhotoGallery (4.3.4): - DKImagePickerController/Core - DKPhotoGallery - - DKImagePickerController/Resource (4.3.2) + - DKImagePickerController/Resource (4.3.4) - DKPhotoGallery (0.0.17): - DKPhotoGallery/Core (= 0.0.17) - DKPhotoGallery/Model (= 0.0.17) @@ -102,11 +102,19 @@ PODS: - DKImagePickerController/PhotoGallery - Flutter - Flutter (1.0.0) + - flutter_inappwebview (0.0.1): + - Flutter + - flutter_inappwebview/Core (= 0.0.1) + - OrderedSet (~> 5.0) + - flutter_inappwebview/Core (0.0.1): + - Flutter + - OrderedSet (~> 5.0) - flutter_secure_storage (3.3.1): - Flutter - local_auth_ios (0.0.1): - Flutter - MTBBarcodeScanner (5.0.11) + - OrderedSet (5.0.0) - package_info (0.0.1): - Flutter - path_provider_ios (0.0.1): @@ -116,15 +124,15 @@ PODS: - platform_device_id (0.0.1): - Flutter - Reachability (3.2) - - SDWebImage (5.9.1): - - SDWebImage/Core (= 5.9.1) - - SDWebImage/Core (5.9.1) + - SDWebImage (5.14.2): + - SDWebImage/Core (= 5.14.2) + - SDWebImage/Core (5.14.2) - share_plus (0.0.1): - Flutter - shared_preferences_ios (0.0.1): - Flutter - - SwiftProtobuf (1.18.0) - - SwiftyGif (5.3.0) + - SwiftProtobuf (1.20.3) + - SwiftyGif (5.4.3) - uni_links (0.0.1): - Flutter - UnstoppableDomainsResolution (4.0.0): @@ -147,6 +155,7 @@ DEPENDENCIES: - devicelocale (from `.symlinks/plugins/devicelocale/ios`) - file_picker (from `.symlinks/plugins/file_picker/ios`) - Flutter (from `Flutter`) + - flutter_inappwebview (from `.symlinks/plugins/flutter_inappwebview/ios`) - flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`) - local_auth_ios (from `.symlinks/plugins/local_auth_ios/ios`) - package_info (from `.symlinks/plugins/package_info/ios`) @@ -167,6 +176,7 @@ SPEC REPOS: - DKImagePickerController - DKPhotoGallery - MTBBarcodeScanner + - OrderedSet - Reachability - SDWebImage - SwiftProtobuf @@ -194,6 +204,8 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/file_picker/ios" Flutter: :path: Flutter + flutter_inappwebview: + :path: ".symlinks/plugins/flutter_inappwebview/ios" flutter_secure_storage: :path: ".symlinks/plugins/flutter_secure_storage/ios" local_auth_ios: @@ -221,35 +233,37 @@ SPEC CHECKSUMS: barcode_scan2: 0af2bb63c81b4565aab6cd78278e4c0fa136dbb0 BigInt: f668a80089607f521586bbe29513d708491ef2f7 connectivity: c4130b2985d4ef6fd26f9702e886bd5260681467 - CryptoSwift: 093499be1a94b0cae36e6c26b70870668cb56060 + CryptoSwift: 562f8eceb40e80796fffc668b0cad9313284cfa6 cw_haven: b3e54e1fbe7b8e6fda57a93206bc38f8e89b898a cw_monero: 4cf3b96f2da8e95e2ef7d6703dd4d2c509127b7d cw_shared_external: 2972d872b8917603478117c9957dfca611845a92 device_display_brightness: 1510e72c567a1f6ce6ffe393dcd9afd1426034f7 device_info: d7d233b645a32c40dfdc212de5cf646ca482f175 devicelocale: b22617f40038496deffba44747101255cee005b0 - DKImagePickerController: b5eb7f7a388e4643264105d648d01f727110fc3d + DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179 file_picker: 817ab1d8cd2da9d2da412a417162deee3500fc95 Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 + flutter_inappwebview: bfd58618f49dc62f2676de690fc6dcda1d6c3721 flutter_secure_storage: 7953c38a04c3fdbb00571bcd87d8e3b5ceb9daec local_auth_ios: 0d333dde7780f669e66f19d2ff6005f3ea84008d MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb + OrderedSet: aaeb196f7fef5a9edf55d89760da9176ad40b93c package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62 path_provider_ios: 14f3d2fd28c4fdb42f44e0f751d12861c43cee02 permission_handler_apple: 44366e37eaf29454a1e7b1b7d736c2cceaeb17ce platform_device_id: 81b3e2993881f87d0c82ef151dc274df4869aef5 Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96 - SDWebImage: a990c053fff71e388a10f3357edb0be17929c9c5 + SDWebImage: b9a731e1d6307f44ca703b3976d18c24ca561e84 share_plus: 056a1e8ac890df3e33cb503afffaf1e9b4fbae68 shared_preferences_ios: 548a61f8053b9b8a49ac19c1ffbc8b92c50d68ad - SwiftProtobuf: c3c12645230d9b09c72267e0de89468c5543bd86 - SwiftyGif: e466e86c660d343357ab944a819a101c4127cb40 + SwiftProtobuf: b02b5075dcf60c9f5f403000b3b0c202a11b6ae1 + SwiftyGif: 6c3eafd0ce693cad58bb63d2b2fb9bacb8552780 uni_links: d97da20c7701486ba192624d99bffaaffcfc298a UnstoppableDomainsResolution: c3c67f4d0a5e2437cb00d4bd50c2e00d6e743841 url_launcher_ios: 839c58cdb4279282219f5e248c3321761ff3c4de webview_flutter_wkwebview: b7e70ef1ddded7e69c796c7390ee74180182971f -PODFILE CHECKSUM: ae71bdf0eb731a1ffc399c122f6aa4dea0cb5f6f +PODFILE CHECKSUM: bf84c4e13798f92b867c8ebcbd04acc127fec6be -COCOAPODS: 1.11.3 +COCOAPODS: 1.11.2 diff --git a/lib/main.dart b/lib/main.dart index f93eed545..056d7b1d7 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -11,7 +11,6 @@ import 'package:flutter/services.dart'; import 'package:hive/hive.dart'; import 'package:cake_wallet/di.dart'; import 'package:path_provider/path_provider.dart'; -import 'package:permission_handler/permission_handler.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; @@ -45,7 +44,6 @@ final rootKey = GlobalKey(); Future main() async { try { WidgetsFlutterBinding.ensureInitialized(); - await Permission.camera.request(); final appDir = await getApplicationDocumentsDirectory(); await Hive.close(); Hive.init(appDir.path); diff --git a/lib/src/screens/buy/onramper_page.dart b/lib/src/screens/buy/onramper_page.dart index 1eb052f74..72fe59eee 100644 --- a/lib/src/screens/buy/onramper_page.dart +++ b/lib/src/screens/buy/onramper_page.dart @@ -1,4 +1,3 @@ -import 'dart:io'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; import 'package:cake_wallet/store/settings_store.dart'; @@ -73,12 +72,15 @@ class OnRamperPageBodyState extends State { @override Widget build(BuildContext context) { return InAppWebView( - initialOptions: InAppWebViewGroupOptions( - crossPlatform: InAppWebViewOptions(transparentBackground: true), - ), - initialUrlRequest: URLRequest(url: Uri.tryParse(widget.uri.toString(), - ), - ) + initialOptions: InAppWebViewGroupOptions( + crossPlatform: InAppWebViewOptions(transparentBackground: true), + ), + androidOnPermissionRequest: (_, __, resources) async { + return PermissionRequestResponse( + resources: resources, + action: PermissionRequestResponseAction.GRANT, + ); + }, ); } } From 6434f36f1af450b9c3d642369c41de6cacbd55e6 Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Tue, 10 Jan 2023 18:14:26 +0100 Subject: [PATCH 019/190] update webview permission implementation --- lib/main.dart | 2 -- lib/src/screens/buy/onramper_page.dart | 16 +++++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index f93eed545..056d7b1d7 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -11,7 +11,6 @@ import 'package:flutter/services.dart'; import 'package:hive/hive.dart'; import 'package:cake_wallet/di.dart'; import 'package:path_provider/path_provider.dart'; -import 'package:permission_handler/permission_handler.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; @@ -45,7 +44,6 @@ final rootKey = GlobalKey(); Future main() async { try { WidgetsFlutterBinding.ensureInitialized(); - await Permission.camera.request(); final appDir = await getApplicationDocumentsDirectory(); await Hive.close(); Hive.init(appDir.path); diff --git a/lib/src/screens/buy/onramper_page.dart b/lib/src/screens/buy/onramper_page.dart index 1eb052f74..72fe59eee 100644 --- a/lib/src/screens/buy/onramper_page.dart +++ b/lib/src/screens/buy/onramper_page.dart @@ -1,4 +1,3 @@ -import 'dart:io'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; import 'package:cake_wallet/store/settings_store.dart'; @@ -73,12 +72,15 @@ class OnRamperPageBodyState extends State { @override Widget build(BuildContext context) { return InAppWebView( - initialOptions: InAppWebViewGroupOptions( - crossPlatform: InAppWebViewOptions(transparentBackground: true), - ), - initialUrlRequest: URLRequest(url: Uri.tryParse(widget.uri.toString(), - ), - ) + initialOptions: InAppWebViewGroupOptions( + crossPlatform: InAppWebViewOptions(transparentBackground: true), + ), + androidOnPermissionRequest: (_, __, resources) async { + return PermissionRequestResponse( + resources: resources, + action: PermissionRequestResponseAction.GRANT, + ); + }, ); } } From 92729151541b94407a01f0e3cf74fea9da85c52d Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Tue, 10 Jan 2023 18:17:09 +0100 Subject: [PATCH 020/190] delete pod --- ios/Podfile | 85 --------------- ios/Podfile.lock | 269 ----------------------------------------------- 2 files changed, 354 deletions(-) delete mode 100644 ios/Podfile delete mode 100644 ios/Podfile.lock diff --git a/ios/Podfile b/ios/Podfile deleted file mode 100644 index 8ced976e3..000000000 --- a/ios/Podfile +++ /dev/null @@ -1,85 +0,0 @@ -# Uncomment this line to define a global platform for your project -platform :ios, '13.0' -source 'https://github.com/CocoaPods/Specs.git' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - use_modular_headers! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) - - # Cake Wallet (Legacy) - pod 'CryptoSwift' - pod 'UnstoppableDomainsResolution', '~> 4.0.0' -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - - target.build_configurations.each do |config| - config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [ - '$(inherited)', - - ## dart: PermissionGroup.calendar - 'PERMISSION_EVENTS=0', - - ## dart: PermissionGroup.reminders - 'PERMISSION_REMINDERS=0', - - ## dart: PermissionGroup.contacts - 'PERMISSION_CONTACTS=0', - - ## dart: PermissionGroup.camera - 'PERMISSION_CAMERA=0', - - ## dart: PermissionGroup.microphone - 'PERMISSION_MICROPHONE=0', - - ## dart: PermissionGroup.speech - 'PERMISSION_SPEECH_RECOGNIZER=0', - - ## dart: PermissionGroup.photos - 'PERMISSION_PHOTOS=0', - - ## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse] - 'PERMISSION_LOCATION=0', - - ## dart: PermissionGroup.notification - 'PERMISSION_NOTIFICATIONS=0', - - ## dart: PermissionGroup.mediaLibrary - 'PERMISSION_MEDIA_LIBRARY=0', - - ## dart: PermissionGroup.sensors - 'PERMISSION_SENSORS=0' - ] - end - end -end diff --git a/ios/Podfile.lock b/ios/Podfile.lock deleted file mode 100644 index c3ebfa6e2..000000000 --- a/ios/Podfile.lock +++ /dev/null @@ -1,269 +0,0 @@ -PODS: - - barcode_scan2 (0.0.1): - - Flutter - - MTBBarcodeScanner - - SwiftProtobuf - - BigInt (5.2.0) - - connectivity (0.0.1): - - Flutter - - Reachability - - CryptoSwift (1.6.0) - - cw_haven (0.0.1): - - cw_haven/Boost (= 0.0.1) - - cw_haven/Haven (= 0.0.1) - - cw_haven/OpenSSL (= 0.0.1) - - cw_haven/Sodium (= 0.0.1) - - cw_shared_external - - Flutter - - cw_haven/Boost (0.0.1): - - cw_shared_external - - Flutter - - cw_haven/Haven (0.0.1): - - cw_shared_external - - Flutter - - cw_haven/OpenSSL (0.0.1): - - cw_shared_external - - Flutter - - cw_haven/Sodium (0.0.1): - - cw_shared_external - - Flutter - - cw_monero (0.0.2): - - cw_monero/Boost (= 0.0.2) - - cw_monero/Monero (= 0.0.2) - - cw_monero/OpenSSL (= 0.0.2) - - cw_monero/Sodium (= 0.0.2) - - cw_monero/Unbound (= 0.0.2) - - cw_shared_external - - Flutter - - cw_monero/Boost (0.0.2): - - cw_shared_external - - Flutter - - cw_monero/Monero (0.0.2): - - cw_shared_external - - Flutter - - cw_monero/OpenSSL (0.0.2): - - cw_shared_external - - Flutter - - cw_monero/Sodium (0.0.2): - - cw_shared_external - - Flutter - - cw_monero/Unbound (0.0.2): - - cw_shared_external - - Flutter - - cw_shared_external (0.0.1): - - cw_shared_external/Boost (= 0.0.1) - - cw_shared_external/OpenSSL (= 0.0.1) - - cw_shared_external/Sodium (= 0.0.1) - - Flutter - - cw_shared_external/Boost (0.0.1): - - Flutter - - cw_shared_external/OpenSSL (0.0.1): - - Flutter - - cw_shared_external/Sodium (0.0.1): - - Flutter - - device_display_brightness (0.0.1): - - Flutter - - device_info (0.0.1): - - Flutter - - devicelocale (0.0.1): - - Flutter - - DKImagePickerController/Core (4.3.4): - - DKImagePickerController/ImageDataManager - - DKImagePickerController/Resource - - DKImagePickerController/ImageDataManager (4.3.4) - - DKImagePickerController/PhotoGallery (4.3.4): - - DKImagePickerController/Core - - DKPhotoGallery - - DKImagePickerController/Resource (4.3.4) - - DKPhotoGallery (0.0.17): - - DKPhotoGallery/Core (= 0.0.17) - - DKPhotoGallery/Model (= 0.0.17) - - DKPhotoGallery/Preview (= 0.0.17) - - DKPhotoGallery/Resource (= 0.0.17) - - SDWebImage - - SwiftyGif - - DKPhotoGallery/Core (0.0.17): - - DKPhotoGallery/Model - - DKPhotoGallery/Preview - - SDWebImage - - SwiftyGif - - DKPhotoGallery/Model (0.0.17): - - SDWebImage - - SwiftyGif - - DKPhotoGallery/Preview (0.0.17): - - DKPhotoGallery/Model - - DKPhotoGallery/Resource - - SDWebImage - - SwiftyGif - - DKPhotoGallery/Resource (0.0.17): - - SDWebImage - - SwiftyGif - - file_picker (0.0.1): - - DKImagePickerController/PhotoGallery - - Flutter - - Flutter (1.0.0) - - flutter_inappwebview (0.0.1): - - Flutter - - flutter_inappwebview/Core (= 0.0.1) - - OrderedSet (~> 5.0) - - flutter_inappwebview/Core (0.0.1): - - Flutter - - OrderedSet (~> 5.0) - - flutter_secure_storage (3.3.1): - - Flutter - - local_auth_ios (0.0.1): - - Flutter - - MTBBarcodeScanner (5.0.11) - - OrderedSet (5.0.0) - - package_info (0.0.1): - - Flutter - - path_provider_ios (0.0.1): - - Flutter - - permission_handler_apple (9.0.4): - - Flutter - - platform_device_id (0.0.1): - - Flutter - - Reachability (3.2) - - SDWebImage (5.14.2): - - SDWebImage/Core (= 5.14.2) - - SDWebImage/Core (5.14.2) - - share_plus (0.0.1): - - Flutter - - shared_preferences_ios (0.0.1): - - Flutter - - SwiftProtobuf (1.20.3) - - SwiftyGif (5.4.3) - - uni_links (0.0.1): - - Flutter - - UnstoppableDomainsResolution (4.0.0): - - BigInt - - CryptoSwift - - url_launcher_ios (0.0.1): - - Flutter - - webview_flutter_wkwebview (0.0.1): - - Flutter - -DEPENDENCIES: - - barcode_scan2 (from `.symlinks/plugins/barcode_scan2/ios`) - - connectivity (from `.symlinks/plugins/connectivity/ios`) - - CryptoSwift - - cw_haven (from `.symlinks/plugins/cw_haven/ios`) - - cw_monero (from `.symlinks/plugins/cw_monero/ios`) - - cw_shared_external (from `.symlinks/plugins/cw_shared_external/ios`) - - device_display_brightness (from `.symlinks/plugins/device_display_brightness/ios`) - - device_info (from `.symlinks/plugins/device_info/ios`) - - devicelocale (from `.symlinks/plugins/devicelocale/ios`) - - file_picker (from `.symlinks/plugins/file_picker/ios`) - - Flutter (from `Flutter`) - - flutter_inappwebview (from `.symlinks/plugins/flutter_inappwebview/ios`) - - flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`) - - local_auth_ios (from `.symlinks/plugins/local_auth_ios/ios`) - - package_info (from `.symlinks/plugins/package_info/ios`) - - path_provider_ios (from `.symlinks/plugins/path_provider_ios/ios`) - - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`) - - platform_device_id (from `.symlinks/plugins/platform_device_id/ios`) - - share_plus (from `.symlinks/plugins/share_plus/ios`) - - shared_preferences_ios (from `.symlinks/plugins/shared_preferences_ios/ios`) - - uni_links (from `.symlinks/plugins/uni_links/ios`) - - UnstoppableDomainsResolution (~> 4.0.0) - - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) - - webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`) - -SPEC REPOS: - https://github.com/CocoaPods/Specs.git: - - BigInt - - CryptoSwift - - DKImagePickerController - - DKPhotoGallery - - MTBBarcodeScanner - - OrderedSet - - Reachability - - SDWebImage - - SwiftProtobuf - - SwiftyGif - - UnstoppableDomainsResolution - -EXTERNAL SOURCES: - barcode_scan2: - :path: ".symlinks/plugins/barcode_scan2/ios" - connectivity: - :path: ".symlinks/plugins/connectivity/ios" - cw_haven: - :path: ".symlinks/plugins/cw_haven/ios" - cw_monero: - :path: ".symlinks/plugins/cw_monero/ios" - cw_shared_external: - :path: ".symlinks/plugins/cw_shared_external/ios" - device_display_brightness: - :path: ".symlinks/plugins/device_display_brightness/ios" - device_info: - :path: ".symlinks/plugins/device_info/ios" - devicelocale: - :path: ".symlinks/plugins/devicelocale/ios" - file_picker: - :path: ".symlinks/plugins/file_picker/ios" - Flutter: - :path: Flutter - flutter_inappwebview: - :path: ".symlinks/plugins/flutter_inappwebview/ios" - flutter_secure_storage: - :path: ".symlinks/plugins/flutter_secure_storage/ios" - local_auth_ios: - :path: ".symlinks/plugins/local_auth_ios/ios" - package_info: - :path: ".symlinks/plugins/package_info/ios" - path_provider_ios: - :path: ".symlinks/plugins/path_provider_ios/ios" - permission_handler_apple: - :path: ".symlinks/plugins/permission_handler_apple/ios" - platform_device_id: - :path: ".symlinks/plugins/platform_device_id/ios" - share_plus: - :path: ".symlinks/plugins/share_plus/ios" - shared_preferences_ios: - :path: ".symlinks/plugins/shared_preferences_ios/ios" - uni_links: - :path: ".symlinks/plugins/uni_links/ios" - url_launcher_ios: - :path: ".symlinks/plugins/url_launcher_ios/ios" - webview_flutter_wkwebview: - :path: ".symlinks/plugins/webview_flutter_wkwebview/ios" - -SPEC CHECKSUMS: - barcode_scan2: 0af2bb63c81b4565aab6cd78278e4c0fa136dbb0 - BigInt: f668a80089607f521586bbe29513d708491ef2f7 - connectivity: c4130b2985d4ef6fd26f9702e886bd5260681467 - CryptoSwift: 562f8eceb40e80796fffc668b0cad9313284cfa6 - cw_haven: b3e54e1fbe7b8e6fda57a93206bc38f8e89b898a - cw_monero: 4cf3b96f2da8e95e2ef7d6703dd4d2c509127b7d - cw_shared_external: 2972d872b8917603478117c9957dfca611845a92 - device_display_brightness: 1510e72c567a1f6ce6ffe393dcd9afd1426034f7 - device_info: d7d233b645a32c40dfdc212de5cf646ca482f175 - devicelocale: b22617f40038496deffba44747101255cee005b0 - DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac - DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179 - file_picker: 817ab1d8cd2da9d2da412a417162deee3500fc95 - Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 - flutter_inappwebview: bfd58618f49dc62f2676de690fc6dcda1d6c3721 - flutter_secure_storage: 7953c38a04c3fdbb00571bcd87d8e3b5ceb9daec - local_auth_ios: 0d333dde7780f669e66f19d2ff6005f3ea84008d - MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb - OrderedSet: aaeb196f7fef5a9edf55d89760da9176ad40b93c - package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62 - path_provider_ios: 14f3d2fd28c4fdb42f44e0f751d12861c43cee02 - permission_handler_apple: 44366e37eaf29454a1e7b1b7d736c2cceaeb17ce - platform_device_id: 81b3e2993881f87d0c82ef151dc274df4869aef5 - Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96 - SDWebImage: b9a731e1d6307f44ca703b3976d18c24ca561e84 - share_plus: 056a1e8ac890df3e33cb503afffaf1e9b4fbae68 - shared_preferences_ios: 548a61f8053b9b8a49ac19c1ffbc8b92c50d68ad - SwiftProtobuf: b02b5075dcf60c9f5f403000b3b0c202a11b6ae1 - SwiftyGif: 6c3eafd0ce693cad58bb63d2b2fb9bacb8552780 - uni_links: d97da20c7701486ba192624d99bffaaffcfc298a - UnstoppableDomainsResolution: c3c67f4d0a5e2437cb00d4bd50c2e00d6e743841 - url_launcher_ios: 839c58cdb4279282219f5e248c3321761ff3c4de - webview_flutter_wkwebview: b7e70ef1ddded7e69c796c7390ee74180182971f - -PODFILE CHECKSUM: bf84c4e13798f92b867c8ebcbd04acc127fec6be - -COCOAPODS: 1.11.2 From 11fcda6e3d82632a26a2dedd618c39523432b27c Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Tue, 10 Jan 2023 18:23:32 +0100 Subject: [PATCH 021/190] Add deleted podfile --- ios/Podfile | 85 ++++++++++++++++ ios/Podfile.lock | 255 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 340 insertions(+) create mode 100644 ios/Podfile create mode 100644 ios/Podfile.lock diff --git a/ios/Podfile b/ios/Podfile new file mode 100644 index 000000000..3b0e0e510 --- /dev/null +++ b/ios/Podfile @@ -0,0 +1,85 @@ +# Uncomment this line to define a global platform for your project +platform :ios, '11.0' +source 'https://github.com/CocoaPods/Specs.git' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_ios_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + + # Cake Wallet (Legacy) + pod 'CryptoSwift' + pod 'UnstoppableDomainsResolution', '~> 4.0.0' +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_ios_build_settings(target) + + target.build_configurations.each do |config| + config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [ + '$(inherited)', + + ## dart: PermissionGroup.calendar + 'PERMISSION_EVENTS=0', + + ## dart: PermissionGroup.reminders + 'PERMISSION_REMINDERS=0', + + ## dart: PermissionGroup.contacts + 'PERMISSION_CONTACTS=0', + + ## dart: PermissionGroup.camera + 'PERMISSION_CAMERA=0', + + ## dart: PermissionGroup.microphone + 'PERMISSION_MICROPHONE=0', + + ## dart: PermissionGroup.speech + 'PERMISSION_SPEECH_RECOGNIZER=0', + + ## dart: PermissionGroup.photos + 'PERMISSION_PHOTOS=0', + + ## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse] + 'PERMISSION_LOCATION=0', + + ## dart: PermissionGroup.notification + 'PERMISSION_NOTIFICATIONS=0', + + ## dart: PermissionGroup.mediaLibrary + 'PERMISSION_MEDIA_LIBRARY=0', + + ## dart: PermissionGroup.sensors + 'PERMISSION_SENSORS=0' + ] + end + end +end \ No newline at end of file diff --git a/ios/Podfile.lock b/ios/Podfile.lock new file mode 100644 index 000000000..863e3ca76 --- /dev/null +++ b/ios/Podfile.lock @@ -0,0 +1,255 @@ +PODS: + - barcode_scan2 (0.0.1): + - Flutter + - MTBBarcodeScanner + - SwiftProtobuf + - BigInt (5.2.0) + - connectivity (0.0.1): + - Flutter + - Reachability + - CryptoSwift (1.3.2) + - cw_haven (0.0.1): + - cw_haven/Boost (= 0.0.1) + - cw_haven/Haven (= 0.0.1) + - cw_haven/OpenSSL (= 0.0.1) + - cw_haven/Sodium (= 0.0.1) + - cw_shared_external + - Flutter + - cw_haven/Boost (0.0.1): + - cw_shared_external + - Flutter + - cw_haven/Haven (0.0.1): + - cw_shared_external + - Flutter + - cw_haven/OpenSSL (0.0.1): + - cw_shared_external + - Flutter + - cw_haven/Sodium (0.0.1): + - cw_shared_external + - Flutter + - cw_monero (0.0.2): + - cw_monero/Boost (= 0.0.2) + - cw_monero/Monero (= 0.0.2) + - cw_monero/OpenSSL (= 0.0.2) + - cw_monero/Sodium (= 0.0.2) + - cw_monero/Unbound (= 0.0.2) + - cw_shared_external + - Flutter + - cw_monero/Boost (0.0.2): + - cw_shared_external + - Flutter + - cw_monero/Monero (0.0.2): + - cw_shared_external + - Flutter + - cw_monero/OpenSSL (0.0.2): + - cw_shared_external + - Flutter + - cw_monero/Sodium (0.0.2): + - cw_shared_external + - Flutter + - cw_monero/Unbound (0.0.2): + - cw_shared_external + - Flutter + - cw_shared_external (0.0.1): + - cw_shared_external/Boost (= 0.0.1) + - cw_shared_external/OpenSSL (= 0.0.1) + - cw_shared_external/Sodium (= 0.0.1) + - Flutter + - cw_shared_external/Boost (0.0.1): + - Flutter + - cw_shared_external/OpenSSL (0.0.1): + - Flutter + - cw_shared_external/Sodium (0.0.1): + - Flutter + - device_display_brightness (0.0.1): + - Flutter + - device_info (0.0.1): + - Flutter + - devicelocale (0.0.1): + - Flutter + - DKImagePickerController/Core (4.3.2): + - DKImagePickerController/ImageDataManager + - DKImagePickerController/Resource + - DKImagePickerController/ImageDataManager (4.3.2) + - DKImagePickerController/PhotoGallery (4.3.2): + - DKImagePickerController/Core + - DKPhotoGallery + - DKImagePickerController/Resource (4.3.2) + - DKPhotoGallery (0.0.17): + - DKPhotoGallery/Core (= 0.0.17) + - DKPhotoGallery/Model (= 0.0.17) + - DKPhotoGallery/Preview (= 0.0.17) + - DKPhotoGallery/Resource (= 0.0.17) + - SDWebImage + - SwiftyGif + - DKPhotoGallery/Core (0.0.17): + - DKPhotoGallery/Model + - DKPhotoGallery/Preview + - SDWebImage + - SwiftyGif + - DKPhotoGallery/Model (0.0.17): + - SDWebImage + - SwiftyGif + - DKPhotoGallery/Preview (0.0.17): + - DKPhotoGallery/Model + - DKPhotoGallery/Resource + - SDWebImage + - SwiftyGif + - DKPhotoGallery/Resource (0.0.17): + - SDWebImage + - SwiftyGif + - file_picker (0.0.1): + - DKImagePickerController/PhotoGallery + - Flutter + - Flutter (1.0.0) + - flutter_secure_storage (3.3.1): + - Flutter + - local_auth_ios (0.0.1): + - Flutter + - MTBBarcodeScanner (5.0.11) + - package_info (0.0.1): + - Flutter + - path_provider_ios (0.0.1): + - Flutter + - permission_handler_apple (9.0.4): + - Flutter + - platform_device_id (0.0.1): + - Flutter + - Reachability (3.2) + - SDWebImage (5.9.1): + - SDWebImage/Core (= 5.9.1) + - SDWebImage/Core (5.9.1) + - share_plus (0.0.1): + - Flutter + - shared_preferences_ios (0.0.1): + - Flutter + - SwiftProtobuf (1.18.0) + - SwiftyGif (5.3.0) + - uni_links (0.0.1): + - Flutter + - UnstoppableDomainsResolution (4.0.0): + - BigInt + - CryptoSwift + - url_launcher_ios (0.0.1): + - Flutter + - webview_flutter_wkwebview (0.0.1): + - Flutter + +DEPENDENCIES: + - barcode_scan2 (from `.symlinks/plugins/barcode_scan2/ios`) + - connectivity (from `.symlinks/plugins/connectivity/ios`) + - CryptoSwift + - cw_haven (from `.symlinks/plugins/cw_haven/ios`) + - cw_monero (from `.symlinks/plugins/cw_monero/ios`) + - cw_shared_external (from `.symlinks/plugins/cw_shared_external/ios`) + - device_display_brightness (from `.symlinks/plugins/device_display_brightness/ios`) + - device_info (from `.symlinks/plugins/device_info/ios`) + - devicelocale (from `.symlinks/plugins/devicelocale/ios`) + - file_picker (from `.symlinks/plugins/file_picker/ios`) + - Flutter (from `Flutter`) + - flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`) + - local_auth_ios (from `.symlinks/plugins/local_auth_ios/ios`) + - package_info (from `.symlinks/plugins/package_info/ios`) + - path_provider_ios (from `.symlinks/plugins/path_provider_ios/ios`) + - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`) + - platform_device_id (from `.symlinks/plugins/platform_device_id/ios`) + - share_plus (from `.symlinks/plugins/share_plus/ios`) + - shared_preferences_ios (from `.symlinks/plugins/shared_preferences_ios/ios`) + - uni_links (from `.symlinks/plugins/uni_links/ios`) + - UnstoppableDomainsResolution (~> 4.0.0) + - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) + - webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`) + +SPEC REPOS: + https://github.com/CocoaPods/Specs.git: + - BigInt + - CryptoSwift + - DKImagePickerController + - DKPhotoGallery + - MTBBarcodeScanner + - Reachability + - SDWebImage + - SwiftProtobuf + - SwiftyGif + - UnstoppableDomainsResolution + +EXTERNAL SOURCES: + barcode_scan2: + :path: ".symlinks/plugins/barcode_scan2/ios" + connectivity: + :path: ".symlinks/plugins/connectivity/ios" + cw_haven: + :path: ".symlinks/plugins/cw_haven/ios" + cw_monero: + :path: ".symlinks/plugins/cw_monero/ios" + cw_shared_external: + :path: ".symlinks/plugins/cw_shared_external/ios" + device_display_brightness: + :path: ".symlinks/plugins/device_display_brightness/ios" + device_info: + :path: ".symlinks/plugins/device_info/ios" + devicelocale: + :path: ".symlinks/plugins/devicelocale/ios" + file_picker: + :path: ".symlinks/plugins/file_picker/ios" + Flutter: + :path: Flutter + flutter_secure_storage: + :path: ".symlinks/plugins/flutter_secure_storage/ios" + local_auth_ios: + :path: ".symlinks/plugins/local_auth_ios/ios" + package_info: + :path: ".symlinks/plugins/package_info/ios" + path_provider_ios: + :path: ".symlinks/plugins/path_provider_ios/ios" + permission_handler_apple: + :path: ".symlinks/plugins/permission_handler_apple/ios" + platform_device_id: + :path: ".symlinks/plugins/platform_device_id/ios" + share_plus: + :path: ".symlinks/plugins/share_plus/ios" + shared_preferences_ios: + :path: ".symlinks/plugins/shared_preferences_ios/ios" + uni_links: + :path: ".symlinks/plugins/uni_links/ios" + url_launcher_ios: + :path: ".symlinks/plugins/url_launcher_ios/ios" + webview_flutter_wkwebview: + :path: ".symlinks/plugins/webview_flutter_wkwebview/ios" + +SPEC CHECKSUMS: + barcode_scan2: 0af2bb63c81b4565aab6cd78278e4c0fa136dbb0 + BigInt: f668a80089607f521586bbe29513d708491ef2f7 + connectivity: c4130b2985d4ef6fd26f9702e886bd5260681467 + CryptoSwift: 093499be1a94b0cae36e6c26b70870668cb56060 + cw_haven: b3e54e1fbe7b8e6fda57a93206bc38f8e89b898a + cw_monero: 4cf3b96f2da8e95e2ef7d6703dd4d2c509127b7d + cw_shared_external: 2972d872b8917603478117c9957dfca611845a92 + device_display_brightness: 1510e72c567a1f6ce6ffe393dcd9afd1426034f7 + device_info: d7d233b645a32c40dfdc212de5cf646ca482f175 + devicelocale: b22617f40038496deffba44747101255cee005b0 + DKImagePickerController: b5eb7f7a388e4643264105d648d01f727110fc3d + DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179 + file_picker: 817ab1d8cd2da9d2da412a417162deee3500fc95 + Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 + flutter_secure_storage: 7953c38a04c3fdbb00571bcd87d8e3b5ceb9daec + local_auth_ios: 0d333dde7780f669e66f19d2ff6005f3ea84008d + MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb + package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62 + path_provider_ios: 14f3d2fd28c4fdb42f44e0f751d12861c43cee02 + permission_handler_apple: 44366e37eaf29454a1e7b1b7d736c2cceaeb17ce + platform_device_id: 81b3e2993881f87d0c82ef151dc274df4869aef5 + Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96 + SDWebImage: a990c053fff71e388a10f3357edb0be17929c9c5 + share_plus: 056a1e8ac890df3e33cb503afffaf1e9b4fbae68 + shared_preferences_ios: 548a61f8053b9b8a49ac19c1ffbc8b92c50d68ad + SwiftProtobuf: c3c12645230d9b09c72267e0de89468c5543bd86 + SwiftyGif: e466e86c660d343357ab944a819a101c4127cb40 + uni_links: d97da20c7701486ba192624d99bffaaffcfc298a + UnstoppableDomainsResolution: c3c67f4d0a5e2437cb00d4bd50c2e00d6e743841 + url_launcher_ios: 839c58cdb4279282219f5e248c3321761ff3c4de + webview_flutter_wkwebview: b7e70ef1ddded7e69c796c7390ee74180182971f + +PODFILE CHECKSUM: ae71bdf0eb731a1ffc399c122f6aa4dea0cb5f6f + +COCOAPODS: 1.11.3 \ No newline at end of file From 8c0b90eff7aa58f9b5bef75253e1d20b595d24aa Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Tue, 10 Jan 2023 18:27:34 +0100 Subject: [PATCH 022/190] Add deleted podfile --- ios/Podfile | 2 +- ios/Podfile.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ios/Podfile b/ios/Podfile index 3b0e0e510..b29d40484 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -82,4 +82,4 @@ post_install do |installer| ] end end -end \ No newline at end of file +end diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 863e3ca76..3a810430d 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -252,4 +252,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: ae71bdf0eb731a1ffc399c122f6aa4dea0cb5f6f -COCOAPODS: 1.11.3 \ No newline at end of file +COCOAPODS: 1.11.3 From 43dc729db4b6b9edc5cfcb4be3b8107ac324c698 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Tue, 10 Jan 2023 19:52:53 +0200 Subject: [PATCH 023/190] Trim the content scanned via QR to remove extra spaces/new lines --- lib/entities/qr_scanner.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/entities/qr_scanner.dart b/lib/entities/qr_scanner.dart index 8c23f6ea1..c6873a5bc 100644 --- a/lib/entities/qr_scanner.dart +++ b/lib/entities/qr_scanner.dart @@ -7,7 +7,7 @@ Future presentQRScanner() async { try { final result = await BarcodeScanner.scan(); isQrScannerShown = false; - return result.rawContent; + return result.rawContent.trim(); } catch (e) { isQrScannerShown = false; rethrow; From 8be2079b02c16dfe0b492934510bb6efc8f473f4 Mon Sep 17 00:00:00 2001 From: Mathias Herberts Date: Wed, 11 Jan 2023 09:44:27 +0100 Subject: [PATCH 024/190] Minor changes for a more natural feel --- res/values/strings_fr.arb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/res/values/strings_fr.arb b/res/values/strings_fr.arb index 99fbcd282..00f514f7b 100644 --- a/res/values/strings_fr.arb +++ b/res/values/strings_fr.arb @@ -149,7 +149,7 @@ "subaddresses" : "Sous-adresses", "addresses" : "Adresses", "scan_qr_code" : "Scannez le QR code pour obtenir l'adresse", - "qr_fullscreen" : "Appuyez pour ouvrir le QR code en plein écran", + "qr_fullscreen" : "Appuyez pour ouvrir le QR code en mode plein écran", "rename" : "Renommer", "choose_account" : "Choisir le compte", "create_new_account" : "Créer un nouveau compte", @@ -267,7 +267,7 @@ "new_subaddress_label_name" : "Nom", "new_subaddress_create" : "Créer", - "address_label" : "Étiquette de l'adresse", + "address_label" : "Nom de l'adresse", "subaddress_title" : "Liste des sous-adresses", From b05028a04b2af0ceebaf7f24bd432afd270ee2a0 Mon Sep 17 00:00:00 2001 From: Justin Ehrenhofer Date: Wed, 11 Jan 2023 12:30:48 -0600 Subject: [PATCH 025/190] Organize trade assets and add fullNames --- cw_core/lib/crypto_currency.dart | 93 ++++++++++++++++---------------- 1 file changed, 47 insertions(+), 46 deletions(-) diff --git a/cw_core/lib/crypto_currency.dart b/cw_core/lib/crypto_currency.dart index 3ee2b5e15..85331ee31 100644 --- a/cw_core/lib/crypto_currency.dart +++ b/cw_core/lib/crypto_currency.dart @@ -83,23 +83,24 @@ class CryptoCurrency extends EnumerableItem with Serializable { xusd, ]; - static const xmr = CryptoCurrency(title: 'XMR', iconPath: 'assets/images/monero_icon.png', fullName: 'Monero', raw: 0, name: 'xmr'); - static const ada = CryptoCurrency(title: 'ADA', iconPath: 'assets/images/ada_icon.png', fullName: 'Cardano', raw: 1, name: 'ada'); - static const bch = CryptoCurrency(title: 'BCH', iconPath: 'assets/images/bch_icon.png',fullName: 'Bitcoin Cash', raw: 2, name: 'bch'); - static const bnb = CryptoCurrency(title: 'BNB', iconPath: 'assets/images/bnb_icon.png', tag: 'BSC', fullName: 'Binance Coin', raw: 3, name: 'bnb'); - static const btc = CryptoCurrency(title: 'BTC', iconPath: 'assets/images/btc.png', fullName: 'Bitcoin', raw: 4, name: 'btc'); - static const dai = CryptoCurrency(title: 'DAI', iconPath: 'assets/images/dai_icon.png', tag: 'ETH', fullName: 'Dai', raw: 5, name: 'dai'); - static const dash = CryptoCurrency(title: 'DASH', iconPath: 'assets/images/dash_icon.png', fullName: 'Dash', raw: 6, name: 'dash'); - static const eos = CryptoCurrency(title: 'EOS', iconPath: 'assets/images/eos_icon.png', fullName: 'EOS', raw: 7, name: 'eos'); - static const eth = CryptoCurrency(title: 'ETH', iconPath: 'assets/images/eth_icon.png', fullName: 'Ethereum', raw: 8, name: 'eth'); - static const ltc = CryptoCurrency(title: 'LTC', iconPath: 'assets/images/litecoin-ltc_icon.png', fullName: 'Litecoin', raw: 9, name: 'ltc'); + // title, tag (if applicable), fullName (if unique), raw, name, iconPath + static const xmr = CryptoCurrency(title: 'XMR', fullName: 'Monero', raw: 0, name: 'xmr', iconPath: 'assets/images/monero_icon.png'); + static const ada = CryptoCurrency(title: 'ADA', fullName: 'Cardano', raw: 1, name: 'ada', iconPath: 'assets/images/ada_icon.png'); + static const bch = CryptoCurrency(title: 'BCH', fullName: 'Bitcoin Cash', raw: 2, name: 'bch', iconPath: 'assets/images/bch_icon.png'); + static const bnb = CryptoCurrency(title: 'BNB', tag: 'BSC', fullName: 'Binance Coin', raw: 3, name: 'bnb', iconPath: 'assets/images/bnb_icon.png'); + static const btc = CryptoCurrency(title: 'BTC', fullName: 'Bitcoin', raw: 4, name: 'btc', iconPath: 'assets/images/btc.png'); + static const dai = CryptoCurrency(title: 'DAI', tag: 'ETH', fullName: 'Dai', raw: 5, name: 'dai', iconPath: 'assets/images/dai_icon.png'); + static const dash = CryptoCurrency(title: 'DASH', fullName: 'Dash', raw: 6, name: 'dash', iconPath: 'assets/images/dash_icon.png'); + static const eos = CryptoCurrency(title: 'EOS', fullName: 'EOS', raw: 7, name: 'eos', iconPath: 'assets/images/eos_icon.png'); + static const eth = CryptoCurrency(title: 'ETH', fullName: 'Ethereum', raw: 8, name: 'eth', iconPath: 'assets/images/eth_icon.png'); + static const ltc = CryptoCurrency(title: 'LTC', fullName: 'Litecoin', raw: 9, name: 'ltc', iconPath: 'assets/images/litecoin-ltc_icon.png'); static const nano = CryptoCurrency(title: 'NANO', raw: 10, name: 'nano'); - static const trx = CryptoCurrency(title: 'TRX', iconPath: 'assets/images/trx_icon.png', fullName: 'TRON', raw: 11, name: 'trx'); - static const usdt = CryptoCurrency(title: 'USDT', iconPath: 'assets/images/usdt_icon.png', tag: 'OMNI', fullName: 'USDT', raw: 12, name: 'usdt'); - static const usdterc20 = CryptoCurrency(title: 'USDT', iconPath: 'assets/images/usdterc20_icon.png', tag: 'ETH', fullName: 'USDT', raw: 13, name: 'usdterc20'); - static const xlm = CryptoCurrency(title: 'XLM', iconPath: 'assets/images/xlm_icon.png', fullName: 'Stellar', raw: 14, name: 'xlm'); - static const xrp = CryptoCurrency(title: 'XRP', iconPath: 'assets/images/xrp_icon.png', fullName: 'Ripple', raw: 15, name: 'xrp'); - static const xhv = CryptoCurrency(title: 'XHV', iconPath: 'assets/images/xhv_logo.png', fullName: 'Haven Protocol', raw: 16, name: 'xhv'); + static const trx = CryptoCurrency(title: 'TRX', fullName: 'TRON', raw: 11, name: 'trx', iconPath: 'assets/images/trx_icon.png'); + static const usdt = CryptoCurrency(title: 'USDT', tag: 'OMNI', fullName: 'USDT Tether', raw: 12, name: 'usdt', iconPath: 'assets/images/usdt_icon.png'); + static const usdterc20 = CryptoCurrency(title: 'USDT', tag: 'ETH', fullName: 'USDT Tether', raw: 13, name: 'usdterc20', iconPath: 'assets/images/usdterc20_icon.png'); + static const xlm = CryptoCurrency(title: 'XLM', fullName: 'Stellar', raw: 14, name: 'xlm', iconPath: 'assets/images/xlm_icon.png'); + static const xrp = CryptoCurrency(title: 'XRP', fullName: 'Ripple', raw: 15, name: 'xrp', iconPath: 'assets/images/xrp_icon.png'); + static const xhv = CryptoCurrency(title: 'XHV', fullName: 'Haven Protocol', raw: 16, name: 'xhv', iconPath: 'assets/images/xhv_logo.png'); static const xag = CryptoCurrency(title: 'XAG', tag: 'XHV', raw: 17, name: 'xag'); static const xau = CryptoCurrency(title: 'XAU', tag: 'XHV', raw: 18, name: 'xau'); @@ -115,39 +116,39 @@ class CryptoCurrency extends EnumerableItem with Serializable { static const xnzd = CryptoCurrency(title: 'XNZD', tag: 'XHV', raw: 28, name: 'xnzd'); static const xusd = CryptoCurrency(title: 'XUSD', tag: 'XHV', raw: 29, name: 'xusd'); - static const ape = CryptoCurrency(title: 'APE', iconPath: 'assets/images/ape_icon.png', tag: 'ETH', raw: 30, name: 'ape'); - static const avaxc = CryptoCurrency(title: 'AVAX', iconPath: 'assets/images/avaxc_icon.png', tag: 'C-CHAIN', raw: 31, name: 'avaxc'); - static const btt = CryptoCurrency(title: 'BTT', iconPath: 'assets/images/btt_icon.png', raw: 32, name: 'btt'); - static const bttc = CryptoCurrency(title: 'BTTC', iconPath: 'assets/images/bttbsc_icon.png',fullName: 'BitTorrent-NEW (Binance Smart Chain)', tag: 'BSC', raw: 33, name: 'bttc'); - static const doge = CryptoCurrency(title: 'DOGE', iconPath: 'assets/images/doge_icon.png', raw: 34, name: 'doge'); - static const firo = CryptoCurrency(title: 'FIRO', iconPath: 'assets/images/firo_icon.png', raw: 35, name: 'firo'); - static const usdttrc20 = CryptoCurrency(title: 'USDT', iconPath: 'assets/images/usdttrc20_icon.png', tag: 'TRX', raw: 36, name: 'usdttrc20'); - static const hbar = CryptoCurrency(title: 'HBAR', iconPath: 'assets/images/hbar_icon.png', raw: 37, name: 'hbar'); - static const sc = CryptoCurrency(title: 'SC', iconPath: 'assets/images/sc_icon.png', raw: 38, name: 'sc'); - static const sol = CryptoCurrency(title: 'SOL', iconPath: 'assets/images/sol_icon.png', raw: 39, name: 'sol'); - static const usdc = CryptoCurrency(title: 'USDC', iconPath: 'assets/images/usdc_icon.png', tag: 'ETH', raw: 40, name: 'usdc'); - static const usdcsol = CryptoCurrency(title: 'USDC', iconPath: 'assets/images/usdcsol_icon.png', tag: 'SOL', raw: 41, name: 'usdcsol'); + 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 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'); + static const hbar = CryptoCurrency(title: 'HBAR', fullName: 'Hedera', raw: 37, name: 'hbar', iconPath: 'assets/images/hbar_icon.png', ); + static const sc = CryptoCurrency(title: 'SC', fullName: 'Siacoin', raw: 38, name: 'sc', iconPath: 'assets/images/sc_icon.png'); + static const sol = CryptoCurrency(title: 'SOL', fullName: 'Solana', raw: 39, name: 'sol', iconPath: 'assets/images/sol_icon.png'); + static const usdc = CryptoCurrency(title: 'USDC', tag: 'ETH', fullName: 'USD Coin', raw: 40, name: 'usdc', iconPath: 'assets/images/usdc_icon.png'); + static const usdcsol = CryptoCurrency(title: 'USDC', tag: 'SOL', fullName: 'USDC Coin', raw: 41, name: 'usdcsol', iconPath: 'assets/images/usdcsol_icon.png'); static const zaddr = CryptoCurrency(title: 'ZZEC', tag: 'ZEC', fullName: 'Shielded Zcash', iconPath: 'assets/images/zaddr_icon.png', raw: 42, name: 'zaddr'); static const zec = CryptoCurrency(title: 'TZEC', tag: 'ZEC', fullName: 'Transparent Zcash', iconPath: 'assets/images/zec_icon.png', raw: 43, name: 'zec'); - static const zen = CryptoCurrency(title: 'ZEN', iconPath: 'assets/images/zen_icon.png', raw: 44, name: 'zen'); - static const xvg = CryptoCurrency(title: 'XVG', fullName: 'Verge', iconPath: 'assets/images/xvg_icon.png', raw: 45, name: 'xvg'); + static const zen = CryptoCurrency(title: 'ZEN', fullName: 'Horizen', raw: 44, name: 'zen', iconPath: 'assets/images/zen_icon.png'); + static const xvg = CryptoCurrency(title: 'XVG', fullName: 'Verge', raw: 45, name: 'xvg', iconPath: 'assets/images/xvg_icon.png'); - static const usdcpoly = CryptoCurrency(title: 'USDC', iconPath: 'assets/images/usdc_icon.png', tag: 'POLY', raw: 46, name: 'usdcpoly'); - static const dcr = CryptoCurrency(title: 'DCR', iconPath: 'assets/images/dcr_icon.png', raw: 47, name: 'dcr'); - static const kmd = CryptoCurrency(title: 'KMD', iconPath: 'assets/images/kmd_icon.png', raw: 48, name: 'kmd'); - static const mana = CryptoCurrency(title: 'MANA', iconPath: 'assets/images/mana_icon.png', tag: 'ETH', raw: 49, name: 'mana'); - static const maticpoly = CryptoCurrency(title: 'MATIC', iconPath: 'assets/images/matic_icon.png', tag: 'POLY', raw: 50, name: 'maticpoly'); - static const matic = CryptoCurrency(title: 'MATIC', iconPath: 'assets/images/matic_icon.png', tag: 'ETH', raw: 51, name: 'matic'); - static const mkr = CryptoCurrency(title: 'MKR', iconPath: 'assets/images/mkr_icon.png', tag: 'ETH', raw: 52, name: 'mkr'); - static const near = CryptoCurrency(title: 'NEAR', iconPath: 'assets/images/near_icon.png', raw: 53, name: 'near'); - static const oxt = CryptoCurrency(title: 'OXT', iconPath: 'assets/images/oxt_icon.png', tag: 'ETH', raw: 54, name: 'oxt'); - static const paxg = CryptoCurrency(title: 'PAXG', iconPath: 'assets/images/paxg_icon.png', tag: 'ETH', raw: 55, name: 'paxg'); - static const pivx = CryptoCurrency(title: 'PIVX', iconPath: 'assets/images/pivx_icon.png', raw: 56, name: 'pivx'); - static const rune = CryptoCurrency(title: 'RUNE', iconPath: 'assets/images/rune_icon.png', raw: 57, name: 'rune'); - static const rvn = CryptoCurrency(title: 'RVN', iconPath: 'assets/images/rvn_icon.png', raw: 58, name: 'rvn'); - static const scrt = CryptoCurrency(title: 'SCRT', iconPath: 'assets/images/scrt_icon.png', raw: 59, name: 'scrt'); - static const uni = CryptoCurrency(title: 'UNI', iconPath: 'assets/images/uni_icon.png', tag: 'ETH', raw: 60, name: 'uni'); - static const stx = CryptoCurrency(title: 'STX', iconPath: 'assets/images/stx_icon.png', raw: 61, name: 'stx'); + static const usdcpoly = CryptoCurrency(title: 'USDC', tag: 'POLY', fullName: 'USD Coin', raw: 46, name: 'usdcpoly', iconPath: 'assets/images/usdc_icon.png'); + static const dcr = CryptoCurrency(title: 'DCR', fullName: 'Decred', raw: 47, name: 'dcr', iconPath: 'assets/images/dcr_icon.png'); + static const kmd = CryptoCurrency(title: 'KMD', fullName: 'Komodo', raw: 48, name: 'kmd', iconPath: 'assets/images/kmd_icon.png'); + static const mana = CryptoCurrency(title: 'MANA', tag: 'ETH', fullName: 'Decentraland', raw: 49, name: 'mana', iconPath: 'assets/images/mana_icon.png'); + static const maticpoly = CryptoCurrency(title: 'MATIC', tag: 'POLY', fullName: 'Polygon', raw: 50, name: 'maticpoly', iconPath: 'assets/images/matic_icon.png'); + static const matic = CryptoCurrency(title: 'MATIC', tag: 'ETH', fullName: 'Polygon', raw: 51, name: 'matic', iconPath: 'assets/images/matic_icon.png'); + static const mkr = CryptoCurrency(title: 'MKR', tag: 'ETH', fullName: 'Maker', raw: 52, name: 'mkr', iconPath: 'assets/images/mkr_icon.png'); + static const near = CryptoCurrency(title: 'NEAR', fullName: 'NEAR Protocol', raw: 53, name: 'near', iconPath: 'assets/images/near_icon.png'); + static const oxt = CryptoCurrency(title: 'OXT', tag: 'ETH', fullName: 'Orchid', raw: 54, name: 'oxt', iconPath: 'assets/images/oxt_icon.png'); + static const paxg = CryptoCurrency(title: 'PAXG', tag: 'ETH', fullName: 'Pax Gold', raw: 55, name: 'paxg', iconPath: 'assets/images/paxg_icon.png'); + static const pivx = CryptoCurrency(title: 'PIVX', raw: 56, name: 'pivx', iconPath: 'assets/images/pivx_icon.png'); + static const rune = CryptoCurrency(title: 'RUNE', fullName: 'Thorchain', raw: 57, name: 'rune', iconPath: 'assets/images/rune_icon.png'); + static const rvn = CryptoCurrency(title: 'RVN', fullName: 'Ravencoin', raw: 58, name: 'rvn', iconPath: 'assets/images/rvn_icon.png'); + static const scrt = CryptoCurrency(title: 'SCRT', fullName: 'Secret Network', raw: 59, name: 'scrt', iconPath: 'assets/images/scrt_icon.png'); + static const uni = CryptoCurrency(title: 'UNI', tag: 'ETH', fullName: 'Uniswap', raw: 60, name: 'uni', iconPath: 'assets/images/uni_icon.png'); + static const stx = CryptoCurrency(title: 'STX', fullName: 'Stacks', raw: 61, name: 'stx', iconPath: 'assets/images/stx_icon.png'); static final Map _rawCurrencyMap = [...all, ...havenCurrencies].fold>({}, (acc, item) { From 5c742d127b7413ef7c247f0b0ab10745df7c5791 Mon Sep 17 00:00:00 2001 From: Justin Ehrenhofer Date: Wed, 11 Jan 2023 14:46:32 -0600 Subject: [PATCH 026/190] Bump Haven to 3.0.3 --- scripts/android/build_haven.sh | 2 +- scripts/ios/build_haven.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/android/build_haven.sh b/scripts/android/build_haven.sh index 5f3c9e50a..ec5732e86 100755 --- a/scripts/android/build_haven.sh +++ b/scripts/android/build_haven.sh @@ -1,7 +1,7 @@ #!/bin/sh . ./config.sh -HAVEN_VERSION=tags/v3.0.0 +HAVEN_VERSION=tags/v3.0.3 HAVEN_SRC_DIR=${WORKDIR}/haven git clone https://github.com/haven-protocol-org/haven-main.git ${HAVEN_SRC_DIR} diff --git a/scripts/ios/build_haven.sh b/scripts/ios/build_haven.sh index 3199e3286..d9974b060 100755 --- a/scripts/ios/build_haven.sh +++ b/scripts/ios/build_haven.sh @@ -4,7 +4,7 @@ HAVEN_URL="https://github.com/haven-protocol-org/haven-main.git" HAVEN_DIR_PATH="${EXTERNAL_IOS_SOURCE_DIR}/haven" -HAVEN_VERSION=tags/v3.0.0 +HAVEN_VERSION=tags/v3.0.3 BUILD_TYPE=release PREFIX=${EXTERNAL_IOS_DIR} DEST_LIB_DIR=${EXTERNAL_IOS_LIB_DIR}/haven From 1c139386a71e4d02436eeae4db04f08f3231c735 Mon Sep 17 00:00:00 2001 From: HardenedSteel Date: Wed, 11 Jan 2023 02:19:16 +0300 Subject: [PATCH 027/190] Add Turkish Language --- assets/images/flags/tur.png | Bin 0 -> 6608 bytes lib/entities/language_service.dart | 6 +- res/values/strings_tr.arb | 683 +++++++++++++++++++++++++++++ 3 files changed, 687 insertions(+), 2 deletions(-) create mode 100644 assets/images/flags/tur.png create mode 100644 res/values/strings_tr.arb diff --git a/assets/images/flags/tur.png b/assets/images/flags/tur.png new file mode 100644 index 0000000000000000000000000000000000000000..71a0d8ffcef38e9509f166a24290b584095c2e4c GIT binary patch literal 6608 zcmeAS@N?(olHy`uVBq!ia0vp^T0pGA!3HG%pIo60q*&4&eH|GXHuiJ>Nn~YUU~J8F zb`J1#c2+1T%1_J8No8Qrm{>c}+T(D5NZbEyUQ0t{bd(-VSZK9XVPC-&Es=#zD@3D8 z4R*fdo@JtdV0j8%t)Pg~7e3CjOW~vP_0;M2EyQKNeLmAM(eu2pdq-;$ z`)S!TUTt1Bo-&~!y`TO@P8U5FJ?E-d@78xG<0Z~zYoCr;ZrY`r( zE!j(EcwDYLblCpM57(lTPqdmRCNqYvm>^^SL;laawUIL<$|oP!vW)hrCa}AWi$BfS+#eqYk$MO+y{?#tvy+N;3=QMk0su1Pdpf-{y8yL z*e}jM#rSu-L&n*;(XVBe^Ei(P=vFcJ2O<~vB!wu*kwWvQ z1KXoO|NZ~Z@Ts+j;dB2KhW|f)qBx3GLydt|SDWGY<*O*-lyHa+QD#XAV7u!u0~0SV z*uD=H^$cGo&%|vv3os1+{9#~ZXJh#P=Pv`pUmzwCAcrW?xt=E@3GT>W=PxmQnKBE% zwLnLL0F$5~17AfULMu*D(t;sRbcnJjD!?`WzJ3$V#>HUd=3?Ls^kER_ZDn9!W@ZrRYyxLMavTY=gJ_51 zauB`5iFW9pd-vgPV%1cKvvD#0fBnYref<`O55?8sjP#+rj^Y28FASiPgB(C~8vOw* z%vp6n{b&XTp40?}uM3wEolZY>_9HSMnVE^`5d8wIasGY!1a>H^fi442P8yhvlK>S@ zK=AMVdxlRP{Rm~i@|PSyv_t>Cc**cSrvzy8Kd?Ol?F|fkRV56JoE#YTf@&vN^7#Mr z7g=Q}x}hkA8ZlKUXOJ(0;M86QCO$r}S>P&k&whqKH*YgA^6^5d&{gXhzHiuqZWqaX z localeCountryCode = { @@ -40,7 +41,8 @@ class LanguageService { 'hr': 'hrv', 'it': 'ita', 'th': 'tha', - 'ar': 'sau' + 'ar': 'sau', + 'tr': 'tur' }; static final list = {}; diff --git a/res/values/strings_tr.arb b/res/values/strings_tr.arb new file mode 100644 index 000000000..9263417d5 --- /dev/null +++ b/res/values/strings_tr.arb @@ -0,0 +1,683 @@ +{ + "welcome" : "Hoş Geldiniz", + "cake_wallet" : "Cake Wallet", + "first_wallet_text" : "Monero, Bitcoin, Litecoin ve Haven için harika cüzdan", + "please_make_selection" : "Cüzdan oluşturmak veya geri döndürmek için aşağıdan seçim yap.", + "create_new" : "Yeni Cüzdan Oluştur", + "restore_wallet" : "Cüzdanı Geri Döndür", + + "monero_com": "Cake Wallet tarafından Monero.com", + "monero_com_wallet_text": "Monero için harika cüzdan", + + "haven_app": "Cake Wallet tarafından Haven", + "haven_app_wallet_text": "Haven için harika cüzdan ", + + "accounts" : "Hesaplar", + "edit" : "Düzenle", + "account" : "Hesap", + "add" : "Ekle", + + + "address_book" : "Adres Defteri", + "contact" : "Rehber", + "please_select" : "Lütfen seçim yap:", + "cancel" : "İptal", + "ok" : "Tamam", + "contact_name" : "Kişi ismi", + "reset" : "Sıfırla", + "save" : "Kaydet", + "address_remove_contact" : "Kişiyi sil", + "address_remove_content" : "Seçili kişiyi silmek istediğinden emin misin?", + + + "authenticated" : "Doğrulandı", + "authentication" : "Doğrulama", + "failed_authentication" : "Doğrulama başarısız oldu. ${state_error}", + + + "wallet_menu" : "Menü", + "Blocks_remaining" : "${status} Blok Kaldı", + "please_try_to_connect_to_another_node" : "Lütfen farklı düğüme bağlanmayı dene", + "xmr_hidden" : "Gizli", + "xmr_available_balance" : "Kullanılabilir Bakiye", + "xmr_full_balance" : "Tüm Bakiye", + "send" : "Para Gönder", + "receive" : "Para Al", + "transactions" : "İşlemler", + "incoming" : "Gelen", + "outgoing" : "Giden", + "transactions_by_date" : "Tarihe göre transferler", + "trades" : "Takaslar", + "filter_by": "Şuna göre filtrele", + "today" : "Bugün", + "yesterday" : "Dün", + "received" : "Alındı", + "sent" : "Gönderildi", + "pending" : " (bekleyen)", + "rescan" : "Yeniden Tara", + "reconnect" : "Yeniden Bağlan", + "wallets" : "Cüzdanlar", + "show_seed" : "Tohumları göster", + "show_keys" : "Tohumları/anahtarları göster", + "address_book_menu" : "Adres defteri", + "reconnection" : "Yeniden bağlantı", + "reconnect_alert_text" : "Yeniden bağlanmak istediğinden emin misin?", + + + "exchange" : "Takas", + "clear" : "Temizle", + "refund_address" : "İade adresi", + "change_exchange_provider" : "Takas sağlayıcısını değiştir", + "you_will_send" : "Biçiminden dönüştür:", + "you_will_get" : "Biçimine dönüştür:", + "amount_is_guaranteed" : "Alacağınız tutar garantilidir", + "amount_is_estimate" : "Alacağınız tutar tahminidir", + "powered_by" : "${title} tarafından desteklenmektedir", + "error" : "Hata", + "estimated" : "Tahmini", + "min_value" : "En az: ${value} ${currency}", + "max_value" : "En fazla: ${value} ${currency}", + "change_currency" : "Para Birimini Değiştir", + "overwrite_amount" : "Miktarın üzerine yaz", + "qr_payment_amount" : "Bu QR kodu ödeme tutarını içeriyor. Geçerli miktarın üzerine yazmak istediğine emin misin?", + + "copy_id" : "ID'yi kopyala", + "exchange_result_write_down_trade_id" : "Devam etmek için lütfen ID'yi kopyala veya bir yere yaz.", + "trade_id" : "Takas ID'si:", + "copied_to_clipboard" : "Panoya Kopyalandı", + "saved_the_trade_id" : "Takas ID'imi kaydettim", + "fetching" : "Getiriliyor", + "id" : "ID: ", + "amount" : "Miktar: ", + "payment_id" : "Ödeme ID'si: ", + "status" : "Durum: ", + "offer_expires_in" : "Teklifin bitmesine kalan: ", + "trade_is_powered_by" : "Bu takas ${provider} tarafından desteklenmektedir", + "copy_address" : "Adresi kopyala", + "exchange_result_confirm" : "Onaylaya basarak, ${fetchingLabel} ${from} miktarında ${walletName} olarak adlandırılan cüzdanından aşağıda gösterilen adrese gönderilecek. Veya harici cüzdanından aşağıdaki adrese / QR koduna gönderebilirsin.\n\nLütfen devam etmek için onayla'ya bas veya tutarı değiştirmek için geri dön.", + "exchange_result_description" : "Lütfen en az ${fetchingLabel} miktarındaki ${from}'yi sonraki sayfada gönsterilen adrese gönder. Eğer ${fetchingLabel} ${from}'den az gönderirsen takas gerçekleşmeyebilir ve size geri iade edilebilir.", + "exchange_result_write_down_ID" : "*Lütfen yukarıda gösterilen ID'ni kopyala veya bir yere yaz.", + "confirm" : "Onayla", + "confirm_sending" : "Göndermeyi onayla", + "commit_transaction_amount_fee" : "Transferi gerçekleştir\nMiktar: ${amount}\nKomisyon: ${fee}", + "sending" : "Gönderiliyor", + "transaction_sent" : "Transfer gönderildi!", + "expired" : "Süresi doldu", + "time" : "${minutes}d ${seconds}s", + "send_xmr" : "XMR gönder", + "exchange_new_template" : "Yeni şablon", + + "faq" : "SSS", + + + "enter_your_pin" : "PIN'ini gir", + "loading_your_wallet" : "Cüzdanın yükleniyor", + + + "new_wallet" : "Yeni Cüzdan", + "wallet_name" : "Cüzdan ismi", + "continue_text" : "Devam et", + "choose_wallet_currency" : "Lütfen cüzdanın para birimini seç:", + + + "node_new" : "Yeni düğüm", + "node_address" : "Düğüm adresi", + "node_port" : "Düğüm port'u", + "login" : "Login", + "password" : "Parola", + "nodes" : "Düğümler", + "node_reset_settings_title" : "Ayarları sıfırla", + "nodes_list_reset_to_default_message" : "Ayarları varsayılana sıfırlamak istediğinizden emin misin?", + "change_current_node" : "Şimdiki düğümü ${node} düğümüne değiştirmek istediğinizden emin misin?", + "change" : "Değiştir", + "remove_node" : "Düğümü kaldır", + "remove_node_message" : "Seçili düğümü kaldırmak istediğinden emin misin?", + "remove" : "Kaldır", + "delete" : "Sil", + "add_new_node" : "Yeni düğüm ekle", + "change_current_node_title" : "Şimdiki düğümü değiştir", + "node_test" : "Test Et", + "node_connection_successful" : "Bağlantı başarılı oldu", + "node_connection_failed" : "Bağlantı başarısız oldu", + "new_node_testing" : "Yeni düğüm test ediliyor", + + + "use" : "Şuna geç: ", + "digit_pin" : " haneli PIN", + + + "share_address" : "Adresi paylaş", + "receive_amount" : "Miktar", + "subaddresses" : "Alt adresler", + "addresses" : "Adresler", + "scan_qr_code" : "Adresi getirmek için QR kodunu tara", + "qr_fullscreen" : "QR kodunu tam ekranda açmak için dokun", + "rename" : "Yeniden adlandır", + "choose_account" : "Hesabı seç", + "create_new_account" : "Yeni hesap oluştur", + "accounts_subaddresses" : "Hesaplar ve alt adresler", + + + "restore_restore_wallet" : "Cüzdanı Geri Döndür", + "restore_title_from_seed_keys" : "Tohumdan/anahtarlardan geri döndür", + "restore_description_from_seed_keys" : "Güvenli bir yere kaydettiğin tohumdan/anahtarlardan cüzdanını geri döndür", + "restore_next" : "İleri", + "restore_title_from_backup" : "Yedekten geri döndür", + "restore_description_from_backup" : "Yedek dosyandan tüm Cake Wallet uygulamasını geri döndürebilirsin", + "restore_seed_keys_restore" : "Tohumu/Anahtarları Geri Döndür", + "restore_title_from_seed" : "Tohumdan geri döndür", + "restore_description_from_seed" : "Cüzdanınızı 25 veya 13 kelimelik kombinasyon kodundan geri döndürün", + "restore_title_from_keys" : "Anahtarlardan geri döndür", + "restore_description_from_keys" : "Cüzdanınızı özel anahtarlarınızdan kaydedilen oluşturulmuş tuş vuruşlarından geri yükleyin", + "restore_wallet_name" : "Cüzdan ismi", + "restore_address" : "Adres", + "restore_view_key_private" : "İzleme anahtarı (Özel)", + "restore_spend_key_private" : "Harcama anahtarı (Özel)", + "restore_recover" : "Geri döndür", + "restore_wallet_restore_description" : "Cüzdan geri döndürme açıklaması", + "restore_new_seed" : "Yeni tohum", + "restore_active_seed" : "Tohumu aktifleştir", + "restore_bitcoin_description_from_seed" : "Cüzdanınızı 24 kelimelik kombinasyon kodundan geri yükle", + "restore_bitcoin_description_from_keys" : "Cüzdanını, oluşturulan WIF dizesinden veya özel anahtarlarından geri yükle", + "restore_bitcoin_title_from_keys" : "WIF'den geri yükle", + "restore_from_date_or_blockheight" : "Lütfen bu cüzdanı oluşturmadan birkaç gün önceki bir tarihi girin. Veya blok yüksekliğini biliyorsan, lütfen bunu gir", + + + "seed_reminder" : "Telefonunu kaybetmen veya silinmesi ihtimaline karşı lütfen bunları not et", + "seed_title" : "Tohum", + "seed_share" : "Tohumu paylaş", + "copy" : "Kopyala", + + + "seed_language_choose" : "Lütfen tohum dilini seç:", + "seed_choose" : "Tohum dilini seçin", + "seed_language_next" : "İleri", + "seed_language_english" : "İngilizce", + "seed_language_chinese" : "Çince", + "seed_language_dutch" : "Flemenkçe", + "seed_language_german" : "Almanca", + "seed_language_japanese" : "Japonca", + "seed_language_portuguese" : "Portekizce", + "seed_language_russian" : "Rusça", + "seed_language_spanish" : "İspanyolca", + "seed_language_french": "Fransızca", + "seed_language_italian": "İtalyanca", + + + "send_title" : "Gönder", + "send_your_wallet" : "Cüzdanın", + "send_address" : "${cryptoCurrency} adresi", + "send_payment_id" : "Ödeme ID'si (isteğe bağlı)", + "all" : "HEPSİ", + "send_error_minimum_value" : "Minimum tutar değeri 0.01'dir", + "send_error_currency" : "Para birimi sadece sayı içerebilir", + "send_estimated_fee" : "Tahmini komisyon:", + "send_priority" : "Şu anda ücret ${transactionPriority} önceliğine ayarlanmıştır.\nİşlem önceliği ayarlardan değiştirilebilir", + "send_creating_transaction" : "İşlem oluşturuluyor", + "send_templates" : "Şablonlar", + "send_new" : "Yeni", + "send_amount" : "Miktar:", + "send_fee" : "Komisyon:", + "send_name" : "İsim", + "send_got_it" : "Tamamdır", + "send_sending" : "Gönderiliyor...", + "send_success" : "${crypto} başarıyla gönderildi", + + + "settings_title" : "Ayarlar", + "settings_nodes" : "Düğümler", + "settings_current_node" : "Şimdiki düğüm", + "settings_wallets" : "Cüzdanlar", + "settings_display_balance" : "Bakiyeyi göster", + "settings_currency" : "Para birimi", + "settings_fee_priority" : "İşlem Komsiyonu önceliği", + "settings_save_recipient_address" : "Gönderilen adresi kaydet", + "settings_personal" : "Kişisel", + "settings_change_pin" : "PIN'i değiştir", + "settings_change_language" : "Dili değiştir", + "settings_allow_biometrical_authentication" : "Biyometrik doğrulamaya izin ver", + "settings_dark_mode" : "Karanlık mod", + "settings_transactions" : "İşlemler", + "settings_trades" : "Takaslar", + "settings_display_on_dashboard_list" : "Gösterge tablosu listesinde göster", + "settings_all" : "HEPSİ", + "settings_only_trades" : "Sadece takaslar", + "settings_only_transactions" : "Sadece transferler", + "settings_none" : "Hiçbiri", + "settings_support" : "Destek", + "settings_terms_and_conditions" : "Şartlar ve Koşullar", + "pin_is_incorrect" : "PIN kodu hatalı", + + + "setup_pin" : "PIN kodu kurulumu", + "enter_your_pin_again" : "PIN kodunu tekrar girin", + "setup_successful" : "PIN kodun başarıyla ayarlandı!", + + + "wallet_keys" : "Cüzdan tohumu/anahtarları", + "wallet_seed" : "Cüzdan tohumu", + "private_key" : "Özel anahtar", + "public_key" : "Genel Anahtar", + "view_key_private" : "İzleme anahtarı (özel)", + "view_key_public" : "İzleme anahtarı (genel)", + "spend_key_private" : "Harcama anahtarı (özel)", + "spend_key_public" : "Harcama anahtarı (genel)", + "copied_key_to_clipboard" : "${key} panoya kopyalandı", + + + "new_subaddress_title" : "Yeni adres", + "new_subaddress_label_name" : "Etiket ismi", + "new_subaddress_create" : "Oluştur", + + "address_label" : "Adres etiketi", + + "subaddress_title" : "Alt adres listesi", + + + "trade_details_title" : "Takas Detayları", + "trade_details_id" : "ID", + "trade_details_state" : "Durum", + "trade_details_fetching" : "Getiriliyor", + "trade_details_provider" : "Sağlayıcı", + "trade_details_created_at" : "'da oluşturuldu", + "trade_details_pair" : "Parite", + "trade_details_copied" : "${title} panoya kopyalandı", + + + "trade_history_title" : "Takas geçmişi", + + + "transaction_details_title" : "İşlem Detayları", + "transaction_details_transaction_id" : "İşem ID'si", + "transaction_details_date" : "Tarih", + "transaction_details_height" : "Yükseklik", + "transaction_details_amount" : "Miktar", + "transaction_details_fee" : "Fee", + "transaction_details_copied" : "${title} panoya kopyalandı", + "transaction_details_recipient_address" : "Alıcı adres", + + + "wallet_list_title" : "Monero Cüzdanı", + "wallet_list_create_new_wallet" : "Yeni Cüzdan Oluştur", + "wallet_list_restore_wallet" : "Cüzdanı Geri Yükle", + "wallet_list_load_wallet" : "Cüzdanı yükle", + "wallet_list_loading_wallet" : "${wallet_name} cüzdanı yükleniyor", + "wallet_list_failed_to_load" : "Failed to load ${wallet_name} wallet. ${error}", + "wallet_list_removing_wallet" : "Removing ${wallet_name} wallet", + "wallet_list_failed_to_remove" : "${wallet_name} cüzdanı yüklenirken hata oluştu. ${error}", + + + "widgets_address" : "Adres", + "widgets_restore_from_blockheight" : "Blok yüksekliğinden geri yükle", + "widgets_restore_from_date" : "Tarihten geri yükle", + "widgets_or" : "veya", + "widgets_seed" : "Tohum", + + + "router_no_route" : "${name} için rota tanımlanmadı", + + + "error_text_account_name" : "Hesap ismi yalnızca harf, rakam \nve 1 ile 15 uzunluğunda karakter içermelidir.", + "error_text_contact_name" : "Kişi ismi ` , ' \" sembollerini içeremez \nve 1 ile 32 uzunluğunda karakter içermelidir", + "error_text_address" : "Cüzdan adresi kripto para biriminin\ntürüne karşılık gelmelidir", + "error_text_node_address" : "Lütfen iPv4 adresi girin", + "error_text_node_port" : "Düğüm port'u yalnızca 0 ve 65535 arasında rakam içerebilir", + "error_text_payment_id" : "Ödeme ID'si yalnızca onaltılık (hex) olarak 16 veya 64 karakter içerebilir", + "error_text_xmr" : "XMR miktarı kullanılabilir bakiyeyi aşamaz.\nKesir basamaklarının sayısı 12'ye eşit veya daha az olmalıdır", + "error_text_fiat" : "Tutarın değeri, mevcut bakiyeyi aşamaz.\nKesir basamaklarının sayısı 2'ye eşit veya daha az olmalıdır", + "error_text_subaddress_name" : "Alt adres ismi ` , ' \" sembolleri içeremez\nve 1 ile 20 karakter arasında olmalıdır", + "error_text_amount" : "Miktar sadece sayı içerebilir", + "error_text_wallet_name" : "Cüzdan ismi yalnızca harf, rakam \nve 1 ile 33 uzunluğunda karakter içermelidir.", + "error_text_keys" : "Cüzdan anahtarları onaltılık (hex) olarak yalnızca 64 karakter içerebilir", + "error_text_crypto_currency" : "Kesir basamaklarının sayısı\n12'ye eşit veya daha az olmalıdır", + "error_text_minimal_limit" : "${provider} için işlem oluşturulmadı. Miktar minimumdan daha azdır: ${min} ${currency}", + "error_text_maximum_limit" : "${provider} için işlem oluşturulmadı. Miktar maksimumdan daha fazla: ${max} ${currency}", + "error_text_limits_loading_failed" : "${provider} için işlem oluşturulmadı. Limitler yüklenirken hata oluştu.", + "error_text_template" : "Şablon adı ve adresi ` , ' \" sembolleri içeremez\nve 1 ila 106 karakter uzunluğunda olmalı", + + + "auth_store_ban_timeout" : "ban_timeout", + "auth_store_banned_for" : "Bu kadar süreliğine yasaklandınız: ", + "auth_store_banned_minutes" : " dakika", + "auth_store_incorrect_password" : "Hatalı PIN", + "wallet_store_monero_wallet" : "Monero Cüzdanı", + "wallet_restoration_store_incorrect_seed_length" : "Yanlış tohum uzunluğu", + + + "full_balance" : "Tüm bakiye", + "available_balance" : "Kullanılabilir Bakiye", + "hidden_balance" : "Gizli Bakiye", + + + "sync_status_syncronizing" : "SENKRONİZE EDİLİYOR", + "sync_status_syncronized" : "SENKRONİZE EDİLDİ", + "sync_status_not_connected" : "BAĞLI DEĞİL", + "sync_status_starting_sync" : "SENKRONİZE BAŞLATILIYOR", + "sync_status_failed_connect" : "BAĞLANTI KESİLDİ", + "sync_status_connecting" : "BAĞLANILIYOR", + "sync_status_connected" : "BAĞLANILDI", + "sync_status_attempting_sync" : "SENKRONİZE EDİLMEYE ÇALIŞILIYOR", + + + "transaction_priority_slow" : "Yavaş", + "transaction_priority_regular" : "Normal", + "transaction_priority_medium" : "Orta", + "transaction_priority_fast" : "Hızlı", + "transaction_priority_fastest" : "En Hızlı", + + + "trade_for_not_created" : "${title} için takas oluşturulmadı.", + "trade_not_created" : "Takas oluşturulmadı", + "trade_id_not_found" : "Trade ${tradeId} of ${title} not found.", + "trade_not_found" : "Takas bulunamadı.", + + + "trade_state_pending" : "Beklemede", + "trade_state_confirming" : "Onaylanıyor", + "trade_state_trading" : "Takas yapılıyor", + "trade_state_traded" : "Takas yapıldı", + "trade_state_complete" : "Tamamlandı", + "trade_state_to_be_created" : "Oluşturulacak", + "trade_state_unpaid" : "Ödenmedi", + "trade_state_underpaid" : "Eksik ödendi", + "trade_state_paid_unconfirmed" : "Ödendi onaylanmadı", + "trade_state_paid" : "Ödendi", + "trade_state_btc_sent" : "Btc gönderildi", + "trade_state_timeout" : "Zaman aşımı", + "trade_state_created" : "Oluşturuldu", + "trade_state_finished" : "Tamamlandı", + + "change_language" : "Dili değiştir", + "change_language_to" : "Dili şuna değiştir: ${language}?", + + "paste" : "Yapıştır", + "restore_from_seed_placeholder" : "Lütfen tohumunu buraya gir veya yapıştır", + "add_new_word" : "Yeni kelime ekle", + "incorrect_seed" : "Girilen metin geçerli değil.", + + "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}", + + "card_address" : "Adres:", + "buy" : "Alış", + "sell": "Satış", + + "placeholder_transactions" : "İşlemlerin burada görüntülenecek", + "placeholder_contacts" : "Kişilerin burada görüntülenecek", + + "template" : "Şablon", + "confirm_delete_template" : "Bu eylem, bu şablonu silecek. Devam etmek istiyor musun?", + "confirm_delete_wallet" : "Bu eylem, bu cüzdanı silecek. Devam etmek istiyor musun?", + + "picker_description" : "ChangeNOW veya MorphToken'ı seçmek için lütfen önce işlem paritenizi değiştirin", + + "change_wallet_alert_title" : "Şimdiki cüzdanı değiştir", + "change_wallet_alert_content" : "Şimdiki cüzdanı ${wallet_name} cüzdanı ile değiştirmek istediğinden emin misin?", + + "creating_new_wallet" : "Cüzdan oluşturuluyor", + "creating_new_wallet_error" : "Hata: ${description}", + + "seed_alert_title" : "Dikkat", + "seed_alert_content" : "Cüzdanını kurtarmanın tek yolu tohumdur. Tohumunu yazdın mı?", + "seed_alert_back" : "Geriye dön", + "seed_alert_yes" : "Evet yazdım", + + "exchange_sync_alert_content" : "Lütfen cüzdanın senkronize olana kadar bekle", + + "pre_seed_title" : "UYARI", + "pre_seed_description" : "Bir sonraki sayfada ${words} kelime göreceksin. Bu senin benzersiz ve özel tohumundur, kaybetmen veya silinmesi durumunda cüzdanını kurtarmanın TEK YOLUDUR. Bunu yazmak ve Cake Wallet uygulaması dışında güvenli bir yerde saklamak tamamen SENİN sorumluluğunda.", + "pre_seed_button_text" : "Anladım. Bana tohumumu göster.", + + "xmr_to_error" : "XMR.TO hatası", + "xmr_to_error_description" : "Geçersiz tutar. Ondalık noktadan sonra maksimum limit 8 basamaktır", + + "provider_error" : "${provider} hatası", + + "use_ssl" : "SSL kullan", + "trusted" : "Güvenilir", + + "color_theme" : "Renk teması", + "light_theme" : "Aydınlık", + "bright_theme" : "Parlak", + "dark_theme" : "Karanlık", + "enter_your_note" : "Notunu gir…", + "note_optional" : "Not (isteğe bağlı)", + "note_tap_to_change" : "Not (değiştirmek için dokunun)", + "view_in_block_explorer" : "Blok Gezgini'nde görüntüle", + "view_transaction_on" : "İşlemi şurada görüntüle ", + "transaction_key" : "İşlem Anahtarı", + "confirmations" : "Onay", + "recipient_address" : "Alıcı adresi", + + "extra_id" : "Ekstra ID:", + "destination_tag" : "Hedef Etiketi:", + "memo" : "Memo:", + + "backup" : "Yedek", + "change_password" : "Parolayı değiştir", + "backup_password" : "Yedek parolası", + "write_down_backup_password" : "Lütfen yedekleme dosyasının içe aktarılması için kullanılan yedekleme parolanı not et.", + "export_backup" : "Yedeği dışa aktar", + "save_backup_password" : "Lütfen yedekleme parolanı kaydettiğinden emin ol. Bu parola olmadan yedekleme dosyasını içe aktaramazsın.", + "backup_file" : "Yedek dosyası", + + "edit_backup_password" : "Yedek parolasını değiştir", + "save_backup_password_alert" : "Yedek parolasını kaydet", + "change_backup_password_alert" : "Önceki yedekleme dosyaların yeni yedek parolası ile içe aktarılamayacaktır. Yeni yedekleme parolası yalnızca yeni yedekleme dosyaları için kullanılabilir olacak. Yedekleme parolasını değiştirmek istediğinden emin misin?", + + "enter_backup_password" : "Yedekleme parolasını buraya gir", + "select_backup_file" : "Yedek dosyası seç", + "import" : "İçe aktar", + "please_select_backup_file" : "Lütfen yedekleme dosyasını seç ve yedekleme parolasını gir.", + + "fixed_rate" : "Sabit oran", + "fixed_rate_alert" : "Sabit oran modunu işaretlersen alım tutarını girebilirsin. Sabit oran moduna geçmek ister misin?", + + "xlm_extra_info" : "Lütfen takas için XLM işlemi gönderirken Memo ID'yi belirtmeyi unutmayın", + "xrp_extra_info" : "Lütfen takas için XRP işlemi gönderirken Hedef Etiketi (Destination Tag) belirtmeyi unutmayın", + + "exchange_incorrect_current_wallet_for_xmr" : "Cake Wallet'daki Monero bakiyenizi kullanarak takas yapmak istiyorsan, lütfen önce Monero cüzdanına geç.", + "confirmed" : "Onaylı", + "unconfirmed" : "Onaylanmamış", + "displayable" : "Gösterilebilir", + + "submit_request" : "talep gönder", + + "buy_alert_content" : "Şu anda sadece Bitcoin ve Litecoin satın alımını destekliyoruz. Bitcoin veya Litecoin satın almak için lütfen Bitcoin veya Litecoin cüzdanınızı oluşturun veya bu cüzdanlardan birine geçiş yapın.", + "sell_alert_content": "Şu anda sadece Bitcoin satışını destekliyoruz. Bitcoin satmak için lütfen Bitcoin cüzdanınızı oluşturun veya Bitcoin cüzdanınıza geçiş yapın.", + + "outdated_electrum_wallet_description" : "Cake'te oluşturulan yeni Bitcoin cüzdanları artık 24 kelimelik bir tohuma sahip. Yeni bir Bitcoin cüzdanı oluşturmanız ve tüm paranızı 24 kelimelik yeni cüzdana aktarmanız ve 12 kelimelik tohuma sahip cüzdanları kullanmayı bırakmanız zorunludur. Lütfen paranızı güvence altına almak için bunu hemen yapın.", + "understand" : "Anladım", + + "apk_update" : "APK güncellemesi", + + "buy_bitcoin" : "Bitcoin Satın Al", + "buy_with" : "Şunun ile al: ", + "moonpay_alert_text" : "Tutar ${minAmount} ${fiatCurrency} miktarına eşit veya daha fazla olmalıdır", + + "outdated_electrum_wallet_receive_warning": "Bu cüzdanın 12 kelimelik bir tohumu varsa ve Cake'te oluşturulduysa, bu cüzdana Bitcoin YATIRMAYIN. Bu cüzdana aktarılan tüm BTC'ler kaybolabilir. 24 kelimelik yeni bir cüzdan oluşturun (sağ üstteki menüye dokunun, Cüzdanlar'ı seçin, Yeni Cüzdan Oluştur'u seçin, ardından Bitcoin'i seçin) ve BTC'nizi HEMEN oraya taşıyın. Cake'in yeni (24 kelimelik) BTC cüzdanları güvenlidir", + "do_not_show_me": "Bana bunu bir daha gösterme", + + "unspent_coins_title" : "Harcanmamış koinler", + "unspent_coins_details_title" : "Harcanmamış koin detayları", + "freeze" : "Dondur", + "frozen" : "Dondurulmuş", + "coin_control" : "Koin kontrolü (isteğe bağlı)", + + "address_detected" : "Adres tespit edildi", + "address_from_domain" : "Bu adres Unstoppable Domains'deki' ${domain} adresinden alındı", + + "add_receiver" : "Başka bir alıcı ekle (isteğe bağlı)", + + "manage_yats" : "Yats'ları yönet", + "yat_alert_title" : "Yat ile daha kolay kripto gönderin ve alın", + "yat_alert_content" : "Cake Wallet kullanıcıları artık tüm favori koin birimlerini benzersiz emoji tabanlı kullanıcı adıyla gönderebilir ve alabilirler.", + "get_your_yat" : "Yat'ını al", + "connect_an_existing_yat" : "Mevcut bir Yat'ı bağla", + "connect_yats": "Yat'lara bağlan", + "yat_address" : "Yat adresi", + "yat" : "Yat", + "address_from_yat" : "Bu adres Yat'taki ${emoji} adresinden alındı", + "yat_error" : "Yat hatası", + "yat_error_content" : "Bu Yat'a bağlı bir adres yok. Başka bir Yat'ı deneyin", + "choose_address" : "\n\nLütfen adresi seçin:", + "yat_popup_title" : "Cüzdan adresiniz emojileştirilebilir.", + "yat_popup_content" : "Artık Cake Wallet'ta kısa, emoji tabanlı bir kullanıcı adı olan Yat'ınızla kripto gönderebilir ve alabilirsiniz. Yats'ı istediğiniz zaman ayarlar ekranından yönetebilirsiniz", + "second_intro_title" : "Hepsini yönetebilen tek bir emoji adresi", + "second_intro_content" : "Yat'ınız, tüm para birimleriniz için uzun onaltılık adreslerinizin yerini alan benzersiz emoji adresidir.", + "third_intro_title" : "Yat diğerleriyle iyi çalışır", + "third_intro_content" : "Yat'lar Cake Wallet'ın dışında da çalışabilir. Dünya üzerindeki herhangi bir cüzdan adresi Yat ile değiştirilebilir!", + "learn_more" : "Daha fazla öğren", + "search": "Arat", + "search_language": "Dil arat", + "search_currency": "Para birimi ara", + "new_template" : "Yeni Şablon", + "electrum_address_disclaimer": "Adresini her kullandığında yeni adres oluşturuyoruz, ancak önceki adresler de çalışmaya devam eder", + "wallet_name_exists": "Bu isimde bir cüzdan zaten mevcut. Lütfen farklı bir isim seç veya önce diğer cüzdanı yeniden adlandır.", + "market_place": "Pazar Alanı", + "cake_pay_title": "Cake Pay Hediye Kartları", + "cake_pay_subtitle": "İndirimli hediye kartları satın alın (yalnızca ABD)", + "cake_pay_web_cards_title": "Cake Pay Web Kartları", + "cake_pay_web_cards_subtitle": "Dünya çapında ön ödemeli kartlar ve hediye kartları satın alın", + "about_cake_pay": "Cake Pay, Amerika Birleşik Devletleri'ndeki 150.000'den fazla işyerinde anında harcanabilen sanal varlıklarla kolayca hediye kartları satın almanızı sağlar.", + "cake_pay_account_note": "Kartları görmek ve satın almak için sadece bir e-posta adresiyle kaydolun. Hatta bazıları indirimli olarak bile mevcut!", + "already_have_account": "Zaten bir hesabınız var mı?", + "create_account": "Hesap oluştur", + "privacy_policy": "Gizlilik Politikası", + "welcome_to_cakepay": "Cake Pay'e Hoş Geldiniz!", + "sign_up": "Kaydol", + "forgot_password": "Parolamı unuttum", + "reset_password": "Parolamı sıfırla", + "gift_cards": "Hediye kartları", + "setup_your_debit_card": "Banka kartını ayarla", + "no_id_required": "Kimlik gerekmez. Para yükleyin ve istediğiniz yerde harcayın", + "how_to_use_card": "Bu kart nasıl kullanılır", + "purchase_gift_card": "Hediye Kartı Satın Al", + "verification": "Doğrulama", + "fill_code": "Lütfen e-postanıza gelen doğrulama kodunu girin", + "dont_get_code": "Kod gelmedi mi?", + "resend_code": "Lütfen tekrar gönder", + "debit_card": "Ön ödemeli Kart", + "cakepay_prepaid_card": "CakePay Ön Ödemeli Kart", + "no_id_needed": "Kimlik gerekmez!", + "frequently_asked_questions": "Sıkça sorulan sorular", + "debit_card_terms": "Ödeme kartı numaranızın (ve kart numaranıza karşılık gelen kimlik bilgilerinin) bu dijital cüzdanda saklanması ve kullanılması, zaman zaman yürürlükte olan ödeme kartı veren kuruluşla yapılan ilgili kart sahibi sözleşmesinin Hüküm ve Koşullarına tabidir.", + "please_reference_document": "Daha fazla bilgi için lütfen aşağıdaki belgelere bakınız.", + "cardholder_agreement": "Kart Sahibi Sözleşmesi", + "e_sign_consent": "E-İmza Onayı", + "agree_and_continue": "Kabul Et & Devam Et", + "email_address": "E-posta Adresi", + "agree_to": "Hesap oluşturarak bunları kabul etmiş olursunuz ", + "and": "ve", + "enter_code": "Kodu girin", + "congratulations": "Tebrikler!", + "you_now_have_debit_card": "Artık bir ön ödemeli kartın var", + "min_amount" : "Min: ${value}", + "max_amount" : "Maks: ${value}", + "enter_amount": "Miktar Girin", + "billing_address_info": "Eğer fatura adresi istenirse, kargo adresinizi girin", + "order_physical_card": "Fiziksel Kart Siparişi", + "add_value": "Değer ekle", + "activate": "Aktifleştir", + "get_a": "Bir ", + "digital_and_physical_card": " Dijital para birimleri ile para yükleyebileceğiniz ve ek bilgiye gerek olmayan", + "get_card_note": " dijital ve fiziksel ön ödemeli banka kartı edinin!", + "signup_for_card_accept_terms": "Kart için kaydol ve koşulları kabul et.", + "add_fund_to_card": "Ön ödemeli kartlara para ekle (En fazla yüklenebilir tutar: ${değer})", + "use_card_info_two": "Paralar, dijital para birimlerinde değil, ön ödemeli hesapta tutulduğunda USD'ye dönüştürülür.", + "use_card_info_three": "Dijital kartı çevrimiçi olarak veya temassız ödeme yöntemleriyle kullanın.", + "optionally_order_card": "İsteğe bağlı olarak fiziksel bir kart sipariş edin.", + "hide_details" : "Detayları Gizle", + "show_details" : "Detayları Göster", + "upto": "Şu miktara kadar: ${value}", + "discount": "%${value} tasarruf et", + "gift_card_amount": "Hediye Kartı Tutarı", + "bill_amount": "Fatura Tutarı", + "you_pay": "Şu kadar ödeyeceksin: ", + "tip": "Bahşiş:", + "custom": "özel", + "by_cake_pay": "Cake Pay tarafından", + "expires": "Son kullanma tarihi", + "mm": "AA", + "yy": "YY", + "online": "Çevrimiçi", + "offline": "Çevrimdışı", + "gift_card_number": "Hediye kartı numarası", + "pin_number": "PIN kodu", + "total_saving": "Toplam Tasarruf", + "last_30_days": "Son 30 gün", + "avg_savings": "Ortalama Tasarruf", + "view_all": "Hepsini göster", + "active_cards": "Aktif kartlar", + "delete_account": "Hesabı sil", + "cards": "Kartlar", + "active": "Aktif", + "redeemed": "Kullanılmış", + "gift_card_balance_note": "Bakiyesi kalan olan hediye kartları burada görünecek", + "gift_card_redeemed_note": "Harcadığın hediye kartları burada görünecek", + "logout": "Çıkış yap", + "add_tip": "Bahşiş Ekle", + "percentageOf": "of ${amount}", + "is_percentage": "is", + "search_category": "Kategori ara", + "mark_as_redeemed": "Harcanmış olarak işaretle", + "more_options": "Daha Fazla Seçenek", + "awaiting_payment_confirmation": "Ödemenin onaylanması bekleniyor", + "transaction_sent_notice": "Ekran 1 dakika sonra ilerlemezse, blok gezgininden ve e-postanızdan kontrol edin.", + "agree": "Kabul Et", + "in_store": "Mağazada", + "generating_gift_card": "Hediye Kartı Oluşturuluyor", + "payment_was_received": "Ödemeniz alındı.", + "proceed_after_one_minute": "Ekran 1 dakika sonra ilerlemezse, e-postanızı kontrol edin.", + "order_id": "Sipariş ID'si", + "gift_card_is_generated": "Hediye Kartı oluşturuldu", + "open_gift_card": "Hediye Kartını Aç", + "contact_support": "Destek ile İletişime Geç", + "gift_cards_unavailable": "Hediye kartları şu anda yalnızca Monero, Bitcoin ve Litecoin ile satın alınabilir", + "introducing_cake_pay": "Cake Pay ile tanışın!", + "cake_pay_learn_more": "Uygulamada anında hediye kartları satın alın ve harcayın!\nDaha fazla öğrenmek için soldan sağa kaydır.", + "automatic": "Otomatik", + "fixed_pair_not_supported": "Bu sabit paritesi seçilen borsalarda desteklenmemekte", + "variable_pair_not_supported": "Bu değişken paritesi seçilen borsalarda desteklenmemekte", + "none_of_selected_providers_can_exchange": "Seçilen sağlayıcılardan hiçbiri bu takası yapamaz", + "choose_one": "Birini seç", + "choose_from_available_options": "Mevcut seçenekler arasından seçim yap:", + "custom_redeem_amount": "Özel Harcama Tutarı", + "add_custom_redemption": "Özel Bozdurma Ekle", + "remaining": "kalan", + "delete_wallet": "Cüzdanı sil", + "delete_wallet_confirm_message" : "${wallet_name} isimli cüzdanını silmek istediğinden emin misin?", + "low_fee": "Düşük komisyon", + "low_fee_alert": "Şu anda düşük bir ağ ücreti önceliği kullanıyorsunuz. Bu durum uzun beklemeler, farklı oranlar veya iptal edilen işlemlere neden olabilir. Daha iyi bir deneyim için daha yüksek bir ücret belirlemenizi öneririz.", + "ignor": "Yoksay", + "use_suggested": "Önerileni Kullan", + "do_not_share_warning_text" : "Bunları destek de dahil olmak üzere başka kimseyle paylaşma.\n\nParan çalınabilir ve çalınacaktır!", + "help": "yardım", + "all_transactions": "Tüm transferler", + "all_trades": "Tüm takaslar", + "connection_sync": "Bağlantı ve senkronizasyon", + "security_and_backup": "Güvenlik ve yedekleme", + "create_backup": "Yedek oluştur", + "privacy_settings": "Gizlilik ayarları", + "privacy": "Gizlilik", + "display_settings": "Görüntü ayarları", + "other_settings": "Diğer ayarlar", + "require_pin_after": "Şu kadar süre sonra PIN iste", + "always": "Her Zaman", + "minutes_to_pin_code": "${minute} dakika", + "disable_exchange": "Borsayı devre dışı bırak", + "advanced_privacy_settings": "Gelişmiş Gizlilik Ayarları", + "settings_can_be_changed_later": "Bu ayarlar daha sonra uygulama ayarlarından da değiştirilebilir", + "add_custom_node": "Yeni Özel Düğüm Ekleme", + "disable_fiat": "İtibari paraları devre dışı bırak", + "fiat_api": "İtibari Para API", + "disabled": "Devre dışı", + "enabled": "Etkin", + "tor_only": "Yalnızca Tor", + "unmatched_currencies": "Mevcut cüzdanınızın para birimi taranan QR ile eşleşmiyor", + "contact_list_contacts": "Rehberim", + "contact_list_wallets": "Cüzdanlarım" +} From d79b481d3e883a0718e5ec5c188f9d40c993c785 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Thu, 12 Jan 2023 17:08:38 +0200 Subject: [PATCH 028/190] Wrap sending error file in try/catch for unexpected behaviors [skip ci] --- lib/main.dart | 39 +++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 126bd213f..78879bdb5 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -172,8 +172,9 @@ void _saveException(String? error, StackTrace? stackTrace) async { } }; - String separator = "\n\n==========================================================" + - "\n==========================================================\n\n"; + const String separator = + '''\n\n========================================================== + ==========================================================\n\n'''; await file.writeAsString( jsonEncode(exception) + separator, @@ -182,26 +183,28 @@ void _saveException(String? error, StackTrace? stackTrace) async { } void _sendExceptionFile() async { - final appDocDir = await getApplicationDocumentsDirectory(); + try { + final appDocDir = await getApplicationDocumentsDirectory(); - final file = File('${appDocDir.path}/error.txt'); + final file = File('${appDocDir.path}/error.txt'); - print(file.readAsStringSync()); + final MailOptions mailOptions = MailOptions( + subject: 'Mobile App Issue', + recipients: ['support@cakewallet.com'], + attachments: [file.path], + ); - final MailOptions mailOptions = MailOptions( - subject: 'Mobile App Issue', - recipients: ['support@cakewallet.com'], - attachments: [file.path], - ); + final result = await FlutterMailer.send(mailOptions); - 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); + // 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); } } From 9bc337534cc32e84b862f14a7f8e0dbc8f22c1c2 Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Thu, 12 Jan 2023 18:06:07 +0100 Subject: [PATCH 029/190] Fix initial url --- lib/src/screens/buy/onramper_page.dart | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/src/screens/buy/onramper_page.dart b/lib/src/screens/buy/onramper_page.dart index 72fe59eee..eb0370a67 100644 --- a/lib/src/screens/buy/onramper_page.dart +++ b/lib/src/screens/buy/onramper_page.dart @@ -75,6 +75,11 @@ class OnRamperPageBodyState extends State { initialOptions: InAppWebViewGroupOptions( crossPlatform: InAppWebViewOptions(transparentBackground: true), ), + initialUrlRequest: URLRequest( + url: Uri.tryParse( + widget.uri.toString(), + ), + ), androidOnPermissionRequest: (_, __, resources) async { return PermissionRequestResponse( resources: resources, From 007d393872da86e74057398b1e5f47999723b0de Mon Sep 17 00:00:00 2001 From: Justin Ehrenhofer Date: Thu, 12 Jan 2023 11:52:15 -0600 Subject: [PATCH 030/190] Actually 42x26, not 42x36 --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 14cb5e2ee..f3d96d064 100644 --- a/README.md +++ b/README.md @@ -118,7 +118,7 @@ The only parts to be translated, if needed, are the values m and s after the var 4. Add the language to `lib/entities/language_service.dart` under both `supportedLocales` and `localeCountryCode`. Use the name of the language in the local language and in English in parentheses after for `supportedLocales`. Use the [ISO 3166-1 alpha-3 code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3) for `localeCountryCode`. You must choose one country, so choose the country with the most native speakers of this language or is otherwise best associated with this language. -5. Add a relevant flag to `assets/images/flags/XXXX.png`, replacing XXXX with the 3 digit localeCountryCode. The image must be 42x36 pixels with a 3 pixels of transparent margin on all 4 sides. +5. Add a relevant flag to `assets/images/flags/XXXX.png`, replacing XXXX with the 3 digit localeCountryCode. The image must be 42x26 pixels with a 3 pixels of transparent margin on all 4 sides. ## Add a new fiat currency @@ -128,4 +128,4 @@ The only parts to be translated, if needed, are the values m and s after the var 3. Add the raw mapping underneath in `lib/entities/fiat_currency.dart` following the same format as the others. -4. Add a flag of the issuing country or organization to `assets/images/flags/XXXX.png`, replacing XXXX with the ISO 3166-1 alpha-3 code used above (eg: `usa.png`, `eur.png`). Do not add this if the flag with the same name already exists. The image must be 42x36 pixels with a 3 pixels of transparent margin on all 4 sides. +4. Add a flag of the issuing country or organization to `assets/images/flags/XXXX.png`, replacing XXXX with the ISO 3166-1 alpha-3 code used above (eg: `usa.png`, `eur.png`). Do not add this if the flag with the same name already exists. The image must be 42x26 pixels with a 3 pixels of transparent margin on all 4 sides. From 74a9a2a6a414407c0b69f00b1946f113f3ac0eee Mon Sep 17 00:00:00 2001 From: Justin Ehrenhofer Date: Thu, 12 Jan 2023 12:00:55 -0600 Subject: [PATCH 031/190] Add resize instructions [skip ci] --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f3d96d064..510a45d80 100644 --- a/README.md +++ b/README.md @@ -118,7 +118,7 @@ The only parts to be translated, if needed, are the values m and s after the var 4. Add the language to `lib/entities/language_service.dart` under both `supportedLocales` and `localeCountryCode`. Use the name of the language in the local language and in English in parentheses after for `supportedLocales`. Use the [ISO 3166-1 alpha-3 code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3) for `localeCountryCode`. You must choose one country, so choose the country with the most native speakers of this language or is otherwise best associated with this language. -5. Add a relevant flag to `assets/images/flags/XXXX.png`, replacing XXXX with the 3 digit localeCountryCode. The image must be 42x26 pixels with a 3 pixels of transparent margin on all 4 sides. +5. Add a relevant flag to `assets/images/flags/XXXX.png`, replacing XXXX with the 3 digit localeCountryCode. The image must be 42x26 pixels with a 3 pixels of transparent margin on all 4 sides. You can resize the flag with [paint.net](https://www.getpaint.net/) to 36x20 pizels, expand the canvas to 42x26 pixels with the flag anchored in the middle, and then manually delete the 3 pixels on each side to make transparent. ## Add a new fiat currency From 3b36ffce0b4537b82b9d7c3cbca595acff847654 Mon Sep 17 00:00:00 2001 From: Justin Ehrenhofer Date: Thu, 12 Jan 2023 12:05:23 -0600 Subject: [PATCH 032/190] pizels -> pixels [skip ci] --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 510a45d80..4299d4f0c 100644 --- a/README.md +++ b/README.md @@ -118,7 +118,7 @@ The only parts to be translated, if needed, are the values m and s after the var 4. Add the language to `lib/entities/language_service.dart` under both `supportedLocales` and `localeCountryCode`. Use the name of the language in the local language and in English in parentheses after for `supportedLocales`. Use the [ISO 3166-1 alpha-3 code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3) for `localeCountryCode`. You must choose one country, so choose the country with the most native speakers of this language or is otherwise best associated with this language. -5. Add a relevant flag to `assets/images/flags/XXXX.png`, replacing XXXX with the 3 digit localeCountryCode. The image must be 42x26 pixels with a 3 pixels of transparent margin on all 4 sides. You can resize the flag with [paint.net](https://www.getpaint.net/) to 36x20 pizels, expand the canvas to 42x26 pixels with the flag anchored in the middle, and then manually delete the 3 pixels on each side to make transparent. +5. Add a relevant flag to `assets/images/flags/XXXX.png`, replacing XXXX with the 3 digit localeCountryCode. The image must be 42x26 pixels with a 3 pixels of transparent margin on all 4 sides. You can resize the flag with [paint.net](https://www.getpaint.net/) to 36x20 pixels, expand the canvas to 42x26 pixels with the flag anchored in the middle, and then manually delete the 3 pixels on each side to make transparent. ## Add a new fiat currency From 35d817ee62870b5ae79980e342187538dea394a1 Mon Sep 17 00:00:00 2001 From: Justin Ehrenhofer Date: Thu, 12 Jan 2023 12:06:40 -0600 Subject: [PATCH 033/190] Add photoshop [skip ci] --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4299d4f0c..655ba8acc 100644 --- a/README.md +++ b/README.md @@ -118,7 +118,7 @@ The only parts to be translated, if needed, are the values m and s after the var 4. Add the language to `lib/entities/language_service.dart` under both `supportedLocales` and `localeCountryCode`. Use the name of the language in the local language and in English in parentheses after for `supportedLocales`. Use the [ISO 3166-1 alpha-3 code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3) for `localeCountryCode`. You must choose one country, so choose the country with the most native speakers of this language or is otherwise best associated with this language. -5. Add a relevant flag to `assets/images/flags/XXXX.png`, replacing XXXX with the 3 digit localeCountryCode. The image must be 42x26 pixels with a 3 pixels of transparent margin on all 4 sides. You can resize the flag with [paint.net](https://www.getpaint.net/) to 36x20 pixels, expand the canvas to 42x26 pixels with the flag anchored in the middle, and then manually delete the 3 pixels on each side to make transparent. +5. Add a relevant flag to `assets/images/flags/XXXX.png`, replacing XXXX with the 3 digit localeCountryCode. The image must be 42x26 pixels with a 3 pixels of transparent margin on all 4 sides. You can resize the flag with [paint.net](https://www.getpaint.net/) to 36x20 pixels, expand the canvas to 42x26 pixels with the flag anchored in the middle, and then manually delete the 3 pixels on each side to make transparent. Or you can use another program like Photoshop. ## Add a new fiat currency From d45adb8e5096fc0bccfad0418d6ad577c767c787 Mon Sep 17 00:00:00 2001 From: HardenedSteel Date: Thu, 12 Jan 2023 23:13:44 +0300 Subject: [PATCH 034/190] Update Turkish flag size --- assets/images/flags/tur.png | Bin 6608 -> 1037 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/images/flags/tur.png b/assets/images/flags/tur.png index 71a0d8ffcef38e9509f166a24290b584095c2e4c..166c6313a131fbe928dda9d4811f343a79cf7a6d 100644 GIT binary patch delta 992 zcmV<610Vd*GmQw47k?TE1^@s6!MV=%0004mX+uL$Nkc;*aB^>EX>4Tx04R}tkv&Mm zP!xqvQ>8^J4rUM$%ut;yh>AFB6^c+H)C#RSn7s54nlvOSE{=k0!NH%!s)LKOt`4q( zAov5~>f)s6A|>9}6k5c1;qgAsyXWxUeSlCeGu`eQ2Xw=+Qh$lKl*z72p;rVDfrv1M z6=s`rvYdo(ece+x)m@Bd`S<-FU+$pX(5t#oRhSR|GT9jtaRD_T176meA34ayfX9&4PpIP2vqYu%H-Fp@J? zmbp%A2nj4=34byqsHmcZG91KcH%PIOqVu?qf3WG7$)%F31V)YpRG>p?`oaI;_iXL_ zs zMIj2=tKi3?n_{6wK}9H9XvxBeRix653q@P8P%%;${s9F=G)8oxh*2SN%vYP4jEjLu zL}+46sx`T*_uxL>;c(8q2U^vnC6r&@%Rcj80=Frfu<n37dpLrbU;L@h>EDjCXBUO%FIJvWabqXGg{L^&ZU9ol z=SW|^wv4DG&~=1=HEo!>0fwszWf7Sw?6QCQHKZ0s1X`#ruM#G z`<%Hk1!nalR~;Il_)Vj2cQ^S*^JMSLG;TaeU7PK5;bp9{raEL?2lwL{9|2LsGkO6* zQECGDe-3>8?YokzckZazZ)UROre{f=Is=A5YUnIxI*lBE3N}`w`MD_0?to>iV~5F1 z-Ktur+Gx0Bz8cL`HKXZ?Ns5|gF}kM*rT=&Z3M>wa$t2pPa2eHRV}Tl<5+wTvp;!dK zbMZXt=|Kcn`!BuDfZvvfxwur*4E^I3>N<1)@0D>Js#;p1kDs8&;s~nSTA{b6$<55x zb%oZHN5u^{>#b0-Z!gl8E)YfZSe)F$s3nmvU+bPnTfw<$gLA8zwtfI^a>0r$-m)D4 O0000Nn~YUU~J8F zb`J1#c2+1T%1_J8No8Qrm{>c}+T(D5NZbEyUQ0t{bd(-VSZK9XVPC-&Es=#zD@3D8 z4R*fdo@JtdV0j8%t)Pg~7e3CjOW~vP_0;M2EyQKNeLmAM(eu2pdq-;$ z`)S!TUTt1Bo-&~!y`TO@P8U5FJ?E-d@78xG<0Z~zYoCr;ZrY`r( zE!j(EcwDYLblCpM57(lTPqdmRCNqYvm>^^SL;laawUIL<$|oP!vW)hrCa}AWi$BfS+#eqYk$MO+y{?#tvy+N;3=QMk0su1Pdpf-{y8yL z*e}jM#rSu-L&n*;(XVBe^Ei(P=vFcJ2O<~vB!wu*kwWvQ z1KXoO|NZ~Z@Ts+j;dB2KhW|f)qBx3GLydt|SDWGY<*O*-lyHa+QD#XAV7u!u0~0SV z*uD=H^$cGo&%|vv3os1+{9#~ZXJh#P=Pv`pUmzwCAcrW?xt=E@3GT>W=PxmQnKBE% zwLnLL0F$5~17AfULMu*D(t;sRbcnJjD!?`WzJ3$V#>HUd=3?Ls^kER_ZDn9!W@ZrRYyxLMavTY=gJ_51 zauB`5iFW9pd-vgPV%1cKvvD#0fBnYref<`O55?8sjP#+rj^Y28FASiPgB(C~8vOw* z%vp6n{b&XTp40?}uM3wEolZY>_9HSMnVE^`5d8wIasGY!1a>H^fi442P8yhvlK>S@ zK=AMVdxlRP{Rm~i@|PSyv_t>Cc**cSrvzy8Kd?Ol?F|fkRV56JoE#YTf@&vN^7#Mr z7g=Q}x}hkA8ZlKUXOJ(0;M86QCO$r}S>P&k&whqKH*YgA^6^5d&{gXhzHiuqZWqaX z Date: Fri, 13 Jan 2023 03:48:39 +0200 Subject: [PATCH 035/190] Update caching workflow operating system version [skip ci] --- .github/workflows/cache_dependencies.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cache_dependencies.yml b/.github/workflows/cache_dependencies.yml index 9d49ed3d8..4d2dc136c 100644 --- a/.github/workflows/cache_dependencies.yml +++ b/.github/workflows/cache_dependencies.yml @@ -7,7 +7,7 @@ on: jobs: test: - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 From 2115cc045f34a5d647fa5ebbec88dbf038777793 Mon Sep 17 00:00:00 2001 From: Serhii Date: Fri, 13 Jan 2023 15:47:52 +0200 Subject: [PATCH 036/190] [skip ci] update localization --- res/values/strings_ar.arb | 3 ++- res/values/strings_th.arb | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/res/values/strings_ar.arb b/res/values/strings_ar.arb index 01708d5fd..250f29a70 100644 --- a/res/values/strings_ar.arb +++ b/res/values/strings_ar.arb @@ -677,5 +677,6 @@ "disabled":"معطلة", "enabled":"ممكنة", "tor_only":"Tor فقط", - "unmatched_currencies": "عملة محفظتك الحالية لا تتطابق مع عملة QR الممسوحة ضوئيًا" + "unmatched_currencies": "عملة محفظتك الحالية لا تتطابق مع عملة QR الممسوحة ضوئيًا", + "orbot_running_alert": "يرجى التأكد من تشغيل Orbot قبل الاتصال بهذه العقدة." } diff --git a/res/values/strings_th.arb b/res/values/strings_th.arb index 242a8d110..6934d9630 100644 --- a/res/values/strings_th.arb +++ b/res/values/strings_th.arb @@ -676,6 +676,7 @@ "enabled" : "เปิดใช้งาน", "tor_only" : "Tor เท่านั้น", "unmatched_currencies" : "สกุลเงินของกระเป๋าปัจจุบันของคุณไม่ตรงกับของ QR ที่สแกน", + "orbot_running_alert": "โปรดตรวจสอบว่า Orbot กำลังทำงานก่อนที่จะเชื่อมต่อกับโหนดนี้", "contact_list_contacts": "ติดต่อ", "contact_list_wallets": "กระเป๋าเงินของฉัน" } From 569516ce576859766d1026def6765df095ddbe02 Mon Sep 17 00:00:00 2001 From: Serhii Date: Fri, 13 Jan 2023 16:39:33 +0200 Subject: [PATCH 037/190] minor fixes --- res/values/strings_es.arb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb index 1af5cc94d..6cbfa627a 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -678,7 +678,7 @@ "enabled": "Activado", "tor_only": "solo Tor", "unmatched_currencies": "La moneda de su billetera actual no coincide con la del QR escaneado", - "orbot_running_alert": "Asegúrese de que Orbot se esté ejecutando antes de conectarse a este nodo." + "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" } From 7f37bd3d590a92b59a881f859223f471287e225c Mon Sep 17 00:00:00 2001 From: Serhii Date: Sat, 14 Jan 2023 23:29:47 +0200 Subject: [PATCH 038/190] update localization files --- lib/view_model/exchange/exchange_trade_view_model.dart | 2 +- res/values/strings_ar.arb | 4 +++- res/values/strings_de.arb | 4 +++- res/values/strings_en.arb | 4 +++- res/values/strings_es.arb | 4 +++- res/values/strings_fr.arb | 6 ++++-- res/values/strings_hi.arb | 6 ++++-- res/values/strings_hr.arb | 4 +++- res/values/strings_it.arb | 4 +++- res/values/strings_ja.arb | 4 +++- res/values/strings_ko.arb | 4 +++- res/values/strings_nl.arb | 4 +++- res/values/strings_pl.arb | 6 ++++-- res/values/strings_pt.arb | 4 +++- res/values/strings_ru.arb | 4 +++- res/values/strings_th.arb | 4 +++- res/values/strings_uk.arb | 4 +++- res/values/strings_zh.arb | 4 +++- 18 files changed, 55 insertions(+), 21 deletions(-) diff --git a/lib/view_model/exchange/exchange_trade_view_model.dart b/lib/view_model/exchange/exchange_trade_view_model.dart index 10ddf25e4..275de2808 100644 --- a/lib/view_model/exchange/exchange_trade_view_model.dart +++ b/lib/view_model/exchange/exchange_trade_view_model.dart @@ -143,7 +143,7 @@ abstract class ExchangeTradeViewModelBase with Store { 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} ${trade.from.tag ?? ''}') + ':', data: trade.inputAddress ?? '', isCopied: true), ]); diff --git a/res/values/strings_ar.arb b/res/values/strings_ar.arb index 250f29a70..7d7994b1e 100644 --- a/res/values/strings_ar.arb +++ b/res/values/strings_ar.arb @@ -678,5 +678,7 @@ "enabled":"ممكنة", "tor_only":"Tor فقط", "unmatched_currencies": "عملة محفظتك الحالية لا تتطابق مع عملة QR الممسوحة ضوئيًا", - "orbot_running_alert": "يرجى التأكد من تشغيل Orbot قبل الاتصال بهذه العقدة." + "orbot_running_alert": "يرجى التأكد من تشغيل Orbot قبل الاتصال بهذه العقدة.", + "send_to_this_address" : "أرسل ${currency} إلى هذا العنوان", + "arrive_in_this_address" : "سيصل ${currency} إلى هذا العنوان" } diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index 2e71e8ce9..dbcf03ae2 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -680,5 +680,7 @@ "unmatched_currencies": "Die Währung Ihres aktuellen Wallets stimmt nicht mit der des gescannten QR überein", "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" + "contact_list_wallets": "Meine Geldbörsen", + "send_to_this_address" : "Senden Sie ${currency} an diese Adresse", + "arrive_in_this_address" : "${currency} wird an dieser Adresse ankommen" } diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index a2b1cc702..602fbcde1 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -680,5 +680,7 @@ "unmatched_currencies": "Your current wallet's currency does not match that of the scanned QR", "orbot_running_alert": "Please make sure Orbot is running prior to connecting to this node.", "contact_list_contacts": "Contacts", - "contact_list_wallets": "My Wallets" + "contact_list_wallets": "My Wallets", + "send_to_this_address" : "Send ${currency} to this address", + "arrive_in_this_address" : "${currency} will arrive in this address" } diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb index 6cbfa627a..4fdc450e0 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -680,5 +680,7 @@ "unmatched_currencies": "La moneda de su billetera actual no coincide con la del QR escaneado", "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" + "contact_list_wallets": "Mis billeteras", + "send_to_this_address" : "Enviar ${currency} a esta dirección", + "arrive_in_this_address" : "${currency} llegará a esta dirección" } diff --git a/res/values/strings_fr.arb b/res/values/strings_fr.arb index 61bec11bf..34baa88d9 100644 --- a/res/values/strings_fr.arb +++ b/res/values/strings_fr.arb @@ -675,8 +675,10 @@ "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)" + "contact_list_wallets": "Mes portefeuilles (wallets)", + "send_to_this_address" : "Envoyez ${currency} à cette adresse", + "arrive_in_this_address" : "${currency} arrivera à cette adresse" } diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb index e906b3cc4..9bf6cfca2 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -677,8 +677,10 @@ "disabled": "अक्षम", "enabled": "सक्रिय", "tor_only": "Tor केवल", - "orbot_running_alert": "कृपया सुनिश्चित करें कि इस नोड से कनेक्ट करने से पहले Orbot चल रहा है।", "unmatched_currencies": "आपके वर्तमान वॉलेट की मुद्रा स्कैन किए गए क्यूआर से मेल नहीं खाती" , + "orbot_running_alert": "कृपया सुनिश्चित करें कि इस नोड से कनेक्ट करने से पहले Orbot चल रहा है।", "contact_list_contacts": "संपर्क", - "contact_list_wallets": "मेरा बटुआ" + "contact_list_wallets": "मेरा बटुआ", + "send_to_this_address" : "इस पते पर ${currency} भेजें", + "arrive_in_this_address" : "${currency} इस पते पर पहुंचेंगे" } diff --git a/res/values/strings_hr.arb b/res/values/strings_hr.arb index b44d2d6c3..27f4b3892 100644 --- a/res/values/strings_hr.arb +++ b/res/values/strings_hr.arb @@ -680,5 +680,7 @@ "unmatched_currencies": "Valuta vašeg trenutnog novčanika ne odgovara onoj na skeniranom QR-u", "orbot_running_alert": "Provjerite radi li Orbot prije spajanja na ovaj čvor.", "contact_list_contacts": "Kontakti", - "contact_list_wallets": "Moji novčanici" + "contact_list_wallets": "Moji novčanici", + "send_to_this_address" : "Pošaljite ${currency} na ovu adresu", + "arrive_in_this_address" : "${currency} će stići na ovu adresu" } diff --git a/res/values/strings_it.arb b/res/values/strings_it.arb index 6885fefa8..47d26aa9e 100644 --- a/res/values/strings_it.arb +++ b/res/values/strings_it.arb @@ -680,5 +680,7 @@ "unmatched_currencies": "La valuta del tuo portafoglio attuale non corrisponde a quella del QR scansionato", "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" + "contact_list_wallets": "I miei portafogli", + "send_to_this_address" : "Invia ${currency} a questo indirizzo", + "arrive_in_this_address" : "${currency} arriverà a questo indirizzo" } diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb index f02b76598..6c6ac91e3 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -680,5 +680,7 @@ "unmatched_currencies": "現在のウォレットの通貨がスキャンされたQRの通貨と一致しません", "orbot_running_alert": "このノードに接続する前に、Orbot が実行されていることを確認してください", "contact_list_contacts": "連絡先", - "contact_list_wallets": "マイウォレット" + "contact_list_wallets": "マイウォレット", + "send_to_this_address" : "${currency} をこのアドレスに送金", + "arrive_in_this_address" : "${currency} はこの住所に到着します" } diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb index b7678fa85..e458aed0d 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -680,5 +680,7 @@ "unmatched_currencies": "현재 지갑의 통화가 스캔한 QR의 통화와 일치하지 않습니다.", "orbot_running_alert": "이 노드에 연결하기 전에 Orbot이 실행 중인지 확인하십시오.", "contact_list_contacts": "콘택트 렌즈", - "contact_list_wallets": "내 지갑" + "contact_list_wallets": "내 지갑", + "send_to_this_address" : "이 주소로 ${currency} 송금", + "arrive_in_this_address" : "${currency}이(가) 이 주소로 도착합니다" } diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index 802c0e9ac..b8edbc0c1 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -680,5 +680,7 @@ "unmatched_currencies": "De valuta van uw huidige portemonnee komt niet overeen met die van de gescande QR", "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" + "contact_list_wallets": "Mijn portefeuilles", + "send_to_this_address" : "Stuur ${currency} naar dit adres", + "arrive_in_this_address" : "${currency} komt aan op dit adres" } diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index 1b49c6ef1..1bf2cf5b8 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -675,10 +675,12 @@ "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" + "contact_list_wallets": "Moje portfele", + "send_to_this_address" : "Wyślij ${currency} na ten adres", + "arrive_in_this_address" : "${currency} dotrze na ten adres" } diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb index 8daba6193..7e4a66379 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -679,5 +679,7 @@ "unmatched_currencies": "A moeda da sua carteira atual não corresponde à do QR digitalizado", "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" + "contact_list_wallets": "minhas carteiras", + "send_to_this_address" : "Envie ${currency} para este endereço", + "arrive_in_this_address" : "${currency} chegará neste endereço" } diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb index 17640af6d..979c3517d 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -680,5 +680,7 @@ "unmatched_currencies": "Валюта вашего текущего кошелька не соответствует валюте отсканированного QR-кода.", "orbot_running_alert": "Перед подключением к этому узлу убедитесь, что Orbot запущен.", "contact_list_contacts": "Контакты", - "contact_list_wallets": "Мои кошельки" + "contact_list_wallets": "Мои кошельки", + "send_to_this_address" : "Отправить ${currency} на этот адрес", + "arrive_in_this_address" : "${currency} придет на этот адрес" } diff --git a/res/values/strings_th.arb b/res/values/strings_th.arb index 6934d9630..48e1ed0be 100644 --- a/res/values/strings_th.arb +++ b/res/values/strings_th.arb @@ -678,5 +678,7 @@ "unmatched_currencies" : "สกุลเงินของกระเป๋าปัจจุบันของคุณไม่ตรงกับของ QR ที่สแกน", "orbot_running_alert": "โปรดตรวจสอบว่า Orbot กำลังทำงานก่อนที่จะเชื่อมต่อกับโหนดนี้", "contact_list_contacts": "ติดต่อ", - "contact_list_wallets": "กระเป๋าเงินของฉัน" + "contact_list_wallets": "กระเป๋าเงินของฉัน", + "send_to_this_address" : "ส่ง ${currency} ไปยังที่อยู่นี้", + "arrive_in_this_address" : "${currency} จะมาถึงที่อยู่นี้" } diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb index b9311e8ef..05fbf2e00 100644 --- a/res/values/strings_uk.arb +++ b/res/values/strings_uk.arb @@ -679,5 +679,7 @@ "unmatched_currencies": "Валюта вашого гаманця не збігається з валютою сканованого QR-коду", "orbot_running_alert": "Перед підключенням до цього вузла переконайтеся, що Orbot запущено.", "contact_list_contacts": "Контакти", - "contact_list_wallets": "Мої гаманці" + "contact_list_wallets": "Мої гаманці", + "send_to_this_address" : "Надіслати ${currency} на цю адресу", + "arrive_in_this_address" : "${currency} надійде на цю адресу" } diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb index 5b6608671..e7e63764d 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -678,5 +678,7 @@ "unmatched_currencies": "您当前钱包的货币与扫描的 QR 的货币不匹配", "orbot_running_alert": "请确保 Orbot 在连接到此节点之前正在运行。", "contact_list_contacts": "联系人", - "contact_list_wallets": "我的钱包" + "contact_list_wallets": "我的钱包", + "send_to_this_address" : "发送 ${currency} 到这个地址", + "arrive_in_this_address" : "${currency} 将到达此地址" } From b4249f21a9cd484a613c0a7706fa9b443791745e Mon Sep 17 00:00:00 2001 From: Serhii Date: Mon, 16 Jan 2023 17:27:49 +0200 Subject: [PATCH 039/190] add payout address item to confirmation screen --- lib/exchange/changenow/changenow_exchange_provider.dart | 8 ++++++-- lib/exchange/sideshift/sideshift_exchange_provider.dart | 3 +++ lib/exchange/simpleswap/simpleswap_exchange_provider.dart | 4 ++++ lib/exchange/trade.dart | 6 +++++- lib/view_model/exchange/exchange_trade_view_model.dart | 4 ++++ 5 files changed, 22 insertions(+), 3 deletions(-) diff --git a/lib/exchange/changenow/changenow_exchange_provider.dart b/lib/exchange/changenow/changenow_exchange_provider.dart index a9fb7c9ca..fc60be18e 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 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..e965e5331 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, ); } 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/view_model/exchange/exchange_trade_view_model.dart b/lib/view_model/exchange/exchange_trade_view_model.dart index 275de2808..2ec91b49b 100644 --- a/lib/view_model/exchange/exchange_trade_view_model.dart +++ b/lib/view_model/exchange/exchange_trade_view_model.dart @@ -146,6 +146,10 @@ abstract class ExchangeTradeViewModelBase with Store { title: S.current.send_to_this_address('${trade.from} ${trade.from.tag ?? ''}') + ':', data: trade.inputAddress ?? '', isCopied: true), + ExchangeTradeItem( + title: S.current.arrive_in_this_address('${trade.to} ${trade.to.tag ?? ''}') + ':', + data: trade.payoutAddress ?? '', + isCopied: true), ]); } } From 4636aacae71d511ae090e5f8d11bf75a9b602c39 Mon Sep 17 00:00:00 2001 From: Serhii Date: Mon, 16 Jan 2023 17:31:31 +0200 Subject: [PATCH 040/190] formatting --- .../exchange/exchange_trade_view_model.dart | 52 ++++++++----------- 1 file changed, 23 insertions(+), 29 deletions(-) diff --git a/lib/view_model/exchange/exchange_trade_view_model.dart b/lib/view_model/exchange/exchange_trade_view_model.dart index 2ec91b49b..8b578faa5 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; @@ -130,18 +127,15 @@ 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.status, data: '${trade.state}', 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.send_to_this_address('${trade.from} ${trade.from.tag ?? ''}') + ':', data: trade.inputAddress ?? '', From 3d5bce903d48c2706dc3c49dd16a8668998dbf86 Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Mon, 16 Jan 2023 17:46:04 +0100 Subject: [PATCH 041/190] Fix android permission request --- lib/src/screens/buy/onramper_page.dart | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/src/screens/buy/onramper_page.dart b/lib/src/screens/buy/onramper_page.dart index eb0370a67..2f7ab60cf 100644 --- a/lib/src/screens/buy/onramper_page.dart +++ b/lib/src/screens/buy/onramper_page.dart @@ -5,6 +5,7 @@ import 'package:cw_core/wallet_base.dart'; import 'package:flutter/material.dart'; import 'package:cake_wallet/.secrets.g.dart' as secrets; import 'package:flutter_inappwebview/flutter_inappwebview.dart'; +import 'package:permission_handler/permission_handler.dart'; class OnRamperPage extends BasePage { OnRamperPage({ @@ -81,6 +82,11 @@ class OnRamperPageBodyState extends State { ), ), androidOnPermissionRequest: (_, __, resources) async { + + if (await Permission.camera.status != PermissionStatus.granted){ + await Permission.camera.request(); + } + return PermissionRequestResponse( resources: resources, action: PermissionRequestResponseAction.GRANT, From aced1ed14719d4681b69601497a50bd6436d6cc3 Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Mon, 16 Jan 2023 19:25:29 +0100 Subject: [PATCH 042/190] Update permission status --- lib/src/screens/buy/onramper_page.dart | 41 +++++++++++--------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/lib/src/screens/buy/onramper_page.dart b/lib/src/screens/buy/onramper_page.dart index 2f7ab60cf..ff6cfd931 100644 --- a/lib/src/screens/buy/onramper_page.dart +++ b/lib/src/screens/buy/onramper_page.dart @@ -8,9 +8,7 @@ import 'package:flutter_inappwebview/flutter_inappwebview.dart'; import 'package:permission_handler/permission_handler.dart'; class OnRamperPage extends BasePage { - OnRamperPage({ - required this.settingsStore, - required this.wallet}); + OnRamperPage({required this.settingsStore, required this.wallet}); final SettingsStore settingsStore; final WalletBase wallet; @@ -25,22 +23,20 @@ class OnRamperPage extends BasePage { settingsStore: settingsStore, wallet: wallet, darkMode: darkMode, - backgroundColor: darkMode - ? backgroundDarkColor - : backgroundLightColor, + backgroundColor: darkMode ? backgroundDarkColor : backgroundLightColor, supportSell: false, supportSwap: false); } } class OnRamperPageBody extends StatefulWidget { - OnRamperPageBody({ - required this.settingsStore, - required this.wallet, - required this.darkMode, - required this.supportSell, - required this.supportSwap, - required this.backgroundColor}); + OnRamperPageBody( + {required this.settingsStore, + required this.wallet, + required this.darkMode, + required this.supportSell, + required this.supportSwap, + required this.backgroundColor}); static const baseUrl = 'widget.onramper.com'; final SettingsStore settingsStore; @@ -50,18 +46,15 @@ class OnRamperPageBody extends StatefulWidget { final bool supportSell; final bool supportSwap; - Uri get uri - => Uri.https( - baseUrl, - '', - { + Uri get uri => Uri.https(baseUrl, '', { 'apiKey': secrets.onramperApiKey, 'defaultCrypto': wallet.currency.title, 'defaultFiat': settingsStore.fiatCurrency.title, 'wallets': '${wallet.currency.title}:${wallet.walletAddresses.address}', 'darkMode': darkMode.toString(), 'supportSell': supportSell.toString(), - 'supportSwap': supportSwap.toString()}); + 'supportSwap': supportSwap.toString() + }); @override OnRamperPageBodyState createState() => OnRamperPageBodyState(); @@ -82,14 +75,16 @@ class OnRamperPageBodyState extends State { ), ), androidOnPermissionRequest: (_, __, resources) async { - - if (await Permission.camera.status != PermissionStatus.granted){ - await Permission.camera.request(); + bool permissionNotGranted = await Permission.camera.status != PermissionStatus.granted; + if (permissionNotGranted) { + permissionNotGranted = await Permission.camera.request().isGranted; } return PermissionRequestResponse( resources: resources, - action: PermissionRequestResponseAction.GRANT, + action: permissionNotGranted + ? PermissionRequestResponseAction.DENY + : PermissionRequestResponseAction.GRANT, ); }, ); From 8c016e946cc2a1913d3c16d7213cb447faad6e98 Mon Sep 17 00:00:00 2001 From: Serhii Date: Tue, 17 Jan 2023 14:14:02 +0200 Subject: [PATCH 043/190] fix editing label subaddresses --- lib/src/screens/subaddress/address_edit_or_create_page.dart | 2 -- .../wallet_address_edit_or_create_view_model.dart | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/src/screens/subaddress/address_edit_or_create_page.dart b/lib/src/screens/subaddress/address_edit_or_create_page.dart index dac9e3881..b7394182c 100644 --- a/lib/src/screens/subaddress/address_edit_or_create_page.dart +++ b/lib/src/screens/subaddress/address_edit_or_create_page.dart @@ -17,8 +17,6 @@ class AddressEditOrCreatePage extends BasePage { _labelController.addListener( () => addressEditOrCreateViewModel.label = _labelController.text); _labelController.text = addressEditOrCreateViewModel.label; - print(_labelController.text); - print(addressEditOrCreateViewModel.label); } final WalletAddressEditOrCreateViewModel addressEditOrCreateViewModel; diff --git a/lib/view_model/wallet_address_list/wallet_address_edit_or_create_view_model.dart b/lib/view_model/wallet_address_list/wallet_address_edit_or_create_view_model.dart index 43db6099f..c9d2c77f5 100644 --- a/lib/view_model/wallet_address_list/wallet_address_edit_or_create_view_model.dart +++ b/lib/view_model/wallet_address_list/wallet_address_edit_or_create_view_model.dart @@ -30,7 +30,7 @@ abstract class WalletAddressEditOrCreateViewModelBase with Store { {required WalletBase wallet, dynamic item}) : isEdit = item != null, state = AddressEditOrCreateStateInitial(), - label = item?.fullName as String? ?? '', + label = item?.name as String? ?? '', _item = item, _wallet = wallet; From 1b92a868429ce4c5e148b5de2583e13892413310 Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Wed, 18 Jan 2023 09:01:11 +0100 Subject: [PATCH 044/190] Update permission check logic --- android/.project | 11 +++++ .../org.eclipse.buildship.core.prefs | 13 ++++- android/app/.classpath | 2 +- android/app/.project | 11 +++++ cw_monero/android/.classpath | 2 +- cw_monero/android/.project | 11 +++++ ios/Podfile | 2 +- ios/Podfile.lock | 48 ++++++++++++------- lib/src/screens/buy/onramper_page.dart | 16 +++---- 9 files changed, 86 insertions(+), 30 deletions(-) diff --git a/android/.project b/android/.project index 17c95d4b1..cc3f5ca16 100644 --- a/android/.project +++ b/android/.project @@ -14,4 +14,15 @@ org.eclipse.buildship.core.gradleprojectnature + + + 1673893500381 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/android/.settings/org.eclipse.buildship.core.prefs b/android/.settings/org.eclipse.buildship.core.prefs index 9d2efc8e7..52768efe3 100644 --- a/android/.settings/org.eclipse.buildship.core.prefs +++ b/android/.settings/org.eclipse.buildship.core.prefs @@ -1,2 +1,13 @@ +arguments=--init-script /var/folders/_g/6xnbffg10l741qh63jr5cds80000gp/T/d146c9752a26f79b52047fb6dc6ed385d064e120494f96f08ca63a317c41f94c.gradle --init-script /var/folders/_g/6xnbffg10l741qh63jr5cds80000gp/T/52cde0cfcf3e28b8b7510e992210d9614505e0911af0c190bd590d7158574963.gradle +auto.sync=false +build.scans.enabled=false +connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) connection.project.dir= -eclipse.preferences.version=1 \ No newline at end of file +eclipse.preferences.version=1 +gradle.user.home= +java.home=/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home +jvm.arguments= +offline.mode=false +override.workspace.settings=true +show.console.view=true +show.executions.view=true diff --git a/android/app/.classpath b/android/app/.classpath index 4a04201ca..eb19361b5 100644 --- a/android/app/.classpath +++ b/android/app/.classpath @@ -1,6 +1,6 @@ - + diff --git a/android/app/.project b/android/app/.project index ac485d7c3..21dd86b97 100644 --- a/android/app/.project +++ b/android/app/.project @@ -20,4 +20,15 @@ org.eclipse.jdt.core.javanature org.eclipse.buildship.core.gradleprojectnature + + + 1673884227808 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/cw_monero/android/.classpath b/cw_monero/android/.classpath index 4a04201ca..eb19361b5 100644 --- a/cw_monero/android/.classpath +++ b/cw_monero/android/.classpath @@ -1,6 +1,6 @@ - + diff --git a/cw_monero/android/.project b/cw_monero/android/.project index e0799208f..e933af770 100644 --- a/cw_monero/android/.project +++ b/cw_monero/android/.project @@ -20,4 +20,15 @@ org.eclipse.jdt.core.javanature org.eclipse.buildship.core.gradleprojectnature + + + 1673884227818 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/ios/Podfile b/ios/Podfile index b29d40484..8ced976e3 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -platform :ios, '11.0' +platform :ios, '13.0' source 'https://github.com/CocoaPods/Specs.git' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 3a810430d..c3ebfa6e2 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -7,7 +7,7 @@ PODS: - connectivity (0.0.1): - Flutter - Reachability - - CryptoSwift (1.3.2) + - CryptoSwift (1.6.0) - cw_haven (0.0.1): - cw_haven/Boost (= 0.0.1) - cw_haven/Haven (= 0.0.1) @@ -67,14 +67,14 @@ PODS: - Flutter - devicelocale (0.0.1): - Flutter - - DKImagePickerController/Core (4.3.2): + - DKImagePickerController/Core (4.3.4): - DKImagePickerController/ImageDataManager - DKImagePickerController/Resource - - DKImagePickerController/ImageDataManager (4.3.2) - - DKImagePickerController/PhotoGallery (4.3.2): + - DKImagePickerController/ImageDataManager (4.3.4) + - DKImagePickerController/PhotoGallery (4.3.4): - DKImagePickerController/Core - DKPhotoGallery - - DKImagePickerController/Resource (4.3.2) + - DKImagePickerController/Resource (4.3.4) - DKPhotoGallery (0.0.17): - DKPhotoGallery/Core (= 0.0.17) - DKPhotoGallery/Model (= 0.0.17) @@ -102,11 +102,19 @@ PODS: - DKImagePickerController/PhotoGallery - Flutter - Flutter (1.0.0) + - flutter_inappwebview (0.0.1): + - Flutter + - flutter_inappwebview/Core (= 0.0.1) + - OrderedSet (~> 5.0) + - flutter_inappwebview/Core (0.0.1): + - Flutter + - OrderedSet (~> 5.0) - flutter_secure_storage (3.3.1): - Flutter - local_auth_ios (0.0.1): - Flutter - MTBBarcodeScanner (5.0.11) + - OrderedSet (5.0.0) - package_info (0.0.1): - Flutter - path_provider_ios (0.0.1): @@ -116,15 +124,15 @@ PODS: - platform_device_id (0.0.1): - Flutter - Reachability (3.2) - - SDWebImage (5.9.1): - - SDWebImage/Core (= 5.9.1) - - SDWebImage/Core (5.9.1) + - SDWebImage (5.14.2): + - SDWebImage/Core (= 5.14.2) + - SDWebImage/Core (5.14.2) - share_plus (0.0.1): - Flutter - shared_preferences_ios (0.0.1): - Flutter - - SwiftProtobuf (1.18.0) - - SwiftyGif (5.3.0) + - SwiftProtobuf (1.20.3) + - SwiftyGif (5.4.3) - uni_links (0.0.1): - Flutter - UnstoppableDomainsResolution (4.0.0): @@ -147,6 +155,7 @@ DEPENDENCIES: - devicelocale (from `.symlinks/plugins/devicelocale/ios`) - file_picker (from `.symlinks/plugins/file_picker/ios`) - Flutter (from `Flutter`) + - flutter_inappwebview (from `.symlinks/plugins/flutter_inappwebview/ios`) - flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`) - local_auth_ios (from `.symlinks/plugins/local_auth_ios/ios`) - package_info (from `.symlinks/plugins/package_info/ios`) @@ -167,6 +176,7 @@ SPEC REPOS: - DKImagePickerController - DKPhotoGallery - MTBBarcodeScanner + - OrderedSet - Reachability - SDWebImage - SwiftProtobuf @@ -194,6 +204,8 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/file_picker/ios" Flutter: :path: Flutter + flutter_inappwebview: + :path: ".symlinks/plugins/flutter_inappwebview/ios" flutter_secure_storage: :path: ".symlinks/plugins/flutter_secure_storage/ios" local_auth_ios: @@ -221,35 +233,37 @@ SPEC CHECKSUMS: barcode_scan2: 0af2bb63c81b4565aab6cd78278e4c0fa136dbb0 BigInt: f668a80089607f521586bbe29513d708491ef2f7 connectivity: c4130b2985d4ef6fd26f9702e886bd5260681467 - CryptoSwift: 093499be1a94b0cae36e6c26b70870668cb56060 + CryptoSwift: 562f8eceb40e80796fffc668b0cad9313284cfa6 cw_haven: b3e54e1fbe7b8e6fda57a93206bc38f8e89b898a cw_monero: 4cf3b96f2da8e95e2ef7d6703dd4d2c509127b7d cw_shared_external: 2972d872b8917603478117c9957dfca611845a92 device_display_brightness: 1510e72c567a1f6ce6ffe393dcd9afd1426034f7 device_info: d7d233b645a32c40dfdc212de5cf646ca482f175 devicelocale: b22617f40038496deffba44747101255cee005b0 - DKImagePickerController: b5eb7f7a388e4643264105d648d01f727110fc3d + DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179 file_picker: 817ab1d8cd2da9d2da412a417162deee3500fc95 Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 + flutter_inappwebview: bfd58618f49dc62f2676de690fc6dcda1d6c3721 flutter_secure_storage: 7953c38a04c3fdbb00571bcd87d8e3b5ceb9daec local_auth_ios: 0d333dde7780f669e66f19d2ff6005f3ea84008d MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb + OrderedSet: aaeb196f7fef5a9edf55d89760da9176ad40b93c package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62 path_provider_ios: 14f3d2fd28c4fdb42f44e0f751d12861c43cee02 permission_handler_apple: 44366e37eaf29454a1e7b1b7d736c2cceaeb17ce platform_device_id: 81b3e2993881f87d0c82ef151dc274df4869aef5 Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96 - SDWebImage: a990c053fff71e388a10f3357edb0be17929c9c5 + SDWebImage: b9a731e1d6307f44ca703b3976d18c24ca561e84 share_plus: 056a1e8ac890df3e33cb503afffaf1e9b4fbae68 shared_preferences_ios: 548a61f8053b9b8a49ac19c1ffbc8b92c50d68ad - SwiftProtobuf: c3c12645230d9b09c72267e0de89468c5543bd86 - SwiftyGif: e466e86c660d343357ab944a819a101c4127cb40 + SwiftProtobuf: b02b5075dcf60c9f5f403000b3b0c202a11b6ae1 + SwiftyGif: 6c3eafd0ce693cad58bb63d2b2fb9bacb8552780 uni_links: d97da20c7701486ba192624d99bffaaffcfc298a UnstoppableDomainsResolution: c3c67f4d0a5e2437cb00d4bd50c2e00d6e743841 url_launcher_ios: 839c58cdb4279282219f5e248c3321761ff3c4de webview_flutter_wkwebview: b7e70ef1ddded7e69c796c7390ee74180182971f -PODFILE CHECKSUM: ae71bdf0eb731a1ffc399c122f6aa4dea0cb5f6f +PODFILE CHECKSUM: bf84c4e13798f92b867c8ebcbd04acc127fec6be -COCOAPODS: 1.11.3 +COCOAPODS: 1.11.2 diff --git a/lib/src/screens/buy/onramper_page.dart b/lib/src/screens/buy/onramper_page.dart index ff6cfd931..094ff3b3c 100644 --- a/lib/src/screens/buy/onramper_page.dart +++ b/lib/src/screens/buy/onramper_page.dart @@ -70,21 +70,19 @@ class OnRamperPageBodyState extends State { crossPlatform: InAppWebViewOptions(transparentBackground: true), ), initialUrlRequest: URLRequest( - url: Uri.tryParse( - widget.uri.toString(), - ), + url: widget.uri, ), androidOnPermissionRequest: (_, __, resources) async { - bool permissionNotGranted = await Permission.camera.status != PermissionStatus.granted; - if (permissionNotGranted) { - permissionNotGranted = await Permission.camera.request().isGranted; + bool permissionGranted = await Permission.camera.status == PermissionStatus.granted; + if (!permissionGranted) { + permissionGranted = await Permission.camera.request().isGranted; } return PermissionRequestResponse( resources: resources, - action: permissionNotGranted - ? PermissionRequestResponseAction.DENY - : PermissionRequestResponseAction.GRANT, + action: permissionGranted + ? PermissionRequestResponseAction.GRANT + : PermissionRequestResponseAction.DENY, ); }, ); From 2393fca435aa38ba6ed68d683d583ccd05c59eaf Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Wed, 18 Jan 2023 09:21:07 +0100 Subject: [PATCH 045/190] [skip ci] Update permission check logic --- lib/src/screens/buy/buy_webview_page.dart | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/src/screens/buy/buy_webview_page.dart b/lib/src/screens/buy/buy_webview_page.dart index c51aaee83..b19a112fc 100644 --- a/lib/src/screens/buy/buy_webview_page.dart +++ b/lib/src/screens/buy/buy_webview_page.dart @@ -91,14 +91,13 @@ class BuyWebViewPageBodyState extends State { return; } - final url = await _webViewController!.getUrl(); - final urlString = url.toString(); + final url = (await _webViewController!.getUrl())?.toString(); if (url == null) { throw Exception('_saveOrder: Url is null'); } - if (urlString.toString().contains(keyword)) { - final urlParts = urlString.split(splitSymbol); + if (url.contains(keyword)) { + final urlParts = url.split(splitSymbol); orderId = urlParts.last; widget.ordersStore.orderId = orderId; From 2d81a9b89a70ca8b8aaeadeefee7127545172e7f Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Wed, 18 Jan 2023 16:52:14 +0100 Subject: [PATCH 046/190] remove unrelated files --- android/.project | 11 ----- .../org.eclipse.buildship.core.prefs | 12 +---- android/app/.classpath | 2 +- android/app/.project | 11 ----- cw_monero/android/.classpath | 2 +- cw_monero/android/.project | 11 ----- ios/Podfile | 2 +- ios/Podfile.lock | 48 +++++++------------ 8 files changed, 21 insertions(+), 78 deletions(-) diff --git a/android/.project b/android/.project index cc3f5ca16..17c95d4b1 100644 --- a/android/.project +++ b/android/.project @@ -14,15 +14,4 @@ org.eclipse.buildship.core.gradleprojectnature - - - 1673893500381 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/android/.settings/org.eclipse.buildship.core.prefs b/android/.settings/org.eclipse.buildship.core.prefs index 52768efe3..67daf4ebf 100644 --- a/android/.settings/org.eclipse.buildship.core.prefs +++ b/android/.settings/org.eclipse.buildship.core.prefs @@ -1,13 +1,3 @@ -arguments=--init-script /var/folders/_g/6xnbffg10l741qh63jr5cds80000gp/T/d146c9752a26f79b52047fb6dc6ed385d064e120494f96f08ca63a317c41f94c.gradle --init-script /var/folders/_g/6xnbffg10l741qh63jr5cds80000gp/T/52cde0cfcf3e28b8b7510e992210d9614505e0911af0c190bd590d7158574963.gradle -auto.sync=false -build.scans.enabled=false -connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) connection.project.dir= eclipse.preferences.version=1 -gradle.user.home= -java.home=/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home -jvm.arguments= -offline.mode=false -override.workspace.settings=true -show.console.view=true -show.executions.view=true + diff --git a/android/app/.classpath b/android/app/.classpath index eb19361b5..4a04201ca 100644 --- a/android/app/.classpath +++ b/android/app/.classpath @@ -1,6 +1,6 @@ - + diff --git a/android/app/.project b/android/app/.project index 21dd86b97..ac485d7c3 100644 --- a/android/app/.project +++ b/android/app/.project @@ -20,15 +20,4 @@ org.eclipse.jdt.core.javanature org.eclipse.buildship.core.gradleprojectnature - - - 1673884227808 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/cw_monero/android/.classpath b/cw_monero/android/.classpath index eb19361b5..4a04201ca 100644 --- a/cw_monero/android/.classpath +++ b/cw_monero/android/.classpath @@ -1,6 +1,6 @@ - + diff --git a/cw_monero/android/.project b/cw_monero/android/.project index e933af770..e0799208f 100644 --- a/cw_monero/android/.project +++ b/cw_monero/android/.project @@ -20,15 +20,4 @@ org.eclipse.jdt.core.javanature org.eclipse.buildship.core.gradleprojectnature - - - 1673884227818 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/ios/Podfile b/ios/Podfile index 8ced976e3..b29d40484 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -platform :ios, '13.0' +platform :ios, '11.0' source 'https://github.com/CocoaPods/Specs.git' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. diff --git a/ios/Podfile.lock b/ios/Podfile.lock index c3ebfa6e2..3a810430d 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -7,7 +7,7 @@ PODS: - connectivity (0.0.1): - Flutter - Reachability - - CryptoSwift (1.6.0) + - CryptoSwift (1.3.2) - cw_haven (0.0.1): - cw_haven/Boost (= 0.0.1) - cw_haven/Haven (= 0.0.1) @@ -67,14 +67,14 @@ PODS: - Flutter - devicelocale (0.0.1): - Flutter - - DKImagePickerController/Core (4.3.4): + - DKImagePickerController/Core (4.3.2): - DKImagePickerController/ImageDataManager - DKImagePickerController/Resource - - DKImagePickerController/ImageDataManager (4.3.4) - - DKImagePickerController/PhotoGallery (4.3.4): + - DKImagePickerController/ImageDataManager (4.3.2) + - DKImagePickerController/PhotoGallery (4.3.2): - DKImagePickerController/Core - DKPhotoGallery - - DKImagePickerController/Resource (4.3.4) + - DKImagePickerController/Resource (4.3.2) - DKPhotoGallery (0.0.17): - DKPhotoGallery/Core (= 0.0.17) - DKPhotoGallery/Model (= 0.0.17) @@ -102,19 +102,11 @@ PODS: - DKImagePickerController/PhotoGallery - Flutter - Flutter (1.0.0) - - flutter_inappwebview (0.0.1): - - Flutter - - flutter_inappwebview/Core (= 0.0.1) - - OrderedSet (~> 5.0) - - flutter_inappwebview/Core (0.0.1): - - Flutter - - OrderedSet (~> 5.0) - flutter_secure_storage (3.3.1): - Flutter - local_auth_ios (0.0.1): - Flutter - MTBBarcodeScanner (5.0.11) - - OrderedSet (5.0.0) - package_info (0.0.1): - Flutter - path_provider_ios (0.0.1): @@ -124,15 +116,15 @@ PODS: - platform_device_id (0.0.1): - Flutter - Reachability (3.2) - - SDWebImage (5.14.2): - - SDWebImage/Core (= 5.14.2) - - SDWebImage/Core (5.14.2) + - SDWebImage (5.9.1): + - SDWebImage/Core (= 5.9.1) + - SDWebImage/Core (5.9.1) - share_plus (0.0.1): - Flutter - shared_preferences_ios (0.0.1): - Flutter - - SwiftProtobuf (1.20.3) - - SwiftyGif (5.4.3) + - SwiftProtobuf (1.18.0) + - SwiftyGif (5.3.0) - uni_links (0.0.1): - Flutter - UnstoppableDomainsResolution (4.0.0): @@ -155,7 +147,6 @@ DEPENDENCIES: - devicelocale (from `.symlinks/plugins/devicelocale/ios`) - file_picker (from `.symlinks/plugins/file_picker/ios`) - Flutter (from `Flutter`) - - flutter_inappwebview (from `.symlinks/plugins/flutter_inappwebview/ios`) - flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`) - local_auth_ios (from `.symlinks/plugins/local_auth_ios/ios`) - package_info (from `.symlinks/plugins/package_info/ios`) @@ -176,7 +167,6 @@ SPEC REPOS: - DKImagePickerController - DKPhotoGallery - MTBBarcodeScanner - - OrderedSet - Reachability - SDWebImage - SwiftProtobuf @@ -204,8 +194,6 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/file_picker/ios" Flutter: :path: Flutter - flutter_inappwebview: - :path: ".symlinks/plugins/flutter_inappwebview/ios" flutter_secure_storage: :path: ".symlinks/plugins/flutter_secure_storage/ios" local_auth_ios: @@ -233,37 +221,35 @@ SPEC CHECKSUMS: barcode_scan2: 0af2bb63c81b4565aab6cd78278e4c0fa136dbb0 BigInt: f668a80089607f521586bbe29513d708491ef2f7 connectivity: c4130b2985d4ef6fd26f9702e886bd5260681467 - CryptoSwift: 562f8eceb40e80796fffc668b0cad9313284cfa6 + CryptoSwift: 093499be1a94b0cae36e6c26b70870668cb56060 cw_haven: b3e54e1fbe7b8e6fda57a93206bc38f8e89b898a cw_monero: 4cf3b96f2da8e95e2ef7d6703dd4d2c509127b7d cw_shared_external: 2972d872b8917603478117c9957dfca611845a92 device_display_brightness: 1510e72c567a1f6ce6ffe393dcd9afd1426034f7 device_info: d7d233b645a32c40dfdc212de5cf646ca482f175 devicelocale: b22617f40038496deffba44747101255cee005b0 - DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac + DKImagePickerController: b5eb7f7a388e4643264105d648d01f727110fc3d DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179 file_picker: 817ab1d8cd2da9d2da412a417162deee3500fc95 Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 - flutter_inappwebview: bfd58618f49dc62f2676de690fc6dcda1d6c3721 flutter_secure_storage: 7953c38a04c3fdbb00571bcd87d8e3b5ceb9daec local_auth_ios: 0d333dde7780f669e66f19d2ff6005f3ea84008d MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb - OrderedSet: aaeb196f7fef5a9edf55d89760da9176ad40b93c package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62 path_provider_ios: 14f3d2fd28c4fdb42f44e0f751d12861c43cee02 permission_handler_apple: 44366e37eaf29454a1e7b1b7d736c2cceaeb17ce platform_device_id: 81b3e2993881f87d0c82ef151dc274df4869aef5 Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96 - SDWebImage: b9a731e1d6307f44ca703b3976d18c24ca561e84 + SDWebImage: a990c053fff71e388a10f3357edb0be17929c9c5 share_plus: 056a1e8ac890df3e33cb503afffaf1e9b4fbae68 shared_preferences_ios: 548a61f8053b9b8a49ac19c1ffbc8b92c50d68ad - SwiftProtobuf: b02b5075dcf60c9f5f403000b3b0c202a11b6ae1 - SwiftyGif: 6c3eafd0ce693cad58bb63d2b2fb9bacb8552780 + SwiftProtobuf: c3c12645230d9b09c72267e0de89468c5543bd86 + SwiftyGif: e466e86c660d343357ab944a819a101c4127cb40 uni_links: d97da20c7701486ba192624d99bffaaffcfc298a UnstoppableDomainsResolution: c3c67f4d0a5e2437cb00d4bd50c2e00d6e743841 url_launcher_ios: 839c58cdb4279282219f5e248c3321761ff3c4de webview_flutter_wkwebview: b7e70ef1ddded7e69c796c7390ee74180182971f -PODFILE CHECKSUM: bf84c4e13798f92b867c8ebcbd04acc127fec6be +PODFILE CHECKSUM: ae71bdf0eb731a1ffc399c122f6aa4dea0cb5f6f -COCOAPODS: 1.11.2 +COCOAPODS: 1.11.3 From e71e8c83501c79041aaee3b4ee4370d843b89bc6 Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Wed, 18 Jan 2023 17:01:09 +0100 Subject: [PATCH 047/190] remove unrelated files --- android/.settings/org.eclipse.buildship.core.prefs | 3 +-- lib/main.dart | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/android/.settings/org.eclipse.buildship.core.prefs b/android/.settings/org.eclipse.buildship.core.prefs index 67daf4ebf..9d2efc8e7 100644 --- a/android/.settings/org.eclipse.buildship.core.prefs +++ b/android/.settings/org.eclipse.buildship.core.prefs @@ -1,3 +1,2 @@ connection.project.dir= -eclipse.preferences.version=1 - +eclipse.preferences.version=1 \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index 0f5570c66..a9edfed33 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -46,6 +46,7 @@ final RouteObserver routeObserver = RouteObserver(); Future main() async { try { WidgetsFlutterBinding.ensureInitialized(); + final appDir = await getApplicationDocumentsDirectory(); await Hive.close(); Hive.init(appDir.path); From fa16d5e278e273cc816d2dd97459fc277a1f88b4 Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Wed, 18 Jan 2023 17:11:35 +0100 Subject: [PATCH 048/190] [skip ci] remove unrelated files --- lib/main.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/main.dart b/lib/main.dart index a9edfed33..f3fb3acdd 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -46,7 +46,7 @@ final RouteObserver routeObserver = RouteObserver(); Future main() async { try { WidgetsFlutterBinding.ensureInitialized(); - + final appDir = await getApplicationDocumentsDirectory(); await Hive.close(); Hive.init(appDir.path); From 131f085f4c3ff3ad8de5d8391b35b2d409530963 Mon Sep 17 00:00:00 2001 From: Omar Hatem Date: Wed, 18 Jan 2023 21:55:01 +0200 Subject: [PATCH 049/190] Trigger workflow build --- lib/src/screens/buy/onramper_page.dart | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/src/screens/buy/onramper_page.dart b/lib/src/screens/buy/onramper_page.dart index 094ff3b3c..4973cef0b 100644 --- a/lib/src/screens/buy/onramper_page.dart +++ b/lib/src/screens/buy/onramper_page.dart @@ -69,9 +69,7 @@ class OnRamperPageBodyState extends State { initialOptions: InAppWebViewGroupOptions( crossPlatform: InAppWebViewOptions(transparentBackground: true), ), - initialUrlRequest: URLRequest( - url: widget.uri, - ), + initialUrlRequest: URLRequest(url: widget.uri), androidOnPermissionRequest: (_, __, resources) async { bool permissionGranted = await Permission.camera.status == PermissionStatus.granted; if (!permissionGranted) { From e022d4dfcf1f60811bbae5086b358c908b4d30e2 Mon Sep 17 00:00:00 2001 From: qweewqi <102307285+qweewqi@users.noreply.github.com> Date: Thu, 19 Jan 2023 03:36:48 +0200 Subject: [PATCH 050/190] mmr lang --- README.md | 1 + assets/images/flags/mmr.png | Bin 0 -> 902 bytes lib/entities/language_service.dart | 6 +- res/values/strings_my.arb | 684 +++++++++++++++++++++++++++++ 4 files changed, 689 insertions(+), 2 deletions(-) create mode 100644 assets/images/flags/mmr.png create mode 100644 res/values/strings_my.arb diff --git a/README.md b/README.md index 655ba8acc..ebeb9d43d 100644 --- a/README.md +++ b/README.md @@ -101,6 +101,7 @@ Edit the applicable `strings_XX.arb` file in `res/values/` and open a pull reque - Chinese - Korean - Arabic +- Burmese ## Add a new language diff --git a/assets/images/flags/mmr.png b/assets/images/flags/mmr.png new file mode 100644 index 0000000000000000000000000000000000000000..7fc6e1661e30095a674fc29adc152e21974b3022 GIT binary patch literal 902 zcmV;119|+3P)OEPLqO5J6qpmWOs7&Dvy;(WFV*`{($Ot;@~U{9B*{_l3i~zr*j( z_xHW`oO>=j#{U$e)Nn2_4@7{>#?Vqf%GK{hqD0PH(MRPn77 z<%&KWY`_x%1eo(pm7#g51W*9cbsW)i3JOij43sG<9!6gUv;ZB$(9(-&JzA8ZNm96| zU0kkh4XH9)AjlS$2!#e2^!5U9+4Cleg>wY`n@~!X`PYhjn~#g=fz&|7Fo8fyNix64 zav=pmE0$F@WZ~1jA24{w_n-EUI5>5#sIqJ+wx?{oEgfv}b)%F*-PdwCrXEbRLo+Le ztvahnCHds}|!purjnt z4_Z}4OKR8b31~tiXat#Dn56&5ehy6@Vm3QlHEywx8tB{UcWs<+DH?5>J^fvxfWY5Ttq(`HR=ks^Eph>&(N3e zugzJ1PooMe7`t`?@NWNmgunU)>*fMRsJ*WIBkK`8d{(PHix7}rgoE!ucq;(8ugA%p z_!yPT6F7B}wv!(cFanJ52Aur@+QXonhKRb}gk<#9C2Bl5sZ|q|&C>b%1afmH>7fx; zE}Td2*@iH5%$YczffosVKZXnixwU5qOcT*sc}prmCVXXT(_N$S51ehG$D-uF`Hp1o zOPGKCixJz22>8M4#fZItH9JQt_8QBdk7C54U|9{9Ygkc)0LQ^uNFqW(gue~!vV|fg ztgPUqZXv^)!Q%m^=11>RwDDtzQXmAfyQ^rIlY}BE!$3y5@7WEaoM?ukqL0F_$VPK` cj7J0i0iaD6g5?oxDgXcg07*qoM6N<$g0{o7^8f$< literal 0 HcmV?d00001 diff --git a/lib/entities/language_service.dart b/lib/entities/language_service.dart index 6ef876abd..a06040d19 100644 --- a/lib/entities/language_service.dart +++ b/lib/entities/language_service.dart @@ -20,7 +20,8 @@ class LanguageService { 'hr': 'Hrvatski (Croatian)', 'it': 'Italiano (Italian)', 'th': 'ภาษาไทย (Thai)', - 'ar': 'العربية (Arabic)' + 'ar': 'العربية (Arabic)', + 'my': 'မြန်မာ (Burmese)' }; static const Map localeCountryCode = { @@ -40,7 +41,8 @@ class LanguageService { 'hr': 'hrv', 'it': 'ita', 'th': 'tha', - 'ar': 'sau' + 'ar': 'sau', + 'my': 'mmr' }; static final list = {}; diff --git a/res/values/strings_my.arb b/res/values/strings_my.arb new file mode 100644 index 000000000..a2b1cc702 --- /dev/null +++ b/res/values/strings_my.arb @@ -0,0 +1,684 @@ +{ + "welcome" : "Welcome to", + "cake_wallet" : "Cake Wallet", + "first_wallet_text" : "Awesome wallet for Monero, Bitcoin, Litecoin, and Haven", + "please_make_selection" : "Please make a selection below to create or recover your wallet.", + "create_new" : "Create New Wallet", + "restore_wallet" : "Restore Wallet", + + "monero_com": "Monero.com by Cake Wallet", + "monero_com_wallet_text": "Awesome wallet for Monero", + + "haven_app": "Haven by Cake Wallet", + "haven_app_wallet_text": "Awesome wallet for Haven", + + "accounts" : "Accounts", + "edit" : "Edit", + "account" : "Account", + "add" : "Add", + + + "address_book" : "Address Book", + "contact" : "Contact", + "please_select" : "Please select:", + "cancel" : "Cancel", + "ok" : "OK", + "contact_name" : "Contact Name", + "reset" : "Reset", + "save" : "Save", + "address_remove_contact" : "Remove contact", + "address_remove_content" : "Are you sure that you want to remove selected contact?", + + + "authenticated" : "Authenticated", + "authentication" : "Authentication", + "failed_authentication" : "Failed authentication. ${state_error}", + + + "wallet_menu" : "Menu", + "Blocks_remaining" : "${status} Blocks Remaining", + "please_try_to_connect_to_another_node" : "Please try to connect to another node", + "xmr_hidden" : "Hidden", + "xmr_available_balance" : "Available Balance", + "xmr_full_balance" : "Full Balance", + "send" : "Send", + "receive" : "Receive", + "transactions" : "Transactions", + "incoming" : "Incoming", + "outgoing" : "Outgoing", + "transactions_by_date" : "Transactions by date", + "trades" : "Trades", + "filter_by": "Filter by", + "today" : "Today", + "yesterday" : "Yesterday", + "received" : "Received", + "sent" : "Sent", + "pending" : " (pending)", + "rescan" : "Rescan", + "reconnect" : "Reconnect", + "wallets" : "Wallets", + "show_seed" : "Show seed", + "show_keys" : "Show seed/keys", + "address_book_menu" : "Address book", + "reconnection" : "Reconnection", + "reconnect_alert_text" : "Are you sure you want to reconnect?", + + + "exchange" : "Exchange", + "clear" : "Clear", + "refund_address" : "Refund address", + "change_exchange_provider" : "Change Exchange Provider", + "you_will_send" : "Convert from", + "you_will_get" : "Convert to", + "amount_is_guaranteed" : "The receive amount is guaranteed", + "amount_is_estimate" : "The receive amount is an estimate", + "powered_by" : "Powered by ${title}", + "error" : "Error", + "estimated" : "Estimated", + "min_value" : "Min: ${value} ${currency}", + "max_value" : "Max: ${value} ${currency}", + "change_currency" : "Change Currency", + "overwrite_amount" : "Overwrite amount", + "qr_payment_amount" : "This QR code contains a payment amount. Do you want to overwrite the current value?", + + "copy_id" : "Copy ID", + "exchange_result_write_down_trade_id" : "Please copy or write down the trade ID to continue.", + "trade_id" : "Trade ID:", + "copied_to_clipboard" : "Copied to Clipboard", + "saved_the_trade_id" : "I've saved the trade ID", + "fetching" : "Fetching", + "id" : "ID: ", + "amount" : "Amount: ", + "payment_id" : "Payment ID: ", + "status" : "Status: ", + "offer_expires_in" : "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", + "confirm_sending" : "Confirm sending", + "commit_transaction_amount_fee" : "Commit transaction\nAmount: ${amount}\nFee: ${fee}", + "sending" : "Sending", + "transaction_sent" : "Transaction sent!", + "expired" : "Expired", + "time" : "${minutes}m ${seconds}s", + "send_xmr" : "Send XMR", + "exchange_new_template" : "New template", + + "faq" : "FAQ", + + + "enter_your_pin" : "Enter your PIN", + "loading_your_wallet" : "Loading your wallet", + + + "new_wallet" : "New Wallet", + "wallet_name" : "Wallet name", + "continue_text" : "Continue", + "choose_wallet_currency" : "Please choose wallet currency:", + + + "node_new" : "New Node", + "node_address" : "Node Address", + "node_port" : "Node port", + "login" : "Login", + "password" : "Password", + "nodes" : "Nodes", + "node_reset_settings_title" : "Reset settings", + "nodes_list_reset_to_default_message" : "Are you sure that you want to reset settings to default?", + "change_current_node" : "Are you sure to change current node to ${node}?", + "change" : "Change", + "remove_node" : "Remove node", + "remove_node_message" : "Are you sure that you want to remove selected node?", + "remove" : "Remove", + "delete" : "Delete", + "add_new_node" : "Add new node", + "change_current_node_title" : "Change current node", + "node_test" : "Test", + "node_connection_successful" : "Connection was successful", + "node_connection_failed" : "Connection was failed", + "new_node_testing" : "New node testing", + + + "use" : "Switch to ", + "digit_pin" : "-digit PIN", + + + "share_address" : "Share address", + "receive_amount" : "Amount", + "subaddresses" : "Subaddresses", + "addresses" : "Addresses", + "scan_qr_code" : "Scan the QR code to get the address", + "qr_fullscreen" : "Tap to open full screen QR code", + "rename" : "Rename", + "choose_account" : "Choose account", + "create_new_account" : "Create new account", + "accounts_subaddresses" : "Accounts and subaddresses", + + + "restore_restore_wallet" : "Restore Wallet", + "restore_title_from_seed_keys" : "Restore from seed/keys", + "restore_description_from_seed_keys" : "Get back your wallet from seed/keys that you've saved to secure place", + "restore_next" : "Next", + "restore_title_from_backup" : "Restore from backup", + "restore_description_from_backup" : "You can restore the whole Cake Wallet app from your back-up file", + "restore_seed_keys_restore" : "Seed/Keys Restore", + "restore_title_from_seed" : "Restore from seed", + "restore_description_from_seed" : "Restore your wallet from either the 25 word or 13 word combination code", + "restore_title_from_keys" : "Restore from keys", + "restore_description_from_keys" : "Restore your wallet from generated keystrokes saved from your private keys", + "restore_wallet_name" : "Wallet name", + "restore_address" : "Address", + "restore_view_key_private" : "View key (private)", + "restore_spend_key_private" : "Spend key (private)", + "restore_recover" : "Restore", + "restore_wallet_restore_description" : "Wallet restore description", + "restore_new_seed" : "New seed", + "restore_active_seed" : "Active seed", + "restore_bitcoin_description_from_seed" : "Restore your wallet from 24 word combination code", + "restore_bitcoin_description_from_keys" : "Restore your wallet from generated WIF string from your private keys", + "restore_bitcoin_title_from_keys" : "Restore from WIF", + "restore_from_date_or_blockheight" : "Please enter a date a few days before you created this wallet. Or if you know the blockheight, please enter it instead", + + + "seed_reminder" : "Please write these down in case you lose or wipe your phone", + "seed_title" : "Seed", + "seed_share" : "Share seed", + "copy" : "Copy", + + + "seed_language_choose" : "Please choose seed language:", + "seed_choose" : "Choose seed language", + "seed_language_next" : "Next", + "seed_language_english" : "English", + "seed_language_chinese" : "Chinese", + "seed_language_dutch" : "Dutch", + "seed_language_german" : "German", + "seed_language_japanese" : "Japanese", + "seed_language_portuguese" : "Portuguese", + "seed_language_russian" : "Russian", + "seed_language_spanish" : "Spanish", + "seed_language_french": "French", + "seed_language_italian": "Italian", + + + "send_title" : "Send", + "send_your_wallet" : "Your wallet", + "send_address" : "${cryptoCurrency} address", + "send_payment_id" : "Payment ID (optional)", + "all" : "ALL", + "send_error_minimum_value" : "Minimum value of amount is 0.01", + "send_error_currency" : "Currency can only contain numbers", + "send_estimated_fee" : "Estimated fee:", + "send_priority" : "Currently the fee is set at ${transactionPriority} priority.\nTransaction priority can be adjusted in the settings", + "send_creating_transaction" : "Creating transaction", + "send_templates" : "Templates", + "send_new" : "New", + "send_amount" : "Amount:", + "send_fee" : "Fee:", + "send_name" : "Name", + "send_got_it" : "Got it", + "send_sending" : "Sending...", + "send_success" : "Your ${crypto} was successfully sent", + + + "settings_title" : "Settings", + "settings_nodes" : "Nodes", + "settings_current_node" : "Current node", + "settings_wallets" : "Wallets", + "settings_display_balance" : "Display balance", + "settings_currency" : "Currency", + "settings_fee_priority" : "Fee priority", + "settings_save_recipient_address" : "Save recipient address", + "settings_personal" : "Personal", + "settings_change_pin" : "Change PIN", + "settings_change_language" : "Change language", + "settings_allow_biometrical_authentication" : "Allow biometrical authentication", + "settings_dark_mode" : "Dark mode", + "settings_transactions" : "Transactions", + "settings_trades" : "Trades", + "settings_display_on_dashboard_list" : "Display on dashboard list", + "settings_all" : "ALL", + "settings_only_trades" : "Only trades", + "settings_only_transactions" : "Only transactions", + "settings_none" : "None", + "settings_support" : "Support", + "settings_terms_and_conditions" : "Terms and Conditions", + "pin_is_incorrect" : "PIN is incorrect", + + + "setup_pin" : "Setup PIN", + "enter_your_pin_again" : "Enter your pin again", + "setup_successful" : "Your PIN has been set up successfully!", + + + "wallet_keys" : "Wallet seed/keys", + "wallet_seed" : "Wallet seed", + "private_key" : "Private key", + "public_key" : "Public key", + "view_key_private" : "View key (private)", + "view_key_public" : "View key (public)", + "spend_key_private" : "Spend key (private)", + "spend_key_public" : "Spend key (public)", + "copied_key_to_clipboard" : "Copied ${key} to Clipboard", + + + "new_subaddress_title" : "New address", + "new_subaddress_label_name" : "Label name", + "new_subaddress_create" : "Create", + + "address_label" : "Address label", + + "subaddress_title" : "Subaddress list", + + + "trade_details_title" : "Trade Details", + "trade_details_id" : "ID", + "trade_details_state" : "Status", + "trade_details_fetching" : "Fetching", + "trade_details_provider" : "Provider", + "trade_details_created_at" : "Created at", + "trade_details_pair" : "Pair", + "trade_details_copied" : "${title} copied to Clipboard", + + + "trade_history_title" : "Trade history", + + + "transaction_details_title" : "Transaction Details", + "transaction_details_transaction_id" : "Transaction ID", + "transaction_details_date" : "Date", + "transaction_details_height" : "Height", + "transaction_details_amount" : "Amount", + "transaction_details_fee" : "Fee", + "transaction_details_copied" : "${title} copied to Clipboard", + "transaction_details_recipient_address" : "Recipient addresses", + + + "wallet_list_title" : "Monero Wallet", + "wallet_list_create_new_wallet" : "Create New Wallet", + "wallet_list_restore_wallet" : "Restore Wallet", + "wallet_list_load_wallet" : "Load wallet", + "wallet_list_loading_wallet" : "Loading ${wallet_name} wallet", + "wallet_list_failed_to_load" : "Failed to load ${wallet_name} wallet. ${error}", + "wallet_list_removing_wallet" : "Removing ${wallet_name} wallet", + "wallet_list_failed_to_remove" : "Failed to remove ${wallet_name} wallet. ${error}", + + + "widgets_address" : "Address", + "widgets_restore_from_blockheight" : "Restore from blockheight", + "widgets_restore_from_date" : "Restore from date", + "widgets_or" : "or", + "widgets_seed" : "Seed", + + + "router_no_route" : "No route defined for ${name}", + + + "error_text_account_name" : "Account name can only contain letters, numbers\nand must be between 1 and 15 characters long", + "error_text_contact_name" : "Contact name can't contain ` , ' \" symbols\nand must be between 1 and 32 characters long", + "error_text_address" : "Wallet address must correspond to the type\nof cryptocurrency", + "error_text_node_address" : "Please enter a iPv4 address", + "error_text_node_port" : "Node port can only contain numbers between 0 and 65535", + "error_text_payment_id" : "Payment ID can only contain from 16 to 64 chars in hex", + "error_text_xmr" : "XMR value can't exceed available balance.\nThe number of fraction digits must be less or equal to 12", + "error_text_fiat" : "Value of amount can't exceed available balance.\nThe number of fraction digits must be less or equal to 2", + "error_text_subaddress_name" : "Subaddress name can't contain ` , ' \" symbols\nand must be between 1 and 20 characters long", + "error_text_amount" : "Amount can only contain numbers", + "error_text_wallet_name" : "Wallet name can only contain letters, numbers, _ - symbols \nand must be between 1 and 33 characters long", + "error_text_keys" : "Wallet keys can only contain 64 chars in hex", + "error_text_crypto_currency" : "The number of fraction digits\nmust be less or equal to 12", + "error_text_minimal_limit" : "Trade for ${provider} is not created. Amount is less then minimal: ${min} ${currency}", + "error_text_maximum_limit" : "Trade for ${provider} is not created. Amount is more then maximum: ${max} ${currency}", + "error_text_limits_loading_failed" : "Trade for ${provider} is not created. Limits loading failed", + "error_text_template" : "Template name and address can't contain ` , ' \" symbols\nand must be between 1 and 106 characters long", + + + "auth_store_ban_timeout" : "ban_timeout", + "auth_store_banned_for" : "Banned for ", + "auth_store_banned_minutes" : " minutes", + "auth_store_incorrect_password" : "Wrong PIN", + "wallet_store_monero_wallet" : "Monero Wallet", + "wallet_restoration_store_incorrect_seed_length" : "Incorrect seed length", + + + "full_balance" : "Full Balance", + "available_balance" : "Available Balance", + "hidden_balance" : "Hidden Balance", + + + "sync_status_syncronizing" : "SYNCHRONIZING", + "sync_status_syncronized" : "SYNCHRONIZED", + "sync_status_not_connected" : "NOT CONNECTED", + "sync_status_starting_sync" : "STARTING SYNC", + "sync_status_failed_connect" : "DISCONNECTED", + "sync_status_connecting" : "CONNECTING", + "sync_status_connected" : "CONNECTED", + "sync_status_attempting_sync" : "ATTEMPTING SYNC", + + + "transaction_priority_slow" : "Slow", + "transaction_priority_regular" : "Regular", + "transaction_priority_medium" : "Medium", + "transaction_priority_fast" : "Fast", + "transaction_priority_fastest" : "Fastest", + + + "trade_for_not_created" : "Trade for ${title} is not created.", + "trade_not_created" : "Trade not created", + "trade_id_not_found" : "Trade ${tradeId} of ${title} not found.", + "trade_not_found" : "Trade not found.", + + + "trade_state_pending" : "Pending", + "trade_state_confirming" : "Confirming", + "trade_state_trading" : "Trading", + "trade_state_traded" : "Traded", + "trade_state_complete" : "Complete", + "trade_state_to_be_created" : "To be created", + "trade_state_unpaid" : "Unpaid", + "trade_state_underpaid" : "Underpaid", + "trade_state_paid_unconfirmed" : "Paid unconfirmed", + "trade_state_paid" : "Paid", + "trade_state_btc_sent" : "Btc sent", + "trade_state_timeout" : "Timeout", + "trade_state_created" : "Created", + "trade_state_finished" : "Finished", + + "change_language" : "Change language", + "change_language_to" : "Change language to ${language}?", + + "paste" : "Paste", + "restore_from_seed_placeholder" : "Please enter or paste your seed here", + "add_new_word" : "Add new word", + "incorrect_seed" : "The text entered is not valid.", + + "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}", + + "card_address" : "Address:", + "buy" : "Buy", + "sell": "Sell", + + "placeholder_transactions" : "Your transactions will be displayed here", + "placeholder_contacts" : "Your contacts will be displayed here", + + "template" : "Template", + "confirm_delete_template" : "This action will delete this template. Do you wish to continue?", + "confirm_delete_wallet" : "This action will delete this wallet. Do you wish to continue?", + + "picker_description" : "To choose ChangeNOW or MorphToken, please change your trading pair first", + + "change_wallet_alert_title" : "Change current wallet", + "change_wallet_alert_content" : "Do you want to change current wallet to ${wallet_name}?", + + "creating_new_wallet" : "Creating new wallet", + "creating_new_wallet_error" : "Error: ${description}", + + "seed_alert_title" : "Attention", + "seed_alert_content" : "The seed is the only way to recover your wallet. Have you written it down?", + "seed_alert_back" : "Go back", + "seed_alert_yes" : "Yes, I have", + + "exchange_sync_alert_content" : "Please wait until your wallet is synchronized", + + "pre_seed_title" : "IMPORTANT", + "pre_seed_description" : "On the next page you will see a series of ${words} words. This is your unique and private seed and it is the ONLY way to recover your wallet in case of loss or malfunction. It is YOUR responsibility to write it down and store it in a safe place outside of the Cake Wallet app.", + "pre_seed_button_text" : "I understand. Show me my seed", + + "xmr_to_error" : "XMR.TO error", + "xmr_to_error_description" : "Invalid amount. Maximum limit 8 digits after the decimal point", + + "provider_error" : "${provider} error", + + "use_ssl" : "Use SSL", + "trusted" : "Trusted", + + "color_theme" : "Color theme", + "light_theme" : "Light", + "bright_theme" : "Bright", + "dark_theme" : "Dark", + "enter_your_note" : "Enter your note…", + "note_optional" : "Note (optional)", + "note_tap_to_change" : "Note (tap to change)", + "view_in_block_explorer" : "View in Block Explorer", + "view_transaction_on" : "View Transaction on ", + "transaction_key" : "Transaction Key", + "confirmations" : "Confirmations", + "recipient_address" : "Recipient address", + + "extra_id" : "Extra ID:", + "destination_tag" : "Destination tag:", + "memo" : "Memo:", + + "backup" : "Backup", + "change_password" : "Change password", + "backup_password" : "Backup password", + "write_down_backup_password" : "Please write down your backup password, which is used for the import of your backup files.", + "export_backup" : "Export backup", + "save_backup_password" : "Please make sure that you have saved your backup password. You will not be able to import your backup files without it.", + "backup_file" : "Backup file", + + "edit_backup_password" : "Edit Backup Password", + "save_backup_password_alert" : "Save backup password", + "change_backup_password_alert" : "Your previous backup files will be not available to import with new backup password. New backup password will be used only for new backup files. Are you sure that you want to change backup password?", + + "enter_backup_password" : "Enter backup password here", + "select_backup_file" : "Select backup file", + "import" : "Import", + "please_select_backup_file" : "Please select backup file and enter backup password.", + + "fixed_rate" : "Fixed rate", + "fixed_rate_alert" : "You will be able to enter receive amount when fixed rate mode is checked. Do you want to switch to fixed rate mode?", + + "xlm_extra_info" : "Please don’t forget to specify the Memo ID while sending the XLM transaction for the exchange", + "xrp_extra_info" : "Please don’t forget to specify the Destination Tag while sending the XRP transaction for the exchange", + + "exchange_incorrect_current_wallet_for_xmr" : "If you want to exchange XMR from your Cake Wallet Monero balance, please switch to your Monero wallet first.", + "confirmed" : "Confirmed", + "unconfirmed" : "Unconfirmed", + "displayable" : "Displayable", + + "submit_request" : "submit a request", + + "buy_alert_content" : "Currently we only support the purchase of Bitcoin and Litecoin. To buy Bitcoin or Litecoin, please create or switch to your Bitcoin or Litecoin wallet.", + "sell_alert_content": "We currently only support the sale of Bitcoin. To sell Bitcoin, please create or switch to your Bitcoin wallet.", + + "outdated_electrum_wallet_description" : "New Bitcoin wallets created in Cake now have a 24-word seed. It is mandatory that you create a new Bitcoin wallet and transfer all of your funds to the new 24-word wallet, and stop using wallets with a 12-word seed. Please do this immediately to secure your funds.", + "understand" : "I understand", + + "apk_update" : "APK update", + + "buy_bitcoin" : "Buy Bitcoin", + "buy_with" : "Buy with", + "moonpay_alert_text" : "Value of the amount must be more or equal to ${minAmount} ${fiatCurrency}", + + "outdated_electrum_wallet_receive_warning": "If this wallet has a 12-word seed and was created in Cake, DO NOT deposit Bitcoin into this wallet. Any BTC transferred to this wallet may be lost. Create a new 24-word wallet (tap the menu at the top right, select Wallets, choose Create New Wallet, then select Bitcoin) and IMMEDIATELY move your BTC there. New (24-word) BTC wallets from Cake are secure", + "do_not_show_me": "Do not show me this again", + + "unspent_coins_title" : "Unspent coins", + "unspent_coins_details_title" : "Unspent coins details", + "freeze" : "Freeze", + "frozen" : "Frozen", + "coin_control" : "Coin control (optional)", + + "address_detected" : "Address detected", + "address_from_domain" : "This address is from ${domain} on Unstoppable Domains", + + "add_receiver" : "Add another receiver (optional)", + + "manage_yats" : "Manage Yats", + "yat_alert_title" : "Send and receive crypto more easily with Yat", + "yat_alert_content" : "Cake Wallet users can now send and receive all their favorite currencies with a one-of-a-kind emoji-based username.", + "get_your_yat" : "Get your Yat", + "connect_an_existing_yat" : "Connect an existing Yat", + "connect_yats": "Connect Yats", + "yat_address" : "Yat Address", + "yat" : "Yat", + "address_from_yat" : "This address is from ${emoji} on Yat", + "yat_error" : "Yat error", + "yat_error_content" : "No addresses linked with this Yat. Try another Yat", + "choose_address" : "\n\nPlease choose the address:", + "yat_popup_title" : "Your wallet address can be emojified.", + "yat_popup_content" : "You can now send and receive crypto in Cake Wallet with your Yat - a short, emoji-based username. Manage Yats at any time on the settings screen", + "second_intro_title" : "One emoji address to rule them all", + "second_intro_content" : "Your Yat is a single unique emoji address that replaces all of your long hexadecimal addresses for all of your currencies.", + "third_intro_title" : "Yat plays nicely with others", + "third_intro_content" : "Yats live outside of Cake Wallet, too. Any wallet address on earth can be replaced with a Yat!", + "learn_more" : "Learn More", + "search": "Search", + "search_language": "Search language", + "search_currency": "Search currency", + "new_template" : "New Template", + "electrum_address_disclaimer": "We generate new addresses each time you use one, but previous addresses continue to work", + "wallet_name_exists": "A wallet with that name already exists. Please choose a different name or rename the other wallet first.", + "market_place": "Marketplace", + "cake_pay_title": "Cake Pay Gift Cards", + "cake_pay_subtitle": "Buy discounted gift cards (USA only)", + "cake_pay_web_cards_title": "Cake Pay Web Cards", + "cake_pay_web_cards_subtitle": "Buy worldwide prepaid cards and gift cards", + "about_cake_pay": "Cake Pay allows you to easily buy gift cards with virtual assets, spendable instantly at over 150,000 merchants in the United States.", + "cake_pay_account_note": "Sign up with just an email address to see and purchase cards. Some are even available at a discount!", + "already_have_account": "Already have an account?", + "create_account": "Create Account", + "privacy_policy": "Privacy Policy", + "welcome_to_cakepay": "Welcome to Cake Pay!", + "sign_up": "Sign Up", + "forgot_password": "Forgot Password", + "reset_password": "Reset Password", + "gift_cards": "Gift Cards", + "setup_your_debit_card": "Set up your debit card", + "no_id_required": "No ID required. Top up and spend anywhere", + "how_to_use_card": "How to use this card", + "purchase_gift_card": "Purchase Gift Card", + "verification": "Verification", + "fill_code": "Please fill in the verification code provided to your email", + "dont_get_code": "Don't get code?", + "resend_code": "Please resend it", + "debit_card": "Debit Card", + "cakepay_prepaid_card": "CakePay Prepaid Debit Card", + "no_id_needed": "No ID needed!", + "frequently_asked_questions": "Frequently asked questions", + "debit_card_terms": "The storage and usage of your payment card number (and credentials corresponding to your payment card number) in this digital wallet are subject to the Terms and Conditions of the applicable cardholder agreement with the payment card issuer, as in effect from time to time.", + "please_reference_document": "Please reference the documents below for more information.", + "cardholder_agreement": "Cardholder Agreement", + "e_sign_consent": "E-Sign Consent", + "agree_and_continue": "Agree & Continue", + "email_address": "Email Address", + "agree_to": "By creating account you agree to the ", + "and": "and", + "enter_code": "Enter code", + "congratulations": "Congratulations!", + "you_now_have_debit_card": "You now have a debit card", + "min_amount" : "Min: ${value}", + "max_amount" : "Max: ${value}", + "enter_amount": "Enter Amount", + "billing_address_info": "If asked for a billing address, provide your shipping address", + "order_physical_card": "Order Physical Card", + "add_value": "Add value", + "activate": "Activate", + "get_a": "Get a ", + "digital_and_physical_card": " digital and physical prepaid debit card", + "get_card_note": " that you can reload with digital currencies. No additional information needed!", + "signup_for_card_accept_terms": "Sign up for the card and accept the terms.", + "add_fund_to_card": "Add prepaid funds to the cards (up to ${value})", + "use_card_info_two": "Funds are converted to USD when the held in the prepaid account, not in digital currencies.", + "use_card_info_three": "Use the digital card online or with contactless payment methods.", + "optionally_order_card": "Optionally order a physical card.", + "hide_details" : "Hide Details", + "show_details" : "Show Details", + "upto": "up to ${value}", + "discount": "Save ${value}%", + "gift_card_amount": "Gift Card Amount", + "bill_amount": "Bill Amount", + "you_pay": "You Pay", + "tip": "Tip:", + "custom": "custom", + "by_cake_pay": "by Cake Pay", + "expires": "Expires", + "mm": "MM", + "yy": "YY", + "online": "Online", + "offline": "Offline", + "gift_card_number": "Gift card number", + "pin_number": "PIN number", + "total_saving": "Total Savings", + "last_30_days": "Last 30 days", + "avg_savings": "Avg. Savings", + "view_all": "View all", + "active_cards": "Active cards", + "delete_account": "Delete Account", + "cards": "Cards", + "active": "Active", + "redeemed": "Redeemed", + "gift_card_balance_note": "Gift cards with a balance remaining will appear here", + "gift_card_redeemed_note": "Gift cards you’ve redeemed will appear here", + "logout": "Logout", + "add_tip": "Add Tip", + "percentageOf": "of ${amount}", + "is_percentage": "is", + "search_category": "Search category", + "mark_as_redeemed": "Mark As Redeemed", + "more_options": "More Options", + "awaiting_payment_confirmation": "Awaiting Payment Confirmation", + "transaction_sent_notice": "If the screen doesn’t proceed after 1 minute, check a block explorer and your email.", + "agree": "Agree", + "in_store": "In Store", + "generating_gift_card": "Generating Gift Card", + "payment_was_received": "Your payment was received.", + "proceed_after_one_minute": "If the screen doesn’t proceed after 1 minute, check your email.", + "order_id": "Order ID", + "gift_card_is_generated": "Gift Card is generated", + "open_gift_card": "Open Gift Card", + "contact_support": "Contact Support", + "gift_cards_unavailable": "Gift cards are available for purchase only with Monero, Bitcoin, and Litecoin at this time", + "introducing_cake_pay": "Introducing Cake Pay!", + "cake_pay_learn_more": "Instantly purchase and redeem gift cards in the app!\nSwipe left to right to learn more.", + "automatic": "Automatic", + "fixed_pair_not_supported": "This fixed pair is not supported with the selected exchanges", + "variable_pair_not_supported": "This variable pair is not supported with the selected exchanges", + "none_of_selected_providers_can_exchange": "None of the selected providers can make this exchange", + "choose_one": "Choose one", + "choose_from_available_options": "Choose from the available options:", + "custom_redeem_amount": "Custom Redeem Amount", + "add_custom_redemption": "Add Custom Redemption", + "remaining": "remaining", + "delete_wallet": "Delete wallet", + "delete_wallet_confirm_message" : "Are you sure that you want to delete ${wallet_name} wallet?", + "low_fee": "Low fee", + "low_fee_alert": "You currently are using a low network fee priority. This could cause long waits, different rates, or canceled trades. We recommend setting a higher fee for a better experience.", + "ignor": "Ignore", + "use_suggested": "Use Suggested", + "do_not_share_warning_text" : "Do not share these with anyone else, including support.\n\nYour funds can and will be stolen!", + "help": "help", + "all_transactions": "All transactions", + "all_trades": "All trades", + "connection_sync": "Connection and sync", + "security_and_backup": "Security and backup", + "create_backup": "Create backup", + "privacy_settings": "Privacy settings", + "privacy": "Privacy", + "display_settings": "Display settings", + "other_settings": "Other settings", + "require_pin_after": "Require PIN after", + "always": "Always", + "minutes_to_pin_code": "${minute} minutes", + "disable_exchange": "Disable exchange", + "advanced_privacy_settings": "Advanced Privacy Settings", + "settings_can_be_changed_later": "These settings can be changed later in the app settings", + "add_custom_node": "Add New Custom Node", + "disable_fiat": "Disable fiat", + "fiat_api": "Fiat API", + "disabled": "Disabled", + "enabled": "Enabled", + "tor_only": "Tor only", + "unmatched_currencies": "Your current wallet's currency does not match that of the scanned QR", + "orbot_running_alert": "Please make sure Orbot is running prior to connecting to this node.", + "contact_list_contacts": "Contacts", + "contact_list_wallets": "My Wallets" +} From 76bf0d2deeb22efadaae1c2ac4fa6a2cb25b14c5 Mon Sep 17 00:00:00 2001 From: qweewqi <102307285+qweewqi@users.noreply.github.com> Date: Thu, 19 Jan 2023 03:42:41 +0200 Subject: [PATCH 051/190] update_mmr --- res/values/strings_my.arb | 1153 ++++++++++++++++++------------------- 1 file changed, 576 insertions(+), 577 deletions(-) diff --git a/res/values/strings_my.arb b/res/values/strings_my.arb index a2b1cc702..352b8d191 100644 --- a/res/values/strings_my.arb +++ b/res/values/strings_my.arb @@ -1,684 +1,683 @@ { - "welcome" : "Welcome to", - "cake_wallet" : "Cake Wallet", - "first_wallet_text" : "Awesome wallet for Monero, Bitcoin, Litecoin, and Haven", - "please_make_selection" : "Please make a selection below to create or recover your wallet.", - "create_new" : "Create New Wallet", - "restore_wallet" : "Restore Wallet", + "welcome" : "မှကြိုဆိုပါတယ်။", + "cake_wallet" : "Cake ပိုက်ဆံအိတ်", + "first_wallet_text" : "Monero၊ Bitcoin၊ Litecoin နှင့် Haven အတွက် အလွန်ကောင်းမွန်သော ပိုက်ဆံအိတ်", + "please_make_selection" : "သင့်ပိုက်ဆံအိတ်ကို ဖန်တီးရန် သို့မဟုတ် ပြန်လည်ရယူရန် အောက်တွင် ရွေးချယ်မှုတစ်ခု ပြုလုပ်ပါ။", + "create_new" : "Wallet အသစ်ဖန်တီးပါ။", + "restore_wallet" : "ပိုက်ဆံအိတ်ကို ပြန်ယူပါ။", - "monero_com": "Monero.com by Cake Wallet", - "monero_com_wallet_text": "Awesome wallet for Monero", + "monero_com" : "Monero.com မှ Cake ပိုက်ဆံအိတ်", + "monero_com_wallet_text" : "Monero အတွက် အမိုက်စား ပိုက်ဆံအိတ်", - "haven_app": "Haven by Cake Wallet", - "haven_app_wallet_text": "Awesome wallet for Haven", + "haven_app" : "ဟေးဗင် ကိတ် ဝေါလက်", + "haven_app_wallet_text" : "ဟေဗင်အတွက် အံ့ဩစရာကောင်းတဲ့ ပိုက်ဆံအုံး", - "accounts" : "Accounts", - "edit" : "Edit", - "account" : "Account", - "add" : "Add", + "accounts" : "အကောင့်များ", + "edit" : "တည်းဖြတ်ပါ။", + "account" : "အကောင့်", + "add" : "ထည့်ပါ။", - "address_book" : "Address Book", - "contact" : "Contact", - "please_select" : "Please select:", - "cancel" : "Cancel", - "ok" : "OK", - "contact_name" : "Contact Name", - "reset" : "Reset", - "save" : "Save", - "address_remove_contact" : "Remove contact", - "address_remove_content" : "Are you sure that you want to remove selected contact?", + "address_book" : "လိပ်စာစာအုပ်", + "contact" : "ဆက်သွယ်ရန်", + "please_select" : "ကျေးဇူးပြု၍ ရွေးချယ်ပါ-", + "cancel" : "မလုပ်တော့", + "ok" : "ရလား", + "contact_name" : "ဆက်သွယ်ရန်အမည်", + "reset" : "ပြန်လည်သတ်မှတ်ပါ။", + "save" : "သိမ်းဆည်းပါ။", + "address_remove_contact" : "အဆက်အသွယ်ကို ဖယ်ရှားပါ။", + "address_remove_content" : "ရွေးချယ်ထားသောအဆက်အသွယ်ကို ဖယ်ရှားလိုသည်မှာ သေချာပါသလား။", - "authenticated" : "Authenticated", - "authentication" : "Authentication", - "failed_authentication" : "Failed authentication. ${state_error}", + "authenticated" : "အစစ်အမှန်", + "authentication" : "စစ်ဆေးခြင်း", + "failed_authentication" : "အထောက်အထားစိစစ်ခြင်း မအောင်မြင်ပါ။. ${state_error}", - "wallet_menu" : "Menu", - "Blocks_remaining" : "${status} Blocks Remaining", - "please_try_to_connect_to_another_node" : "Please try to connect to another node", - "xmr_hidden" : "Hidden", - "xmr_available_balance" : "Available Balance", - "xmr_full_balance" : "Full Balance", - "send" : "Send", - "receive" : "Receive", - "transactions" : "Transactions", - "incoming" : "Incoming", - "outgoing" : "Outgoing", - "transactions_by_date" : "Transactions by date", - "trades" : "Trades", - "filter_by": "Filter by", - "today" : "Today", - "yesterday" : "Yesterday", - "received" : "Received", - "sent" : "Sent", - "pending" : " (pending)", - "rescan" : "Rescan", - "reconnect" : "Reconnect", - "wallets" : "Wallets", - "show_seed" : "Show seed", - "show_keys" : "Show seed/keys", - "address_book_menu" : "Address book", - "reconnection" : "Reconnection", - "reconnect_alert_text" : "Are you sure you want to reconnect?", + "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" : "ကုန်သွယ်မှုများ", + "filter_by" : "အလိုက် စစ်ထုတ်ပါ။", + "today" : "ဒီနေ့", + "yesterday" : "မနေ့က", + "received" : "ရရှိခဲ့သည်။", + "sent" : "ပို့လိုက်ပါတယ်။", + "pending" : " (ဆိုင်းငံ့)", + "rescan" : "ပြန်စကင်န်လုပ်ပါ။", + "reconnect" : "ပြန်လည်ချိတ်ဆက်ပါ။", + "wallets" : "ပိုက်ဆံအိတ်", + "show_seed" : "မျိုးစေ့ကိုပြပါ။", + "show_keys" : "မျိုးစေ့ /သော့များကို ပြပါ။", + "address_book_menu" : "လိပ်စာစာအုပ်", + "reconnection" : "ပြန်လည်ချိတ်ဆက်မှု", + "reconnect_alert_text" : "ပြန်လည်ချိတ်ဆက်လိုသည်မှာ သေချာပါသလား။ ?", - "exchange" : "Exchange", - "clear" : "Clear", - "refund_address" : "Refund address", - "change_exchange_provider" : "Change Exchange Provider", - "you_will_send" : "Convert from", - "you_will_get" : "Convert to", - "amount_is_guaranteed" : "The receive amount is guaranteed", - "amount_is_estimate" : "The receive amount is an estimate", - "powered_by" : "Powered by ${title}", - "error" : "Error", - "estimated" : "Estimated", - "min_value" : "Min: ${value} ${currency}", - "max_value" : "Max: ${value} ${currency}", - "change_currency" : "Change Currency", - "overwrite_amount" : "Overwrite amount", - "qr_payment_amount" : "This QR code contains a payment amount. Do you want to overwrite the current value?", + "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" : "Copy ID", - "exchange_result_write_down_trade_id" : "Please copy or write down the trade ID to continue.", - "trade_id" : "Trade ID:", - "copied_to_clipboard" : "Copied to Clipboard", - "saved_the_trade_id" : "I've saved the trade ID", - "fetching" : "Fetching", - "id" : "ID: ", - "amount" : "Amount: ", - "payment_id" : "Payment ID: ", - "status" : "Status: ", - "offer_expires_in" : "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", - "confirm_sending" : "Confirm sending", - "commit_transaction_amount_fee" : "Commit transaction\nAmount: ${amount}\nFee: ${fee}", - "sending" : "Sending", - "transaction_sent" : "Transaction sent!", - "expired" : "Expired", + "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" : "ငွေပေးချေမှု 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" : "Send XMR", - "exchange_new_template" : "New template", + "send_xmr" : "XMR ပို့ပါ။", + "exchange_new_template" : "ပုံစံအသစ်", - "faq" : "FAQ", + "faq" : "အမြဲမေးလေ့ရှိသောမေးခွန်းများ", - "enter_your_pin" : "Enter your PIN", - "loading_your_wallet" : "Loading your wallet", + "enter_your_pin" : "သင်၏ PIN ကိုထည့်ပါ။", + "loading_your_wallet" : "သင့်ပိုက်ဆံအိတ်ကို ဖွင့်နေသည်။", - "new_wallet" : "New Wallet", - "wallet_name" : "Wallet name", - "continue_text" : "Continue", - "choose_wallet_currency" : "Please choose wallet currency:", + "new_wallet" : "ပိုက်ဆံအိတ်အသစ်", + "wallet_name" : "ပိုက်ဆံအိတ်နာမည", + "continue_text" : "ဆက်လက်", + "choose_wallet_currency" : "ပိုက်ဆံအိတ်ငွေကြေးကို ရွေးပါ-", - "node_new" : "New Node", - "node_address" : "Node Address", - "node_port" : "Node port", - "login" : "Login", - "password" : "Password", - "nodes" : "Nodes", - "node_reset_settings_title" : "Reset settings", - "nodes_list_reset_to_default_message" : "Are you sure that you want to reset settings to default?", - "change_current_node" : "Are you sure to change current node to ${node}?", - "change" : "Change", - "remove_node" : "Remove node", - "remove_node_message" : "Are you sure that you want to remove selected node?", - "remove" : "Remove", - "delete" : "Delete", - "add_new_node" : "Add new node", - "change_current_node_title" : "Change current node", - "node_test" : "Test", - "node_connection_successful" : "Connection was successful", - "node_connection_failed" : "Connection was failed", - "new_node_testing" : "New node testing", + "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" : "Switch to ", - "digit_pin" : "-digit PIN", + "use" : "သို့ပြောင်းပါ။", + "digit_pin" : "-ဂဏန်း PIN", - "share_address" : "Share address", - "receive_amount" : "Amount", - "subaddresses" : "Subaddresses", - "addresses" : "Addresses", - "scan_qr_code" : "Scan the QR code to get the address", - "qr_fullscreen" : "Tap to open full screen QR code", - "rename" : "Rename", - "choose_account" : "Choose account", - "create_new_account" : "Create new account", - "accounts_subaddresses" : "Accounts and subaddresses", + "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 Wallet", - "restore_title_from_seed_keys" : "Restore from seed/keys", - "restore_description_from_seed_keys" : "Get back your wallet from seed/keys that you've saved to secure place", - "restore_next" : "Next", - "restore_title_from_backup" : "Restore from backup", - "restore_description_from_backup" : "You can restore the whole Cake Wallet app from your back-up file", - "restore_seed_keys_restore" : "Seed/Keys Restore", - "restore_title_from_seed" : "Restore from seed", - "restore_description_from_seed" : "Restore your wallet from either the 25 word or 13 word combination code", - "restore_title_from_keys" : "Restore from keys", - "restore_description_from_keys" : "Restore your wallet from generated keystrokes saved from your private keys", - "restore_wallet_name" : "Wallet name", - "restore_address" : "Address", - "restore_view_key_private" : "View key (private)", - "restore_spend_key_private" : "Spend key (private)", - "restore_recover" : "Restore", - "restore_wallet_restore_description" : "Wallet restore description", - "restore_new_seed" : "New seed", - "restore_active_seed" : "Active seed", - "restore_bitcoin_description_from_seed" : "Restore your wallet from 24 word combination code", - "restore_bitcoin_description_from_keys" : "Restore your wallet from generated WIF string from your private keys", - "restore_bitcoin_title_from_keys" : "Restore from WIF", - "restore_from_date_or_blockheight" : "Please enter a date a few days before you created this wallet. Or if you know the blockheight, please enter it instead", + "restore_restore_wallet" : "ပိုက်ဆံအိတ်ကို ပြန်ယူပါ။", + "restore_title_from_seed_keys" : "မျိုးစေ့/သော့များမှ ပြန်လည်ရယူပါ။", + "restore_description_from_seed_keys" : "သင့်ပိုက်ဆံအိတ်ကို လုံခြုံသောနေရာတွင် သိမ်းဆည်းထားသော မျိုးစေ့/သော့များမှ ပြန်လည်ရယူပါ။", + "restore_next" : "နောက်တစ်ခု", + "restore_title_from_backup" : "အရန်သိမ်းခြင်းမှ ပြန်လည်ရယူပါ။", + "restore_description_from_backup" : "သင့်အရန်ဖိုင်မှ Cake Wallet အက်ပ်တစ်ခုလုံးကို သင်ပြန်လည်ရယူနိုင်သည်။", + "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" : "Wallet ပြန်လည်ရယူသည့် ဖော်ပြချက်", + "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" : "Please write these down in case you lose or wipe your phone", - "seed_title" : "Seed", - "seed_share" : "Share seed", - "copy" : "Copy", + "seed_reminder" : "ကျေးဇူးပြု၍ သင့်ဖုန်းကို ပျောက်ဆုံးသွားပါက သို့မဟုတ် ဖျက်မိပါက ၎င်းတို့ကို ချရေးပါ။", + "seed_title" : "မျိုးစေ့", + "seed_share" : "မျိုးစေ့မျှဝေပါ။", + "copy" : "ကော်ပီ", - "seed_language_choose" : "Please choose seed language:", - "seed_choose" : "Choose seed language", - "seed_language_next" : "Next", - "seed_language_english" : "English", - "seed_language_chinese" : "Chinese", - "seed_language_dutch" : "Dutch", - "seed_language_german" : "German", - "seed_language_japanese" : "Japanese", - "seed_language_portuguese" : "Portuguese", - "seed_language_russian" : "Russian", - "seed_language_spanish" : "Spanish", - "seed_language_french": "French", - "seed_language_italian": "Italian", + "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", - "send_your_wallet" : "Your wallet", - "send_address" : "${cryptoCurrency} address", - "send_payment_id" : "Payment ID (optional)", - "all" : "ALL", - "send_error_minimum_value" : "Minimum value of amount is 0.01", - "send_error_currency" : "Currency can only contain numbers", - "send_estimated_fee" : "Estimated fee:", - "send_priority" : "Currently the fee is set at ${transactionPriority} priority.\nTransaction priority can be adjusted in the settings", - "send_creating_transaction" : "Creating transaction", - "send_templates" : "Templates", - "send_new" : "New", - "send_amount" : "Amount:", - "send_fee" : "Fee:", - "send_name" : "Name", - "send_got_it" : "Got it", - "send_sending" : "Sending...", - "send_success" : "Your ${crypto} was successfully sent", + "send_title" : "ပို့ပါ။", + "send_your_wallet" : "သင့်ပိုက်ဆံအိတ်", + "send_address" : "${cryptoCurrency} လိပ်စာ", + "send_payment_id" : "ငွေပေးချေမှု 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", - "settings_nodes" : "Nodes", - "settings_current_node" : "Current node", - "settings_wallets" : "Wallets", - "settings_display_balance" : "Display balance", - "settings_currency" : "Currency", - "settings_fee_priority" : "Fee priority", - "settings_save_recipient_address" : "Save recipient address", - "settings_personal" : "Personal", - "settings_change_pin" : "Change PIN", - "settings_change_language" : "Change language", - "settings_allow_biometrical_authentication" : "Allow biometrical authentication", - "settings_dark_mode" : "Dark mode", - "settings_transactions" : "Transactions", - "settings_trades" : "Trades", - "settings_display_on_dashboard_list" : "Display on dashboard list", - "settings_all" : "ALL", - "settings_only_trades" : "Only trades", - "settings_only_transactions" : "Only transactions", - "settings_none" : "None", - "settings_support" : "Support", - "settings_terms_and_conditions" : "Terms and Conditions", - "pin_is_incorrect" : "PIN is incorrect", + "settings_title" : "ဆက်တင်များ", + "settings_nodes" : "ဆုံမှတ်များ", + "settings_current_node" : "လက်ရှိ 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" : "ပင်နံပါတ် မမှန်ပါ။", - "setup_pin" : "Setup PIN", - "enter_your_pin_again" : "Enter your pin again", - "setup_successful" : "Your PIN has been set up successfully!", + "setup_pin" : "ပင်နံပါတ်ကို စနစ်ထည့်သွင်းပါ။", + "enter_your_pin_again" : "သင့်ပင်နံပါတ်ကို ထပ်မံထည့်သွင်းပါ။", + "setup_successful" : "သင့်ပင်နံပါတ်ကို အောင်မြင်စွာ သတ်မှတ်ပြီးပါပြီ။", - "wallet_keys" : "Wallet seed/keys", - "wallet_seed" : "Wallet seed", - "private_key" : "Private key", - "public_key" : "Public key", - "view_key_private" : "View key (private)", - "view_key_public" : "View key (public)", - "spend_key_private" : "Spend key (private)", - "spend_key_public" : "Spend key (public)", - "copied_key_to_clipboard" : "Copied ${key} to Clipboard", + "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} ကို Clipboard သို့ ကူးယူထားသည်။", - "new_subaddress_title" : "New address", - "new_subaddress_label_name" : "Label name", - "new_subaddress_create" : "Create", + "new_subaddress_title" : "လိပ်စာအသစ်", + "new_subaddress_label_name" : "အညွှန်းအမည်", + "new_subaddress_create" : "ဖန်တီးပါ။", - "address_label" : "Address label", + "address_label" : "လိပ်စာတံဆိပ်", - "subaddress_title" : "Subaddress list", + "subaddress_title" : "လိပ်စာစာရင်း", - "trade_details_title" : "Trade Details", - "trade_details_id" : "ID", - "trade_details_state" : "Status", - "trade_details_fetching" : "Fetching", - "trade_details_provider" : "Provider", - "trade_details_created_at" : "Created at", - "trade_details_pair" : "Pair", - "trade_details_copied" : "${title} copied to Clipboard", + "trade_details_title" : "ကုန်သွယ်မှုအသေးစိတ်", + "trade_details_id" : "အမှတ်သညာ", + "trade_details_state" : "အဆင့်အတန်း", + "trade_details_fetching" : "ခေါ်ယူခြင်း။", + "trade_details_provider" : "ပံ့ပိုးပေးသူ", + "trade_details_created_at" : "တွင်ဖန်တီးခဲ့သည်။", + "trade_details_pair" : "တွဲ", + "trade_details_copied" : "${title} ကို Clipboard သို့ ကူးယူထားသည်။", - "trade_history_title" : "Trade history", + "trade_history_title" : "ကုန်သွယ်မှုသမိုင်း", - "transaction_details_title" : "Transaction Details", - "transaction_details_transaction_id" : "Transaction ID", - "transaction_details_date" : "Date", - "transaction_details_height" : "Height", - "transaction_details_amount" : "Amount", - "transaction_details_fee" : "Fee", - "transaction_details_copied" : "${title} copied to Clipboard", - "transaction_details_recipient_address" : "Recipient addresses", + "transaction_details_title" : "ငွေပေးငွေယူအသေးစိတ်", + "transaction_details_transaction_id" : "ငွေပေးငွေယူ ID", + "transaction_details_date" : "ရက်စွဲ", + "transaction_details_height" : "အရပ်အမြင့်", + "transaction_details_amount" : "ပမာဏ", + "transaction_details_fee" : "ကြေး", + "transaction_details_copied" : "${title} ကို Clipboard သို့ ကူးယူထားသည်။", + "transaction_details_recipient_address" : "လက်ခံသူလိပ်စာများ", - "wallet_list_title" : "Monero Wallet", - "wallet_list_create_new_wallet" : "Create New Wallet", - "wallet_list_restore_wallet" : "Restore Wallet", - "wallet_list_load_wallet" : "Load wallet", - "wallet_list_loading_wallet" : "Loading ${wallet_name} wallet", - "wallet_list_failed_to_load" : "Failed to load ${wallet_name} wallet. ${error}", - "wallet_list_removing_wallet" : "Removing ${wallet_name} wallet", - "wallet_list_failed_to_remove" : "Failed to remove ${wallet_name} wallet. ${error}", + "wallet_list_title" : "Monero ပိုက်ဆံအိတ်", + "wallet_list_create_new_wallet" : "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" : "Address", - "widgets_restore_from_blockheight" : "Restore from blockheight", - "widgets_restore_from_date" : "Restore from date", - "widgets_or" : "or", - "widgets_seed" : "Seed", + "widgets_address" : "လိပ်စာ", + "widgets_restore_from_blockheight" : "အမြင့်မှ ပြန်လည်ရယူပါ။", + "widgets_restore_from_date" : "ရက်စွဲမှ ပြန်လည်ရယူပါ။", + "widgets_or" : "သို့မဟုတ်", + "widgets_seed" : "မျိုးစေ့", - "router_no_route" : "No route defined for ${name}", + "router_no_route" : "${name} အတွက် သတ်မှတ်ထားသော လမ်းကြောင်းမရှိပါ", - "error_text_account_name" : "Account name can only contain letters, numbers\nand must be between 1 and 15 characters long", - "error_text_contact_name" : "Contact name can't contain ` , ' \" symbols\nand must be between 1 and 32 characters long", - "error_text_address" : "Wallet address must correspond to the type\nof cryptocurrency", - "error_text_node_address" : "Please enter a iPv4 address", - "error_text_node_port" : "Node port can only contain numbers between 0 and 65535", - "error_text_payment_id" : "Payment ID can only contain from 16 to 64 chars in hex", - "error_text_xmr" : "XMR value can't exceed available balance.\nThe number of fraction digits must be less or equal to 12", - "error_text_fiat" : "Value of amount can't exceed available balance.\nThe number of fraction digits must be less or equal to 2", - "error_text_subaddress_name" : "Subaddress name can't contain ` , ' \" symbols\nand must be between 1 and 20 characters long", - "error_text_amount" : "Amount can only contain numbers", - "error_text_wallet_name" : "Wallet name can only contain letters, numbers, _ - symbols \nand must be between 1 and 33 characters long", - "error_text_keys" : "Wallet keys can only contain 64 chars in hex", - "error_text_crypto_currency" : "The number of fraction digits\nmust be less or equal to 12", - "error_text_minimal_limit" : "Trade for ${provider} is not created. Amount is less then minimal: ${min} ${currency}", - "error_text_maximum_limit" : "Trade for ${provider} is not created. Amount is more then maximum: ${max} ${currency}", - "error_text_limits_loading_failed" : "Trade for ${provider} is not created. Limits loading failed", - "error_text_template" : "Template name and address can't contain ` , ' \" symbols\nand must be between 1 and 106 characters long", + "error_text_account_name" : "အကောင့်အမည်သည် အက္ခရာများ၊ နံပါတ်များသာ ပါဝင်နိုင်သည်\nနှင့် စာလုံးရေ 1 နှင့် 15 ကြားရှိရပါမည်။", + "error_text_contact_name" : "အဆက်အသွယ်အမည်တွင် ` , ' \" သင်္ကေတများ မပါဝင်နိုင်ပါ\nနှင့် စာလုံးအရှည် 1 နှင့် 32 ကြားရှိရမည်", + "error_text_address" : "Wallet လိပ်စာသည် အမျိုးအစား\no cryptocurrency နှင့် ကိုက်ညီရပါမည်။", + "error_text_node_address" : "ကျေးဇူးပြု၍ iPv4 လိပ်စာကို ထည့်ပါ။", + "error_text_node_port" : "နော်ဒီဆိပ်ကမ်း တွင် 0 နှင့် 65535 အကြား နံပါတ်များသာ ပါဝင်နိုင်သည်။", + "error_text_payment_id" : "ငွေပေးချေမှု ID တွင် hex တွင် စာလုံး 16 လုံးမှ 64 လုံးသာ ပါဝင်နိုင်သည်။", + "error_text_xmr" : "XMR တန်ဖိုးသည် ရနိုင်သောလက်ကျန်ကို ကျော်လွန်၍မရပါ။\nအပိုင်းကိန်းဂဏန်းများ သည် 12 နှင့် လျော့နည်းရမည်", + "error_text_fiat" : "ပမာဏ၏တန်ဖိုးသည် ရနိုင်သောလက်ကျန်ကို မကျော်လွန်နိုင်ပါ။\nအပိုင်းကိန်းဂဏန်းအရေအတွက်သည် 2 နှင့် လျော့နည်းရမည်", + "error_text_subaddress_name" : "လိပ်စာခွဲအမည်တွင် ` , ' \" သင်္ကေတများ မပါဝင်နိုင်ပါ\nနှင့် စာလုံးရေ 1 နှင့် 20 ကြားရှိရမည်", + "error_text_amount" : "ပမာဏသည် နံပါတ်များသာ ပါဝင်နိုင်သည်။", + "error_text_wallet_name" : "ပိုက်ဆံအိတ်အမည်တွင် စာလုံးများ၊ နံပါတ်များ၊ _ - သင်္ကေတများသာ ပါဝင်နိုင်သည် \n နှင့် စာလုံးအရှည် 1 နှင့် 33 ကြားရှိရမည်", + "error_text_keys" : "ပိုက်ဆံအိတ်သော့များတွင် hex တွင် 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" : "Banned for ", - "auth_store_banned_minutes" : " minutes", - "auth_store_incorrect_password" : "Wrong PIN", - "wallet_store_monero_wallet" : "Monero Wallet", - "wallet_restoration_store_incorrect_seed_length" : "Incorrect seed length", + "auth_store_ban_timeout" : "အချိန်ကို ပိတ်ပင်ခြင်း", + "auth_store_banned_for" : "ပိတ်ပင်ထားသည်။", + "auth_store_banned_minutes" : " မိနစ်များ", + "auth_store_incorrect_password" : "ပင်နံပါတ် မှားနေသည်။", + "wallet_store_monero_wallet" : "Monero ပိုက်ဆံအိတ်", + "wallet_restoration_store_incorrect_seed_length" : "မျိုးစေ့အရှည် မမှန်ပါ။", - "full_balance" : "Full Balance", - "available_balance" : "Available Balance", + "full_balance" : "Balance အပြည့်", + "available_balance" : "လက်ကျန်ငွေ ရရှိနိုင်", "hidden_balance" : "Hidden Balance", - "sync_status_syncronizing" : "SYNCHRONIZING", - "sync_status_syncronized" : "SYNCHRONIZED", - "sync_status_not_connected" : "NOT CONNECTED", - "sync_status_starting_sync" : "STARTING SYNC", - "sync_status_failed_connect" : "DISCONNECTED", - "sync_status_connecting" : "CONNECTING", - "sync_status_connected" : "CONNECTED", - "sync_status_attempting_sync" : "ATTEMPTING SYNC", + "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" : "Slow", - "transaction_priority_regular" : "Regular", - "transaction_priority_medium" : "Medium", - "transaction_priority_fast" : "Fast", - "transaction_priority_fastest" : "Fastest", + "transaction_priority_slow" : "နှေးနှေး", + "transaction_priority_regular" : "ပုံမှန်အစည်းအဝေး", + "transaction_priority_medium" : "အလယ်အလတ်", + "transaction_priority_fast" : "မြန်သည်။", + "transaction_priority_fastest" : "အမြန်ဆုံး", - "trade_for_not_created" : "Trade for ${title} is not created.", - "trade_not_created" : "Trade not created", - "trade_id_not_found" : "Trade ${tradeId} of ${title} not found.", - "trade_not_found" : "Trade not found.", + "trade_for_not_created" : "${title} အတွက် ကုန်သွယ်မှုကို ဖန်တီးမထားပါ။", + "trade_not_created" : "ကုန်သွယ်မှု မဖန်တီးပါ။", + "trade_id_not_found" : "${title} ၏ ${tradeId} ကုန်သွယ်မှုကို ရှာမတွေ့ပါ။", + "trade_not_found" : "ကုန်သွယ်မှု မတွေ့။", - "trade_state_pending" : "Pending", - "trade_state_confirming" : "Confirming", - "trade_state_trading" : "Trading", - "trade_state_traded" : "Traded", - "trade_state_complete" : "Complete", - "trade_state_to_be_created" : "To be created", - "trade_state_unpaid" : "Unpaid", - "trade_state_underpaid" : "Underpaid", - "trade_state_paid_unconfirmed" : "Paid unconfirmed", - "trade_state_paid" : "Paid", - "trade_state_btc_sent" : "Btc sent", - "trade_state_timeout" : "Timeout", - "trade_state_created" : "Created", - "trade_state_finished" : "Finished", + "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", - "change_language_to" : "Change language to ${language}?", + "change_language" : "ဘာသာစကားပြောင်းပါ။", + "change_language_to" : "ဘာသာစကားကို ${language} သို့ ပြောင်းမလား။", - "paste" : "Paste", - "restore_from_seed_placeholder" : "Please enter or paste your seed here", - "add_new_word" : "Add new word", - "incorrect_seed" : "The text entered is not valid.", + "paste" : "ငါးပိ", + "restore_from_seed_placeholder" : "သင့်အစေ့ကို ဤနေရာတွင် ထည့်ပါ သို့မဟုတ် ကူးထည့်ပါ။", + "add_new_word" : "စကားလုံးအသစ်ထည့်ပါ။", + "incorrect_seed" : "ထည့်သွင်းထားသော စာသားသည် မမှန်ကန်ပါ။", - "biometric_auth_reason" : "Scan your fingerprint to authenticate", - "version" : "Version ${currentVersion}", + "biometric_auth_reason" : "စစ်မှန်ကြောင်းအထောက်အထားပြရန် သင့်လက်ဗွေကို စကန်ဖတ်ပါ။", + "version" : "ဗားရှင်း ${currentVersion}", - "openalias_alert_title" : "Address Detected", - "openalias_alert_content" : "You will be sending funds to\n${recipient_name}", + "openalias_alert_title" : "လိပ်စာကို ရှာတွေ့သည်။", + "openalias_alert_content" : "သင်သည် \n${recipient_name} သို့ ရန်ပုံငွေများ ပေးပို့ပါမည်", - "card_address" : "Address:", - "buy" : "Buy", - "sell": "Sell", + "card_address" : "လိပ်စာ-", + "buy" : "ဝယ်ပါ။", + "sell" : "ရောင်း", - "placeholder_transactions" : "Your transactions will be displayed here", - "placeholder_contacts" : "Your contacts will be displayed here", + "placeholder_transactions" : "သင်၏ ငွေပေးငွေယူများကို ဤနေရာတွင် ပြသပါမည်။", + "placeholder_contacts" : "သင့်အဆက်အသွယ်များကို ဤနေရာတွင် ပြသပါမည်။", - "template" : "Template", - "confirm_delete_template" : "This action will delete this template. Do you wish to continue?", - "confirm_delete_wallet" : "This action will delete this wallet. Do you wish to continue?", + "template" : "ပုံစံခွက်", + "confirm_delete_template" : "ဤလုပ်ဆောင်ချက်သည် ဤပုံစံပြားကို ဖျက်လိုက်ပါမည်။ ဆက်လုပ်လိုပါသလား။", + "confirm_delete_wallet" : "ဤလုပ်ဆောင်ချက်သည် ဤပိုက်ဆံအိတ်ကို ဖျက်လိုက်ပါမည်။ ဆက်လုပ်လိုပါသလား။", - "picker_description" : "To choose ChangeNOW or MorphToken, please change your trading pair first", + "picker_description" : "ChangeNOW သို့မဟုတ် MorphToken ကိုရွေးချယ်ရန်၊ ကျေးဇူးပြု၍ သင်၏ကုန်သွယ်မှုအတွဲကို ဦးစွာပြောင်းလဲပါ။", - "change_wallet_alert_title" : "Change current wallet", - "change_wallet_alert_content" : "Do you want to change current wallet to ${wallet_name}?", + "change_wallet_alert_title" : "လက်ရှိပိုက်ဆံအိတ်ကို ပြောင်းပါ။", + "change_wallet_alert_content" : "လက်ရှိပိုက်ဆံအိတ်ကို ${wallet_name} သို့ ပြောင်းလိုပါသလား။", - "creating_new_wallet" : "Creating new wallet", - "creating_new_wallet_error" : "Error: ${description}", + "creating_new_wallet" : "ပိုက်ဆံအိတ်အသစ်ဖန်တီးခြင်း။", + "creating_new_wallet_error" : "အမှား- ${description}", - "seed_alert_title" : "Attention", - "seed_alert_content" : "The seed is the only way to recover your wallet. Have you written it down?", - "seed_alert_back" : "Go back", - "seed_alert_yes" : "Yes, I have", + "seed_alert_title" : "အာရုံ", + "seed_alert_content" : "မျိုးစေ့သည် သင့်ပိုက်ဆံအိတ်ကို ပြန်လည်ရယူရန် တစ်ခုတည်းသောနည်းလမ်းဖြစ်သည်။ ရေးပြီးပြီလား။", + "seed_alert_back" : "ပြန်သွားသည်", + "seed_alert_yes" : "ဟုတ်ကဲ့၊", - "exchange_sync_alert_content" : "Please wait until your wallet is synchronized", + "exchange_sync_alert_content" : "သင့်ပိုက်ဆံအိတ်ကို စင့်ခ်လုပ်ထားသည့်အချိန်အထိ စောင့်ပါ။", - "pre_seed_title" : "IMPORTANT", - "pre_seed_description" : "On the next page you will see a series of ${words} words. This is your unique and private seed and it is the ONLY way to recover your wallet in case of loss or malfunction. It is YOUR responsibility to write it down and store it in a safe place outside of the Cake Wallet app.", - "pre_seed_button_text" : "I understand. Show me my seed", + "pre_seed_title" : "အရေးကြီးသည်။", + "pre_seed_description" : "နောက်စာမျက်နှာတွင် ${words} စကားလုံးများ အတွဲလိုက်ကို တွေ့ရပါမည်။ ၎င်းသည် သင်၏ထူးခြားပြီး သီးသန့်မျိုးစေ့ဖြစ်ပြီး ပျောက်ဆုံးခြင်း သို့မဟုတ် ချွတ်ယွင်းမှုရှိပါက သင့်ပိုက်ဆံအိတ်ကို ပြန်လည်ရယူရန် တစ်ခုတည်းသောနည်းလမ်းဖြစ်သည်။ ၎င်းကို Cake Wallet အက်ပ်၏အပြင်ဘက်တွင် လုံခြုံသောနေရာတွင် သိမ်းဆည်းရန်မှာ သင်၏တာဝန်ဖြစ်သည်။", + "pre_seed_button_text" : "ကျွန်တော်နားလည်ပါတယ်။ ငါ့အမျိုးအနွယ်ကို ပြလော့", - "xmr_to_error" : "XMR.TO error", - "xmr_to_error_description" : "Invalid amount. Maximum limit 8 digits after the decimal point", + "xmr_to_error" : "XMR.TO အမှား", + "xmr_to_error_description" : "ပမာဏ မမှန်ပါ။ ဒဿမအမှတ်ပြီးနောက် ဂဏန်း ၈ လုံးတွင် အများဆုံးကန့်သတ်ချက်", - "provider_error" : "${provider} error", + "provider_error" : "${provider} အမှား", - "use_ssl" : "Use SSL", - "trusted" : "Trusted", + "use_ssl" : "SSL ကိုသုံးပါ။", + "trusted" : "ယုံတယ်။", - "color_theme" : "Color theme", - "light_theme" : "Light", - "bright_theme" : "Bright", - "dark_theme" : "Dark", - "enter_your_note" : "Enter your note…", - "note_optional" : "Note (optional)", - "note_tap_to_change" : "Note (tap to change)", - "view_in_block_explorer" : "View in Block Explorer", - "view_transaction_on" : "View Transaction on ", - "transaction_key" : "Transaction Key", - "confirmations" : "Confirmations", - "recipient_address" : "Recipient address", + "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" : "ငွေသွင်းငွေထုတ်ကီး", + "confirmations" : "အတည်ပြုချက်များ", + "recipient_address" : "လက်ခံသူလိပ်စာ", - "extra_id" : "Extra ID:", - "destination_tag" : "Destination tag:", - "memo" : "Memo:", + "extra_id" : "အပို ID-", + "destination_tag" : "ခရီးဆုံးအမှတ်-", + "memo" : "မှတ်စုတို:", - "backup" : "Backup", - "change_password" : "Change password", - "backup_password" : "Backup password", - "write_down_backup_password" : "Please write down your backup password, which is used for the import of your backup files.", - "export_backup" : "Export backup", - "save_backup_password" : "Please make sure that you have saved your backup password. You will not be able to import your backup files without it.", - "backup_file" : "Backup file", + "backup" : "မိတ္တူ", + "change_password" : "စကားဝှက်ကိုပြောင်းရန်", + "backup_password" : "စကားဝှက်ကို အရန်သိမ်းဆည်းပါ။", + "write_down_backup_password" : "သင်၏ အရန်ဖိုင်များကို တင်သွင်းရန်အတွက် အသုံးပြုသည့် သင်၏ အရန်စကားဝှက်ကို ချရေးပါ။", + "export_backup" : "အရန်ကူးထုတ်ရန်", + "save_backup_password" : "သင်၏ အရန်စကားဝှက်ကို သိမ်းဆည်းထားကြောင်း သေချာပါစေ။ ၎င်းမပါဘဲ သင်၏ အရန်ဖိုင်များကို တင်သွင်းနိုင်မည် မဟုတ်ပါ။", + "backup_file" : "အရန်ဖိုင်", - "edit_backup_password" : "Edit Backup Password", - "save_backup_password_alert" : "Save backup password", - "change_backup_password_alert" : "Your previous backup files will be not available to import with new backup password. New backup password will be used only for new backup files. Are you sure that you want to change backup password?", + "edit_backup_password" : "Backup Password ကို တည်းဖြတ်ပါ။", + "save_backup_password_alert" : "အရန်စကားဝှက်ကို သိမ်းဆည်းပါ။", + "change_backup_password_alert" : "အရန်စကားဝှက်အသစ်ဖြင့် သင်၏ယခင်မိတ္တူဖိုင်များကို တင်သွင်းရန် မရနိုင်ပါ။ အရန်စကားဝှက်အသစ်ကို အရန်ဖိုင်အသစ်အတွက်သာ အသုံးပြုပါမည်။ အရန်စကားဝှက်ကို ပြောင်းလိုသည်မှာ သေချာပါသလား။", - "enter_backup_password" : "Enter backup password here", - "select_backup_file" : "Select backup file", - "import" : "Import", - "please_select_backup_file" : "Please select backup file and enter backup password.", + "enter_backup_password" : "အရန်စကားဝှက်ကို ဤနေရာတွင် ထည့်ပါ။", + "select_backup_file" : "အရန်ဖိုင်ကို ရွေးပါ။", + "import" : "သွင်းကုန်", + "please_select_backup_file" : "အရန်ဖိုင်ကို ရွေးပြီး အရန်စကားဝှက်ကို ထည့်ပါ။", - "fixed_rate" : "Fixed rate", - "fixed_rate_alert" : "You will be able to enter receive amount when fixed rate mode is checked. Do you want to switch to fixed rate mode?", + "fixed_rate" : "ပုံသေနှုန်း", + "fixed_rate_alert" : "ပုံသေနှုန်းထားမုဒ်ကို စစ်ဆေးသည့်အခါ လက်ခံပမာဏကို ထည့်သွင်းနိုင်မည်ဖြစ်သည်။ ပုံသေနှုန်းမုဒ်သို့ ပြောင်းလိုပါသလား။", - "xlm_extra_info" : "Please don’t forget to specify the Memo ID while sending the XLM transaction for the exchange", - "xrp_extra_info" : "Please don’t forget to specify the Destination Tag while sending the XRP transaction for the exchange", + "xlm_extra_info" : "လဲလှယ်မှုအတွက် XLM ငွေလွှဲပို့နေစဉ် Memo ID ကို သတ်မှတ်ရန် မမေ့ပါနှင့်", + "xrp_extra_info" : "လဲလှယ်မှုအတွက် XRP ငွေလွှဲပို့နေစဉ် Destination Tag ကို သတ်မှတ်ရန် မမေ့ပါနှင့်", - "exchange_incorrect_current_wallet_for_xmr" : "If you want to exchange XMR from your Cake Wallet Monero balance, please switch to your Monero wallet first.", - "confirmed" : "Confirmed", - "unconfirmed" : "Unconfirmed", - "displayable" : "Displayable", + "exchange_incorrect_current_wallet_for_xmr" : "သင်၏ Cake Wallet Monero လက်ကျန်မှ XMR ကိုလဲလှယ်လိုပါက၊ သင်၏ Monero ပိုက်ဆံအိတ်သို့ ဦးစွာပြောင်းပါ။", + "confirmed" : "အတည်ပြုခဲ့သည်။", + "unconfirmed" : "အတည်မပြုနိုင်ပါ။", + "displayable" : "ပြသနိုင်သည်။", - "submit_request" : "submit a request", + "submit_request" : "တောင်းဆိုချက်တစ်ခုတင်ပြပါ။", - "buy_alert_content" : "Currently we only support the purchase of Bitcoin and Litecoin. To buy Bitcoin or Litecoin, please create or switch to your Bitcoin or Litecoin wallet.", - "sell_alert_content": "We currently only support the sale of Bitcoin. To sell Bitcoin, please create or switch to your Bitcoin wallet.", + "buy_alert_content" : "လောလောဆယ် ကျွန်ုပ်တို့သည် Bitcoin နှင့် Litecoin ဝယ်ယူမှုကိုသာ ပံ့ပိုးပေးပါသည်။ Bitcoin သို့မဟုတ် Litecoin ဝယ်ယူရန်၊ သင်၏ Bitcoin သို့မဟုတ် Litecoin ပိုက်ဆံအိတ်ကို ဖန်တီးပါ သို့မဟုတ် ပြောင်းပါ။", + "sell_alert_content" : "ကျွန်ုပ်တို့သည် လက်ရှိတွင် Bitcoin ရောင်းချခြင်းကိုသာ ပံ့ပိုးပေးပါသည်။ Bitcoin ရောင်းချရန်၊ သင်၏ Bitcoin ပိုက်ဆံအိတ်ကို ဖန်တီးပါ သို့မဟုတ် ပြောင်းပါ။", - "outdated_electrum_wallet_description" : "New Bitcoin wallets created in Cake now have a 24-word seed. It is mandatory that you create a new Bitcoin wallet and transfer all of your funds to the new 24-word wallet, and stop using wallets with a 12-word seed. Please do this immediately to secure your funds.", - "understand" : "I understand", + "outdated_electrum_wallet_description" : "ယခု Cake တွင်ဖန်တီးထားသော Bitcoin ပိုက်ဆံအိတ်အသစ်တွင် စကားလုံး 24 မျိုးရှိသည်။ Bitcoin ပိုက်ဆံအိတ်အသစ်တစ်ခုကို ဖန်တီးပြီး သင့်ငွေအားလုံးကို 24 စကားလုံးပိုက်ဆံအိတ်အသစ်သို့ လွှဲပြောင်းပြီး 12 စကားလုံးမျိုးစေ့ဖြင့် ပိုက်ဆံအိတ်များကို အသုံးပြုခြင်းကို ရပ်တန့်ရန် မဖြစ်မနေလိုအပ်ပါသည်။ သင့်ရန်ပုံငွေများကို လုံခြုံစေရန်အတွက် ၎င်းကိုချက်ချင်းလုပ်ဆောင်ပါ။", + "understand" : "ကျွန်တော်နားလည်ပါတယ်", - "apk_update" : "APK update", + "apk_update" : "APK အပ်ဒိတ်", - "buy_bitcoin" : "Buy Bitcoin", - "buy_with" : "Buy with", - "moonpay_alert_text" : "Value of the amount must be more or equal to ${minAmount} ${fiatCurrency}", + "buy_bitcoin" : "Bitcoin ကိုဝယ်ပါ။", + "buy_with" : "အတူဝယ်ပါ။", + "moonpay_alert_text" : "ပမာဏ၏တန်ဖိုးသည် ${minAmount} ${fiatCurrency} နှင့် ပိုနေရမည်", - "outdated_electrum_wallet_receive_warning": "If this wallet has a 12-word seed and was created in Cake, DO NOT deposit Bitcoin into this wallet. Any BTC transferred to this wallet may be lost. Create a new 24-word wallet (tap the menu at the top right, select Wallets, choose Create New Wallet, then select Bitcoin) and IMMEDIATELY move your BTC there. New (24-word) BTC wallets from Cake are secure", - "do_not_show_me": "Do not show me this again", + "outdated_electrum_wallet_receive_warning" : "ဤပိုက်ဆံအိတ်တွင် စာလုံး 12 လုံးပါပြီး ကိတ်မုန့်တွင် ဖန်တီးပါက၊ Bitcoin ကို ဤပိုက်ဆံအိတ်ထဲသို့ မထည့်ပါနှင့်။ ဤပိုက်ဆံအိတ်သို့ လွှဲပြောင်းပေးသည့် မည်သည့် BTC မဆို ဆုံးရှုံးနိုင်သည်။ 24 စကားလုံးပိုက်ဆံအိတ်အသစ်တစ်ခုဖန်တီးပါ (ညာဘက်အပေါ်ထောင့်ရှိမီနူးကိုနှိပ်ပါ၊ Wallets ကိုရွေးချယ်ပါ၊ ပိုက်ဆံအိတ်အသစ်ဖန်တီးရန်ကိုရွေးချယ်ပါ၊ ထို့နောက် Bitcoin ကိုရွေးချယ်ပါ) နှင့်သင်၏ BTC ကိုထိုနေရာသို့ချက်ချင်းရွှေ့ပါ။ Cake မှ (24 စာလုံး) BTC ပိုက်ဆံအိတ်အသစ်များသည် လုံခြုံပါသည်။", + "do_not_show_me" : "ဒါကို ထပ်မပြနဲ့", - "unspent_coins_title" : "Unspent coins", - "unspent_coins_details_title" : "Unspent coins details", - "freeze" : "Freeze", - "frozen" : "Frozen", - "coin_control" : "Coin control (optional)", + "unspent_coins_title" : "အသုံးမဝင်သော အကြွေစေ့များ", + "unspent_coins_details_title" : "အသုံးမဝင်သော အကြွေစေ့အသေးစိတ်များ", + "freeze" : "အေးခဲ", + "frozen" : "ဖြူဖြူ", + "coin_control" : "အကြွေစေ့ထိန်းချုပ်မှု (ချန်လှပ်ထားနိုင်သည်)", - "address_detected" : "Address detected", - "address_from_domain" : "This address is from ${domain} on Unstoppable Domains", + "address_detected" : "လိပ်စာကို တွေ့ရှိခဲ့သည်။", + "address_from_domain" : "ဤလိပ်စာသည် Unstoppable Domains ရှိ ${domain} မှဖြစ်သည်။", - "add_receiver" : "Add another receiver (optional)", + "add_receiver" : "အခြားလက်ခံသူ ထည့်ပါ (ချန်လှပ်ထားနိုင်သည်)", - "manage_yats" : "Manage Yats", - "yat_alert_title" : "Send and receive crypto more easily with Yat", - "yat_alert_content" : "Cake Wallet users can now send and receive all their favorite currencies with a one-of-a-kind emoji-based username.", - "get_your_yat" : "Get your Yat", - "connect_an_existing_yat" : "Connect an existing Yat", - "connect_yats": "Connect Yats", - "yat_address" : "Yat Address", - "yat" : "Yat", - "address_from_yat" : "This address is from ${emoji} on Yat", - "yat_error" : "Yat error", - "yat_error_content" : "No addresses linked with this Yat. Try another Yat", - "choose_address" : "\n\nPlease choose the address:", - "yat_popup_title" : "Your wallet address can be emojified.", - "yat_popup_content" : "You can now send and receive crypto in Cake Wallet with your Yat - a short, emoji-based username. Manage Yats at any time on the settings screen", - "second_intro_title" : "One emoji address to rule them all", - "second_intro_content" : "Your Yat is a single unique emoji address that replaces all of your long hexadecimal addresses for all of your currencies.", - "third_intro_title" : "Yat plays nicely with others", - "third_intro_content" : "Yats live outside of Cake Wallet, too. Any wallet address on earth can be replaced with a Yat!", - "learn_more" : "Learn More", - "search": "Search", - "search_language": "Search language", - "search_currency": "Search currency", - "new_template" : "New Template", - "electrum_address_disclaimer": "We generate new addresses each time you use one, but previous addresses continue to work", - "wallet_name_exists": "A wallet with that name already exists. Please choose a different name or rename the other wallet first.", - "market_place": "Marketplace", - "cake_pay_title": "Cake Pay Gift Cards", - "cake_pay_subtitle": "Buy discounted gift cards (USA only)", - "cake_pay_web_cards_title": "Cake Pay Web Cards", - "cake_pay_web_cards_subtitle": "Buy worldwide prepaid cards and gift cards", - "about_cake_pay": "Cake Pay allows you to easily buy gift cards with virtual assets, spendable instantly at over 150,000 merchants in the United States.", - "cake_pay_account_note": "Sign up with just an email address to see and purchase cards. Some are even available at a discount!", - "already_have_account": "Already have an account?", - "create_account": "Create Account", - "privacy_policy": "Privacy Policy", - "welcome_to_cakepay": "Welcome to Cake Pay!", - "sign_up": "Sign Up", - "forgot_password": "Forgot Password", - "reset_password": "Reset Password", - "gift_cards": "Gift Cards", - "setup_your_debit_card": "Set up your debit card", - "no_id_required": "No ID required. Top up and spend anywhere", - "how_to_use_card": "How to use this card", - "purchase_gift_card": "Purchase Gift Card", - "verification": "Verification", - "fill_code": "Please fill in the verification code provided to your email", - "dont_get_code": "Don't get code?", - "resend_code": "Please resend it", - "debit_card": "Debit Card", - "cakepay_prepaid_card": "CakePay Prepaid Debit Card", - "no_id_needed": "No ID needed!", - "frequently_asked_questions": "Frequently asked questions", - "debit_card_terms": "The storage and usage of your payment card number (and credentials corresponding to your payment card number) in this digital wallet are subject to the Terms and Conditions of the applicable cardholder agreement with the payment card issuer, as in effect from time to time.", - "please_reference_document": "Please reference the documents below for more information.", - "cardholder_agreement": "Cardholder Agreement", - "e_sign_consent": "E-Sign Consent", - "agree_and_continue": "Agree & Continue", - "email_address": "Email Address", - "agree_to": "By creating account you agree to the ", - "and": "and", - "enter_code": "Enter code", - "congratulations": "Congratulations!", - "you_now_have_debit_card": "You now have a debit card", - "min_amount" : "Min: ${value}", - "max_amount" : "Max: ${value}", - "enter_amount": "Enter Amount", - "billing_address_info": "If asked for a billing address, provide your shipping address", - "order_physical_card": "Order Physical Card", - "add_value": "Add value", - "activate": "Activate", - "get_a": "Get a ", - "digital_and_physical_card": " digital and physical prepaid debit card", - "get_card_note": " that you can reload with digital currencies. No additional information needed!", - "signup_for_card_accept_terms": "Sign up for the card and accept the terms.", - "add_fund_to_card": "Add prepaid funds to the cards (up to ${value})", - "use_card_info_two": "Funds are converted to USD when the held in the prepaid account, not in digital currencies.", - "use_card_info_three": "Use the digital card online or with contactless payment methods.", - "optionally_order_card": "Optionally order a physical card.", - "hide_details" : "Hide Details", - "show_details" : "Show Details", - "upto": "up to ${value}", - "discount": "Save ${value}%", - "gift_card_amount": "Gift Card Amount", - "bill_amount": "Bill Amount", - "you_pay": "You Pay", - "tip": "Tip:", - "custom": "custom", - "by_cake_pay": "by Cake Pay", - "expires": "Expires", + "manage_yats" : "Yats ကို စီမံပါ။", + "yat_alert_title" : "Yat ဖြင့် crypto ကိုပိုမိုလွယ်ကူစွာပေးပို့လက်ခံပါ။", + "yat_alert_content" : "Cake Wallet အသုံးပြုသူများသည် တစ်မျိုးတည်းသော အီမိုဂျီအခြေခံအသုံးပြုသူအမည်ဖြင့် ၎င်းတို့၏ စိတ်ကြိုက်ငွေကြေးအားလုံးကို ပေးပို့နိုင်ပါပြီ။", + "get_your_yat" : "မင်းရဲ့ Yat ကိုယူလိုက်ပါ။", + "connect_an_existing_yat" : "ရှိပြီးသား Yat ကို ချိတ်ဆက်ပါ။", + "connect_yats" : "Yats ကိုချိတ်ဆက်ပါ။", + "yat_address" : "Yat လိပ်စာ", + "yat" : "ယတ်", + "address_from_yat" : "ဤလိပ်စာသည် Yat ရှိ ${emoji} မှဖြစ်သည်။", + "yat_error" : "Yat အမှား", + "yat_error_content" : "ဤ Yat နှင့် ချိတ်ဆက်ထားသော လိပ်စာမရှိပါ။ နောက်ထပ် Yat စမ်းကြည့်ပါ။", + "choose_address" : "\n\nလိပ်စာကို ရွေးပါ-", + "yat_popup_title" : "သင့်ပိုက်ဆံအိတ်လိပ်စာကို emojified လုပ်နိုင်ပါသည်။", + "yat_popup_content" : "သင်၏ Yat - တိုတောင်းသော အီမိုဂျီအခြေခံအသုံးပြုသူအမည်ဖြင့် Cake Wallet တွင် crypto ကို ယခု ပေးပို့နိုင်ပါပြီ။ ဆက်တင်စခရင်ပေါ်တွင် 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_subtitle" : "လျှော့စျေးလက်ဆောင်ကတ်များဝယ်ပါ (USA သာ)", + "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" : "လက်ဆောင်ကဒ်ပြား", + "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" : "CakePay ကြိုတင်ငွေဖြည့်ဒက်ဘစ်ကတ်", + "no_id_needed" : "ID မလိုအပ်ပါ။", + "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" : "လက်ဆောင်ကတ် ပမာဏ", + "bill_amount" : "ဘီလ်ပမာဏ", + "you_pay" : "သင်ပေးချေပါ။", + "tip" : "အကြံပြုချက်-", + "custom" : "စိတ်ကြိုက်", + "by_cake_pay" : "Cake Pay ဖြင့်", + "expires" : "သက်တမ်းကုန်သည်။", "mm": "MM", "yy": "YY", - "online": "Online", - "offline": "Offline", - "gift_card_number": "Gift card number", - "pin_number": "PIN number", - "total_saving": "Total Savings", - "last_30_days": "Last 30 days", - "avg_savings": "Avg. Savings", - "view_all": "View all", - "active_cards": "Active cards", - "delete_account": "Delete Account", - "cards": "Cards", - "active": "Active", - "redeemed": "Redeemed", - "gift_card_balance_note": "Gift cards with a balance remaining will appear here", - "gift_card_redeemed_note": "Gift cards you’ve redeemed will appear here", - "logout": "Logout", - "add_tip": "Add Tip", - "percentageOf": "of ${amount}", - "is_percentage": "is", - "search_category": "Search category", - "mark_as_redeemed": "Mark As Redeemed", - "more_options": "More Options", - "awaiting_payment_confirmation": "Awaiting Payment Confirmation", - "transaction_sent_notice": "If the screen doesn’t proceed after 1 minute, check a block explorer and your email.", - "agree": "Agree", - "in_store": "In Store", - "generating_gift_card": "Generating Gift Card", - "payment_was_received": "Your payment was received.", - "proceed_after_one_minute": "If the screen doesn’t proceed after 1 minute, check your email.", - "order_id": "Order ID", - "gift_card_is_generated": "Gift Card is generated", - "open_gift_card": "Open Gift Card", - "contact_support": "Contact Support", - "gift_cards_unavailable": "Gift cards are available for purchase only with Monero, Bitcoin, and Litecoin at this time", - "introducing_cake_pay": "Introducing Cake Pay!", - "cake_pay_learn_more": "Instantly purchase and redeem gift cards in the app!\nSwipe left to right to learn more.", - "automatic": "Automatic", - "fixed_pair_not_supported": "This fixed pair is not supported with the selected exchanges", - "variable_pair_not_supported": "This variable pair is not supported with the selected exchanges", - "none_of_selected_providers_can_exchange": "None of the selected providers can make this exchange", - "choose_one": "Choose one", - "choose_from_available_options": "Choose from the available options:", - "custom_redeem_amount": "Custom Redeem Amount", - "add_custom_redemption": "Add Custom Redemption", - "remaining": "remaining", - "delete_wallet": "Delete wallet", - "delete_wallet_confirm_message" : "Are you sure that you want to delete ${wallet_name} wallet?", - "low_fee": "Low fee", - "low_fee_alert": "You currently are using a low network fee priority. This could cause long waits, different rates, or canceled trades. We recommend setting a higher fee for a better experience.", - "ignor": "Ignore", - "use_suggested": "Use Suggested", - "do_not_share_warning_text" : "Do not share these with anyone else, including support.\n\nYour funds can and will be stolen!", - "help": "help", - "all_transactions": "All transactions", - "all_trades": "All trades", - "connection_sync": "Connection and sync", - "security_and_backup": "Security and backup", - "create_backup": "Create backup", - "privacy_settings": "Privacy settings", - "privacy": "Privacy", - "display_settings": "Display settings", - "other_settings": "Other settings", - "require_pin_after": "Require PIN after", - "always": "Always", - "minutes_to_pin_code": "${minute} minutes", - "disable_exchange": "Disable exchange", - "advanced_privacy_settings": "Advanced Privacy Settings", - "settings_can_be_changed_later": "These settings can be changed later in the app settings", - "add_custom_node": "Add New Custom Node", - "disable_fiat": "Disable fiat", - "fiat_api": "Fiat API", - "disabled": "Disabled", - "enabled": "Enabled", - "tor_only": "Tor only", - "unmatched_currencies": "Your current wallet's currency does not match that of the scanned QR", - "orbot_running_alert": "Please make sure Orbot is running prior to connecting to this node.", - "contact_list_contacts": "Contacts", - "contact_list_wallets": "My Wallets" + "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" : "မျက်နှာပြင်သည် ၁ မိနစ်အကြာတွင် ဆက်လက်မလုပ်ဆောင်ပါက၊ ပိတ်ဆို့ရှာဖွေသူနှင့် သင့်အီးမေးလ်ကို စစ်ဆေးပါ။", + "agree" : "သဘောတူသည်။", + "in_store" : "စတိုးတွင်", + "generating_gift_card" : "လက်ဆောင်ကတ်ထုတ်ပေးခြင်း။", + "payment_was_received" : "သင့်ငွေပေးချေမှုကို လက်ခံရရှိခဲ့သည်။", + "proceed_after_one_minute" : "မျက်နှာပြင်သည် ၁ မိနစ်အကြာတွင် ဆက်လက်မလုပ်ဆောင်ပါက သင့်အီးမေးလ်ကို စစ်ဆေးပါ။", + "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" : "ရွေးချယ်ထားသော ဖလှယ်မှုများဖြင့် ဤပုံသေအတွဲကို ပံ့ပိုးမထားပါ။", + "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 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 နှင့် မကိုက်ညီပါ။", + "contact_list_contacts" : "အဆက်အသွယ်များ", + "contact_list_wallets" : "ကျွန်ုပ်၏ ပိုက်ဆံအိတ်များ" } From c647129e8b3f61ea1e6cc17574be8c91e8408b93 Mon Sep 17 00:00:00 2001 From: HardenedSteel Date: Fri, 20 Jan 2023 12:30:33 +0300 Subject: [PATCH 052/190] fix accidentally translated parameter + add Turkish to ReadME.md --- README.md | 1 + res/values/strings_tr.arb | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ebeb9d43d..a8432e75e 100644 --- a/README.md +++ b/README.md @@ -102,6 +102,7 @@ Edit the applicable `strings_XX.arb` file in `res/values/` and open a pull reque - Korean - Arabic - Burmese +- Turkish ## Add a new language diff --git a/res/values/strings_tr.arb b/res/values/strings_tr.arb index 9263417d5..678b3609f 100644 --- a/res/values/strings_tr.arb +++ b/res/values/strings_tr.arb @@ -586,7 +586,7 @@ "digital_and_physical_card": " Dijital para birimleri ile para yükleyebileceğiniz ve ek bilgiye gerek olmayan", "get_card_note": " dijital ve fiziksel ön ödemeli banka kartı edinin!", "signup_for_card_accept_terms": "Kart için kaydol ve koşulları kabul et.", - "add_fund_to_card": "Ön ödemeli kartlara para ekle (En fazla yüklenebilir tutar: ${değer})", + "add_fund_to_card": "Ön ödemeli kartlara para ekle (En fazla yüklenebilir tutar: ${value})", "use_card_info_two": "Paralar, dijital para birimlerinde değil, ön ödemeli hesapta tutulduğunda USD'ye dönüştürülür.", "use_card_info_three": "Dijital kartı çevrimiçi olarak veya temassız ödeme yöntemleriyle kullanın.", "optionally_order_card": "İsteğe bağlı olarak fiziksel bir kart sipariş edin.", From b8f74e50db1920ec8c93eb870b60f16b45d3672b Mon Sep 17 00:00:00 2001 From: Serhii Date: Fri, 20 Jan 2023 14:48:44 +0200 Subject: [PATCH 053/190] [skip ci] specify class type --- .../wallet_address_edit_or_create_view_model.dart | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/view_model/wallet_address_list/wallet_address_edit_or_create_view_model.dart b/lib/view_model/wallet_address_list/wallet_address_edit_or_create_view_model.dart index c9d2c77f5..c29a256df 100644 --- a/lib/view_model/wallet_address_list/wallet_address_edit_or_create_view_model.dart +++ b/lib/view_model/wallet_address_list/wallet_address_edit_or_create_view_model.dart @@ -1,3 +1,4 @@ +import 'package:cake_wallet/view_model/wallet_address_list/wallet_address_list_item.dart'; import 'package:mobx/mobx.dart'; import 'package:flutter/foundation.dart'; import 'package:cw_core/wallet_base.dart'; @@ -27,10 +28,10 @@ class AddressEditOrCreateStateFailure extends AddressEditOrCreateState { abstract class WalletAddressEditOrCreateViewModelBase with Store { WalletAddressEditOrCreateViewModelBase( - {required WalletBase wallet, dynamic item}) + {required WalletBase wallet, WalletAddressListItem? item}) : isEdit = item != null, state = AddressEditOrCreateStateInitial(), - label = item?.name as String? ?? '', + label = item?.name ?? '', _item = item, _wallet = wallet; @@ -42,7 +43,7 @@ abstract class WalletAddressEditOrCreateViewModelBase with Store { bool isEdit; - final dynamic _item; + final WalletAddressListItem? _item; final WalletBase _wallet; Future save() async { @@ -105,7 +106,7 @@ abstract class WalletAddressEditOrCreateViewModelBase with Store { .setLabelSubaddress( wallet, accountIndex: monero!.getCurrentAccount(wallet).id, - addressIndex: _item.id as int, + addressIndex: _item?.id as int, label: label); await wallet.save(); } @@ -116,7 +117,7 @@ abstract class WalletAddressEditOrCreateViewModelBase with Store { .setLabelSubaddress( wallet, accountIndex: haven!.getCurrentAccount(wallet).id, - addressIndex: _item.id as int, + addressIndex: _item?.id as int, label: label); await wallet.save(); } From b4fe38f78ff7eef9cc74521261ff6e15c38e743d Mon Sep 17 00:00:00 2001 From: Omar Hatem Date: Fri, 20 Jan 2023 16:52:16 +0200 Subject: [PATCH 054/190] Create pull request template --- .github/pull_request_template.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 .github/pull_request_template.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 000000000..d7c1b7241 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,9 @@ +Issue Number (if Applicable): Fixes # + +# Description + +Please include a summary of the changes and which issue is fixed / feature is added. + +# Pull Request - Checklist + +- [ ] Initial Manual Tests Passed From af01cb32435cc22c858c7556df02c2f3c238ff69 Mon Sep 17 00:00:00 2001 From: Serhii Date: Fri, 20 Jan 2023 21:44:08 +0200 Subject: [PATCH 055/190] minor fixes --- lib/di.dart | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/di.dart b/lib/di.dart index 1acdad2dd..78fde59e7 100644 --- a/lib/di.dart +++ b/lib/di.dart @@ -37,6 +37,7 @@ import 'package:cake_wallet/view_model/settings/other_settings_view_model.dart'; import 'package:cake_wallet/view_model/settings/privacy_settings_view_model.dart'; import 'package:cake_wallet/view_model/settings/security_settings_view_model.dart'; import 'package:cake_wallet/view_model/advanced_privacy_settings_view_model.dart'; +import 'package:cake_wallet/view_model/wallet_address_list/wallet_address_list_item.dart'; import 'package:cw_core/unspent_coins_info.dart'; import 'package:cake_wallet/core/backup_service.dart'; import 'package:cw_core/wallet_service.dart'; @@ -365,8 +366,8 @@ Future setup( addressListViewModel: getIt.get(), walletViewModel: getIt.get())); - getIt.registerFactoryParam( - (dynamic item, _) => WalletAddressEditOrCreateViewModel( + getIt.registerFactoryParam( + (WalletAddressListItem item, _) => WalletAddressEditOrCreateViewModel( wallet: getIt.get().wallet!, item: item)); getIt.registerFactoryParam( From 2fa7365218572fe59381267707e6275076035a5d Mon Sep 17 00:00:00 2001 From: Serhii Date: Fri, 20 Jan 2023 21:50:45 +0200 Subject: [PATCH 056/190] small fix --- lib/di.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/di.dart b/lib/di.dart index 78fde59e7..ae55c0ce6 100644 --- a/lib/di.dart +++ b/lib/di.dart @@ -366,8 +366,8 @@ Future setup( addressListViewModel: getIt.get(), walletViewModel: getIt.get())); - getIt.registerFactoryParam( - (WalletAddressListItem item, _) => WalletAddressEditOrCreateViewModel( + getIt.registerFactoryParam( + (WalletAddressListItem? item, _) => WalletAddressEditOrCreateViewModel( wallet: getIt.get().wallet!, item: item)); getIt.registerFactoryParam( From 912a4af86646328bd454a4f6f359de73b2a72fbe Mon Sep 17 00:00:00 2001 From: Serhii Date: Fri, 20 Jan 2023 23:18:58 +0200 Subject: [PATCH 057/190] fix nullable type --- ...let_address_edit_or_create_view_model.dart | 37 ++++++++----------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/lib/view_model/wallet_address_list/wallet_address_edit_or_create_view_model.dart b/lib/view_model/wallet_address_list/wallet_address_edit_or_create_view_model.dart index c29a256df..2cca395ab 100644 --- a/lib/view_model/wallet_address_list/wallet_address_edit_or_create_view_model.dart +++ b/lib/view_model/wallet_address_list/wallet_address_edit_or_create_view_model.dart @@ -99,27 +99,22 @@ abstract class WalletAddressEditOrCreateViewModelBase with Store { await wallet.walletAddresses.updateAddress(_item.address as String); await wallet.save(); }*/ - - if (wallet.type == WalletType.monero) { - await monero - !.getSubaddressList(wallet) - .setLabelSubaddress( - wallet, - accountIndex: monero!.getCurrentAccount(wallet).id, - addressIndex: _item?.id as int, - label: label); - await wallet.save(); - } - - if (wallet.type == WalletType.haven) { - await haven - !.getSubaddressList(wallet) - .setLabelSubaddress( - wallet, - accountIndex: haven!.getCurrentAccount(wallet).id, - addressIndex: _item?.id as int, - label: label); - await wallet.save(); + final index = _item?.id; + if (index != null) { + if (wallet.type == WalletType.monero) { + await monero!.getSubaddressList(wallet).setLabelSubaddress(wallet, + accountIndex: monero!.getCurrentAccount(wallet).id, addressIndex: index, label: label); + await wallet.save(); + return; + } + if (wallet.type == WalletType.haven) { + await haven!.getSubaddressList(wallet).setLabelSubaddress(wallet, + accountIndex: haven!.getCurrentAccount(wallet).id, + addressIndex: _item?.id as int, + label: label); + await wallet.save(); + return; + } } } } From 38012abb561169d1753f54231a0a2568dc4bf318 Mon Sep 17 00:00:00 2001 From: Justin Ehrenhofer Date: Mon, 23 Jan 2023 12:37:20 -0600 Subject: [PATCH 058/190] Change Ionia ToS links --- lib/src/screens/ionia/auth/ionia_create_account_page.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/src/screens/ionia/auth/ionia_create_account_page.dart b/lib/src/screens/ionia/auth/ionia_create_account_page.dart index 30a58850e..d2ced5dae 100644 --- a/lib/src/screens/ionia/auth/ionia_create_account_page.dart +++ b/lib/src/screens/ionia/auth/ionia_create_account_page.dart @@ -32,8 +32,8 @@ class IoniaCreateAccountPage extends BasePage { final FocusNode _emailFocus; final TextEditingController _emailController; - static const privacyPolicyUrl = 'https://ionia.docsend.com/view/jaqsmbq9w7dzvnqf'; - static const termsAndConditionsUrl = 'https://ionia.docsend.com/view/hi9awnwxr6mqgiqj'; + static const privacyPolicyUrl = 'https://ionia.docsend.com/view/jhjvdn7qq7k3ukwt'; + static const termsAndConditionsUrl = 'https://ionia.docsend.com/view/uceirymz2ijacq5g'; @override Widget middle(BuildContext context) { From 0dc7474e6232ff29dcd5eef19f0d016d80aaabb2 Mon Sep 17 00:00:00 2001 From: Justin Ehrenhofer Date: Mon, 23 Jan 2023 14:31:44 -0600 Subject: [PATCH 059/190] Bump Haven to 3.0.7 https://github.com/haven-protocol-org/haven-main/compare/v3.0.3...v3.0.7 --- scripts/android/build_haven.sh | 2 +- scripts/ios/build_haven.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/android/build_haven.sh b/scripts/android/build_haven.sh index ec5732e86..f745e942e 100755 --- a/scripts/android/build_haven.sh +++ b/scripts/android/build_haven.sh @@ -1,7 +1,7 @@ #!/bin/sh . ./config.sh -HAVEN_VERSION=tags/v3.0.3 +HAVEN_VERSION=tags/v3.0.7 HAVEN_SRC_DIR=${WORKDIR}/haven git clone https://github.com/haven-protocol-org/haven-main.git ${HAVEN_SRC_DIR} diff --git a/scripts/ios/build_haven.sh b/scripts/ios/build_haven.sh index d9974b060..8de8b4c83 100755 --- a/scripts/ios/build_haven.sh +++ b/scripts/ios/build_haven.sh @@ -4,7 +4,7 @@ HAVEN_URL="https://github.com/haven-protocol-org/haven-main.git" HAVEN_DIR_PATH="${EXTERNAL_IOS_SOURCE_DIR}/haven" -HAVEN_VERSION=tags/v3.0.3 +HAVEN_VERSION=tags/v3.0.7 BUILD_TYPE=release PREFIX=${EXTERNAL_IOS_DIR} DEST_LIB_DIR=${EXTERNAL_IOS_LIB_DIR}/haven From c1c49e878eb8d825c6630b9934095dae91f5010f Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Tue, 24 Jan 2023 02:46:22 +0200 Subject: [PATCH 060/190] [skip ci] - Revert disabling UI error reporting as it will also disable some errors from the view models - Fix warnings in node list row (potential nullability issue fix) --- lib/main.dart | 5 +---- lib/src/screens/nodes/widgets/node_list_row.dart | 8 ++------ 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 78879bdb5..a8d0064f4 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -57,10 +57,7 @@ Future main() async { WidgetsFlutterBinding.ensureInitialized(); FlutterError.onError = (errorDetails) { - // if not a UI error - if (errorDetails.library != "widgets library") { - _onError(errorDetails); - } + _onError(errorDetails); }; /// A callback that is invoked when an unhandled error occurs in the root diff --git a/lib/src/screens/nodes/widgets/node_list_row.dart b/lib/src/screens/nodes/widgets/node_list_row.dart index 580aba170..90bb3eba1 100644 --- a/lib/src/screens/nodes/widgets/node_list_row.dart +++ b/lib/src/screens/nodes/widgets/node_list_row.dart @@ -1,9 +1,5 @@ -import 'package:cake_wallet/generated/i18n.dart'; -import 'package:cake_wallet/palette.dart'; import 'package:cake_wallet/src/screens/nodes/widgets/node_indicator.dart'; -import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart'; import 'package:cake_wallet/src/widgets/standard_list.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; class NodeListRow extends StandardListRow { @@ -23,7 +19,7 @@ class NodeListRow extends StandardListRow { builder: (context, snapshot) { switch (snapshot.connectionState) { case ConnectionState.done: - return NodeIndicator(isLive: (snapshot.data as bool)??false); + return NodeIndicator(isLive: (snapshot.data as bool?) ?? false); default: return NodeIndicator(isLive: false); } @@ -40,7 +36,7 @@ class NodeHeaderListRow extends StandardListRow { return SizedBox( width: 20, child: Icon(Icons.add, - color: Theme.of(context).accentTextTheme!.subtitle1!.color!, size: 24.0), + color: Theme.of(context).accentTextTheme.subtitle1?.color, size: 24.0), ); } } From 33337f42d06acf636910b70ac9cb9f2011aa1c50 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Tue, 24 Jan 2023 03:06:40 +0200 Subject: [PATCH 061/190] [skip ci] merge master --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7f0653f93..96f59e704 100644 --- a/README.md +++ b/README.md @@ -102,8 +102,8 @@ Edit the applicable `strings_XX.arb` file in `res/values/` and open a pull reque - Korean - Thai - Arabic -- Burmese - Turkish +- Burmese ## Add a new language From 83c1907e31460d7fc5f4679249e52f6dfe1ed1e4 Mon Sep 17 00:00:00 2001 From: Serhii Date: Tue, 24 Jan 2023 20:24:46 +0200 Subject: [PATCH 062/190] add twitter api --- lib/core/address_validator.dart | 18 +++++++++ lib/entities/parse_address_from_domain.dart | 30 ++++++++++++--- lib/entities/parsed_address.dart | 11 +++++- .../widgets/extract_address_from_parsed.dart | 5 +++ lib/twitter/twitter_api.dart | 37 +++++++++++++++++++ lib/twitter/twitter_user.dart | 16 ++++++++ 6 files changed, 110 insertions(+), 7 deletions(-) create mode 100644 lib/twitter/twitter_api.dart create mode 100644 lib/twitter/twitter_user.dart diff --git a/lib/core/address_validator.dart b/lib/core/address_validator.dart index 519cd92a3..20cb66a4d 100644 --- a/lib/core/address_validator.dart +++ b/lib/core/address_validator.dart @@ -198,4 +198,22 @@ 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]|\$)'; + default: + return null; + } + } } diff --git a/lib/entities/parse_address_from_domain.dart b/lib/entities/parse_address_from_domain.dart index 775f6e229..0affa1d7e 100644 --- a/lib/entities/parse_address_from_domain.dart +++ b/lib/entities/parse_address_from_domain.dart @@ -1,18 +1,19 @@ +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', @@ -26,9 +27,28 @@ class AddressResolver { '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 address = extractAddressByType(raw: twitterUser.description ?? '', type: CryptoCurrency.fromString(ticker)); + if (address != null) { + return ParsedAddress.fetchTwitterAddress(address: address, 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); @@ -58,7 +78,7 @@ class AddressResolver { final record = await OpenaliasRecord.fetchAddressAndName( formattedName: formattedName, ticker: ticker); 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..afadb7b98 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({ @@ -62,6 +61,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/src/screens/send/widgets/extract_address_from_parsed.dart b/lib/src/screens/send/widgets/extract_address_from_parsed.dart index 4ddd6ada0..1cd7bf0b9 100644 --- a/lib/src/screens/send/widgets/extract_address_from_parsed.dart +++ b/lib/src/screens/send/widgets/extract_address_from_parsed.dart @@ -28,6 +28,11 @@ Future extractAddressFromParsed( content = S.of(context).openalias_alert_content(parsedAddress.name); address = parsedAddress.addresses.first; break; + case ParseFrom.twitter: + title = S.of(context).address_detected; + content = S.of(context).openalias_alert_content(parsedAddress.name); + address = parsedAddress.addresses.first; + break; case ParseFrom.yatRecord: if (parsedAddress.name.isEmpty) { title = S.of(context).yat_error; diff --git a/lib/twitter/twitter_api.dart b/lib/twitter/twitter_api.dart new file mode 100644 index 000000000..bd03e6e00 --- /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'}; + + final headers = {'authorization': 'Bearer ${secrets.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['data'] as Map); + } +} diff --git a/lib/twitter/twitter_user.dart b/lib/twitter/twitter_user.dart new file mode 100644 index 000000000..c4bda7859 --- /dev/null +++ b/lib/twitter/twitter_user.dart @@ -0,0 +1,16 @@ +class TwitterUser { + TwitterUser({required this.id, required this.username, required this.name, this.description}); + + final String id; + final String username; + final String name; + final String? description; + + factory TwitterUser.fromJson(Map json) { + return TwitterUser( + id: json['id'] as String, + username: json['username'] as String, + name: json['name'] as String, + description: json['description'] as String?); + } +} From 5ef568ec507b47057fb91c7151737cccda3cde60 Mon Sep 17 00:00:00 2001 From: Serhii Date: Tue, 24 Jan 2023 21:33:09 +0200 Subject: [PATCH 063/190] add keys --- tool/utils/secret_key.dart | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tool/utils/secret_key.dart b/tool/utils/secret_key.dart index e5202a829..ca41542ed 100644 --- a/tool/utils/secret_key.dart +++ b/tool/utils/secret_key.dart @@ -29,6 +29,9 @@ class SecretKey { SecretKey('anypayToken', () => ''), SecretKey('onramperApiKey', () => ''), SecretKey('ioniaClientId', () => ''), + SecretKey('twitterAPIKey', () => ''), + SecretKey('twitterAPIKeySecret', () => ''), + SecretKey('twitterBearerToken', () => ''), ]; final String name; From 9f5438d2f4cf3addac49ef164632337c4e261049 Mon Sep 17 00:00:00 2001 From: Serhii Date: Wed, 25 Jan 2023 12:28:44 +0200 Subject: [PATCH 064/190] update localization files --- res/values/strings_ar.arb | 3 ++- res/values/strings_de.arb | 3 ++- res/values/strings_en.arb | 3 ++- res/values/strings_es.arb | 3 ++- res/values/strings_fr.arb | 3 ++- res/values/strings_hi.arb | 3 ++- res/values/strings_hr.arb | 3 ++- res/values/strings_it.arb | 3 ++- res/values/strings_ja.arb | 3 ++- res/values/strings_ko.arb | 3 ++- res/values/strings_my.arb | 3 ++- res/values/strings_nl.arb | 3 ++- res/values/strings_pl.arb | 3 ++- res/values/strings_pt.arb | 3 ++- res/values/strings_ru.arb | 3 ++- res/values/strings_th.arb | 3 ++- res/values/strings_tr.arb | 3 ++- res/values/strings_uk.arb | 3 ++- res/values/strings_zh.arb | 3 ++- 19 files changed, 38 insertions(+), 19 deletions(-) diff --git a/res/values/strings_ar.arb b/res/values/strings_ar.arb index 250f29a70..25ec6465a 100644 --- a/res/values/strings_ar.arb +++ b/res/values/strings_ar.arb @@ -678,5 +678,6 @@ "enabled":"ممكنة", "tor_only":"Tor فقط", "unmatched_currencies": "عملة محفظتك الحالية لا تتطابق مع عملة QR الممسوحة ضوئيًا", - "orbot_running_alert": "يرجى التأكد من تشغيل Orbot قبل الاتصال بهذه العقدة." + "orbot_running_alert": "يرجى التأكد من تشغيل Orbot قبل الاتصال بهذه العقدة.", + "bitcoin_payments_require_1_confirmation": "تتطلب مدفوعات Bitcoin تأكيدًا واحدًا ، والذي قد يستغرق 20 دقيقة أو أكثر. شكرا لصبرك! سيتم إرسال بريد إلكتروني إليك عند تأكيد الدفع." } diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index 2e71e8ce9..760c15ff4 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -680,5 +680,6 @@ "unmatched_currencies": "Die Währung Ihres aktuellen Wallets stimmt nicht mit der des gescannten QR überein", "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" + "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." } diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index a2b1cc702..cafbb37e8 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -680,5 +680,6 @@ "unmatched_currencies": "Your current wallet's currency does not match that of the scanned QR", "orbot_running_alert": "Please make sure Orbot is running prior to connecting to this node.", "contact_list_contacts": "Contacts", - "contact_list_wallets": "My Wallets" + "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." } diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb index 6cbfa627a..a8a890c01 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -680,5 +680,6 @@ "unmatched_currencies": "La moneda de su billetera actual no coincide con la del QR escaneado", "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" + "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." } diff --git a/res/values/strings_fr.arb b/res/values/strings_fr.arb index 185466813..297f62eb5 100644 --- a/res/values/strings_fr.arb +++ b/res/values/strings_fr.arb @@ -678,5 +678,6 @@ "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é", "contact_list_contacts": "Contacts", - "contact_list_wallets": "Mes portefeuilles (wallets)" + "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é." } diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb index e906b3cc4..773a108f0 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -680,5 +680,6 @@ "orbot_running_alert": "कृपया सुनिश्चित करें कि इस नोड से कनेक्ट करने से पहले Orbot चल रहा है।", "unmatched_currencies": "आपके वर्तमान वॉलेट की मुद्रा स्कैन किए गए क्यूआर से मेल नहीं खाती" , "contact_list_contacts": "संपर्क", - "contact_list_wallets": "मेरा बटुआ" + "contact_list_wallets": "मेरा बटुआ", + "bitcoin_payments_require_1_confirmation": "बिटकॉइन भुगतान के लिए 1 पुष्टिकरण की आवश्यकता होती है, जिसमें 20 मिनट या अधिक समय लग सकता है। आपके धैर्य के लिए धन्यवाद! भुगतान की पुष्टि होने पर आपको ईमेल किया जाएगा।" } diff --git a/res/values/strings_hr.arb b/res/values/strings_hr.arb index b44d2d6c3..7712b50bf 100644 --- a/res/values/strings_hr.arb +++ b/res/values/strings_hr.arb @@ -680,5 +680,6 @@ "unmatched_currencies": "Valuta vašeg trenutnog novčanika ne odgovara onoj na skeniranom QR-u", "orbot_running_alert": "Provjerite radi li Orbot prije spajanja na ovaj čvor.", "contact_list_contacts": "Kontakti", - "contact_list_wallets": "Moji novčanici" + "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." } diff --git a/res/values/strings_it.arb b/res/values/strings_it.arb index 6885fefa8..a7c636998 100644 --- a/res/values/strings_it.arb +++ b/res/values/strings_it.arb @@ -680,5 +680,6 @@ "unmatched_currencies": "La valuta del tuo portafoglio attuale non corrisponde a quella del QR scansionato", "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" + "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." } diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb index f02b76598..242163a6e 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -680,5 +680,6 @@ "unmatched_currencies": "現在のウォレットの通貨がスキャンされたQRの通貨と一致しません", "orbot_running_alert": "このノードに接続する前に、Orbot が実行されていることを確認してください", "contact_list_contacts": "連絡先", - "contact_list_wallets": "マイウォレット" + "contact_list_wallets": "マイウォレット", + "bitcoin_payments_require_1_confirmation": "ビットコインの支払いには 1 回の確認が必要で、これには 20 分以上かかる場合があります。お待ち頂きまして、ありがとうございます!支払いが確認されると、メールが送信されます。" } diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb index b7678fa85..f1d81dc67 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -680,5 +680,6 @@ "unmatched_currencies": "현재 지갑의 통화가 스캔한 QR의 통화와 일치하지 않습니다.", "orbot_running_alert": "이 노드에 연결하기 전에 Orbot이 실행 중인지 확인하십시오.", "contact_list_contacts": "콘택트 렌즈", - "contact_list_wallets": "내 지갑" + "contact_list_wallets": "내 지갑", + "bitcoin_payments_require_1_confirmation": "비트코인 결제는 1번의 확인이 필요하며 20분 이상이 소요될 수 있습니다. 기다려 주셔서 감사합니다! 결제가 확인되면 이메일이 전송됩니다." } diff --git a/res/values/strings_my.arb b/res/values/strings_my.arb index 352b8d191..5664e2e0f 100644 --- a/res/values/strings_my.arb +++ b/res/values/strings_my.arb @@ -679,5 +679,6 @@ "tor_only" : "Tor သာ", "unmatched_currencies" : "သင့်လက်ရှိပိုက်ဆံအိတ်၏ငွေကြေးသည် စကင်ဖတ်ထားသော QR နှင့် မကိုက်ညီပါ။", "contact_list_contacts" : "အဆက်အသွယ်များ", - "contact_list_wallets" : "ကျွန်ုပ်၏ ပိုက်ဆံအိတ်များ" + "contact_list_wallets" : "ကျွန်ုပ်၏ ပိုက်ဆံအိတ်များ", + "bitcoin_payments_require_1_confirmation": "Bitcoin ငွေပေးချေမှုများသည် မိနစ် 20 သို့မဟုတ် ထို့ထက်ပိုကြာနိုင်သည် 1 အတည်ပြုချက် လိုအပ်သည်။ မင်းရဲ့စိတ်ရှည်မှုအတွက် ကျေးဇူးတင်ပါတယ်။ ငွေပေးချေမှုကို အတည်ပြုပြီးသောအခါ သင့်ထံ အီးမေးလ်ပို့ပါမည်။" } diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index 802c0e9ac..3591629e5 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -680,5 +680,6 @@ "unmatched_currencies": "De valuta van uw huidige portemonnee komt niet overeen met die van de gescande QR", "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" + "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." } diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index 1b49c6ef1..977825b65 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -680,5 +680,6 @@ "tor_only": "Tylko sieć Tor", "unmatched_currencies": "Waluta Twojego obecnego portfela nie zgadza się z waluctą zeskanowanego kodu QR", "contact_list_contacts": "Łączność", - "contact_list_wallets": "Moje portfele" + "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." } diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb index 8daba6193..d0cee4fde 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -679,5 +679,6 @@ "unmatched_currencies": "A moeda da sua carteira atual não corresponde à do QR digitalizado", "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" + "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." } diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb index 17640af6d..85c3e38f0 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -680,5 +680,6 @@ "unmatched_currencies": "Валюта вашего текущего кошелька не соответствует валюте отсканированного QR-кода.", "orbot_running_alert": "Перед подключением к этому узлу убедитесь, что Orbot запущен.", "contact_list_contacts": "Контакты", - "contact_list_wallets": "Мои кошельки" + "contact_list_wallets": "Мои кошельки", + "bitcoin_payments_require_1_confirmation": "Биткойн-платежи требуют 1 подтверждения, что может занять 20 минут или дольше. Спасибо тебе за твое терпение! Вы получите электронное письмо, когда платеж будет подтвержден." } diff --git a/res/values/strings_th.arb b/res/values/strings_th.arb index 6934d9630..c13dff6ac 100644 --- a/res/values/strings_th.arb +++ b/res/values/strings_th.arb @@ -678,5 +678,6 @@ "unmatched_currencies" : "สกุลเงินของกระเป๋าปัจจุบันของคุณไม่ตรงกับของ QR ที่สแกน", "orbot_running_alert": "โปรดตรวจสอบว่า Orbot กำลังทำงานก่อนที่จะเชื่อมต่อกับโหนดนี้", "contact_list_contacts": "ติดต่อ", - "contact_list_wallets": "กระเป๋าเงินของฉัน" + "contact_list_wallets": "กระเป๋าเงินของฉัน", + "bitcoin_payments_require_1_confirmation": "การชำระเงินด้วย Bitcoin ต้องการการยืนยัน 1 ครั้ง ซึ่งอาจใช้เวลา 20 นาทีหรือนานกว่านั้น ขอบคุณสำหรับความอดทนของคุณ! คุณจะได้รับอีเมลเมื่อการชำระเงินได้รับการยืนยัน" } diff --git a/res/values/strings_tr.arb b/res/values/strings_tr.arb index 678b3609f..a6b286ce2 100644 --- a/res/values/strings_tr.arb +++ b/res/values/strings_tr.arb @@ -679,5 +679,6 @@ "tor_only": "Yalnızca Tor", "unmatched_currencies": "Mevcut cüzdanınızın para birimi taranan QR ile eşleşmiyor", "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." } diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb index b9311e8ef..bb2f13370 100644 --- a/res/values/strings_uk.arb +++ b/res/values/strings_uk.arb @@ -679,5 +679,6 @@ "unmatched_currencies": "Валюта вашого гаманця не збігається з валютою сканованого QR-коду", "orbot_running_alert": "Перед підключенням до цього вузла переконайтеся, що Orbot запущено.", "contact_list_contacts": "Контакти", - "contact_list_wallets": "Мої гаманці" + "contact_list_wallets": "Мої гаманці", + "bitcoin_payments_require_1_confirmation": "Платежі Bitcoin потребують 1 підтвердження, яке може зайняти 20 хвилин або більше. Дякую за Ваше терпіння! Ви отримаєте електронний лист, коли платіж буде підтверджено." } diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb index 5b6608671..e3afa5472 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -678,5 +678,6 @@ "unmatched_currencies": "您当前钱包的货币与扫描的 QR 的货币不匹配", "orbot_running_alert": "请确保 Orbot 在连接到此节点之前正在运行。", "contact_list_contacts": "联系人", - "contact_list_wallets": "我的钱包" + "contact_list_wallets": "我的钱包", + "bitcoin_payments_require_1_confirmation": "比特币支付需要 1 次确认,这可能需要 20 分钟或更长时间。谢谢你的耐心!确认付款后,您将收到电子邮件。" } From ddd5b1ecb3637bf12993198a97723ec9a215ce61 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Wed, 25 Jan 2023 15:29:59 +0200 Subject: [PATCH 065/190] Fix QR scheme to compare with currency full name not the abbreviated one --- lib/view_model/send/send_view_model.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/view_model/send/send_view_model.dart b/lib/view_model/send/send_view_model.dart index b6604789a..e0ae5dab8 100644 --- a/lib/view_model/send/send_view_model.dart +++ b/lib/view_model/send/send_view_model.dart @@ -180,7 +180,8 @@ abstract class SendViewModelBase with Store { WalletType get walletType => _wallet.type; - String? get walletCurrencyName => _wallet.currency.name?.toLowerCase(); + String? get walletCurrencyName => + _wallet.currency.fullName?.toLowerCase() ?? _wallet.currency.name; bool get hasCurrecyChanger => walletType == WalletType.haven; From 337e311d4f23e8e9eba5c2f801185a3e7aaabca1 Mon Sep 17 00:00:00 2001 From: Serhii Date: Wed, 25 Jan 2023 18:21:10 +0200 Subject: [PATCH 066/190] Update Cake Pay checkout wording --- lib/src/screens/ionia/cards/ionia_payment_status_page.dart | 3 ++- lib/view_model/ionia/ionia_payment_status_view_model.dart | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) 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/view_model/ionia/ionia_payment_status_view_model.dart b/lib/view_model/ionia/ionia_payment_status_view_model.dart index 19f5f8537..8f43e0244 100644 --- a/lib/view_model/ionia/ionia_payment_status_view_model.dart +++ b/lib/view_model/ionia/ionia_payment_status_view_model.dart @@ -1,4 +1,5 @@ import 'dart:async'; +import 'package:cake_wallet/anypay/any_pay_chain.dart'; import 'package:mobx/mobx.dart'; import 'package:flutter/foundation.dart'; import 'package:cake_wallet/ionia/ionia_service.dart'; @@ -39,6 +40,8 @@ abstract class IoniaPaymentStatusViewModelBase with Store { Timer? get timer => _timer; + bool get payingByBitcoin => paymentInfo.anyPayPayment.chain == AnyPayChain.btc; + Timer? _timer; @action From 3b23f68b2769df0786c7346795d43e2db18b6ed4 Mon Sep 17 00:00:00 2001 From: Justin Ehrenhofer Date: Wed, 25 Jan 2023 11:09:02 -0600 Subject: [PATCH 067/190] usdcpoly -> usdcmatic for ChangeNOW --- lib/exchange/changenow/changenow_exchange_provider.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/exchange/changenow/changenow_exchange_provider.dart b/lib/exchange/changenow/changenow_exchange_provider.dart index a9fb7c9ca..d8c7bbd14 100644 --- a/lib/exchange/changenow/changenow_exchange_provider.dart +++ b/lib/exchange/changenow/changenow_exchange_provider.dart @@ -271,6 +271,8 @@ class ChangeNowExchangeProvider extends ExchangeProvider { switch(currency) { case CryptoCurrency.zec: return 'zec'; + case CryptoCurrency.usdcpoly: + return 'usdcmatic'; default: return currency.title.toLowerCase(); } From 084659e052e9d1afda010137762a3bcf68096e46 Mon Sep 17 00:00:00 2001 From: Serhii Date: Wed, 25 Jan 2023 19:15:18 +0200 Subject: [PATCH 068/190] minor fixes --- res/values/strings_th.arb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/values/strings_th.arb b/res/values/strings_th.arb index 68f71d476..c04cea5a6 100644 --- a/res/values/strings_th.arb +++ b/res/values/strings_th.arb @@ -681,5 +681,5 @@ "contact_list_wallets": "กระเป๋าเงินของฉัน", "bitcoin_payments_require_1_confirmation": "การชำระเงินด้วย Bitcoin ต้องการการยืนยัน 1 ครั้ง ซึ่งอาจใช้เวลา 20 นาทีหรือนานกว่านั้น ขอบคุณสำหรับความอดทนของคุณ! คุณจะได้รับอีเมลเมื่อการชำระเงินได้รับการยืนยัน", "do_not_send": "อย่าส่ง", - "error_dialog_content": "อ๊ะ เราพบข้อผิดพลาดบางอย่าง\n\nโปรดส่งรายงานข้อขัดข้องไปยังทีมสนับสนุนของเราเพื่อปรับปรุงแอปพลิเคชันให้ดียิ่งขึ้น", + "error_dialog_content": "อ๊ะ เราพบข้อผิดพลาดบางอย่าง\n\nโปรดส่งรายงานข้อขัดข้องไปยังทีมสนับสนุนของเราเพื่อปรับปรุงแอปพลิเคชันให้ดียิ่งขึ้น" } From cce56a61a36bfe3a753aa368d003d1a5037f4828 Mon Sep 17 00:00:00 2001 From: Serhii Date: Thu, 26 Jan 2023 13:33:33 +0200 Subject: [PATCH 069/190] minor fixes --- lib/view_model/exchange/exchange_trade_view_model.dart | 7 ++++--- res/values/strings_ar.arb | 4 ++-- res/values/strings_de.arb | 4 ++-- res/values/strings_en.arb | 4 ++-- res/values/strings_es.arb | 4 ++-- res/values/strings_fr.arb | 4 ++-- res/values/strings_hi.arb | 4 ++-- res/values/strings_hr.arb | 4 ++-- res/values/strings_it.arb | 4 ++-- res/values/strings_ja.arb | 4 ++-- res/values/strings_ko.arb | 4 ++-- res/values/strings_my.arb | 4 +++- res/values/strings_nl.arb | 4 ++-- res/values/strings_pl.arb | 4 ++-- res/values/strings_pt.arb | 4 ++-- res/values/strings_ru.arb | 4 ++-- res/values/strings_th.arb | 4 ++-- res/values/strings_tr.arb | 4 +++- res/values/strings_uk.arb | 4 ++-- res/values/strings_zh.arb | 4 ++-- 20 files changed, 44 insertions(+), 39 deletions(-) diff --git a/lib/view_model/exchange/exchange_trade_view_model.dart b/lib/view_model/exchange/exchange_trade_view_model.dart index 8b578faa5..541b74396 100644 --- a/lib/view_model/exchange/exchange_trade_view_model.dart +++ b/lib/view_model/exchange/exchange_trade_view_model.dart @@ -119,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)); @@ -135,13 +137,12 @@ abstract class ExchangeTradeViewModelBase with Store { items.addAll([ ExchangeTradeItem(title: S.current.amount, data: '${trade.amount}', isCopied: false), - ExchangeTradeItem(title: S.current.status, data: '${trade.state}', isCopied: false), ExchangeTradeItem( - title: S.current.send_to_this_address('${trade.from} ${trade.from.tag ?? ''}') + ':', + 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} ${trade.to.tag ?? ''}') + ':', + title: S.current.arrive_in_this_address('${trade.to}', tagTo) + ':', data: trade.payoutAddress ?? '', isCopied: true), ]); diff --git a/res/values/strings_ar.arb b/res/values/strings_ar.arb index 7d7994b1e..e111bb467 100644 --- a/res/values/strings_ar.arb +++ b/res/values/strings_ar.arb @@ -679,6 +679,6 @@ "tor_only":"Tor فقط", "unmatched_currencies": "عملة محفظتك الحالية لا تتطابق مع عملة QR الممسوحة ضوئيًا", "orbot_running_alert": "يرجى التأكد من تشغيل Orbot قبل الاتصال بهذه العقدة.", - "send_to_this_address" : "أرسل ${currency} إلى هذا العنوان", - "arrive_in_this_address" : "سيصل ${currency} إلى هذا العنوان" + "send_to_this_address" : "أرسل ${currency} ${tag}إلى هذا العنوان", + "arrive_in_this_address" : "سيصل ${currency} ${tag}إلى هذا العنوان" } diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index 8a9e90c5e..018aa7e7c 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -681,8 +681,8 @@ "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", - "send_to_this_address" : "Senden Sie ${currency} an diese Adresse", - "arrive_in_this_address" : "${currency} wird an dieser Adresse ankommen", + "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 7718f3c39..24baded77 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -681,8 +681,8 @@ "orbot_running_alert": "Please make sure Orbot is running prior to connecting to this node.", "contact_list_contacts": "Contacts", "contact_list_wallets": "My Wallets", - "send_to_this_address" : "Send ${currency} to this address", - "arrive_in_this_address" : "${currency} will arrive in this address", + "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 999f0bc47..82889df37 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -681,8 +681,8 @@ "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", - "send_to_this_address" : "Enviar ${currency} a esta dirección", - "arrive_in_this_address" : "${currency} llegará a esta dirección", + "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 7fcf71478..a3288f958 100644 --- a/res/values/strings_fr.arb +++ b/res/values/strings_fr.arb @@ -679,8 +679,8 @@ "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)", - "send_to_this_address" : "Envoyez ${currency} à cette adresse", - "arrive_in_this_address" : "${currency} arrivera à cette adresse", + "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 9127fb576..7ec7de38d 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -681,8 +681,8 @@ "orbot_running_alert": "कृपया सुनिश्चित करें कि इस नोड से कनेक्ट करने से पहले Orbot चल रहा है।", "contact_list_contacts": "संपर्क", "contact_list_wallets": "मेरा बटुआ", - "send_to_this_address" : "इस पते पर ${currency} भेजें", - "arrive_in_this_address" : "${currency} इस पते पर पहुंचेंगे", + "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 0f097a087..79bad1e66 100644 --- a/res/values/strings_hr.arb +++ b/res/values/strings_hr.arb @@ -681,8 +681,8 @@ "orbot_running_alert": "Provjerite radi li Orbot prije spajanja na ovaj čvor.", "contact_list_contacts": "Kontakti", "contact_list_wallets": "Moji novčanici", - "send_to_this_address" : "Pošaljite ${currency} na ovu adresu", - "arrive_in_this_address" : "${currency} će stići na ovu adresu", + "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 3f78da499..28f502cd6 100644 --- a/res/values/strings_it.arb +++ b/res/values/strings_it.arb @@ -681,8 +681,8 @@ "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", - "send_to_this_address" : "Invia ${currency} a questo indirizzo", - "arrive_in_this_address" : "${currency} arriverà a questo indirizzo", + "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 50aacb432..f1a05b987 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -681,8 +681,8 @@ "orbot_running_alert": "このノードに接続する前に、Orbot が実行されていることを確認してください", "contact_list_contacts": "連絡先", "contact_list_wallets": "マイウォレット", - "send_to_this_address" : "${currency} をこのアドレスに送金", - "arrive_in_this_address" : "${currency} はこの住所に到着します", + "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 d84014e55..fa8565e6d 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -681,8 +681,8 @@ "orbot_running_alert": "이 노드에 연결하기 전에 Orbot이 실행 중인지 확인하십시오.", "contact_list_contacts": "콘택트 렌즈", "contact_list_wallets": "내 지갑", - "send_to_this_address" : "이 주소로 ${currency} 송금", - "arrive_in_this_address" : "${currency}이(가) 이 주소로 도착합니다", + "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..0979948c1 100644 --- a/res/values/strings_my.arb +++ b/res/values/strings_my.arb @@ -679,5 +679,7 @@ "tor_only" : "Tor သာ", "unmatched_currencies" : "သင့်လက်ရှိပိုက်ဆံအိတ်၏ငွေကြေးသည် စကင်ဖတ်ထားသော QR နှင့် မကိုက်ညီပါ။", "contact_list_contacts" : "အဆက်အသွယ်များ", - "contact_list_wallets" : "ကျွန်ုပ်၏ ပိုက်ဆံအိတ်များ" + "contact_list_wallets" : "ကျွန်ုပ်၏ ပိုက်ဆံအိတ်များ", + "send_to_this_address" : "ဤလိပ်စာသို့ ${currency} ${tag}သို့ ပို့ပါ။", + "arrive_in_this_address" : "${currency} ${tag}ဤလိပ်စာသို့ ရောက်ရှိပါမည်။" } diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index 67613d461..c10b1722f 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -681,8 +681,8 @@ "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", - "send_to_this_address" : "Stuur ${currency} naar dit adres", - "arrive_in_this_address" : "${currency} komt aan op dit adres", + "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 a38da0e28..72b93a08b 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -681,8 +681,8 @@ "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", - "send_to_this_address" : "Wyślij ${currency} na ten adres", - "arrive_in_this_address" : "${currency} dotrze na ten adres", + "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 8d81eda26..4ed4df754 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -680,8 +680,8 @@ "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", - "send_to_this_address" : "Envie ${currency} para este endereço", - "arrive_in_this_address" : "${currency} chegará neste endereço", + "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 161d33580..8482a1bda 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -681,8 +681,8 @@ "orbot_running_alert": "Перед подключением к этому узлу убедитесь, что Orbot запущен.", "contact_list_contacts": "Контакты", "contact_list_wallets": "Мои кошельки", - "send_to_this_address" : "Отправить ${currency} на этот адрес", - "arrive_in_this_address" : "${currency} придет на этот адрес", + "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 0104bbb02..8e108f6c7 100644 --- a/res/values/strings_th.arb +++ b/res/values/strings_th.arb @@ -679,8 +679,8 @@ "orbot_running_alert": "โปรดตรวจสอบว่า Orbot กำลังทำงานก่อนที่จะเชื่อมต่อกับโหนดนี้", "contact_list_contacts": "ติดต่อ", "contact_list_wallets": "กระเป๋าเงินของฉัน", - "send_to_this_address" : "ส่ง ${currency} ไปยังที่อยู่นี้", - "arrive_in_this_address" : "${currency} จะมาถึงที่อยู่นี้", + "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..46f7213d4 100644 --- a/res/values/strings_tr.arb +++ b/res/values/strings_tr.arb @@ -679,5 +679,7 @@ "tor_only": "Yalnızca Tor", "unmatched_currencies": "Mevcut cüzdanınızın para birimi taranan QR ile eşleşmiyor", "contact_list_contacts": "Rehberim", - "contact_list_wallets": "Cüzdanlarım" + "contact_list_wallets": "Cüzdanlarım", + "send_to_this_address" : "Bu adrese ${currency} ${tag}gönder", + "arrive_in_this_address" : "${currency} ${tag}bu adrese ulaşacak" } diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb index 1f0c2b2ee..2ed7c7fdb 100644 --- a/res/values/strings_uk.arb +++ b/res/values/strings_uk.arb @@ -680,8 +680,8 @@ "orbot_running_alert": "Перед підключенням до цього вузла переконайтеся, що Orbot запущено.", "contact_list_contacts": "Контакти", "contact_list_wallets": "Мої гаманці", - "send_to_this_address" : "Надіслати ${currency} на цю адресу", - "arrive_in_this_address" : "${currency} надійде на цю адресу", + "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 e2e8dd82a..7355ac3bd 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -679,8 +679,8 @@ "orbot_running_alert": "请确保 Orbot 在连接到此节点之前正在运行。", "contact_list_contacts": "联系人", "contact_list_wallets": "我的钱包", - "send_to_this_address" : "发送 ${currency} 到这个地址", - "arrive_in_this_address" : "${currency} 将到达此地址", + "send_to_this_address" : "发送 ${currency} ${tag}到这个地址", + "arrive_in_this_address" : "${currency} ${tag}将到达此地址", "do_not_send": "不要发送", "error_dialog_content": "糟糕,我们遇到了一些错误。\n\n请将崩溃报告发送给我们的支持团队,以改进应用程序。" } From ed30cf1e13668d1d1068e51e69b3a0ededd2e4e2 Mon Sep 17 00:00:00 2001 From: Serhii Date: Thu, 26 Jan 2023 19:07:19 +0200 Subject: [PATCH 070/190] [skip ci] minor fixes --- .../wallet_address_edit_or_create_view_model.dart | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/view_model/wallet_address_list/wallet_address_edit_or_create_view_model.dart b/lib/view_model/wallet_address_list/wallet_address_edit_or_create_view_model.dart index 2cca395ab..a4eb3d386 100644 --- a/lib/view_model/wallet_address_list/wallet_address_edit_or_create_view_model.dart +++ b/lib/view_model/wallet_address_list/wallet_address_edit_or_create_view_model.dart @@ -105,15 +105,13 @@ abstract class WalletAddressEditOrCreateViewModelBase with Store { await monero!.getSubaddressList(wallet).setLabelSubaddress(wallet, accountIndex: monero!.getCurrentAccount(wallet).id, addressIndex: index, label: label); await wallet.save(); - return; } if (wallet.type == WalletType.haven) { await haven!.getSubaddressList(wallet).setLabelSubaddress(wallet, accountIndex: haven!.getCurrentAccount(wallet).id, - addressIndex: _item?.id as int, + addressIndex: index, label: label); await wallet.save(); - return; } } } From 6825b6e625e9900b1c445711e91195811a55324d Mon Sep 17 00:00:00 2001 From: Serhii Date: Thu, 26 Jan 2023 20:05:09 +0200 Subject: [PATCH 071/190] minor fixes --- .github/workflows/pr_test_build.yml | 1 + lib/twitter/twitter_api.dart | 2 +- tool/utils/secret_key.dart | 2 -- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pr_test_build.yml b/.github/workflows/pr_test_build.yml index 84ac69197..0f61d11ac 100644 --- a/.github/workflows/pr_test_build.yml +++ b/.github/workflows/pr_test_build.yml @@ -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 ioniaClientId = '${{ 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/lib/twitter/twitter_api.dart b/lib/twitter/twitter_api.dart index bd03e6e00..27fb7d1a2 100644 --- a/lib/twitter/twitter_api.dart +++ b/lib/twitter/twitter_api.dart @@ -12,7 +12,7 @@ class TwitterApi { static Future lookupUserByName({required String userName}) async { final queryParams = {'user.fields': 'description'}; - final headers = {'authorization': 'Bearer ${secrets.twitterBearerToken}'}; + final headers = {'authorization': 'Bearer $twitterBearerToken'}; final uri = Uri( scheme: httpsScheme, diff --git a/tool/utils/secret_key.dart b/tool/utils/secret_key.dart index ca41542ed..d0fa39bfc 100644 --- a/tool/utils/secret_key.dart +++ b/tool/utils/secret_key.dart @@ -29,8 +29,6 @@ class SecretKey { SecretKey('anypayToken', () => ''), SecretKey('onramperApiKey', () => ''), SecretKey('ioniaClientId', () => ''), - SecretKey('twitterAPIKey', () => ''), - SecretKey('twitterAPIKeySecret', () => ''), SecretKey('twitterBearerToken', () => ''), ]; From 34db9e5d505d335a4b5478d0ed496934c0f85d1f Mon Sep 17 00:00:00 2001 From: Serhii Date: Thu, 26 Jan 2023 20:20:01 +0200 Subject: [PATCH 072/190] fix key name --- .github/workflows/pr_test_build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr_test_build.yml b/.github/workflows/pr_test_build.yml index 0f61d11ac..c3c61865f 100644 --- a/.github/workflows/pr_test_build.yml +++ b/.github/workflows/pr_test_build.yml @@ -110,7 +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 ioniaClientId = '${{ secrets.TWITTER_BEARER_TOKEN }}';" >> 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 From ae0f9df04152e966947db7ff6225fc49411a07e4 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Fri, 27 Jan 2023 03:49:25 +0200 Subject: [PATCH 073/190] Prevent multiple UI errors from showing multiple alerts [skip ci] --- lib/main.dart | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index a8d0064f4..0dcbe6b6d 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -50,6 +50,7 @@ import 'package:cake_wallet/wallet_type_utils.dart'; final navigatorKey = GlobalKey(); final rootKey = GlobalKey(); final RouteObserver routeObserver = RouteObserver(); +bool hasError = false; Future main() async { @@ -206,11 +207,16 @@ void _sendExceptionFile() async { } void _onError(FlutterErrorDetails errorDetails) { + if (hasError) { + return; + } + + hasError = true; _saveException(errorDetails.exception.toString(), errorDetails.stack); WidgetsBinding.instance.addPostFrameCallback( - (timeStamp) { - showPopUp( + (timeStamp) async { + await showPopUp( context: navigatorKey.currentContext!, builder: (context) { return AlertWithTwoActions( @@ -229,6 +235,8 @@ void _onError(FlutterErrorDetails errorDetails) { ); }, ); + + hasError = false; }, ); } From 2e8fc2a7c6da3636dd7a3f7758bd1ff3aba0b7f6 Mon Sep 17 00:00:00 2001 From: cppethereum Date: Fri, 27 Jan 2023 23:38:45 -0500 Subject: [PATCH 074/190] Appending Indonesian language to list in README --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 96f59e704..2a77aecb7 100644 --- a/README.md +++ b/README.md @@ -104,6 +104,7 @@ Edit the applicable `strings_XX.arb` file in `res/values/` and open a pull reque - Arabic - Turkish - Burmese +- Indonesian ## Add a new language From 0e78def2fd830151784eabc571a603e82afbf3a7 Mon Sep 17 00:00:00 2001 From: cppethereum Date: Sat, 28 Jan 2023 00:36:16 -0500 Subject: [PATCH 075/190] amending language_service.dart for Indonesian --- lib/entities/language_service.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/entities/language_service.dart b/lib/entities/language_service.dart index 2f3443c02..d0aa75c81 100644 --- a/lib/entities/language_service.dart +++ b/lib/entities/language_service.dart @@ -23,6 +23,7 @@ class LanguageService { 'ar': 'العربية (Arabic)', 'tr': 'Türkçe (Turkish)', 'my': 'မြန်မာ (Burmese)', + 'id': 'Bahasa Indonesia (Indonesian)', }; static const Map localeCountryCode = { @@ -45,6 +46,7 @@ class LanguageService { 'ar': 'sau', 'tr': 'tur', 'my': 'mmr', + 'id': 'ind', }; static final list = {}; From 8eba55d114fed22e5ca0a8566af9074b964d7b2f Mon Sep 17 00:00:00 2001 From: cppethereum Date: Sat, 28 Jan 2023 00:37:25 -0500 Subject: [PATCH 076/190] Indonesian translation strings --- res/values/strings_id.arb | 670 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 670 insertions(+) create mode 100644 res/values/strings_id.arb diff --git a/res/values/strings_id.arb b/res/values/strings_id.arb new file mode 100644 index 000000000..b69f7641b --- /dev/null +++ b/res/values/strings_id.arb @@ -0,0 +1,670 @@ +{ + "welcome" : "Selamat datang di", + "cake_wallet" : "Cake Wallet", + "first_wallet_text" : "Dompet luar biasa untuk Monero, Bitcoin, Litecoin, dan Haven", + "please_make_selection" : "Silahkan membuat pilihan di bawah ini untuk membuat atau memulihkan dompet Anda.", + "create_new" : "Buat Dompet Baru", + "restore_wallet" : "Pulihkan Dompet", + + "monero_com": "Monero.com Oleh Cake Wallet", + "monero_com_wallet_text": "Dompet luar biasa untuk Monero", + + "haven_app": "Haven Oleh Cake Wallet", + "haven_app_wallet_text": "Dompet luar biasa untuk Haven", + + "accounts" : "Akun", + "edit" : "Edit", + "account" : "Akun", + "add" : "Menambahkan", + + + "address_book" : "Buku Alamat", + "contact" : "Kontak", + "please_select" : "Silakan pilih:", + "cancel" : "Batal", + "ok" : "OK", + "contact_name" : "Nama Kontak", + "reset" : "Reset", + "save" : "Simpan", + "address_remove_contact" : "Hapus kontak", + "address_remove_content" : "Apakah Anda yakin ingin menghapus kontak yang dipilih?", + + "authenticated" : "Terotentikasi", + "authentication" : "Otentikasi", + "failed_authentication" : "Otentikasi gagal. ${state_error}", + + + "wallet_menu" : "Menu", + "Blocks_remaining" : "${status} Blok Tersisa", + "please_try_to_connect_to_another_node" : "Silakan coba untuk terhubung ke node lain", + "xmr_hidden" : "Tersembunyi", + "xmr_available_balance" : "Saldo Tersedia", + "xmr_full_balance" : "Saldo Penuh", + "send" : "Mengirim", + "receive" : "Menerima", + "transactions" : "Transaksi", + "incoming" : "Masuk", + "outgoing" : "Keluar", + "transactions_by_date" : "Transaksi berdasarkan tanggal", + "trades" : "Perdagangan", + "filter_by": "Filter berdasarkan", + "today" : "Hari ini", + "yesterday" : "Kemarin", + "received" : "Diterima", + "sent" : "Dikirim", + "pending" : " (pending)", + "rescan" : "Pindai ulang", + "reconnect" : "Sambungkan kembali", + "wallets" : "Dompet", + "show_seed" : "Tampilkan seed", + "show_keys" : "Tampilkan seed/kunci", + "address_book_menu" : "Buku alamat", + "reconnection" : "Koneksi kembali", + "reconnect_alert_text" : "Apakah Anda yakin ingin menyambungkan kembali?", + + + "exchange" : "Tukar", + "clear" : "Hapus", + "refund_address" : "Alamat pengembalian", + "change_exchange_provider" : "Ganti Penyedia Tukar", + "you_will_send" : "Konversi dari", + "you_will_get" : "Konversi ke", + "amount_is_guaranteed" : "Jumlah penerimaan dijamin", + "amount_is_estimate" : "Jumlah penerimaan diperkirakan", + "powered_by" : "Didukung oleh ${title}", + "error" : "Kesalahan", + "estimated" : "Diperkirakan", + "min_value" : "Min: ${value} ${currency}", + "max_value" : "Max: ${value} ${currency}", + "change_currency" : "Ganti Mata Uang", + "overwrite_amount" : "Timpa jumlah", + "qr_payment_amount" : "QR code ini berisi jumlah pembayaran. Apakah Anda ingin menimpa nilai saat ini?", + + "copy_id" : "Salin ID", + "exchange_result_write_down_trade_id" : "Silakan salin atau tulis ID perdagangan untuk melanjutkan.", + "trade_id" : "ID Perdagangan:", + "copied_to_clipboard" : "Disalin ke Clipboard", + "saved_the_trade_id" : "Saya telah menyimpan ID perdagangan", + "fetching" : "Mengambil", + "id" : "ID: ", + "amount" : "Jumlah: ", + "payment_id" : "ID Pembayaran: ", + "status" : "Status: ", + "offer_expires_in" : "Penawaran kedaluwarsa dalam: ", + "trade_is_powered_by" : "Perdagangan ini didukung oleh ${provider}", + "copy_address" : "Salin Alamat", + "exchange_result_confirm" : "Dengan menekan tombol konfirmasi, Anda akan mengirimkan ${fetchingLabel} ${from} dari dompet Anda yang disebut ${walletName} ke alamat yang ditampilkan di bawah. Anda juga dapat mengirim dari dompet eksternal Anda ke alamat/QR code di bawah.\n\nSilakan tekan konfirmasi untuk melanjutkan atau kembali untuk mengubah jumlah.", + "exchange_result_description" : "Anda harus mengirimkan minimal ${fetchingLabel} ${from} ke alamat yang ditampilkan di halaman berikutnya. Jika Anda mengirimkan jumlah yang lebih rendah dari ${fetchingLabel} ${from} maka uang tersebut mungkin tidak akan diubah dan mungkin tidak akan dikembalikan.", + "exchange_result_write_down_ID" : "*Silakan salin atau tulis ID Anda yang ditampilkan di atas.", + "confirm" : "Konfirmasi", + "confirm_sending" : "Konfirmasi pengiriman", + "commit_transaction_amount_fee" : "Lakukan transaksi\nJumlah: ${amount}\nBiaya: ${fee}", + "sending" : "Mengirim", + "transaction_sent" : "Transaksi terkirim!", + "expired" : "Kedaluwarsa", + "time" : "${minutes}m ${seconds}s", + "send_xmr" : "Kirim XMR", + "exchange_new_template" : "Template baru", + + "faq" : "Pertanyaan yang Sering Diajukan", + + + "enter_your_pin" : "Masukkan PIN Anda", + "loading_your_wallet" : "Memuat dompet Anda", + + + "new_wallet" : "Dompet Baru", + "wallet_name" : "Nama Dompet", + "continue_text" : "Lanjutkan", + "choose_wallet_currency" : "Silahkan pilih mata uang dompet:", + + "node_new" : "Node Baru", + "node_address" : "Alamat Node", + "node_port" : "Port Node", + "login" : "Masuk", + "password" : "Kata Sandi", + "nodes" : "Node", + "node_reset_settings_title" : "Atur ulang pengaturan", + "nodes_list_reset_to_default_message" : "Apakah Anda yakin ingin mengatur ulang pengaturan ke default?", + "change_current_node" : "Apakah Anda yakin ingin mengubah node saat ini menjadi ${node}?", + "change" : "Ubah", + "remove_node" : "Hapus node", + "remove_node_message" : "Apakah Anda yakin ingin menghapus node yang dipilih?", + "remove" : "Hapus", + "delete" : "Hapus", + "add_new_node" : "Tambah node baru", + "change_current_node_title" : "Ubah node saat ini", + "node_test" : "Uji", + "node_connection_successful" : "Koneksi berhasil", + "node_connection_failed" : "Koneksi gagal", + "new_node_testing" : "Pengujian node baru", + + + "use" : "Beralih ke ", + "digit_pin" : "-digit PIN", + + "share_address" : "Bagikan alamat", + "receive_amount" : "Jumlah", + "subaddresses" : "Sub-alamat", + "addresses" : "Alamat", + "scan_qr_code" : "Scan kode QR untuk mendapatkan alamat", + "qr_fullscreen" : "Tap untuk membuka layar QR code penuh", + "rename" : "Ganti nama", + "choose_account" : "Pilih akun", + "create_new_account" : "Buat akun baru", + "accounts_subaddresses" : "Akun dan sub-alamat", + + + "restore_restore_wallet" : "Pulihkan Dompet", + "restore_title_from_seed_keys" : "Pulihkan dari seed/kunci", + "restore_description_from_seed_keys" : "Dapatkan kembali dompet Anda dari seed/kunci yang Anda simpan di tempat yang aman", + "restore_next" : "Selanjutnya", + "restore_title_from_backup" : "Pulihkan dari cadangan", + "restore_description_from_backup" : "Anda dapat memulihkan seluruh aplikasi Cake Wallet dari file cadangan Anda", + "restore_seed_keys_restore" : "Pulihkan Seed/Kunci", + "restore_title_from_seed" : "Pulihkan dari seed", + "restore_description_from_seed" : "Pulihkan dompet Anda dari kombinasi kode 25 atau 13 kata", + "restore_title_from_keys" : "Pulihkan dari kunci", + "restore_description_from_keys" : "Pulihkan dompet Anda dari tombol yang dihasilkan yang disimpan dari kunci pribadi Anda", + "restore_wallet_name" : "Nama dompet", + "restore_address" : "Alamat", + "restore_view_key_private" : "Lihat kunci (pribadi)", + "restore_spend_key_private" : "Habiskan kunci (pribadi)", + "restore_recover" : "Pulihkan", + "restore_wallet_restore_description" : "Deskripsi pemulihan dompet", + "restore_new_seed" : "Seed baru", + "restore_active_seed" : "Seed aktif", + "restore_bitcoin_description_from_seed" : "Pulihkan dompet Anda dari kombinasi kode 24 kata", + "restore_bitcoin_description_from_keys" : "Pulihkan dompet Anda dari string WIF yang dihasilkan dari private keys Anda", + "restore_bitcoin_title_from_keys" : "Pulihkan dari WIF", + "restore_from_date_atau_blockheight" : "Silakan masukkan tanggal beberapa hari sebelum Anda membuat dompet ini. Atau jika Anda tahu blockheight, silakan masukkannya sebagai gantinya", + + + "seed_reminder" : "Silakan tulis ini di tempat yang aman jika kamu kehilangan atau menghapus ponselmu", + "seed_title" : "Bibit", + "seed_share" : "Bagikan bibit", + "copy" : "Salin", + + + "seed_language_choose" : "Silakan pilih bahasa bibit:", + "seed_choose" : "Pilih bahasa bibit", + "seed_language_next" : "Selanjutnya", + "seed_language_english" : "Inggris", + "seed_language_chinese" : "Cina", + "seed_language_dutch" : "Belanda", + "seed_language_german" : "Jerman", + "seed_language_japanese" : "Jepang", + "seed_language_portuguese" : "Portugis", + "seed_language_russian" : "Rusia", + "seed_language_spanish" : "Spanyol", + "seed_language_french": "Perancis", + "seed_language_italian": "Italia", + + + "send_title" : "Kirim", + "send_your_wallet" : "Dompetmu", + "send_address" : "Alamat ${cryptoCurrency}", + "send_payment_id" : "ID Pembayaran (opsional)", + "all" : "SEMUA", + "send_error_minimum_value" : "Nilai minimum jumlah adalah 0.01", + "send_error_currency" : "Mata uang hanya dapat berisi angka", + "send_estimated_fee" : "Biaya yang diperkirakan:", + "send_priority" : "Saat ini biaya diatur dengan prioritas ${transactionPriority}.\nPrioritas transaksi dapat diubah pada pengaturan", + "send_creating_transaction" : "Membuat transaksi", + "send_templates" : "Template", + "send_new" : "Baru", + "send_amount" : "Jumlah:", + "send_fee" : "Biaya:", + "send_name" : "Nama", + "send_got_it" : "Sudah paham", + "send_sending" : "Mengirim...", + "send_success" : "${crypto}mu berhasil dikirim", + + + "settings_title" : "Pengaturan", + "settings_nodes" : "Nodes", + "settings_current_node" : "Node saat ini", + "settings_wallets" : "Dompet", + "settings_display_balance" : "Tampilkan saldo", + "settings_currency" : "Mata uang", + "settings_fee_priority" : "Prioritas biaya", + "settings_save_recipient_address" : "Simpan alamat penerima", + "settings_personal" : "Pribadi", + "settings_change_pin" : "Ganti PIN", + "settings_change_language" : "Ganti bahasa", + "settings_allow_biometrical_authentication" : "Izinkan otentikasi biometrik", + "settings_dark_mode" : "Mode gelap", + "settings_transactions" : "Transaksi", + "settings_trades" : "Perdagangan", + "settings_display_on_dashboard_list" : "Tampilkan di daftar dashboard", + "settings_all" : "SEMUA", + "settings_only_trades" : "Hanya perdagangan", + "settings_only_transactions" : "Hanya transaksi", + "settings_none" : "Tidak ada", + "settings_support" : "Dukungan", + "settings_terms_and_conditions" : "Syarat dan Ketentuan", + "pin_is_incorrect" : "PIN salah", + + + "setup_pin" : "Pasang PIN", + "enter_your_pin_again" : "Masukkan PIN Anda lagi", + "setup_successful" : "PIN Anda telah berhasil diatur!", + + "wallet_keys" : "Seed/kunci dompet", + "wallet_seed" : "Seed dompet", + "private_key" : "Kunci privat", + "public_key" : "Kunci publik", + "view_key_private" : "Kunci tampilan (privat)", + "view_key_public" : "Kunci tampilan (publik)", + "spend_key_private" : "Kunci pengeluaran (privat)", + "spend_key_public" : "Kunci pengeluaran (publik)", + "copied_key_to_clipboard" : "Kunci ${key} disalin ke Clipboard", + + "new_subaddress_title" : "Alamat baru", + "new_subaddress_label_name" : "Nama label", + "new_subaddress_create" : "Buat", + + "address_label" : "Label alamat", + + "subaddress_title" : "Daftar sub-alamat", + + "trade_details_title" : "Detail Transaksi", + "trade_details_id" : "ID", + "trade_details_state" : "Status", + "trade_details_fetching" : "Mengambil", + "trade_details_provider" : "Penyedia", + "trade_details_created_at" : "Dibuat pada", + "trade_details_pair" : "Pasangan", + "trade_details_copied" : "${title} disalin ke Clipboard", + + "trade_history_title" : "Riwayat Transaksi", + + + "transaction_details_title" : "Rincian Transaksi", + "transaction_details_transaction_id" : "ID Transaksi", + "transaction_details_date" : "Tanggal", + "transaction_details_height" : "Tinggi", + "transaction_details_amount" : "Jumlah", + "transaction_details_fee" : "Biaya", + "transaction_details_copied" : "${title} disalin ke Clipboard", + "transaction_details_recipient_address" : "Alamat Penerima", + + "wallet_list_title" : "Dompet Monero", + "wallet_list_create_new_wallet" : "Buat Dompet Baru", + "wallet_list_restore_wallet" : "Pulihkan Dompet", + "wallet_list_load_wallet" : "Muat dompet", + "wallet_list_loading_wallet" : "Memuat ${wallet_name} dompet", + "wallet_list_failed_to_load" : "Gagal memuat ${wallet_name} dompet. ${error}", + "wallet_list_removing_wallet" : "Menghapus ${wallet_name} dompet", + "wallet_list_failed_to_remove" : "Gagal menghapus ${wallet_name} dompet. ${error}", + + "widgets_address" : "Alamat", + "widgets_restore_from_blockheight" : "Pulihkan dari tinggi blok", + "widgets_restore_from_date" : "Pulihkan dari tanggal", + "widgets_or" : "atau", + "widgets_seed" : "Biji", + + "router_no_route" : "Tidak ada rute yang ditentukan untuk ${name}", + + + "error_text_account_name" : "Nama akun hanya dapat berisi huruf, angka\ndan harus antara 1 dan 15 karakter panjang", + "error_text_contact_name" : "Nama kontak tidak boleh berisi simbol `, ' \"\ndan harus antara 1 dan 32 karakter panjang", + "error_text_address" : "Alamat dompet harus sesuai dengan tipe\nmata uang kripto", + "error_text_node_address" : "Silakan masukkan alamat iPv4", + "error_text_node_port" : "Port node hanya dapat berisi angka antara 0 dan 65535", + "error_text_payment_id" : "ID pembayaran hanya dapat berisi dari 16 hingga 64 karakter dalam hex", + "error_text_xmr" : "Nilai XMR tidak boleh melebihi saldo yang tersedia.\nJumlah digit pecahan harus kurang atau sama dengan 12", + "error_text_fiat" : "Nilai jumlah tidak boleh melebihi saldo yang tersedia.\nJumlah digit pecahan harus kurang atau sama dengan 2", + "error_text_subaddress_name" : "Nama subalamat tidak boleh berisi simbol `, ' \"\ndan harus antara 1 dan 20 karakter panjang", + "error_text_amount" : "Jumlah hanya dapat berisi angka", + "error_text_wallet_name" : "Nama dompet hanya dapat berisi huruf, angka, _ - simbol\ndan harus antara 1 dan 33 karakter panjang", + "error_text_keys" : "Kunci dompet hanya dapat berisi 64 karakter dalam hex", + "error_text_crypto_currency" : "Jumlah digit pecahan harus kurang atau sama dengan 12", + "error_text_minimal_limit" : "Perdagangan untuk ${provider} tidak dibuat. Jumlah kurang dari minimal: ${min} ${currency}", + "error_text_maximum_limit" : "Perdagangan untuk ${provider} tidak dibuat. Jumlah lebih dari maksimal: ${max} ${currency}", + "error_text_limits_loading_failed" : "Perdagangan untuk ${provider} tidak dibuat. Gagal memuat batas", + "error_text_template" : "Nama template dan alamat tidak boleh berisi simbol ` , ' \"\ndan harus antara 1 dan 106 karakter panjang", + + + "auth_store_ban_timeout" : "ban_timeout", + "auth_store_banned_for" : "Dilarang selama ", + "auth_store_banned_minutes" : "menit", + "auth_store_incorrect_password" : "PIN yang salah", + "wallet_store_monero_wallet" : "Dompet Monero", + "wallet_restoration_store_incorrect_seed_length" : "Panjang seed yang salah", + + + "full_balance" : "Saldo Penuh", + "available_balance" : "Saldo Tersedia", + "hidden_balance" : "Saldo Tersembunyi", + + "sync_status_syncronizing" : "SEDANG SINKRONISASI", + "sync_status_syncronized" : "SUDAH TERSINKRONISASI", + "sync_status_not_connected" : "TIDAK TERHUBUNG", + "sync_status_starting_sync" : "MULAI SINKRONISASI", + "sync_status_failed_connect" : "GAGAL TERHUBUNG", + "sync_status_connecting" : "MENGHUBUNGKAN", + "sync_status_connected" : "TERHUBUNG", + "sync_status_attempting_sync" : "MENCOBA SINKRONISASI", + + "transaction_priority_slow" : "Lambat", + "transaction_priority_regular" : "Normal", + "transaction_priority_medium" : "Sedang", + "transaction_priority_fast" : "Cepat", + "transaction_priority_fastest" : "Tercepat", + + "trade_for_not_created" : "Perdagangan untuk ${title} belum dibuat.", + "trade_not_created" : "Perdagangan belum dibuat", + "trade_id_not_found" : "Perdagangan ${tradeId} dari ${title} tidak ditemukan.", + "trade_not_found" : "Perdagangan tidak ditemukan.", + + "trade_state_pending" : "Menunggu", + "trade_state_confirming" : "Menegkonfirmasi", + "trade_state_trading" : "Berdagang", + "trade_state_traded" : "Telah Berdagang", + "trade_state_complete" : "Selesai", + "trade_state_to_be_created" : "Akan dibuat", + "trade_state_unpaid" : "Belum dibayar", + "trade_state_underpaid" : "Kurang bayar", + "trade_state_paid_unconfirmed" : "Dibayar belum dikonfirmasi", + "trade_state_paid" : "Dibayar", + "trade_state_btc_sent" : "Btc dikirim", + "trade_state_timeout" : "Waktu habis", + "trade_state_created" : "Dibuat", + "trade_state_finished" : "Selesai", + + "change_language" : "Ganti bahasa", + "change_language_to" : "Ganti bahasa ke ${language}?", + + "paste" : "Tempel", + "restore_from_seed_placeholder" : "Silakan masukkan atau tempel seed Anda di sini", + "add_new_word" : "Tambahkan kata baru", + "incorrect_seed" : "Teks yang dimasukkan tidak valid.", + + "biometric_auth_reason" : "Pindai sidik jari Anda untuk mengautentikasi", + "version" : "Versi ${currentVersion}", + + "openalias_alert_title" : "Alamat Terdeteksi", + "openalias_alert_content" : "Anda akan mengirim dana ke\n${recipient_name}", + + "card_address" : "Alamat:", + "buy" : "Beli", + "sell": "Jual", + + "placeholder_transactions" : "Transaksi Anda akan ditampilkan di sini", + "placeholder_contacts" : "Kontak Anda akan ditampilkan di sini", + + "template" : "Template", + "confirm_delete_template" : "Tindakan ini akan menghapus template ini. Apakah Anda ingin melanjutkan?", + "confirm_delete_wallet" : "Tindakan ini akan menghapus dompet ini. Apakah Anda ingin melanjutkan?", + + "picker_description" : "Untuk memilih ChangeNOW atau MorphToken, silakan ubah pasangan perdagangan Anda terlebih dahulu", + + "change_wallet_alert_title" : "Ganti dompet saat ini", + "change_wallet_alert_content" : "Apakah Anda ingin mengganti dompet saat ini ke ${wallet_name}?", + + "creating_new_wallet" : "Membuat dompet baru", + "creating_new_wallet_error" : "Error: ${description}", + + "seed_alert_title" : "Perhatian", + "seed_alert_content" : "Seed adalah satu-satunya cara untuk mengembalikan dompet Anda. Apakah Anda sudah menuliskannya?", + "seed_alert_back" : "Kembali", + "seed_alert_yes" : "Ya, sudah", + + "exchange_sync_alert_content" : "Silakan tunggu sampai dompet Anda tersinkronisasi", + + "pre_seed_title" : "PENTING", + "pre_seed_description" : "Di halaman berikutnya Anda akan melihat serangkaian kata ${words}. Ini adalah seed unik dan pribadi Anda dan itu SATU-SATUNYA cara untuk mengembalikan dompet Anda jika hilang atau rusak. Ini adalah TANGGUNG JAWAB Anda untuk menuliskannya dan menyimpan di tempat yang aman di luar aplikasi Cake Wallet.", + "pre_seed_button_text" : "Saya mengerti. Tampilkan seed saya", + + "xmr_to_error" : "XMR.TO error", + "xmr_to_error_description" : "Jumlah tidak valid. Batas maksimal 8 digit setelah koma", + + "provider_error" : "${provider} error", + + "use_ssl" : "Gunakan SSL", + "trusted" : "Dipercayai", + + "color_theme" : "Tema warna", + "light_theme" : "Terang", + "bright_theme" : "Cerah", + "dark_theme" : "Gelap", + "enter_your_note" : "Masukkan catatan Anda...", + "note_optional" : "Catatan (opsional)", + "note_tap_to_change" : "Catatan (tap untuk mengubah)", + "view_in_block_explorer" : "Lihat di Block Explorer", + "view_transaction_on" : "Lihat Transaksi di ", + "transaction_key" : "Kunci transaksi", + "confirmations" : "Konfirmasi", + "recipient_address" : "Alamat penerima", + + "extra_id" : "ID tambahan:", + "destination_tag" : "Tag tujuan:", + "memo" : "Memo:", + + "backup" : "Cadangan", + "change_password" : "Ubah kata sandi", + "backup_password" : "Kata sandi cadangan", + "write_down_backup_password" : "Silakan menuliskan kata sandi cadangan Anda, yang digunakan untuk impor file cadangan Anda.", + "export_backup" : "Ekspor cadangan", + "save_backup_password" : "Pastikan Anda telah menyimpan kata sandi cadangan Anda. Anda tidak akan dapat mengimpor file cadangan Anda tanpa itu.", + "backup_file" : "File cadangan", + + "edit_backup_password" : "Edit Kata Sandi Cadangan", + "save_backup_password_alert" : "Simpan kata sandi cadangan", + "change_backup_password_alert" : "File cadangan sebelumnya tidak akan tersedia untuk diimpor dengan kata sandi cadangan baru. Kata sandi cadangan baru hanya akan digunakan untuk file cadangan baru. Apakah Anda yakin ingin mengubah kata sandi cadangan?", + + "enter_backup_password" : "Masukkan kata sandi cadangan di sini", + "select_backup_file" : "Pilih file cadangan", + "import" : "Impor", + "please_select_backup_file" : "Silakan pilih file cadangan dan masukkan kata sandi cadangan.", + + "fixed_rate" : "Rate tetap", + "fixed_rate_alert" : "Anda akan dapat memasukkan jumlah penerimaan saat mode rate tetap dicentang. Apakah Anda ingin beralih ke mode rate tetap?", + + "xlm_extra_info" : "Jangan lupa untuk menentukan ID Memo saat mengirim transaksi XLM untuk pertukaran", + "xrp_extra_info" : "Jangan lupa untuk menentukan Tag Tujuan saat mengirim transaksi XRP untuk pertukaran", + + "exchange_incorrect_current_wallet_for_xmr" : "Jika Anda ingin menukar XMR dari saldo Monero Cake Wallet Anda, silakan beralih ke dompet Monero Anda terlebih dahulu.", + "confirmed" : "Dikonfirmasi", + "unconfirmed" : "Tidak dikonfirmasi", + "displayable" : "Dapat ditampilkan", + + "submit_request" : "kirim permintaan", + + "buy_alert_content" : "Saat ini kami hanya mendukung pembelian Bitcoin dan Litecoin. Untuk membeli Bitcoin atau Litecoin, silakan buat atau beralih ke dompet Bitcoin atau Litecoin Anda.", + "sell_alert_content": "Saat ini kami hanya mendukung penjualan Bitcoin. Untuk menjual Bitcoin, silakan buat atau beralih ke dompet Bitcoin Anda.", + + "outdated_electrum_wallet_description" : "Dompet Bitcoin baru yang dibuat di Cake sekarang memiliki biji semai 24 kata. Wajib bagi Anda untuk membuat dompet Bitcoin baru dan mentransfer semua dana Anda ke dompet 24 kata baru, dan berhenti menggunakan dompet dengan biji semai 12 kata. Silakan lakukan ini segera untuk mengamankan dana Anda.", + "understand" : "Saya mengerti", + + "apk_update" : "Pembaruan APK", + + "buy_bitcoin" : "Beli Bitcoin", + "buy_with" : "Beli dengan", + "moonpay_alert_text" : "Nilai jumlah harus lebih atau sama dengan ${minAmount} ${fiatCurrency}", + + "outdated_electrum_wallet_receive_warning": "Jika dompet ini memiliki biji semai 12 kata dan dibuat di Cake, JANGAN deposit Bitcoin ke dalam dompet ini. BTC apapun yang ditransfer ke dompet ini mungkin hilang. Buat dompet 24 kata baru (ketuk menu di pojok kanan atas, pilih Dompet, pilih Buat Dompet Baru, lalu pilih Bitcoin) dan SEGERA pindahkan BTC Anda ke sana. Dompet BTC (24 kata) baru dari Cake aman", + "do_not_show_me": "Jangan tampilkan ini lagi", + + "unspent_coins_title" : "Koin yang tidak terpakai", + "unspent_coins_details_title" : "Rincian koin yang tidak terpakai", + "freeze" : "Freeze", + "frozen" : "Dibekukan", + "coin_control" : "Kontrol koin (opsional)", + + "address_detected" : "Alamat terdeteksi", + "address_from_domain" : "Alamat ini dari ${domain} di Unstoppable Domains", + + "add_receiver" : "Tambahkan penerima lain (opsional)", + + "manage_yats" : "Kelola Yats", + "yat_alert_title" : "Kirim dan terima crypto dengan lebih mudah dengan Yat", + "yat_alert_content" : "Pengguna Cake Wallet sekarang dapat mengirim dan menerima semua mata uang favorit mereka dengan nama pengguna berbasis emoji yang satu-of-a-kind.", + "get_your_yat" : "Dapatkan Yat Anda", + "connect_an_existing_yat" : "Hubungkan Yat yang ada", + "connect_yats": "Hubungkan Yats", + "yat_address" : "Alamat Yat", + "yat" : "Yat", + "address_from_yat" : "Alamat ini berasal dari ${emoji} di Yat", + "yat_error" : "Kesalahan Yat", + "yat_error_content" : "Tidak ada alamat yang terkait dengan Yat ini. Coba Yat lain", + "choose_address" : "\n\nSilakan pilih alamat:", + "yat_popup_title" : "Alamat dompet Anda dapat diubah menjadi emoji.", + "yat_popup_content" : "Anda sekarang dapat mengirim dan menerima crypto di Cake Wallet dengan Yat Anda - nama pengguna berbasis emoji yang pendek. Kelola Yats kapan saja pada layar pengaturan", + "second_intro_title" : "Satu alamat emoji untuk menguasainya semua", + "second_intro_content" : "Yat Anda adalah satu alamat emoji yang unik yang menggantikan semua alamat heksadesimal panjang Anda untuk semua mata uang Anda.", + "third_intro_title" : "Yat bermain baik dengan yang lain", + "third_intro_content" : "Yats hidup di luar Cake Wallet juga. Setiap alamat dompet di dunia dapat diganti dengan Yat!", + "learn_more" : "Pelajari Lebih Lanjut", + "search": "Cari", + "search_language": "Cari bahasa", + "search_currency": "Cari mata uang", + "new_template" : "Template Baru", + "electrum_address_disclaimer": "Kami menghasilkan alamat baru setiap kali Anda menggunakan satu, tetapi alamat sebelumnya tetap berfungsi", + "wallet_name_exists": "Nama dompet sudah ada. Silakan pilih nama yang berbeda atau ganti nama dompet yang lain terlebih dahulu.", + "market_place": "Pasar", + "cake_pay_title": "Kartu Hadiah Cake Pay", + "cake_pay_subtitle": "Beli kartu hadiah dengan harga diskon (hanya USA)", + "cake_pay_web_cards_title": "Kartu Web Cake Pay", + "cake_pay_web_cards_subtitle": "Beli kartu prabayar dan kartu hadiah secara global", + "about_cake_pay": "Cake Pay memungkinkan Anda untuk dengan mudah membeli kartu hadiah dengan aset virtual, yang dapat digunakan segera di lebih dari 150.000 pedagang di Amerika Serikat.", + "cake_pay_account_note": "Daftar hanya dengan alamat email untuk melihat dan membeli kartu. Beberapa di antaranya bahkan tersedia dengan diskon!", + "already_have_account": "Sudah punya akun?", + "create_account": "Buat Akun", + "privacy_policy": "Kebijakan Privasi", + "welcome_to_cakepay": "Selamat Datang di Cake Pay!", + "sign_up": "Daftar", + "forgot_password": "Lupa Kata Sandi", + "reset_password": "Atur Ulang Kata Sandi", + "gift_cards": "Kartu Hadiah", + "setup_your_debit_card": "Pasang kartu debit Anda", + "no_id_required": "Tidak perlu ID. Isi ulang dan belanja di mana saja", + "how_to_use_card": "Bagaimana menggunakan kartu ini", + "purchase_gift_card": "Beli Kartu Hadiah", + "verification": "Verifikasi", + "fill_code": "Silakan isi kode verifikasi yang diterima di email Anda", + "dont_get_code": "Tidak mendapatkan kode?", + "resend_code": "Silakan kirim ulang", + "debit_card": "Kartu Debit", + "cakepay_prepaid_card": "Kartu Debit Prabayar CakePay", + "no_id_needed": "Tidak perlu ID!", + "frequently_asked_questions": "Pertanyaan yang sering diajukan", + "debit_card_terms": "Penyimpanan dan penggunaan nomor kartu pembayaran Anda (dan kredensial yang sesuai dengan nomor kartu pembayaran Anda) dalam dompet digital ini tertakluk pada Syarat dan Ketentuan persetujuan pemegang kartu yang berlaku dengan penerbit kartu pembayaran, seperti yang berlaku dari waktu ke waktu.", + "please_reference_document": "Silakan referensikan dokumen di bawah ini untuk informasi lebih lanjut.", + "cardholder_agreement": "Persetujuan Pemegang Kartu", + "e_sign_consent": "E-Sign Consent", + "agree_and_continue": "Setuju & Lanjutkan", + "email_address": "Alamat Email", + "agree_to": "Dengan membuat akun Anda setuju dengan ", + "and": "dan", + "enter_code": "Masukkan kode", + "congratulations": "Selamat!", + "you_now_have_debit_card": "Anda sekarang memiliki kartu debit", + "min_amount" : "Min: ${value}", + "max_amount" : "Max: ${value}", + "enter_amount": "Masukkan Jumlah", + "billing_address_info": "Jika diminta alamat billing, berikan alamat pengiriman Anda", + "order_physical_card": "Pesan Kartu Fisik", + "add_value": "Tambahkan nilai", + "activate": "Aktifkan", + "get_a": "Dapatkan ", + "digital_and_physical_card": " kartu debit pra-bayar digital dan fisik", + "get_card_note": " yang dapat Anda muat ulang dengan mata uang digital. Tidak perlu informasi tambahan!", + "signup_for_card_accept_terms": "Daftar untuk kartu dan terima syarat dan ketentuan.", + "add_fund_to_card": "Tambahkan dana pra-bayar ke kartu (hingga ${value})", + "use_card_info_two": "Dana dikonversi ke USD ketika disimpan dalam akun pra-bayar, bukan dalam mata uang digital.", + "use_card_info_three": "Gunakan kartu digital secara online atau dengan metode pembayaran tanpa kontak.", + "optionally_order_card": "Opsional memesan kartu fisik.", + "hide_details" : "Sembunyikan Rincian", + "show_details" : "Tampilkan Rincian", + "upto": "hingga ${value}", + "discount": "Hemat ${value}%", + "gift_card_amount": "Jumlah Kartu Hadiah", + "bill_amount": "Jumlah Tagihan", + "you_pay": "Anda Membayar", + "tip": "Tip:", + "custom": "kustom", + "by_cake_pay": "oleh Cake Pay", + "expires": "Kadaluarsa", + "mm": "MM", + "yy": "YY", + "online": "Online", + "offline": "Offline", + "gift_card_number": "Nomor Kartu Hadiah", + "pin_number": "Nomor PIN", + "total_saving": "Total Pembayaran", + "last_30_days": "30 hari terakhir", + "avg_savings": "Rata-rata Pembayaran", + "view_all": "Lihat Semua", + "active_cards": "Kartu Aktif", + "delete_account": "Hapus Akun", + "cards": "Kartu", + "active": "Aktif", + "redeemed": "Ditukar", + "gift_card_balance_note": "Kartu hadiah dengan saldo yang tersisa akan muncul di sini", + "gift_card_redeemed_note": "Kartu hadiah yang sudah Anda tukar akan muncul di sini", + "logout": "Keluar", + "add_tip": "Tambahkan Tip", + "percentageOf": "dari ${amount}", + "is_percentage": "adalah", + "search_category": "Cari kategori", + "mark_as_redeemed": "Tandai sebagai Ditukar", + "more_options": "Opsi Lainnya", + "awaiting_payment_confirmation": "Menunggu Konfirmasi Pembayaran", + "transaction_sent_notice": "Jika layar tidak bergerak setelah 1 menit, periksa block explorer dan email Anda.", + "agree": "Setuju", + "in_store": "Di Toko", + "generating_gift_card": "Membuat Kartu Hadiah", + "payment_was_received": "Pembayaran Anda telah diterima.", + "proceed_after_one_minute": "Jika layar tidak bergerak setelah 1 menit, periksa email Anda.", + "order_id": "ID Pesanan", + "gift_card_is_generated": "Kartu Hadiah telah dibuat", + "open_gift_card": "Buka Kartu Hadiah", + "contact_support": "Hubungi Dukungan", + "gift_cards_unavailable": "Kartu hadiah hanya tersedia untuk dibeli dengan Monero, Bitcoin, dan Litecoin saat ini", + "introducing_cake_pay": "Perkenalkan Cake Pay!", + "cake_pay_learn_more": "Beli dan tukar kartu hadiah secara instan di aplikasi!\nGeser ke kanan untuk informasi lebih lanjut.", + "automatic": "Otomatis", + "fixed_pair_not_supported": "Pasangan tetap ini tidak didukung dengan bursa yang dipilih", + "variable_pair_not_supported": "Pasangan variabel ini tidak didukung dengan bursa yang dipilih", + "none_of_selected_providers_can_exchange": "Tidak ada dari penyedia yang dipilih yang dapat melakukan pertukaran ini", + "choose_one": "Pilih satu", + "choose_from_available_options": "Pilih dari pilihan yang tersedia:", + "custom_redeem_amount": "Jumlah Tukar Kustom", + "add_custom_redemption": "Tambahkan Tukar Kustom", + "remaining": "sisa", + "delete_wallet": "Hapus dompet", + "delete_wallet_confirm_message" : "Apakah Anda yakin ingin menghapus dompet ${wallet_name}?", + "low_fee": "Biaya rendah", + "low_fee_alert": "Anda saat ini menggunakan prioritas biaya jaringan rendah. Ini dapat menyebabkan tunggu yang lama, kurs yang berbeda, atau perdagangan yang dibatalkan. Kami merekomendasikan menetapkan biaya yang lebih tinggi untuk pengalaman yang lebih baik.", + "ignor": "Abaikan", + "use_suggested": "Gunakan yang Disarankan", + "do_not_share_warning_text" : "Jangan berikan ini pada siapapun, termasuk dukungan.\n\nDana Anda bisa dan akan dicuri!", + "help": "bantuan", + "all_transactions": "Semua transaksi", + "all_trades": "Semua perdagangan", + "connection_sync": "Koneksi dan sinkronisasi", + "security_and_backup": "Keamanan dan cadangan", + "create_backup": "Buat cadangan", + "privacy_settings": "Pengaturan privasi", + "privacy": "Privasi", + "display_settings": "Pengaturan tampilan", + "other_settings": "Pengaturan lainnya", + "require_pin_after": "Meminta PIN setelah", + "always": "Selalu", + "minutes_to_pin_code": "${minute} menit", + "disable_exchange": "Nonaktifkan pertukaran", + "advanced_privacy_settings": "Pengaturan Privasi Lanjutan", + "settings_can_be_changed_later": "Pengaturan ini dapat diubah nanti di pengaturan aplikasi", + "add_custom_node": "Tambahkan Node Kustom Baru", + "disable_fiat": "Nonaktifkan fiat", + "fiat_api": "API fiat", + "disabled": "Dinonaktifkan", + "enabled": "Diaktifkan", + "tor_only": "Hanya Tor", + "unmatched_currencies": "Mata uang dompet Anda saat ini tidak cocok dengan yang ditandai QR", + "orbot_running_alert": "Pastikan Orbot sedang berjalan sebelum menghubungkan ke node ini.", + "contact_list_contacts": "Kontak", + "contact_list_wallets": "Dompet Saya" +} From 076ec525469f86a82031e96a2c950ab917afdace Mon Sep 17 00:00:00 2001 From: cppethereum Date: Sat, 28 Jan 2023 00:49:37 -0500 Subject: [PATCH 077/190] Updating idn language code ISO 3166-1 alpha-3 --- lib/entities/language_service.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/entities/language_service.dart b/lib/entities/language_service.dart index d0aa75c81..3bb096b19 100644 --- a/lib/entities/language_service.dart +++ b/lib/entities/language_service.dart @@ -46,7 +46,7 @@ class LanguageService { 'ar': 'sau', 'tr': 'tur', 'my': 'mmr', - 'id': 'ind', + 'id': 'idn', }; static final list = {}; From 4353e778bb7b949c5ae23e825dd558b30de2c682 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Sat, 28 Jan 2023 15:47:44 +0200 Subject: [PATCH 078/190] Increase QR version to support longer addresses --- lib/src/screens/receive/widgets/qr_image.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/src/screens/receive/widgets/qr_image.dart b/lib/src/screens/receive/widgets/qr_image.dart index c0c1b0666..9e33080e0 100644 --- a/lib/src/screens/receive/widgets/qr_image.dart +++ b/lib/src/screens/receive/widgets/qr_image.dart @@ -8,7 +8,7 @@ class QrImage extends StatelessWidget { 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 version = 13, // Previous value: 9 BTC & LTC wallets addresses are longer than ver. 9 int errorCorrectionLevel = QrErrorCorrectLevel.L, }) : _painter = QrPainter(data, foregroundColor, version, errorCorrectionLevel); From 4704d7060527931bea1c4f2d0218db845e27ffe1 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Mon, 30 Jan 2023 19:33:40 +0200 Subject: [PATCH 079/190] Save exceptions if happened while there is an already existing report dialog [skip ci] --- lib/main.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 0dcbe6b6d..af7bb9eff 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -207,12 +207,12 @@ void _sendExceptionFile() async { } void _onError(FlutterErrorDetails errorDetails) { + _saveException(errorDetails.exception.toString(), errorDetails.stack); + if (hasError) { return; } - hasError = true; - _saveException(errorDetails.exception.toString(), errorDetails.stack); WidgetsBinding.instance.addPostFrameCallback( (timeStamp) async { From 425914ade3a04648229c1c045b4b9709046ecbc8 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Mon, 30 Jan 2023 20:03:47 +0200 Subject: [PATCH 080/190] - Replace QR package with another reade made one to exclude error being from painting QR - Revert QR version change so its re-producible if it happens again --- lib/src/screens/receive/widgets/qr_image.dart | 34 +++++++------- .../screens/receive/widgets/qr_painter.dart | 47 ------------------- pubspec_base.yaml | 2 +- 3 files changed, 19 insertions(+), 64 deletions(-) delete mode 100644 lib/src/screens/receive/widgets/qr_painter.dart diff --git a/lib/src/screens/receive/widgets/qr_image.dart b/lib/src/screens/receive/widgets/qr_image.dart index 9e33080e0..3936f847e 100644 --- a/lib/src/screens/receive/widgets/qr_image.dart +++ b/lib/src/screens/receive/widgets/qr_image.dart @@ -1,30 +1,32 @@ 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 = 13, // Previous value: 9 BTC & LTC wallets addresses are longer than ver. 9 - int errorCorrectionLevel = QrErrorCorrectLevel.L, - }) : _painter = QrPainter(data, foregroundColor, version, errorCorrectionLevel); + this.foregroundColor = Colors.black, + 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; + final Color foregroundColor; @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: foregroundColor, + 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/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: From 9869cd60cc38fef4d9a3f919e1b27ceebad1ad97 Mon Sep 17 00:00:00 2001 From: Serhii Date: Mon, 30 Jan 2023 21:15:10 +0200 Subject: [PATCH 081/190] udate alert text --- lib/entities/parse_address_from_domain.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/entities/parse_address_from_domain.dart b/lib/entities/parse_address_from_domain.dart index 0affa1d7e..6e46e5a66 100644 --- a/lib/entities/parse_address_from_domain.dart +++ b/lib/entities/parse_address_from_domain.dart @@ -45,7 +45,7 @@ class AddressResolver { final twitterUser = await TwitterApi.lookupUserByName(userName: formattedName); final address = extractAddressByType(raw: twitterUser.description ?? '', type: CryptoCurrency.fromString(ticker)); if (address != null) { - return ParsedAddress.fetchTwitterAddress(address: address, name: text); + return ParsedAddress.fetchTwitterAddress(address: address, name: '$text on Twitter'); } } if (!text.startsWith('@') && text.contains('@') && !text.contains('.')) { From 50d19e706fd97b4789278230ebeea8ff6df1064c Mon Sep 17 00:00:00 2001 From: Justin Ehrenhofer Date: Mon, 30 Jan 2023 14:05:17 -0600 Subject: [PATCH 082/190] Fix bttc, maticpoly, matic bttc mapped to trx, so changed the label instead of changing the mapping maticpoly was mislabeled on changenow maticpoly and matic were mislabeled on simpleswap --- cw_core/lib/crypto_currency.dart | 2 +- lib/exchange/changenow/changenow_exchange_provider.dart | 2 ++ lib/exchange/simpleswap/simpleswap_exchange_provider.dart | 4 ++++ 3 files changed, 7 insertions(+), 1 deletion(-) 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/lib/exchange/changenow/changenow_exchange_provider.dart b/lib/exchange/changenow/changenow_exchange_provider.dart index d8c7bbd14..8eed66cf0 100644 --- a/lib/exchange/changenow/changenow_exchange_provider.dart +++ b/lib/exchange/changenow/changenow_exchange_provider.dart @@ -273,6 +273,8 @@ class ChangeNowExchangeProvider extends ExchangeProvider { return 'zec'; case CryptoCurrency.usdcpoly: return 'usdcmatic'; + case CryptoCurrency.maticpoly: + return 'maticmainnet'; default: return currency.title.toLowerCase(); } diff --git a/lib/exchange/simpleswap/simpleswap_exchange_provider.dart b/lib/exchange/simpleswap/simpleswap_exchange_provider.dart index 2521c1486..6e57e8fc3 100644 --- a/lib/exchange/simpleswap/simpleswap_exchange_provider.dart +++ b/lib/exchange/simpleswap/simpleswap_exchange_provider.dart @@ -231,6 +231,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(); } From 81f59cacd984533700376db5ffc7218d48b52ded Mon Sep 17 00:00:00 2001 From: Justin Ehrenhofer Date: Mon, 30 Jan 2023 15:18:19 -0600 Subject: [PATCH 083/190] Change to parentheses This way we don't need to translate and create different strings for the "on", which will appear odd in languages other than English. I also added it for FIO and OpenAlias. Further, I removed the 1 instance of openalias_alert_title. It can be removed from the localization file if/when it's convenient. I did NOT change anything for Unstoppable, because that appeared to touch a dependency. That has its own custom (but similar) text response --- lib/entities/parse_address_from_domain.dart | 6 +++--- .../screens/send/widgets/extract_address_from_parsed.dart | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/entities/parse_address_from_domain.dart b/lib/entities/parse_address_from_domain.dart index 6e46e5a66..a52613d46 100644 --- a/lib/entities/parse_address_from_domain.dart +++ b/lib/entities/parse_address_from_domain.dart @@ -45,14 +45,14 @@ class AddressResolver { final twitterUser = await TwitterApi.lookupUserByName(userName: formattedName); final address = extractAddressByType(raw: twitterUser.description ?? '', type: CryptoCurrency.fromString(ticker)); if (address != null) { - return ParsedAddress.fetchTwitterAddress(address: address, name: '$text on Twitter'); + return ParsedAddress.fetchTwitterAddress(address: address, name: '$text (Twitter)'); } } 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); + return ParsedAddress.fetchFioAddress(address: address, name: '$text (FIO)'); } } @@ -77,7 +77,7 @@ class AddressResolver { final record = await OpenaliasRecord.fetchAddressAndName( formattedName: formattedName, ticker: ticker); - return ParsedAddress.fetchOpenAliasAddress(record: record, name: text); + return ParsedAddress.fetchOpenAliasAddress(record: record, name: '$text (OpenAlias)'); } catch (e) { print(e.toString()); 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 1cd7bf0b9..dcb0edc89 100644 --- a/lib/src/screens/send/widgets/extract_address_from_parsed.dart +++ b/lib/src/screens/send/widgets/extract_address_from_parsed.dart @@ -19,7 +19,7 @@ Future extractAddressFromParsed( address = parsedAddress.addresses.first; break; case ParseFrom.openAlias: - title = S.of(context).openalias_alert_title; + title = S.of(context).address_detected; content = S.of(context).openalias_alert_content(parsedAddress.name); address = parsedAddress.addresses.first; break; From 0e9d30c915b5295c600b5b5d468dd41a1fd179f6 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Tue, 31 Jan 2023 17:31:42 +0200 Subject: [PATCH 084/190] Fixate QR background and foreground colors in all themes --- lib/src/screens/exchange_trade/exchange_trade_page.dart | 9 +-------- lib/src/screens/receive/fullscreen_qr_page.dart | 9 ++------- lib/src/screens/receive/widgets/qr_image.dart | 7 ++----- lib/src/screens/receive/widgets/qr_widget.dart | 6 +----- 4 files changed, 6 insertions(+), 25 deletions(-) diff --git a/lib/src/screens/exchange_trade/exchange_trade_page.dart b/lib/src/screens/exchange_trade/exchange_trade_page.dart index 5aacf3f1f..1fe4983f6 100644 --- a/lib/src/screens/exchange_trade/exchange_trade_page.dart +++ b/lib/src/screens/exchange_trade/exchange_trade_page.dart @@ -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) ]), 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/widgets/qr_image.dart b/lib/src/screens/receive/widgets/qr_image.dart index 3936f847e..6e17dbcfc 100644 --- a/lib/src/screens/receive/widgets/qr_image.dart +++ b/lib/src/screens/receive/widgets/qr_image.dart @@ -5,18 +5,14 @@ class QrImage extends StatelessWidget { QrImage({ required this.data, this.size = 100.0, - this.backgroundColor, - this.foregroundColor = Colors.black, 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 Color? backgroundColor; final double size; final String data; final int version; final int errorCorrectionLevel; - final Color foregroundColor; @override Widget build(BuildContext context) { @@ -25,7 +21,8 @@ class QrImage extends StatelessWidget { errorCorrectionLevel: errorCorrectionLevel, version: version, size: size, - foregroundColor: foregroundColor, + foregroundColor: Colors.black, + backgroundColor: Colors.white, padding: EdgeInsets.zero, ); } 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()), ), ), ), From ef01554fdbfbf47bc042aaf42403a8aa84526bde Mon Sep 17 00:00:00 2001 From: Serhii Date: Tue, 31 Jan 2023 21:39:08 +0200 Subject: [PATCH 085/190] fix openAlias address resolv --- lib/entities/openalias_record.dart | 102 +++++++++--------- lib/entities/parse_address_from_domain.dart | 45 ++++---- lib/entities/parsed_address.dart | 6 +- .../widgets/extract_address_from_parsed.dart | 6 +- res/values/strings_ar.arb | 1 - res/values/strings_de.arb | 1 - res/values/strings_en.arb | 1 - res/values/strings_es.arb | 1 - res/values/strings_fr.arb | 1 - res/values/strings_hi.arb | 1 - res/values/strings_hr.arb | 1 - res/values/strings_it.arb | 1 - res/values/strings_ja.arb | 1 - res/values/strings_ko.arb | 1 - res/values/strings_my.arb | 1 - res/values/strings_nl.arb | 1 - res/values/strings_pl.arb | 1 - res/values/strings_pt.arb | 1 - res/values/strings_ru.arb | 1 - res/values/strings_th.arb | 1 - res/values/strings_tr.arb | 1 - res/values/strings_uk.arb | 1 - res/values/strings_zh.arb | 1 - 23 files changed, 79 insertions(+), 99 deletions(-) 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 a52613d46..6574d26fd 100644 --- a/lib/entities/parse_address_from_domain.dart +++ b/lib/entities/parse_address_from_domain.dart @@ -11,21 +11,22 @@ 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); @@ -43,18 +44,18 @@ class AddressResolver { if (text.startsWith('@') && !text.substring(1).contains('@')) { final formattedName = text.substring(1); final twitterUser = await TwitterApi.lookupUserByName(userName: formattedName); - final address = extractAddressByType(raw: twitterUser.description ?? '', type: CryptoCurrency.fromString(ticker)); + final address = extractAddressByType( + raw: twitterUser.description ?? '', type: CryptoCurrency.fromString(ticker)); if (address != null) { - return ParsedAddress.fetchTwitterAddress(address: address, name: '$text (Twitter)'); + return ParsedAddress.fetchTwitterAddress(address: address, 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 (FIO)'); - } - + return ParsedAddress.fetchFioAddress(address: address, name: text); + } } if (text.hasOnlyEmojis) { if (walletType != WalletType.haven) { @@ -75,10 +76,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 (OpenAlias)'); - + 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 afadb7b98..a73b44e33 100644 --- a/lib/entities/parsed_address.dart +++ b/lib/entities/parsed_address.dart @@ -40,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, 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 dcb0edc89..ab5778739 100644 --- a/lib/src/screens/send/widgets/extract_address_from_parsed.dart +++ b/lib/src/screens/send/widgets/extract_address_from_parsed.dart @@ -20,17 +20,17 @@ Future extractAddressFromParsed( break; case ParseFrom.openAlias: title = S.of(context).address_detected; - content = S.of(context).openalias_alert_content(parsedAddress.name); + content = S.of(context).openalias_alert_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).openalias_alert_content('${parsedAddress.name} (FIO)'); address = parsedAddress.addresses.first; break; case ParseFrom.twitter: title = S.of(context).address_detected; - content = S.of(context).openalias_alert_content(parsedAddress.name); + content = S.of(context).openalias_alert_content('${parsedAddress.name} (Twitter)'); address = parsedAddress.addresses.first; break; case ParseFrom.yatRecord: diff --git a/res/values/strings_ar.arb b/res/values/strings_ar.arb index 250f29a70..e7f4386b0 100644 --- a/res/values/strings_ar.arb +++ b/res/values/strings_ar.arb @@ -398,7 +398,6 @@ "biometric_auth_reason":"امسح بصمة إصبعك للمصادقة", "version":"الإصدار ${currentVersion}", - "openalias_alert_title":"تم ايجاد العنوان", "openalias_alert_content":"سوف ترسل الأموال إلى\n${recipient_name}", "card_address":"العنوان:", diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index a3fd4f585..b57a4374e 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -398,7 +398,6 @@ "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}", "card_address" : "Adresse:", diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index 87629cbd8..8bfeb0193 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -398,7 +398,6 @@ "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}", "card_address" : "Address:", diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb index b6d4cd358..90f0f5293 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -398,7 +398,6 @@ "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}", "card_address" : "Dirección:", diff --git a/res/values/strings_fr.arb b/res/values/strings_fr.arb index 7b9e8da07..2b65a919e 100644 --- a/res/values/strings_fr.arb +++ b/res/values/strings_fr.arb @@ -396,7 +396,6 @@ "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}", "card_address" : "Adresse :", diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb index c8e454aae..044e72b52 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -398,7 +398,6 @@ "biometric_auth_reason" : "प्रमाणित करने के लिए अपने फ़िंगरप्रिंट को स्कैन करें", "version" : "संस्करण ${currentVersion}", - "openalias_alert_title" : "पता मिला", "openalias_alert_content" : "आपको धनराशि भेजी जाएगी\n${recipient_name}", "card_address" : "पता:", diff --git a/res/values/strings_hr.arb b/res/values/strings_hr.arb index 239a175c2..74177bd50 100644 --- a/res/values/strings_hr.arb +++ b/res/values/strings_hr.arb @@ -398,7 +398,6 @@ "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}", "card_address" : "Adresa:", diff --git a/res/values/strings_it.arb b/res/values/strings_it.arb index f3ddf8af2..ebbf11bf9 100644 --- a/res/values/strings_it.arb +++ b/res/values/strings_it.arb @@ -398,7 +398,6 @@ "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}", "card_address" : "Indirizzo:", diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb index b3746aaa1..6bb31cc95 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -398,7 +398,6 @@ "biometric_auth_reason" : "प指紋をスキャンして認証する", "version" : "バージョン ${currentVersion}", - "openalias_alert_title" : "アドレスが検出されました", "openalias_alert_content" : "に送金します\n${recipient_name}", "card_address" : "住所:", diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb index db6778fd6..d538b99a7 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -398,7 +398,6 @@ "biometric_auth_reason" : "지문을 스캔하여 인증", "version" : "버전 ${currentVersion}", - "openalias_alert_title" : "주소 감지됨", "openalias_alert_content" : "당신은에 자금을 보낼 것입니다\n${recipient_name}", "card_address" : "주소:", diff --git a/res/values/strings_my.arb b/res/values/strings_my.arb index 352b8d191..a10c1d18d 100644 --- a/res/values/strings_my.arb +++ b/res/values/strings_my.arb @@ -398,7 +398,6 @@ "biometric_auth_reason" : "စစ်မှန်ကြောင်းအထောက်အထားပြရန် သင့်လက်ဗွေကို စကန်ဖတ်ပါ။", "version" : "ဗားရှင်း ${currentVersion}", - "openalias_alert_title" : "လိပ်စာကို ရှာတွေ့သည်။", "openalias_alert_content" : "သင်သည် \n${recipient_name} သို့ ရန်ပုံငွေများ ပေးပို့ပါမည်", "card_address" : "လိပ်စာ-", diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index faac8f702..6a28e108b 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -398,7 +398,6 @@ "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}", "card_address" : "Adres:", diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index 0f0e14959..5320c6981 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -398,7 +398,6 @@ "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}", "card_address" : "Adres:", diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb index 90d477369..c3d4eb986 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -398,7 +398,6 @@ "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}", "card_address" : "Endereço:", diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb index 8789dd4a0..47a1f0309 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -398,7 +398,6 @@ "biometric_auth_reason" : "Отсканируйте свой отпечаток пальца для аутентификации", "version" : "Версия ${currentVersion}", - "openalias_alert_title" : "Адрес Обнаружен", "openalias_alert_content" : "Вы будете отправлять средства\n${recipient_name}", "card_address" : "Адрес:", diff --git a/res/values/strings_th.arb b/res/values/strings_th.arb index 5e1428fac..54002b73d 100644 --- a/res/values/strings_th.arb +++ b/res/values/strings_th.arb @@ -396,7 +396,6 @@ "biometric_auth_reason" : "สแกนลายนิ้วมือของคุณเพื่อยืนยันตัวตน", "version" : "เวอร์ชัน ${currentVersion}", - "openalias_alert_title" : "พบที่อยู่", "openalias_alert_content" : "คุณกำลังจะส่งเงินไปยัง\n${recipient_name}", "card_address" : "ที่อยู่:", diff --git a/res/values/strings_tr.arb b/res/values/strings_tr.arb index 678b3609f..3975451b0 100644 --- a/res/values/strings_tr.arb +++ b/res/values/strings_tr.arb @@ -398,7 +398,6 @@ "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}", "card_address" : "Adres:", diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb index b6ac3a511..ebd2ada04 100644 --- a/res/values/strings_uk.arb +++ b/res/values/strings_uk.arb @@ -397,7 +397,6 @@ "biometric_auth_reason" : "Відскануйте свій відбиток пальця для аутентифікації", "version" : "Версія ${currentVersion}", - "openalias_alert_title" : "Виявлено адресу", "openalias_alert_content" : "Ви будете відправляти кошти\n${recipient_name}", "card_address" : "Адреса:", diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb index ba2f3f839..71acbed61 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -398,7 +398,6 @@ "biometric_auth_reason" : "扫描指纹进行身份认证", "version" : "版本 ${currentVersion}", - "openalias_alert_title" : "检测到地址", "openalias_alert_content" : "您将汇款至\n${recipient_name}", "card_address" : "地址:", From 08ff37e23c1f6992dba1a717df7ddce57143dc04 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Wed, 1 Feb 2023 17:24:36 +0200 Subject: [PATCH 086/190] Add Exception for user's network issues to not be reported [skip ci] --- lib/main.dart | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/main.dart b/lib/main.dart index af7bb9eff..720865060 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -207,6 +207,11 @@ void _sendExceptionFile() async { } void _onError(FlutterErrorDetails errorDetails) { + // Add Exception for user's network connection issues to not be reported + if (errorDetails.exception.toString().contains("Software caused connection abort")) { + return; + } + _saveException(errorDetails.exception.toString(), errorDetails.stack); if (hasError) { From 15e7395fe9084b7d15a3501246f85f1c60cd2596 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Wed, 1 Feb 2023 17:37:18 +0200 Subject: [PATCH 087/190] Separate Exception Handler class from main [skip ci] --- lib/main.dart | 108 ++----------------------------- lib/utils/exception_handler.dart | 104 +++++++++++++++++++++++++++++ 2 files changed, 108 insertions(+), 104 deletions(-) create mode 100644 lib/utils/exception_handler.dart diff --git a/lib/main.dart b/lib/main.dart index 720865060..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'; @@ -50,21 +40,18 @@ import 'package:cake_wallet/wallet_type_utils.dart'; final navigatorKey = GlobalKey(); final rootKey = GlobalKey(); final RouteObserver routeObserver = RouteObserver(); -bool hasError = false; 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; }; @@ -155,97 +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) { - // Add Exception for user's network connection issues to not be reported - if (errorDetails.exception.toString().contains("Software caused connection abort")) { - return; - } - - _saveException(errorDetails.exception.toString(), errorDetails.stack); - - if (hasError) { - return; - } - hasError = true; - - 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; - }, - ); -} - Future initialSetup( {required SharedPreferences sharedPreferences, required Box nodes, diff --git a/lib/utils/exception_handler.dart b/lib/utils/exception_handler.dart new file mode 100644 index 000000000..b5d57eba1 --- /dev/null +++ b/lib/utils/exception_handler.dart @@ -0,0 +1,104 @@ +import 'dart:convert'; +import 'dart:io'; + +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/material.dart'; +import 'package:flutter_mailer/flutter_mailer.dart'; +import 'package:path_provider/path_provider.dart'; + +class ExceptionHandler { + static bool _hasError = false; + + 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) { + if (_isErrorFromUser(errorDetails.exception.toString())) { + return; + } + + _saveException(errorDetails.exception.toString(), errorDetails.stack); + + if (_hasError) { + return; + } + _hasError = true; + + 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; + }, + ); + } + + /// User related errors to be added as exceptions here to not report + static bool _isErrorFromUser(String error) { + return error.contains("Software caused connection abort"); // User connection issue + } +} From cf83d0ca8c2bb87d6091fcead694c8e3fc264b84 Mon Sep 17 00:00:00 2001 From: Waffle Man <123539584+WaffleManEaters@users.noreply.github.com> Date: Wed, 1 Feb 2023 20:14:26 +0200 Subject: [PATCH 088/190] init_urdo --- README.md | 1 + assets/images/flags/pak.png | Bin 0 -> 899 bytes lib/entities/language_service.dart | 2 + res/values/strings_ur.arb | 688 +++++++++++++++++++++++++++++ 4 files changed, 691 insertions(+) create mode 100644 assets/images/flags/pak.png create mode 100644 res/values/strings_ur.arb diff --git a/README.md b/README.md index 96f59e704..36a3b6508 100644 --- a/README.md +++ b/README.md @@ -104,6 +104,7 @@ Edit the applicable `strings_XX.arb` file in `res/values/` and open a pull reque - Arabic - Turkish - Burmese +- Urdu ## Add a new language diff --git a/assets/images/flags/pak.png b/assets/images/flags/pak.png new file mode 100644 index 0000000000000000000000000000000000000000..1462650e4748c4867a35f9e20d3d418b88836b49 GIT binary patch literal 899 zcmV-}1AP36P)9(E6vuz(z1Nv>rqj-JDoE1`2~BDE)F_ddG!RMLG>~XO0T*ms=t>D8x-oG_K;y>( zjWH%o{i-ISU|a|)E_7vLLue|OKl@7!O` zx%b@jU|IiDN$o&YOMngNLW^g!F5ORTWhOm}w0A5um#61a&JBapu)wZac&BC84y=aB z1tWQfRL9Z?di$~+^m+y|Q;6M|uzxTAKt;e3^wRIFySI_cEWOR4Q@e#n<`z0;*T9(B9w6 zH*cMySjcmH_)S0}ob+0!Rq9p=VHQ>N~eVYIX1%uU# zb3-D6F$P-OI5F}z`H2Y%T0~ZLBY_a8SfHur9V)D$@Nagaa| zH$O+QGl6vVRKCA8q%WXiSx|)Ek{7GC*Is&~%#a!dyC$#3KrjR?E#*>`b;~xn^+V{- zt&a!!?7P#rSr>qvTOQ_vq0LJojLTby__#?aZ5tbY7{jvRUhqA?`W*3?t# zPeiNU1S|`kz5!I)lJ)75!`$ZH$4XFS?CBMD_4Ngn?cq^)W7zo>>4}|iFH6c zffjOPCsJg+5?FRQ&Ff<2lIAs6mKFo`uVGe2T7u9L{D-|s)v+{!dfen!DSeCV{ ZzX9uZNFJe!mcal3002ovPDHLkV1n|ltBn8v literal 0 HcmV?d00001 diff --git a/lib/entities/language_service.dart b/lib/entities/language_service.dart index 2f3443c02..547d26f45 100644 --- a/lib/entities/language_service.dart +++ b/lib/entities/language_service.dart @@ -23,6 +23,7 @@ class LanguageService { 'ar': 'العربية (Arabic)', 'tr': 'Türkçe (Turkish)', 'my': 'မြန်မာ (Burmese)', + 'ur': 'اردو (Urdu)' }; static const Map localeCountryCode = { @@ -45,6 +46,7 @@ class LanguageService { 'ar': 'sau', 'tr': 'tur', 'my': 'mmr', + 'ur': 'pak' }; static final list = {}; diff --git a/res/values/strings_ur.arb b/res/values/strings_ur.arb new file mode 100644 index 000000000..24baded77 --- /dev/null +++ b/res/values/strings_ur.arb @@ -0,0 +1,688 @@ +{ + "welcome" : "Welcome to", + "cake_wallet" : "Cake Wallet", + "first_wallet_text" : "Awesome wallet for Monero, Bitcoin, Litecoin, and Haven", + "please_make_selection" : "Please make a selection below to create or recover your wallet.", + "create_new" : "Create New Wallet", + "restore_wallet" : "Restore Wallet", + + "monero_com": "Monero.com by Cake Wallet", + "monero_com_wallet_text": "Awesome wallet for Monero", + + "haven_app": "Haven by Cake Wallet", + "haven_app_wallet_text": "Awesome wallet for Haven", + + "accounts" : "Accounts", + "edit" : "Edit", + "account" : "Account", + "add" : "Add", + + + "address_book" : "Address Book", + "contact" : "Contact", + "please_select" : "Please select:", + "cancel" : "Cancel", + "ok" : "OK", + "contact_name" : "Contact Name", + "reset" : "Reset", + "save" : "Save", + "address_remove_contact" : "Remove contact", + "address_remove_content" : "Are you sure that you want to remove selected contact?", + + + "authenticated" : "Authenticated", + "authentication" : "Authentication", + "failed_authentication" : "Failed authentication. ${state_error}", + + + "wallet_menu" : "Menu", + "Blocks_remaining" : "${status} Blocks Remaining", + "please_try_to_connect_to_another_node" : "Please try to connect to another node", + "xmr_hidden" : "Hidden", + "xmr_available_balance" : "Available Balance", + "xmr_full_balance" : "Full Balance", + "send" : "Send", + "receive" : "Receive", + "transactions" : "Transactions", + "incoming" : "Incoming", + "outgoing" : "Outgoing", + "transactions_by_date" : "Transactions by date", + "trades" : "Trades", + "filter_by": "Filter by", + "today" : "Today", + "yesterday" : "Yesterday", + "received" : "Received", + "sent" : "Sent", + "pending" : " (pending)", + "rescan" : "Rescan", + "reconnect" : "Reconnect", + "wallets" : "Wallets", + "show_seed" : "Show seed", + "show_keys" : "Show seed/keys", + "address_book_menu" : "Address book", + "reconnection" : "Reconnection", + "reconnect_alert_text" : "Are you sure you want to reconnect?", + + + "exchange" : "Exchange", + "clear" : "Clear", + "refund_address" : "Refund address", + "change_exchange_provider" : "Change Exchange Provider", + "you_will_send" : "Convert from", + "you_will_get" : "Convert to", + "amount_is_guaranteed" : "The receive amount is guaranteed", + "amount_is_estimate" : "The receive amount is an estimate", + "powered_by" : "Powered by ${title}", + "error" : "Error", + "estimated" : "Estimated", + "min_value" : "Min: ${value} ${currency}", + "max_value" : "Max: ${value} ${currency}", + "change_currency" : "Change Currency", + "overwrite_amount" : "Overwrite amount", + "qr_payment_amount" : "This QR code contains a payment amount. Do you want to overwrite the current value?", + + "copy_id" : "Copy ID", + "exchange_result_write_down_trade_id" : "Please copy or write down the trade ID to continue.", + "trade_id" : "Trade ID:", + "copied_to_clipboard" : "Copied to Clipboard", + "saved_the_trade_id" : "I've saved the trade ID", + "fetching" : "Fetching", + "id" : "ID: ", + "amount" : "Amount: ", + "payment_id" : "Payment ID: ", + "status" : "Status: ", + "offer_expires_in" : "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", + "confirm_sending" : "Confirm sending", + "commit_transaction_amount_fee" : "Commit transaction\nAmount: ${amount}\nFee: ${fee}", + "sending" : "Sending", + "transaction_sent" : "Transaction sent!", + "expired" : "Expired", + "time" : "${minutes}m ${seconds}s", + "send_xmr" : "Send XMR", + "exchange_new_template" : "New template", + + "faq" : "FAQ", + + + "enter_your_pin" : "Enter your PIN", + "loading_your_wallet" : "Loading your wallet", + + + "new_wallet" : "New Wallet", + "wallet_name" : "Wallet name", + "continue_text" : "Continue", + "choose_wallet_currency" : "Please choose wallet currency:", + + + "node_new" : "New Node", + "node_address" : "Node Address", + "node_port" : "Node port", + "login" : "Login", + "password" : "Password", + "nodes" : "Nodes", + "node_reset_settings_title" : "Reset settings", + "nodes_list_reset_to_default_message" : "Are you sure that you want to reset settings to default?", + "change_current_node" : "Are you sure to change current node to ${node}?", + "change" : "Change", + "remove_node" : "Remove node", + "remove_node_message" : "Are you sure that you want to remove selected node?", + "remove" : "Remove", + "delete" : "Delete", + "add_new_node" : "Add new node", + "change_current_node_title" : "Change current node", + "node_test" : "Test", + "node_connection_successful" : "Connection was successful", + "node_connection_failed" : "Connection was failed", + "new_node_testing" : "New node testing", + + + "use" : "Switch to ", + "digit_pin" : "-digit PIN", + + + "share_address" : "Share address", + "receive_amount" : "Amount", + "subaddresses" : "Subaddresses", + "addresses" : "Addresses", + "scan_qr_code" : "Scan the QR code to get the address", + "qr_fullscreen" : "Tap to open full screen QR code", + "rename" : "Rename", + "choose_account" : "Choose account", + "create_new_account" : "Create new account", + "accounts_subaddresses" : "Accounts and subaddresses", + + + "restore_restore_wallet" : "Restore Wallet", + "restore_title_from_seed_keys" : "Restore from seed/keys", + "restore_description_from_seed_keys" : "Get back your wallet from seed/keys that you've saved to secure place", + "restore_next" : "Next", + "restore_title_from_backup" : "Restore from backup", + "restore_description_from_backup" : "You can restore the whole Cake Wallet app from your back-up file", + "restore_seed_keys_restore" : "Seed/Keys Restore", + "restore_title_from_seed" : "Restore from seed", + "restore_description_from_seed" : "Restore your wallet from either the 25 word or 13 word combination code", + "restore_title_from_keys" : "Restore from keys", + "restore_description_from_keys" : "Restore your wallet from generated keystrokes saved from your private keys", + "restore_wallet_name" : "Wallet name", + "restore_address" : "Address", + "restore_view_key_private" : "View key (private)", + "restore_spend_key_private" : "Spend key (private)", + "restore_recover" : "Restore", + "restore_wallet_restore_description" : "Wallet restore description", + "restore_new_seed" : "New seed", + "restore_active_seed" : "Active seed", + "restore_bitcoin_description_from_seed" : "Restore your wallet from 24 word combination code", + "restore_bitcoin_description_from_keys" : "Restore your wallet from generated WIF string from your private keys", + "restore_bitcoin_title_from_keys" : "Restore from WIF", + "restore_from_date_or_blockheight" : "Please enter a date a few days before you created this wallet. Or if you know the blockheight, please enter it instead", + + + "seed_reminder" : "Please write these down in case you lose or wipe your phone", + "seed_title" : "Seed", + "seed_share" : "Share seed", + "copy" : "Copy", + + + "seed_language_choose" : "Please choose seed language:", + "seed_choose" : "Choose seed language", + "seed_language_next" : "Next", + "seed_language_english" : "English", + "seed_language_chinese" : "Chinese", + "seed_language_dutch" : "Dutch", + "seed_language_german" : "German", + "seed_language_japanese" : "Japanese", + "seed_language_portuguese" : "Portuguese", + "seed_language_russian" : "Russian", + "seed_language_spanish" : "Spanish", + "seed_language_french": "French", + "seed_language_italian": "Italian", + + + "send_title" : "Send", + "send_your_wallet" : "Your wallet", + "send_address" : "${cryptoCurrency} address", + "send_payment_id" : "Payment ID (optional)", + "all" : "ALL", + "send_error_minimum_value" : "Minimum value of amount is 0.01", + "send_error_currency" : "Currency can only contain numbers", + "send_estimated_fee" : "Estimated fee:", + "send_priority" : "Currently the fee is set at ${transactionPriority} priority.\nTransaction priority can be adjusted in the settings", + "send_creating_transaction" : "Creating transaction", + "send_templates" : "Templates", + "send_new" : "New", + "send_amount" : "Amount:", + "send_fee" : "Fee:", + "send_name" : "Name", + "send_got_it" : "Got it", + "send_sending" : "Sending...", + "send_success" : "Your ${crypto} was successfully sent", + + + "settings_title" : "Settings", + "settings_nodes" : "Nodes", + "settings_current_node" : "Current node", + "settings_wallets" : "Wallets", + "settings_display_balance" : "Display balance", + "settings_currency" : "Currency", + "settings_fee_priority" : "Fee priority", + "settings_save_recipient_address" : "Save recipient address", + "settings_personal" : "Personal", + "settings_change_pin" : "Change PIN", + "settings_change_language" : "Change language", + "settings_allow_biometrical_authentication" : "Allow biometrical authentication", + "settings_dark_mode" : "Dark mode", + "settings_transactions" : "Transactions", + "settings_trades" : "Trades", + "settings_display_on_dashboard_list" : "Display on dashboard list", + "settings_all" : "ALL", + "settings_only_trades" : "Only trades", + "settings_only_transactions" : "Only transactions", + "settings_none" : "None", + "settings_support" : "Support", + "settings_terms_and_conditions" : "Terms and Conditions", + "pin_is_incorrect" : "PIN is incorrect", + + + "setup_pin" : "Setup PIN", + "enter_your_pin_again" : "Enter your pin again", + "setup_successful" : "Your PIN has been set up successfully!", + + + "wallet_keys" : "Wallet seed/keys", + "wallet_seed" : "Wallet seed", + "private_key" : "Private key", + "public_key" : "Public key", + "view_key_private" : "View key (private)", + "view_key_public" : "View key (public)", + "spend_key_private" : "Spend key (private)", + "spend_key_public" : "Spend key (public)", + "copied_key_to_clipboard" : "Copied ${key} to Clipboard", + + + "new_subaddress_title" : "New address", + "new_subaddress_label_name" : "Label name", + "new_subaddress_create" : "Create", + + "address_label" : "Address label", + + "subaddress_title" : "Subaddress list", + + + "trade_details_title" : "Trade Details", + "trade_details_id" : "ID", + "trade_details_state" : "Status", + "trade_details_fetching" : "Fetching", + "trade_details_provider" : "Provider", + "trade_details_created_at" : "Created at", + "trade_details_pair" : "Pair", + "trade_details_copied" : "${title} copied to Clipboard", + + + "trade_history_title" : "Trade history", + + + "transaction_details_title" : "Transaction Details", + "transaction_details_transaction_id" : "Transaction ID", + "transaction_details_date" : "Date", + "transaction_details_height" : "Height", + "transaction_details_amount" : "Amount", + "transaction_details_fee" : "Fee", + "transaction_details_copied" : "${title} copied to Clipboard", + "transaction_details_recipient_address" : "Recipient addresses", + + + "wallet_list_title" : "Monero Wallet", + "wallet_list_create_new_wallet" : "Create New Wallet", + "wallet_list_restore_wallet" : "Restore Wallet", + "wallet_list_load_wallet" : "Load wallet", + "wallet_list_loading_wallet" : "Loading ${wallet_name} wallet", + "wallet_list_failed_to_load" : "Failed to load ${wallet_name} wallet. ${error}", + "wallet_list_removing_wallet" : "Removing ${wallet_name} wallet", + "wallet_list_failed_to_remove" : "Failed to remove ${wallet_name} wallet. ${error}", + + + "widgets_address" : "Address", + "widgets_restore_from_blockheight" : "Restore from blockheight", + "widgets_restore_from_date" : "Restore from date", + "widgets_or" : "or", + "widgets_seed" : "Seed", + + + "router_no_route" : "No route defined for ${name}", + + + "error_text_account_name" : "Account name can only contain letters, numbers\nand must be between 1 and 15 characters long", + "error_text_contact_name" : "Contact name can't contain ` , ' \" symbols\nand must be between 1 and 32 characters long", + "error_text_address" : "Wallet address must correspond to the type\nof cryptocurrency", + "error_text_node_address" : "Please enter a iPv4 address", + "error_text_node_port" : "Node port can only contain numbers between 0 and 65535", + "error_text_payment_id" : "Payment ID can only contain from 16 to 64 chars in hex", + "error_text_xmr" : "XMR value can't exceed available balance.\nThe number of fraction digits must be less or equal to 12", + "error_text_fiat" : "Value of amount can't exceed available balance.\nThe number of fraction digits must be less or equal to 2", + "error_text_subaddress_name" : "Subaddress name can't contain ` , ' \" symbols\nand must be between 1 and 20 characters long", + "error_text_amount" : "Amount can only contain numbers", + "error_text_wallet_name" : "Wallet name can only contain letters, numbers, _ - symbols \nand must be between 1 and 33 characters long", + "error_text_keys" : "Wallet keys can only contain 64 chars in hex", + "error_text_crypto_currency" : "The number of fraction digits\nmust be less or equal to 12", + "error_text_minimal_limit" : "Trade for ${provider} is not created. Amount is less then minimal: ${min} ${currency}", + "error_text_maximum_limit" : "Trade for ${provider} is not created. Amount is more then maximum: ${max} ${currency}", + "error_text_limits_loading_failed" : "Trade for ${provider} is not created. Limits loading failed", + "error_text_template" : "Template name and address can't contain ` , ' \" symbols\nand must be between 1 and 106 characters long", + + + "auth_store_ban_timeout" : "ban_timeout", + "auth_store_banned_for" : "Banned for ", + "auth_store_banned_minutes" : " minutes", + "auth_store_incorrect_password" : "Wrong PIN", + "wallet_store_monero_wallet" : "Monero Wallet", + "wallet_restoration_store_incorrect_seed_length" : "Incorrect seed length", + + + "full_balance" : "Full Balance", + "available_balance" : "Available Balance", + "hidden_balance" : "Hidden Balance", + + + "sync_status_syncronizing" : "SYNCHRONIZING", + "sync_status_syncronized" : "SYNCHRONIZED", + "sync_status_not_connected" : "NOT CONNECTED", + "sync_status_starting_sync" : "STARTING SYNC", + "sync_status_failed_connect" : "DISCONNECTED", + "sync_status_connecting" : "CONNECTING", + "sync_status_connected" : "CONNECTED", + "sync_status_attempting_sync" : "ATTEMPTING SYNC", + + + "transaction_priority_slow" : "Slow", + "transaction_priority_regular" : "Regular", + "transaction_priority_medium" : "Medium", + "transaction_priority_fast" : "Fast", + "transaction_priority_fastest" : "Fastest", + + + "trade_for_not_created" : "Trade for ${title} is not created.", + "trade_not_created" : "Trade not created", + "trade_id_not_found" : "Trade ${tradeId} of ${title} not found.", + "trade_not_found" : "Trade not found.", + + + "trade_state_pending" : "Pending", + "trade_state_confirming" : "Confirming", + "trade_state_trading" : "Trading", + "trade_state_traded" : "Traded", + "trade_state_complete" : "Complete", + "trade_state_to_be_created" : "To be created", + "trade_state_unpaid" : "Unpaid", + "trade_state_underpaid" : "Underpaid", + "trade_state_paid_unconfirmed" : "Paid unconfirmed", + "trade_state_paid" : "Paid", + "trade_state_btc_sent" : "Btc sent", + "trade_state_timeout" : "Timeout", + "trade_state_created" : "Created", + "trade_state_finished" : "Finished", + + "change_language" : "Change language", + "change_language_to" : "Change language to ${language}?", + + "paste" : "Paste", + "restore_from_seed_placeholder" : "Please enter or paste your seed here", + "add_new_word" : "Add new word", + "incorrect_seed" : "The text entered is not valid.", + + "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}", + + "card_address" : "Address:", + "buy" : "Buy", + "sell": "Sell", + + "placeholder_transactions" : "Your transactions will be displayed here", + "placeholder_contacts" : "Your contacts will be displayed here", + + "template" : "Template", + "confirm_delete_template" : "This action will delete this template. Do you wish to continue?", + "confirm_delete_wallet" : "This action will delete this wallet. Do you wish to continue?", + + "picker_description" : "To choose ChangeNOW or MorphToken, please change your trading pair first", + + "change_wallet_alert_title" : "Change current wallet", + "change_wallet_alert_content" : "Do you want to change current wallet to ${wallet_name}?", + + "creating_new_wallet" : "Creating new wallet", + "creating_new_wallet_error" : "Error: ${description}", + + "seed_alert_title" : "Attention", + "seed_alert_content" : "The seed is the only way to recover your wallet. Have you written it down?", + "seed_alert_back" : "Go back", + "seed_alert_yes" : "Yes, I have", + + "exchange_sync_alert_content" : "Please wait until your wallet is synchronized", + + "pre_seed_title" : "IMPORTANT", + "pre_seed_description" : "On the next page you will see a series of ${words} words. This is your unique and private seed and it is the ONLY way to recover your wallet in case of loss or malfunction. It is YOUR responsibility to write it down and store it in a safe place outside of the Cake Wallet app.", + "pre_seed_button_text" : "I understand. Show me my seed", + + "xmr_to_error" : "XMR.TO error", + "xmr_to_error_description" : "Invalid amount. Maximum limit 8 digits after the decimal point", + + "provider_error" : "${provider} error", + + "use_ssl" : "Use SSL", + "trusted" : "Trusted", + + "color_theme" : "Color theme", + "light_theme" : "Light", + "bright_theme" : "Bright", + "dark_theme" : "Dark", + "enter_your_note" : "Enter your note…", + "note_optional" : "Note (optional)", + "note_tap_to_change" : "Note (tap to change)", + "view_in_block_explorer" : "View in Block Explorer", + "view_transaction_on" : "View Transaction on ", + "transaction_key" : "Transaction Key", + "confirmations" : "Confirmations", + "recipient_address" : "Recipient address", + + "extra_id" : "Extra ID:", + "destination_tag" : "Destination tag:", + "memo" : "Memo:", + + "backup" : "Backup", + "change_password" : "Change password", + "backup_password" : "Backup password", + "write_down_backup_password" : "Please write down your backup password, which is used for the import of your backup files.", + "export_backup" : "Export backup", + "save_backup_password" : "Please make sure that you have saved your backup password. You will not be able to import your backup files without it.", + "backup_file" : "Backup file", + + "edit_backup_password" : "Edit Backup Password", + "save_backup_password_alert" : "Save backup password", + "change_backup_password_alert" : "Your previous backup files will be not available to import with new backup password. New backup password will be used only for new backup files. Are you sure that you want to change backup password?", + + "enter_backup_password" : "Enter backup password here", + "select_backup_file" : "Select backup file", + "import" : "Import", + "please_select_backup_file" : "Please select backup file and enter backup password.", + + "fixed_rate" : "Fixed rate", + "fixed_rate_alert" : "You will be able to enter receive amount when fixed rate mode is checked. Do you want to switch to fixed rate mode?", + + "xlm_extra_info" : "Please don’t forget to specify the Memo ID while sending the XLM transaction for the exchange", + "xrp_extra_info" : "Please don’t forget to specify the Destination Tag while sending the XRP transaction for the exchange", + + "exchange_incorrect_current_wallet_for_xmr" : "If you want to exchange XMR from your Cake Wallet Monero balance, please switch to your Monero wallet first.", + "confirmed" : "Confirmed", + "unconfirmed" : "Unconfirmed", + "displayable" : "Displayable", + + "submit_request" : "submit a request", + + "buy_alert_content" : "Currently we only support the purchase of Bitcoin and Litecoin. To buy Bitcoin or Litecoin, please create or switch to your Bitcoin or Litecoin wallet.", + "sell_alert_content": "We currently only support the sale of Bitcoin. To sell Bitcoin, please create or switch to your Bitcoin wallet.", + + "outdated_electrum_wallet_description" : "New Bitcoin wallets created in Cake now have a 24-word seed. It is mandatory that you create a new Bitcoin wallet and transfer all of your funds to the new 24-word wallet, and stop using wallets with a 12-word seed. Please do this immediately to secure your funds.", + "understand" : "I understand", + + "apk_update" : "APK update", + + "buy_bitcoin" : "Buy Bitcoin", + "buy_with" : "Buy with", + "moonpay_alert_text" : "Value of the amount must be more or equal to ${minAmount} ${fiatCurrency}", + + "outdated_electrum_wallet_receive_warning": "If this wallet has a 12-word seed and was created in Cake, DO NOT deposit Bitcoin into this wallet. Any BTC transferred to this wallet may be lost. Create a new 24-word wallet (tap the menu at the top right, select Wallets, choose Create New Wallet, then select Bitcoin) and IMMEDIATELY move your BTC there. New (24-word) BTC wallets from Cake are secure", + "do_not_show_me": "Do not show me this again", + + "unspent_coins_title" : "Unspent coins", + "unspent_coins_details_title" : "Unspent coins details", + "freeze" : "Freeze", + "frozen" : "Frozen", + "coin_control" : "Coin control (optional)", + + "address_detected" : "Address detected", + "address_from_domain" : "This address is from ${domain} on Unstoppable Domains", + + "add_receiver" : "Add another receiver (optional)", + + "manage_yats" : "Manage Yats", + "yat_alert_title" : "Send and receive crypto more easily with Yat", + "yat_alert_content" : "Cake Wallet users can now send and receive all their favorite currencies with a one-of-a-kind emoji-based username.", + "get_your_yat" : "Get your Yat", + "connect_an_existing_yat" : "Connect an existing Yat", + "connect_yats": "Connect Yats", + "yat_address" : "Yat Address", + "yat" : "Yat", + "address_from_yat" : "This address is from ${emoji} on Yat", + "yat_error" : "Yat error", + "yat_error_content" : "No addresses linked with this Yat. Try another Yat", + "choose_address" : "\n\nPlease choose the address:", + "yat_popup_title" : "Your wallet address can be emojified.", + "yat_popup_content" : "You can now send and receive crypto in Cake Wallet with your Yat - a short, emoji-based username. Manage Yats at any time on the settings screen", + "second_intro_title" : "One emoji address to rule them all", + "second_intro_content" : "Your Yat is a single unique emoji address that replaces all of your long hexadecimal addresses for all of your currencies.", + "third_intro_title" : "Yat plays nicely with others", + "third_intro_content" : "Yats live outside of Cake Wallet, too. Any wallet address on earth can be replaced with a Yat!", + "learn_more" : "Learn More", + "search": "Search", + "search_language": "Search language", + "search_currency": "Search currency", + "new_template" : "New Template", + "electrum_address_disclaimer": "We generate new addresses each time you use one, but previous addresses continue to work", + "wallet_name_exists": "A wallet with that name already exists. Please choose a different name or rename the other wallet first.", + "market_place": "Marketplace", + "cake_pay_title": "Cake Pay Gift Cards", + "cake_pay_subtitle": "Buy discounted gift cards (USA only)", + "cake_pay_web_cards_title": "Cake Pay Web Cards", + "cake_pay_web_cards_subtitle": "Buy worldwide prepaid cards and gift cards", + "about_cake_pay": "Cake Pay allows you to easily buy gift cards with virtual assets, spendable instantly at over 150,000 merchants in the United States.", + "cake_pay_account_note": "Sign up with just an email address to see and purchase cards. Some are even available at a discount!", + "already_have_account": "Already have an account?", + "create_account": "Create Account", + "privacy_policy": "Privacy Policy", + "welcome_to_cakepay": "Welcome to Cake Pay!", + "sign_up": "Sign Up", + "forgot_password": "Forgot Password", + "reset_password": "Reset Password", + "gift_cards": "Gift Cards", + "setup_your_debit_card": "Set up your debit card", + "no_id_required": "No ID required. Top up and spend anywhere", + "how_to_use_card": "How to use this card", + "purchase_gift_card": "Purchase Gift Card", + "verification": "Verification", + "fill_code": "Please fill in the verification code provided to your email", + "dont_get_code": "Don't get code?", + "resend_code": "Please resend it", + "debit_card": "Debit Card", + "cakepay_prepaid_card": "CakePay Prepaid Debit Card", + "no_id_needed": "No ID needed!", + "frequently_asked_questions": "Frequently asked questions", + "debit_card_terms": "The storage and usage of your payment card number (and credentials corresponding to your payment card number) in this digital wallet are subject to the Terms and Conditions of the applicable cardholder agreement with the payment card issuer, as in effect from time to time.", + "please_reference_document": "Please reference the documents below for more information.", + "cardholder_agreement": "Cardholder Agreement", + "e_sign_consent": "E-Sign Consent", + "agree_and_continue": "Agree & Continue", + "email_address": "Email Address", + "agree_to": "By creating account you agree to the ", + "and": "and", + "enter_code": "Enter code", + "congratulations": "Congratulations!", + "you_now_have_debit_card": "You now have a debit card", + "min_amount" : "Min: ${value}", + "max_amount" : "Max: ${value}", + "enter_amount": "Enter Amount", + "billing_address_info": "If asked for a billing address, provide your shipping address", + "order_physical_card": "Order Physical Card", + "add_value": "Add value", + "activate": "Activate", + "get_a": "Get a ", + "digital_and_physical_card": " digital and physical prepaid debit card", + "get_card_note": " that you can reload with digital currencies. No additional information needed!", + "signup_for_card_accept_terms": "Sign up for the card and accept the terms.", + "add_fund_to_card": "Add prepaid funds to the cards (up to ${value})", + "use_card_info_two": "Funds are converted to USD when the held in the prepaid account, not in digital currencies.", + "use_card_info_three": "Use the digital card online or with contactless payment methods.", + "optionally_order_card": "Optionally order a physical card.", + "hide_details" : "Hide Details", + "show_details" : "Show Details", + "upto": "up to ${value}", + "discount": "Save ${value}%", + "gift_card_amount": "Gift Card Amount", + "bill_amount": "Bill Amount", + "you_pay": "You Pay", + "tip": "Tip:", + "custom": "custom", + "by_cake_pay": "by Cake Pay", + "expires": "Expires", + "mm": "MM", + "yy": "YY", + "online": "Online", + "offline": "Offline", + "gift_card_number": "Gift card number", + "pin_number": "PIN number", + "total_saving": "Total Savings", + "last_30_days": "Last 30 days", + "avg_savings": "Avg. Savings", + "view_all": "View all", + "active_cards": "Active cards", + "delete_account": "Delete Account", + "cards": "Cards", + "active": "Active", + "redeemed": "Redeemed", + "gift_card_balance_note": "Gift cards with a balance remaining will appear here", + "gift_card_redeemed_note": "Gift cards you’ve redeemed will appear here", + "logout": "Logout", + "add_tip": "Add Tip", + "percentageOf": "of ${amount}", + "is_percentage": "is", + "search_category": "Search category", + "mark_as_redeemed": "Mark As Redeemed", + "more_options": "More Options", + "awaiting_payment_confirmation": "Awaiting Payment Confirmation", + "transaction_sent_notice": "If the screen doesn’t proceed after 1 minute, check a block explorer and your email.", + "agree": "Agree", + "in_store": "In Store", + "generating_gift_card": "Generating Gift Card", + "payment_was_received": "Your payment was received.", + "proceed_after_one_minute": "If the screen doesn’t proceed after 1 minute, check your email.", + "order_id": "Order ID", + "gift_card_is_generated": "Gift Card is generated", + "open_gift_card": "Open Gift Card", + "contact_support": "Contact Support", + "gift_cards_unavailable": "Gift cards are available for purchase only with Monero, Bitcoin, and Litecoin at this time", + "introducing_cake_pay": "Introducing Cake Pay!", + "cake_pay_learn_more": "Instantly purchase and redeem gift cards in the app!\nSwipe left to right to learn more.", + "automatic": "Automatic", + "fixed_pair_not_supported": "This fixed pair is not supported with the selected exchanges", + "variable_pair_not_supported": "This variable pair is not supported with the selected exchanges", + "none_of_selected_providers_can_exchange": "None of the selected providers can make this exchange", + "choose_one": "Choose one", + "choose_from_available_options": "Choose from the available options:", + "custom_redeem_amount": "Custom Redeem Amount", + "add_custom_redemption": "Add Custom Redemption", + "remaining": "remaining", + "delete_wallet": "Delete wallet", + "delete_wallet_confirm_message" : "Are you sure that you want to delete ${wallet_name} wallet?", + "low_fee": "Low fee", + "low_fee_alert": "You currently are using a low network fee priority. This could cause long waits, different rates, or canceled trades. We recommend setting a higher fee for a better experience.", + "ignor": "Ignore", + "use_suggested": "Use Suggested", + "do_not_share_warning_text" : "Do not share these with anyone else, including support.\n\nYour funds can and will be stolen!", + "help": "help", + "all_transactions": "All transactions", + "all_trades": "All trades", + "connection_sync": "Connection and sync", + "security_and_backup": "Security and backup", + "create_backup": "Create backup", + "privacy_settings": "Privacy settings", + "privacy": "Privacy", + "display_settings": "Display settings", + "other_settings": "Other settings", + "require_pin_after": "Require PIN after", + "always": "Always", + "minutes_to_pin_code": "${minute} minutes", + "disable_exchange": "Disable exchange", + "advanced_privacy_settings": "Advanced Privacy Settings", + "settings_can_be_changed_later": "These settings can be changed later in the app settings", + "add_custom_node": "Add New Custom Node", + "disable_fiat": "Disable fiat", + "fiat_api": "Fiat API", + "disabled": "Disabled", + "enabled": "Enabled", + "tor_only": "Tor only", + "unmatched_currencies": "Your current wallet's currency does not match that of the scanned QR", + "orbot_running_alert": "Please make sure Orbot is running prior to connecting to this node.", + "contact_list_contacts": "Contacts", + "contact_list_wallets": "My Wallets", + "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." +} From 3cc6b1b42bd589920a48da0e72638ebbf9c2a115 Mon Sep 17 00:00:00 2001 From: Waffle Man <123539584+WaffleManEaters@users.noreply.github.com> Date: Thu, 2 Feb 2023 01:53:56 +0200 Subject: [PATCH 089/190] update_urdu --- res/values/strings_ur.arb | 1167 +++++++++++++++++++------------------ 1 file changed, 584 insertions(+), 583 deletions(-) diff --git a/res/values/strings_ur.arb b/res/values/strings_ur.arb index 24baded77..c3d6d8765 100644 --- a/res/values/strings_ur.arb +++ b/res/values/strings_ur.arb @@ -1,688 +1,689 @@ { - "welcome" : "Welcome to", - "cake_wallet" : "Cake Wallet", - "first_wallet_text" : "Awesome wallet for Monero, Bitcoin, Litecoin, and Haven", - "please_make_selection" : "Please make a selection below to create or recover your wallet.", - "create_new" : "Create New Wallet", - "restore_wallet" : "Restore Wallet", + "welcome" : "میں خوش آمدید", + "cake_wallet" : "Cake والیٹ", + "first_wallet_text" : "Monero، Bitcoin، Litecoin، اور Haven کے لیے زبردست پرس", + "please_make_selection" : "اپنا بٹوہ بنانے یا بازیافت کرنے کے لیے براہ کرم ذیل میں ایک انتخاب کریں۔", + "create_new" : "نیا والیٹ بنائیں", + "restore_wallet" : "والیٹ کو بحال کریں۔", - "monero_com": "Monero.com by Cake Wallet", - "monero_com_wallet_text": "Awesome wallet for Monero", + "monero_com" : "Monero.com بذریعہ Cake والیٹ", + "monero_com_wallet_text" : "Monero کے لئے بہت اچھا پرس", - "haven_app": "Haven by Cake Wallet", - "haven_app_wallet_text": "Awesome wallet for Haven", + "haven_app" : "Haven از Cake والیٹ", + "haven_app_wallet_text" : "Havek کے لیے زبردست پرس", - "accounts" : "Accounts", - "edit" : "Edit", - "account" : "Account", - "add" : "Add", + "accounts" : "اکاؤنٹس", + "edit" : "ترمیم", + "account" : "کھاتہ", + "add" : "شامل کریں۔", - "address_book" : "Address Book", - "contact" : "Contact", - "please_select" : "Please select:", - "cancel" : "Cancel", - "ok" : "OK", - "contact_name" : "Contact Name", - "reset" : "Reset", - "save" : "Save", - "address_remove_contact" : "Remove contact", - "address_remove_content" : "Are you sure that you want to remove selected contact?", + "address_book" : "ایڈریس بک", + "contact" : "رابطہ کریں۔", + "please_select" : "براہ مہربانی منتخب کریں:", + "cancel" : "منسوخ کریں۔", + "ok" : "ٹھیک ہے", + "contact_name" : "رابطے کا نام", + "reset" : "دوبارہ ترتیب دیں۔", + "save" : "محفوظ کریں۔", + "address_remove_contact" : "رابطہ ہٹا دیں۔", + "address_remove_content" : "کیا آپ واقعی منتخب رابطہ کو ہٹانا چاہتے ہیں؟", - "authenticated" : "Authenticated", - "authentication" : "Authentication", - "failed_authentication" : "Failed authentication. ${state_error}", + "authenticated" : "تصدیق شدہ", + "authentication" : "تصدیق", + "failed_authentication" : "ناکام تصدیق۔ ${state_error}", - "wallet_menu" : "Menu", - "Blocks_remaining" : "${status} Blocks Remaining", - "please_try_to_connect_to_another_node" : "Please try to connect to another node", - "xmr_hidden" : "Hidden", - "xmr_available_balance" : "Available Balance", - "xmr_full_balance" : "Full Balance", - "send" : "Send", - "receive" : "Receive", - "transactions" : "Transactions", - "incoming" : "Incoming", - "outgoing" : "Outgoing", - "transactions_by_date" : "Transactions by date", - "trades" : "Trades", - "filter_by": "Filter by", - "today" : "Today", - "yesterday" : "Yesterday", - "received" : "Received", - "sent" : "Sent", - "pending" : " (pending)", - "rescan" : "Rescan", - "reconnect" : "Reconnect", - "wallets" : "Wallets", - "show_seed" : "Show seed", - "show_keys" : "Show seed/keys", - "address_book_menu" : "Address book", - "reconnection" : "Reconnection", - "reconnect_alert_text" : "Are you sure you want to reconnect?", + "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" : "Exchange", - "clear" : "Clear", - "refund_address" : "Refund address", - "change_exchange_provider" : "Change Exchange Provider", - "you_will_send" : "Convert from", - "you_will_get" : "Convert to", - "amount_is_guaranteed" : "The receive amount is guaranteed", - "amount_is_estimate" : "The receive amount is an estimate", - "powered_by" : "Powered by ${title}", - "error" : "Error", - "estimated" : "Estimated", - "min_value" : "Min: ${value} ${currency}", - "max_value" : "Max: ${value} ${currency}", - "change_currency" : "Change Currency", - "overwrite_amount" : "Overwrite amount", - "qr_payment_amount" : "This QR code contains a payment amount. Do you want to overwrite the current value?", + "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" : "Copy ID", - "exchange_result_write_down_trade_id" : "Please copy or write down the trade ID to continue.", - "trade_id" : "Trade ID:", - "copied_to_clipboard" : "Copied to Clipboard", - "saved_the_trade_id" : "I've saved the trade ID", - "fetching" : "Fetching", - "id" : "ID: ", - "amount" : "Amount: ", - "payment_id" : "Payment ID: ", - "status" : "Status: ", - "offer_expires_in" : "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", - "confirm_sending" : "Confirm sending", - "commit_transaction_amount_fee" : "Commit transaction\nAmount: ${amount}\nFee: ${fee}", - "sending" : "Sending", - "transaction_sent" : "Transaction sent!", - "expired" : "Expired", + "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" : "Send XMR", - "exchange_new_template" : "New template", + "send_xmr" : "XMR بھیجیں۔", + "exchange_new_template" : "نیا سانچہ", - "faq" : "FAQ", + "faq" : "عمومی سوالات", - "enter_your_pin" : "Enter your PIN", - "loading_your_wallet" : "Loading your wallet", + "enter_your_pin" : "اپنا PIN درج کریں۔", + "loading_your_wallet" : "آپ کا بٹوہ لوڈ ہو رہا ہے۔", - "new_wallet" : "New Wallet", - "wallet_name" : "Wallet name", - "continue_text" : "Continue", - "choose_wallet_currency" : "Please choose wallet currency:", + "new_wallet" : "نیا پرس", + "wallet_name" : "بٹوے کا نام", + "continue_text" : "جاری رہے", + "choose_wallet_currency" : "براہ کرم والیٹ کرنسی کا انتخاب کریں:", - "node_new" : "New Node", - "node_address" : "Node Address", - "node_port" : "Node port", - "login" : "Login", - "password" : "Password", - "nodes" : "Nodes", - "node_reset_settings_title" : "Reset settings", - "nodes_list_reset_to_default_message" : "Are you sure that you want to reset settings to default?", - "change_current_node" : "Are you sure to change current node to ${node}?", - "change" : "Change", - "remove_node" : "Remove node", - "remove_node_message" : "Are you sure that you want to remove selected node?", - "remove" : "Remove", - "delete" : "Delete", - "add_new_node" : "Add new node", - "change_current_node_title" : "Change current node", - "node_test" : "Test", - "node_connection_successful" : "Connection was successful", - "node_connection_failed" : "Connection was failed", - "new_node_testing" : "New node testing", + "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" : "Switch to ", - "digit_pin" : "-digit PIN", + "use" : "تبدیل کرنا", + "digit_pin" : "-ہندسوں کا پن", - "share_address" : "Share address", - "receive_amount" : "Amount", - "subaddresses" : "Subaddresses", - "addresses" : "Addresses", - "scan_qr_code" : "Scan the QR code to get the address", - "qr_fullscreen" : "Tap to open full screen QR code", - "rename" : "Rename", - "choose_account" : "Choose account", - "create_new_account" : "Create new account", - "accounts_subaddresses" : "Accounts and subaddresses", + "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 Wallet", - "restore_title_from_seed_keys" : "Restore from seed/keys", - "restore_description_from_seed_keys" : "Get back your wallet from seed/keys that you've saved to secure place", - "restore_next" : "Next", - "restore_title_from_backup" : "Restore from backup", - "restore_description_from_backup" : "You can restore the whole Cake Wallet app from your back-up file", - "restore_seed_keys_restore" : "Seed/Keys Restore", - "restore_title_from_seed" : "Restore from seed", - "restore_description_from_seed" : "Restore your wallet from either the 25 word or 13 word combination code", - "restore_title_from_keys" : "Restore from keys", - "restore_description_from_keys" : "Restore your wallet from generated keystrokes saved from your private keys", - "restore_wallet_name" : "Wallet name", - "restore_address" : "Address", - "restore_view_key_private" : "View key (private)", - "restore_spend_key_private" : "Spend key (private)", - "restore_recover" : "Restore", - "restore_wallet_restore_description" : "Wallet restore description", - "restore_new_seed" : "New seed", - "restore_active_seed" : "Active seed", - "restore_bitcoin_description_from_seed" : "Restore your wallet from 24 word combination code", - "restore_bitcoin_description_from_keys" : "Restore your wallet from generated WIF string from your private keys", - "restore_bitcoin_title_from_keys" : "Restore from WIF", - "restore_from_date_or_blockheight" : "Please enter a date a few days before you created this wallet. Or if you know the blockheight, please enter it instead", + "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" : "Please write these down in case you lose or wipe your phone", - "seed_title" : "Seed", - "seed_share" : "Share seed", - "copy" : "Copy", + "seed_reminder" : "اگر آپ اپنا فون کھو دیتے ہیں یا صاف کرتے ہیں تو براہ کرم یہ لکھ دیں۔", + "seed_title" : "بیج", + "seed_share" : "بیج بانٹیں۔", + "copy" : "کاپی", - "seed_language_choose" : "Please choose seed language:", - "seed_choose" : "Choose seed language", - "seed_language_next" : "Next", - "seed_language_english" : "English", - "seed_language_chinese" : "Chinese", - "seed_language_dutch" : "Dutch", - "seed_language_german" : "German", - "seed_language_japanese" : "Japanese", - "seed_language_portuguese" : "Portuguese", - "seed_language_russian" : "Russian", - "seed_language_spanish" : "Spanish", - "seed_language_french": "French", - "seed_language_italian": "Italian", + "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", - "send_your_wallet" : "Your wallet", - "send_address" : "${cryptoCurrency} address", - "send_payment_id" : "Payment ID (optional)", - "all" : "ALL", - "send_error_minimum_value" : "Minimum value of amount is 0.01", - "send_error_currency" : "Currency can only contain numbers", - "send_estimated_fee" : "Estimated fee:", - "send_priority" : "Currently the fee is set at ${transactionPriority} priority.\nTransaction priority can be adjusted in the settings", - "send_creating_transaction" : "Creating transaction", - "send_templates" : "Templates", - "send_new" : "New", - "send_amount" : "Amount:", - "send_fee" : "Fee:", - "send_name" : "Name", - "send_got_it" : "Got it", - "send_sending" : "Sending...", - "send_success" : "Your ${crypto} was successfully sent", + "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", - "settings_nodes" : "Nodes", - "settings_current_node" : "Current node", - "settings_wallets" : "Wallets", - "settings_display_balance" : "Display balance", - "settings_currency" : "Currency", - "settings_fee_priority" : "Fee priority", - "settings_save_recipient_address" : "Save recipient address", - "settings_personal" : "Personal", - "settings_change_pin" : "Change PIN", - "settings_change_language" : "Change language", - "settings_allow_biometrical_authentication" : "Allow biometrical authentication", - "settings_dark_mode" : "Dark mode", - "settings_transactions" : "Transactions", - "settings_trades" : "Trades", - "settings_display_on_dashboard_list" : "Display on dashboard list", - "settings_all" : "ALL", - "settings_only_trades" : "Only trades", - "settings_only_transactions" : "Only transactions", - "settings_none" : "None", - "settings_support" : "Support", - "settings_terms_and_conditions" : "Terms and Conditions", - "pin_is_incorrect" : "PIN is incorrect", + "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" : "Setup PIN", - "enter_your_pin_again" : "Enter your pin again", - "setup_successful" : "Your PIN has been set up successfully!", + "setup_pin" : "PIN سیٹ اپ کریں۔", + "enter_your_pin_again" : "اپنا پن دوبارہ درج کریں۔", + "setup_successful" : "آپ کا PIN کامیابی کے ساتھ ترتیب دیا گیا ہے!", - "wallet_keys" : "Wallet seed/keys", - "wallet_seed" : "Wallet seed", - "private_key" : "Private key", - "public_key" : "Public key", - "view_key_private" : "View key (private)", - "view_key_public" : "View key (public)", - "spend_key_private" : "Spend key (private)", - "spend_key_public" : "Spend key (public)", - "copied_key_to_clipboard" : "Copied ${key} to Clipboard", + "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 address", - "new_subaddress_label_name" : "Label name", - "new_subaddress_create" : "Create", + "new_subaddress_title" : "نیا پتہ", + "new_subaddress_label_name" : "لیبل کا نام", + "new_subaddress_create" : "بنانا", - "address_label" : "Address label", + "address_label" : "پتے کا خانہ", - "subaddress_title" : "Subaddress list", + "subaddress_title" : "ذیلی ایڈریس کی فہرست", - "trade_details_title" : "Trade Details", + "trade_details_title" : "تجارت کی تفصیلات", "trade_details_id" : "ID", - "trade_details_state" : "Status", - "trade_details_fetching" : "Fetching", - "trade_details_provider" : "Provider", - "trade_details_created_at" : "Created at", - "trade_details_pair" : "Pair", - "trade_details_copied" : "${title} copied to Clipboard", + "trade_details_state" : "حالت", + "trade_details_fetching" : "لا رہا ہے۔", + "trade_details_provider" : "فراہم کرنے والا", + "trade_details_created_at" : "پر تخلیق کیا گیا۔", + "trade_details_pair" : "جوڑا", + "trade_details_copied" : "${title} کو کلپ بورڈ پر کاپی کیا گیا۔", - "trade_history_title" : "Trade history", + "trade_history_title" : "تجارتی تاریخ", - "transaction_details_title" : "Transaction Details", - "transaction_details_transaction_id" : "Transaction ID", - "transaction_details_date" : "Date", - "transaction_details_height" : "Height", - "transaction_details_amount" : "Amount", - "transaction_details_fee" : "Fee", - "transaction_details_copied" : "${title} copied to Clipboard", - "transaction_details_recipient_address" : "Recipient addresses", + "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", - "wallet_list_create_new_wallet" : "Create New Wallet", - "wallet_list_restore_wallet" : "Restore Wallet", - "wallet_list_load_wallet" : "Load wallet", - "wallet_list_loading_wallet" : "Loading ${wallet_name} wallet", - "wallet_list_failed_to_load" : "Failed to load ${wallet_name} wallet. ${error}", - "wallet_list_removing_wallet" : "Removing ${wallet_name} wallet", - "wallet_list_failed_to_remove" : "Failed to remove ${wallet_name} wallet. ${error}", + "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" : "Address", - "widgets_restore_from_blockheight" : "Restore from blockheight", - "widgets_restore_from_date" : "Restore from date", - "widgets_or" : "or", - "widgets_seed" : "Seed", + "widgets_address" : "پتہ", + "widgets_restore_from_blockheight" : "بلاک ہائیٹ سے بحال کریں۔", + "widgets_restore_from_date" : "تاریخ سے بحال کریں۔", + "widgets_or" : "یا", + "widgets_seed" : "بیج", - "router_no_route" : "No route defined for ${name}", + "router_no_route" : "${name} کے لیے کوئی راستہ متعین نہیں ہے", - "error_text_account_name" : "Account name can only contain letters, numbers\nand must be between 1 and 15 characters long", - "error_text_contact_name" : "Contact name can't contain ` , ' \" symbols\nand must be between 1 and 32 characters long", - "error_text_address" : "Wallet address must correspond to the type\nof cryptocurrency", - "error_text_node_address" : "Please enter a iPv4 address", - "error_text_node_port" : "Node port can only contain numbers between 0 and 65535", - "error_text_payment_id" : "Payment ID can only contain from 16 to 64 chars in hex", - "error_text_xmr" : "XMR value can't exceed available balance.\nThe number of fraction digits must be less or equal to 12", - "error_text_fiat" : "Value of amount can't exceed available balance.\nThe number of fraction digits must be less or equal to 2", - "error_text_subaddress_name" : "Subaddress name can't contain ` , ' \" symbols\nand must be between 1 and 20 characters long", - "error_text_amount" : "Amount can only contain numbers", - "error_text_wallet_name" : "Wallet name can only contain letters, numbers, _ - symbols \nand must be between 1 and 33 characters long", - "error_text_keys" : "Wallet keys can only contain 64 chars in hex", - "error_text_crypto_currency" : "The number of fraction digits\nmust be less or equal to 12", - "error_text_minimal_limit" : "Trade for ${provider} is not created. Amount is less then minimal: ${min} ${currency}", - "error_text_maximum_limit" : "Trade for ${provider} is not created. Amount is more then maximum: ${max} ${currency}", - "error_text_limits_loading_failed" : "Trade for ${provider} is not created. Limits loading failed", - "error_text_template" : "Template name and address can't contain ` , ' \" symbols\nand must be between 1 and 106 characters long", + "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" : "ban_timeout", - "auth_store_banned_for" : "Banned for ", - "auth_store_banned_minutes" : " minutes", - "auth_store_incorrect_password" : "Wrong PIN", - "wallet_store_monero_wallet" : "Monero Wallet", - "wallet_restoration_store_incorrect_seed_length" : "Incorrect seed length", + "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" : "Full Balance", - "available_balance" : "Available Balance", - "hidden_balance" : "Hidden Balance", + "full_balance" : "مکمل بیلنس", + "available_balance" : "دستیاب بیلنس", + "hidden_balance" : "پوشیدہ بیلنس", - "sync_status_syncronizing" : "SYNCHRONIZING", - "sync_status_syncronized" : "SYNCHRONIZED", - "sync_status_not_connected" : "NOT CONNECTED", - "sync_status_starting_sync" : "STARTING SYNC", - "sync_status_failed_connect" : "DISCONNECTED", - "sync_status_connecting" : "CONNECTING", - "sync_status_connected" : "CONNECTED", - "sync_status_attempting_sync" : "ATTEMPTING SYNC", + "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" : "Slow", - "transaction_priority_regular" : "Regular", - "transaction_priority_medium" : "Medium", - "transaction_priority_fast" : "Fast", - "transaction_priority_fastest" : "Fastest", + "transaction_priority_slow" : "سست", + "transaction_priority_regular" : "باقاعدہ", + "transaction_priority_medium" : "درمیانہ", + "transaction_priority_fast" : "تیز", + "transaction_priority_fastest" : "تیز ترین", - "trade_for_not_created" : "Trade for ${title} is not created.", - "trade_not_created" : "Trade not created", - "trade_id_not_found" : "Trade ${tradeId} of ${title} not found.", - "trade_not_found" : "Trade not found.", + "trade_for_not_created" : "${title} کے لیے تجارت نہیں بنائی گئی ہے۔", + "trade_not_created" : "تجارت پیدا نہیں ہوئی۔", + "trade_id_not_found" : "ٹریڈ ${tradeId} از ${title} نہیں ملا۔", + "trade_not_found" : "تجارت نہیں ملی۔", - "trade_state_pending" : "Pending", - "trade_state_confirming" : "Confirming", - "trade_state_trading" : "Trading", - "trade_state_traded" : "Traded", - "trade_state_complete" : "Complete", - "trade_state_to_be_created" : "To be created", - "trade_state_unpaid" : "Unpaid", - "trade_state_underpaid" : "Underpaid", - "trade_state_paid_unconfirmed" : "Paid unconfirmed", - "trade_state_paid" : "Paid", - "trade_state_btc_sent" : "Btc sent", - "trade_state_timeout" : "Timeout", - "trade_state_created" : "Created", - "trade_state_finished" : "Finished", + "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", - "change_language_to" : "Change language to ${language}?", + "change_language" : "زبان تبدیل کریں", + "change_language_to" : "زبان کو ${language} میں تبدیل کریں؟", - "paste" : "Paste", - "restore_from_seed_placeholder" : "Please enter or paste your seed here", - "add_new_word" : "Add new word", - "incorrect_seed" : "The text entered is not valid.", + "paste" : "چسپاں کریں۔", + "restore_from_seed_placeholder" : "براہ کرم اپنا بیج یہاں درج کریں یا پیسٹ کریں۔", + "add_new_word" : "نیا لفظ شامل کریں۔", + "incorrect_seed" : "درج کردہ متن درست نہیں ہے۔", - "biometric_auth_reason" : "Scan your fingerprint to authenticate", - "version" : "Version ${currentVersion}", + "biometric_auth_reason" : "تصدیق کرنے کے لیے اپنے فنگر پرنٹ کو اسکین کریں۔", + "version" : "ورژن ${currentVersion}", - "openalias_alert_title" : "Address Detected", - "openalias_alert_content" : "You will be sending funds to\n${recipient_name}", - "card_address" : "Address:", - "buy" : "Buy", - "sell": "Sell", + "openalias_alert_title" : "پتہ کا پتہ چلا", + "openalias_alert_content" : "آپ کو فنڈز بھیجیں گے\\n${recipient_name}", - "placeholder_transactions" : "Your transactions will be displayed here", - "placeholder_contacts" : "Your contacts will be displayed here", + "card_address" : "پتہ:", + "buy" : "خریدنے", + "sell" : "بیچنا", - "template" : "Template", - "confirm_delete_template" : "This action will delete this template. Do you wish to continue?", - "confirm_delete_wallet" : "This action will delete this wallet. Do you wish to continue?", + "placeholder_transactions" : "آپ کے لین دین یہاں دکھائے جائیں گے۔", + "placeholder_contacts" : "آپ کے رابطے یہاں دکھائے جائیں گے۔", - "picker_description" : "To choose ChangeNOW or MorphToken, please change your trading pair first", + "template" : "سانچے", + "confirm_delete_template" : "یہ عمل اس ٹیمپلیٹ کو حذف کر دے گا۔ کیا آپ جاری رکھنا چاہتے ہیں؟", + "confirm_delete_wallet" : "اس کارروائی سے یہ پرس حذف ہو جائے گا۔ کیا آپ جاری رکھنا چاہتے ہیں؟", - "change_wallet_alert_title" : "Change current wallet", - "change_wallet_alert_content" : "Do you want to change current wallet to ${wallet_name}?", + "picker_description" : "ChangeNOW یا MorphToken کو منتخب کرنے کے لیے، براہ کرم پہلے اپنا تجارتی جوڑا تبدیل کریں۔", - "creating_new_wallet" : "Creating new wallet", - "creating_new_wallet_error" : "Error: ${description}", + "change_wallet_alert_title" : "موجودہ پرس تبدیل کریں۔", + "change_wallet_alert_content" : "کیا آپ موجودہ والیٹ کو ${wallet_name} میں تبدیل کرنا چاہتے ہیں؟", - "seed_alert_title" : "Attention", - "seed_alert_content" : "The seed is the only way to recover your wallet. Have you written it down?", - "seed_alert_back" : "Go back", - "seed_alert_yes" : "Yes, I have", + "creating_new_wallet" : "نیا پرس بنانا", + "creating_new_wallet_error" : "خرابی: ${description}", - "exchange_sync_alert_content" : "Please wait until your wallet is synchronized", + "seed_alert_title" : "توجہ", + "seed_alert_content" : "بیج آپ کے بٹوے کو بازیافت کرنے کا واحد طریقہ ہے۔ کیا آپ نے اسے لکھا ہے؟", + "seed_alert_back" : "واپس جاو", + "seed_alert_yes" : "ہاں میرے پاس ہے", - "pre_seed_title" : "IMPORTANT", - "pre_seed_description" : "On the next page you will see a series of ${words} words. This is your unique and private seed and it is the ONLY way to recover your wallet in case of loss or malfunction. It is YOUR responsibility to write it down and store it in a safe place outside of the Cake Wallet app.", - "pre_seed_button_text" : "I understand. Show me my seed", + "exchange_sync_alert_content" : "براہ کرم اس وقت تک انتظار کریں جب تک آپ کا بٹوہ مطابقت پذیر نہ ہو جائے۔", - "xmr_to_error" : "XMR.TO error", - "xmr_to_error_description" : "Invalid amount. Maximum limit 8 digits after the decimal point", + "pre_seed_title" : "اہم", + "pre_seed_description" : "اگلے صفحے پر آپ کو ${words} الفاظ کا ایک سلسلہ نظر آئے گا۔ یہ آپ کا انوکھا اور نجی بیج ہے اور یہ آپ کے بٹوے کو ضائع یا خرابی کی صورت میں بازیافت کرنے کا واحد طریقہ ہے۔ اسے لکھنا اور اسے کیک والیٹ ایپ سے باہر کسی محفوظ جگہ پر اسٹور کرنا آپ کی ذمہ داری ہے۔", + "pre_seed_button_text" : "میں سمجھتا ہوں۔ مجھے میرا بیج دکھاؤ", - "provider_error" : "${provider} error", + "xmr_to_error" : "XMR.TO غلطی", + "xmr_to_error_description" : "غلط رقم۔ اعشاریہ پوائنٹ کے بعد زیادہ سے زیادہ 8 ہندسے", - "use_ssl" : "Use SSL", - "trusted" : "Trusted", + "provider_error" : "${provider} خرابی۔", - "color_theme" : "Color theme", - "light_theme" : "Light", - "bright_theme" : "Bright", - "dark_theme" : "Dark", - "enter_your_note" : "Enter your note…", - "note_optional" : "Note (optional)", - "note_tap_to_change" : "Note (tap to change)", - "view_in_block_explorer" : "View in Block Explorer", - "view_transaction_on" : "View Transaction on ", - "transaction_key" : "Transaction Key", - "confirmations" : "Confirmations", - "recipient_address" : "Recipient address", + "use_ssl" : "SSL استعمال کریں۔", + "trusted" : "قابل اعتماد", - "extra_id" : "Extra ID:", - "destination_tag" : "Destination tag:", - "memo" : "Memo:", + "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" : "وصول کنندہ کا پتہ", - "backup" : "Backup", - "change_password" : "Change password", - "backup_password" : "Backup password", - "write_down_backup_password" : "Please write down your backup password, which is used for the import of your backup files.", - "export_backup" : "Export backup", - "save_backup_password" : "Please make sure that you have saved your backup password. You will not be able to import your backup files without it.", - "backup_file" : "Backup file", + "extra_id" : "اضافی ID:", + "destination_tag" : "منزل کا ٹیگ:", + "memo" : "میمو:", - "edit_backup_password" : "Edit Backup Password", - "save_backup_password_alert" : "Save backup password", - "change_backup_password_alert" : "Your previous backup files will be not available to import with new backup password. New backup password will be used only for new backup files. Are you sure that you want to change backup password?", + "backup" : "بیک اپ", + "change_password" : "پاس ورڈ تبدیل کریں", + "backup_password" : "بیک اپ پاس ورڈ", + "write_down_backup_password" : "براہ کرم اپنا بیک اپ پاس ورڈ لکھیں، جو آپ کی بیک اپ فائلوں کی درآمد کے لیے استعمال ہوتا ہے۔", + "export_backup" : "بیک اپ برآمد کریں۔", + "save_backup_password" : "براہ کرم یقینی بنائیں کہ آپ نے اپنا بیک اپ پاس ورڈ محفوظ کر لیا ہے۔ آپ اس کے بغیر اپنی بیک اپ فائلیں درآمد نہیں کر سکیں گے۔", + "backup_file" : "بیک اپ فائل", - "enter_backup_password" : "Enter backup password here", - "select_backup_file" : "Select backup file", - "import" : "Import", - "please_select_backup_file" : "Please select backup file and enter backup password.", + "edit_backup_password" : "بیک اپ پاس ورڈ میں ترمیم کریں۔", + "save_backup_password_alert" : "بیک اپ پاس ورڈ محفوظ کریں۔", + "change_backup_password_alert" : "آپ کی پچھلی بیک اپ فائلیں نئے بیک اپ پاس ورڈ کے ساتھ درآمد کرنے کے لیے دستیاب نہیں ہوں گی۔ نیا بیک اپ پاس ورڈ صرف نئی بیک اپ فائلوں کے لیے استعمال کیا جائے گا۔ کیا آپ واقعی بیک اپ پاس ورڈ تبدیل کرنا چاہتے ہیں؟", - "fixed_rate" : "Fixed rate", - "fixed_rate_alert" : "You will be able to enter receive amount when fixed rate mode is checked. Do you want to switch to fixed rate mode?", + "enter_backup_password" : "یہاں بیک اپ پاس ورڈ درج کریں۔", + "select_backup_file" : "بیک اپ فائل کو منتخب کریں۔", + "import" : "درآمد کریں۔", + "please_select_backup_file" : "براہ کرم بیک اپ فائل منتخب کریں اور بیک اپ پاس ورڈ درج کریں۔", - "xlm_extra_info" : "Please don’t forget to specify the Memo ID while sending the XLM transaction for the exchange", - "xrp_extra_info" : "Please don’t forget to specify the Destination Tag while sending the XRP transaction for the exchange", + "fixed_rate" : "مقررہ شرح", + "fixed_rate_alert" : "فکسڈ ریٹ موڈ چیک ہونے پر آپ وصولی رقم درج کر سکیں گے۔ کیا آپ فکسڈ ریٹ موڈ پر سوئچ کرنا چاہتے ہیں؟", - "exchange_incorrect_current_wallet_for_xmr" : "If you want to exchange XMR from your Cake Wallet Monero balance, please switch to your Monero wallet first.", - "confirmed" : "Confirmed", - "unconfirmed" : "Unconfirmed", - "displayable" : "Displayable", + "xlm_extra_info" : "ایکسچینج کے لیے XLM ٹرانزیکشن بھیجتے وقت براہ کرم میمو ID بتانا نہ بھولیں۔", + "xrp_extra_info" : "ایکسچینج کے لیے XRP ٹرانزیکشن بھیجتے وقت ڈیسٹینیشن ٹیگ بتانا نہ بھولیں۔", - "submit_request" : "submit a request", + "exchange_incorrect_current_wallet_for_xmr" : "اگر آپ اپنے Cake والیٹ Monero بیلنس سے XMR کا تبادلہ کرنا چاہتے ہیں، تو براہ کرم پہلے اپنے Monero والیٹ پر جائیں۔", + "confirmed" : "تصدیق شدہ", + "unconfirmed" : "غیر تصدیق شدہ", + "displayable" : "قابل نمائش", - "buy_alert_content" : "Currently we only support the purchase of Bitcoin and Litecoin. To buy Bitcoin or Litecoin, please create or switch to your Bitcoin or Litecoin wallet.", - "sell_alert_content": "We currently only support the sale of Bitcoin. To sell Bitcoin, please create or switch to your Bitcoin wallet.", + "submit_request" : "درخواست بھیج دو", - "outdated_electrum_wallet_description" : "New Bitcoin wallets created in Cake now have a 24-word seed. It is mandatory that you create a new Bitcoin wallet and transfer all of your funds to the new 24-word wallet, and stop using wallets with a 12-word seed. Please do this immediately to secure your funds.", - "understand" : "I understand", + "buy_alert_content" : "فی الحال ہم صرف Bitcoin اور Litecoin کی خریداری کی حمایت کرتے ہیں۔ Bitcoin یا Litecoin خریدنے کے لیے، براہ کرم اپنا Bitcoin یا Litecoin والیٹ بنائیں یا اس میں سوئچ کریں۔", + "sell_alert_content" : "ہم فی الحال صرف Bitcoin کی فروخت کی حمایت کرتے ہیں۔ Bitcoin فروخت کرنے کے لیے، براہ کرم اپنا Bitcoin والیٹ بنائیں یا اس میں سوئچ کریں۔", - "apk_update" : "APK update", + "outdated_electrum_wallet_description" : "Cake میں بنائے گئے نئے Bitcoin بٹوے میں اب 24 الفاظ کا بیج ہے۔ یہ لازمی ہے کہ آپ ایک نیا Bitcoin والیٹ بنائیں اور اپنے تمام فنڈز کو نئے 24 الفاظ والے والیٹ میں منتقل کریں، اور 12 الفاظ کے بیج والے بٹوے کا استعمال بند کریں۔ براہ کرم اپنے فنڈز کو محفوظ بنانے کے لیے فوری طور پر ایسا کریں۔", + "understand" : "میں سمجھتا ہوں۔", - "buy_bitcoin" : "Buy Bitcoin", - "buy_with" : "Buy with", - "moonpay_alert_text" : "Value of the amount must be more or equal to ${minAmount} ${fiatCurrency}", + "apk_update" : "APK اپ ڈیٹ", - "outdated_electrum_wallet_receive_warning": "If this wallet has a 12-word seed and was created in Cake, DO NOT deposit Bitcoin into this wallet. Any BTC transferred to this wallet may be lost. Create a new 24-word wallet (tap the menu at the top right, select Wallets, choose Create New Wallet, then select Bitcoin) and IMMEDIATELY move your BTC there. New (24-word) BTC wallets from Cake are secure", - "do_not_show_me": "Do not show me this again", + "buy_bitcoin" : "Bitcoin خریدیں۔", + "buy_with" : "کے ساتھ خریدیں۔", + "moonpay_alert_text" : "رقم کی قدر ${minAmount} ${fiatCurrency} کے برابر یا زیادہ ہونی چاہیے۔", - "unspent_coins_title" : "Unspent coins", - "unspent_coins_details_title" : "Unspent coins details", - "freeze" : "Freeze", - "frozen" : "Frozen", - "coin_control" : "Coin control (optional)", + "outdated_electrum_wallet_receive_warning" : "اگر اس پرس میں 12 الفاظ کا بیج ہے اور اسے Cake میں بنایا گیا ہے، تو اس بٹوے میں Bitcoin جمع نہ کریں۔ اس بٹوے میں منتقل کیا گیا کوئی بھی BTC ضائع ہو سکتا ہے۔ ایک نیا 24 الفاظ والا والیٹ بنائیں (اوپر دائیں جانب مینو کو تھپتھپائیں، Wallets کو منتخب کریں، نیا والیٹ بنائیں، پھر Bitcoin کو منتخب کریں) اور فوری طور پر اپنے BTC کو وہاں منتقل کریں۔ Cake کے نئے (24-لفظوں) BTC بٹوے محفوظ ہیں۔", + "do_not_show_me" : "مجھے یہ دوبارہ مت دکھانا", - "address_detected" : "Address detected", - "address_from_domain" : "This address is from ${domain} on Unstoppable Domains", + "unspent_coins_title" : "غیر خرچ شدہ سکے ۔", + "unspent_coins_details_title" : "غیر خرچ شدہ سککوں کی تفصیلات", + "freeze" : "منجمد", + "frozen" : "منجمد", + "coin_control" : "سکے کنٹرول (اختیاری)", - "add_receiver" : "Add another receiver (optional)", - - "manage_yats" : "Manage Yats", - "yat_alert_title" : "Send and receive crypto more easily with Yat", - "yat_alert_content" : "Cake Wallet users can now send and receive all their favorite currencies with a one-of-a-kind emoji-based username.", - "get_your_yat" : "Get your Yat", - "connect_an_existing_yat" : "Connect an existing Yat", - "connect_yats": "Connect Yats", - "yat_address" : "Yat Address", + "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" : "This address is from ${emoji} on Yat", - "yat_error" : "Yat error", - "yat_error_content" : "No addresses linked with this Yat. Try another Yat", - "choose_address" : "\n\nPlease choose the address:", - "yat_popup_title" : "Your wallet address can be emojified.", - "yat_popup_content" : "You can now send and receive crypto in Cake Wallet with your Yat - a short, emoji-based username. Manage Yats at any time on the settings screen", - "second_intro_title" : "One emoji address to rule them all", - "second_intro_content" : "Your Yat is a single unique emoji address that replaces all of your long hexadecimal addresses for all of your currencies.", - "third_intro_title" : "Yat plays nicely with others", - "third_intro_content" : "Yats live outside of Cake Wallet, too. Any wallet address on earth can be replaced with a Yat!", - "learn_more" : "Learn More", - "search": "Search", - "search_language": "Search language", - "search_currency": "Search currency", - "new_template" : "New Template", - "electrum_address_disclaimer": "We generate new addresses each time you use one, but previous addresses continue to work", - "wallet_name_exists": "A wallet with that name already exists. Please choose a different name or rename the other wallet first.", - "market_place": "Marketplace", - "cake_pay_title": "Cake Pay Gift Cards", - "cake_pay_subtitle": "Buy discounted gift cards (USA only)", - "cake_pay_web_cards_title": "Cake Pay Web Cards", - "cake_pay_web_cards_subtitle": "Buy worldwide prepaid cards and gift cards", - "about_cake_pay": "Cake Pay allows you to easily buy gift cards with virtual assets, spendable instantly at over 150,000 merchants in the United States.", - "cake_pay_account_note": "Sign up with just an email address to see and purchase cards. Some are even available at a discount!", - "already_have_account": "Already have an account?", - "create_account": "Create Account", - "privacy_policy": "Privacy Policy", - "welcome_to_cakepay": "Welcome to Cake Pay!", - "sign_up": "Sign Up", - "forgot_password": "Forgot Password", - "reset_password": "Reset Password", - "gift_cards": "Gift Cards", - "setup_your_debit_card": "Set up your debit card", - "no_id_required": "No ID required. Top up and spend anywhere", - "how_to_use_card": "How to use this card", - "purchase_gift_card": "Purchase Gift Card", - "verification": "Verification", - "fill_code": "Please fill in the verification code provided to your email", - "dont_get_code": "Don't get code?", - "resend_code": "Please resend it", - "debit_card": "Debit Card", - "cakepay_prepaid_card": "CakePay Prepaid Debit Card", - "no_id_needed": "No ID needed!", - "frequently_asked_questions": "Frequently asked questions", - "debit_card_terms": "The storage and usage of your payment card number (and credentials corresponding to your payment card number) in this digital wallet are subject to the Terms and Conditions of the applicable cardholder agreement with the payment card issuer, as in effect from time to time.", - "please_reference_document": "Please reference the documents below for more information.", - "cardholder_agreement": "Cardholder Agreement", - "e_sign_consent": "E-Sign Consent", - "agree_and_continue": "Agree & Continue", - "email_address": "Email Address", - "agree_to": "By creating account you agree to the ", - "and": "and", - "enter_code": "Enter code", - "congratulations": "Congratulations!", - "you_now_have_debit_card": "You now have a debit card", - "min_amount" : "Min: ${value}", - "max_amount" : "Max: ${value}", - "enter_amount": "Enter Amount", - "billing_address_info": "If asked for a billing address, provide your shipping address", - "order_physical_card": "Order Physical Card", - "add_value": "Add value", - "activate": "Activate", - "get_a": "Get a ", - "digital_and_physical_card": " digital and physical prepaid debit card", - "get_card_note": " that you can reload with digital currencies. No additional information needed!", - "signup_for_card_accept_terms": "Sign up for the card and accept the terms.", - "add_fund_to_card": "Add prepaid funds to the cards (up to ${value})", - "use_card_info_two": "Funds are converted to USD when the held in the prepaid account, not in digital currencies.", - "use_card_info_three": "Use the digital card online or with contactless payment methods.", - "optionally_order_card": "Optionally order a physical card.", - "hide_details" : "Hide Details", - "show_details" : "Show Details", - "upto": "up to ${value}", - "discount": "Save ${value}%", - "gift_card_amount": "Gift Card Amount", - "bill_amount": "Bill Amount", - "you_pay": "You Pay", - "tip": "Tip:", - "custom": "custom", - "by_cake_pay": "by Cake Pay", - "expires": "Expires", - "mm": "MM", - "yy": "YY", - "online": "Online", - "offline": "Offline", - "gift_card_number": "Gift card number", - "pin_number": "PIN number", - "total_saving": "Total Savings", - "last_30_days": "Last 30 days", - "avg_savings": "Avg. Savings", - "view_all": "View all", - "active_cards": "Active cards", - "delete_account": "Delete Account", - "cards": "Cards", - "active": "Active", - "redeemed": "Redeemed", - "gift_card_balance_note": "Gift cards with a balance remaining will appear here", - "gift_card_redeemed_note": "Gift cards you’ve redeemed will appear here", - "logout": "Logout", - "add_tip": "Add Tip", - "percentageOf": "of ${amount}", - "is_percentage": "is", - "search_category": "Search category", - "mark_as_redeemed": "Mark As Redeemed", - "more_options": "More Options", - "awaiting_payment_confirmation": "Awaiting Payment Confirmation", - "transaction_sent_notice": "If the screen doesn’t proceed after 1 minute, check a block explorer and your email.", - "agree": "Agree", - "in_store": "In Store", - "generating_gift_card": "Generating Gift Card", - "payment_was_received": "Your payment was received.", - "proceed_after_one_minute": "If the screen doesn’t proceed after 1 minute, check your email.", - "order_id": "Order ID", - "gift_card_is_generated": "Gift Card is generated", - "open_gift_card": "Open Gift Card", - "contact_support": "Contact Support", - "gift_cards_unavailable": "Gift cards are available for purchase only with Monero, Bitcoin, and Litecoin at this time", - "introducing_cake_pay": "Introducing Cake Pay!", - "cake_pay_learn_more": "Instantly purchase and redeem gift cards in the app!\nSwipe left to right to learn more.", - "automatic": "Automatic", - "fixed_pair_not_supported": "This fixed pair is not supported with the selected exchanges", - "variable_pair_not_supported": "This variable pair is not supported with the selected exchanges", - "none_of_selected_providers_can_exchange": "None of the selected providers can make this exchange", - "choose_one": "Choose one", - "choose_from_available_options": "Choose from the available options:", - "custom_redeem_amount": "Custom Redeem Amount", - "add_custom_redemption": "Add Custom Redemption", - "remaining": "remaining", - "delete_wallet": "Delete wallet", - "delete_wallet_confirm_message" : "Are you sure that you want to delete ${wallet_name} wallet?", - "low_fee": "Low fee", - "low_fee_alert": "You currently are using a low network fee priority. This could cause long waits, different rates, or canceled trades. We recommend setting a higher fee for a better experience.", - "ignor": "Ignore", - "use_suggested": "Use Suggested", - "do_not_share_warning_text" : "Do not share these with anyone else, including support.\n\nYour funds can and will be stolen!", - "help": "help", - "all_transactions": "All transactions", - "all_trades": "All trades", - "connection_sync": "Connection and sync", - "security_and_backup": "Security and backup", - "create_backup": "Create backup", - "privacy_settings": "Privacy settings", - "privacy": "Privacy", - "display_settings": "Display settings", - "other_settings": "Other settings", - "require_pin_after": "Require PIN after", - "always": "Always", - "minutes_to_pin_code": "${minute} minutes", - "disable_exchange": "Disable exchange", - "advanced_privacy_settings": "Advanced Privacy Settings", - "settings_can_be_changed_later": "These settings can be changed later in the app settings", - "add_custom_node": "Add New Custom Node", - "disable_fiat": "Disable fiat", - "fiat_api": "Fiat API", - "disabled": "Disabled", - "enabled": "Enabled", - "tor_only": "Tor only", - "unmatched_currencies": "Your current wallet's currency does not match that of the scanned QR", - "orbot_running_alert": "Please make sure Orbot is running prior to connecting to this node.", - "contact_list_contacts": "Contacts", - "contact_list_wallets": "My Wallets", - "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." + "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ایپلی کیشن کو بہتر بنانے کے لیے براہ کرم کریش رپورٹ ہماری سپورٹ ٹیم کو بھیجیں۔" } From 7425beb1ed85a13206119aa000c9d41f09f38b87 Mon Sep 17 00:00:00 2001 From: Serhii Date: Thu, 2 Feb 2023 13:00:44 +0200 Subject: [PATCH 090/190] Update localization variable --- .../screens/send/widgets/extract_address_from_parsed.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 ab5778739..a293835a3 100644 --- a/lib/src/screens/send/widgets/extract_address_from_parsed.dart +++ b/lib/src/screens/send/widgets/extract_address_from_parsed.dart @@ -20,17 +20,17 @@ Future extractAddressFromParsed( break; case ParseFrom.openAlias: title = S.of(context).address_detected; - content = S.of(context).openalias_alert_content('${parsedAddress.name} (OpenAlias)'); + 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} (FIO)'); + 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).openalias_alert_content('${parsedAddress.name} (Twitter)'); + content = S.of(context).extracted_address_content('${parsedAddress.name} (Twitter)'); address = parsedAddress.addresses.first; break; case ParseFrom.yatRecord: From 6072fd09d6c581ca53717d13bab77d7521494270 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Thu, 2 Feb 2023 15:54:59 +0200 Subject: [PATCH 091/190] Update app version --- scripts/android/app_env.sh | 8 ++++---- scripts/ios/app_env.sh | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/scripts/android/app_env.sh b/scripts/android/app_env.sh index c74d97c0f..492f13e5a 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.6" +MONERO_COM_BUILD_NUMBER=37 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.7" +CAKEWALLET_BUILD_NUMBER=142 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..f0e701691 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.6" +MONERO_COM_BUILD_NUMBER=34 MONERO_COM_BUNDLE_ID="com.cakewallet.monero" CAKEWALLET_NAME="Cake Wallet" -CAKEWALLET_VERSION="4.5.6" -CAKEWALLET_BUILD_NUMBER=138 +CAKEWALLET_VERSION="4.5.7" +CAKEWALLET_BUILD_NUMBER=139 CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet" HAVEN_NAME="Haven" From 65b2ae66807f9563be4a0832e8a3ff1811a2067e Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Thu, 2 Feb 2023 18:36:57 +0200 Subject: [PATCH 092/190] Add LTC to twitter address parsing --- lib/core/address_validator.dart | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/core/address_validator.dart b/lib/core/address_validator.dart index 20cb66a4d..22ad6a9d8 100644 --- a/lib/core/address_validator.dart +++ b/lib/core/address_validator.dart @@ -212,6 +212,10 @@ class AddressValidator extends TextValidator { '|([^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; } From a6adfc15d33a54c6e2b41b7fa48c6f588979885f Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Fri, 3 Feb 2023 01:15:23 +0200 Subject: [PATCH 093/190] Update android build version for Cake Wallet [skip ci] --- scripts/android/app_env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/android/app_env.sh b/scripts/android/app_env.sh index 492f13e5a..0de5985d5 100644 --- a/scripts/android/app_env.sh +++ b/scripts/android/app_env.sh @@ -21,7 +21,7 @@ MONERO_COM_PACKAGE="com.monero.app" CAKEWALLET_NAME="Cake Wallet" CAKEWALLET_VERSION="4.5.7" -CAKEWALLET_BUILD_NUMBER=142 +CAKEWALLET_BUILD_NUMBER=143 CAKEWALLET_BUNDLE_ID="com.cakewallet.cake_wallet" CAKEWALLET_PACKAGE="com.cakewallet.cake_wallet" From d85805902d7d5b5c443c35d1893d4e159be59406 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Fri, 3 Feb 2023 14:44:13 +0200 Subject: [PATCH 094/190] - Ignore Socket Exception "bad file descriptor" - Add nullability to anypay API response failure [skip ci] --- lib/anypay/anypay_api.dart | 2 +- lib/utils/exception_handler.dart | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) 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/utils/exception_handler.dart b/lib/utils/exception_handler.dart index b5d57eba1..889f86c63 100644 --- a/lib/utils/exception_handler.dart +++ b/lib/utils/exception_handler.dart @@ -59,7 +59,7 @@ class ExceptionHandler { } static void onError(FlutterErrorDetails errorDetails) { - if (_isErrorFromUser(errorDetails.exception.toString())) { + if (_ignoreError(errorDetails.exception.toString())) { return; } @@ -97,8 +97,9 @@ class ExceptionHandler { ); } - /// User related errors to be added as exceptions here to not report - static bool _isErrorFromUser(String error) { - return error.contains("Software caused connection abort"); // User connection issue + /// Ignore User related errors or system errors + static bool _ignoreError(String error) { + return error.contains("errno = 103") || // SocketException: Software caused connection abort + error.contains("errno = 9"); // SocketException: Bad file descriptor (iOS socket exception) } } From 4444a075c65762a4f02946b30cf1939b9c5b6aea Mon Sep 17 00:00:00 2001 From: holecekp Date: Sat, 4 Feb 2023 15:42:41 +0100 Subject: [PATCH 095/190] Add Czech language --- README.md | 1 + lib/entities/language_service.dart | 2 + res/values/strings_cs.arb | 688 +++++++++++++++++++++++++++++ 3 files changed, 691 insertions(+) create mode 100644 res/values/strings_cs.arb diff --git a/README.md b/README.md index 96f59e704..6e84068a2 100644 --- a/README.md +++ b/README.md @@ -104,6 +104,7 @@ Edit the applicable `strings_XX.arb` file in `res/values/` and open a pull reque - Arabic - Turkish - Burmese +- Czech ## Add a new language diff --git a/lib/entities/language_service.dart b/lib/entities/language_service.dart index 2f3443c02..7fe5e8304 100644 --- a/lib/entities/language_service.dart +++ b/lib/entities/language_service.dart @@ -23,6 +23,7 @@ class LanguageService { 'ar': 'العربية (Arabic)', 'tr': 'Türkçe (Turkish)', 'my': 'မြန်မာ (Burmese)', + 'cs': 'čeština (Czech)', }; static const Map localeCountryCode = { @@ -45,6 +46,7 @@ class LanguageService { 'ar': 'sau', 'tr': 'tur', 'my': 'mmr', + 'cs': 'czk', }; static final list = {}; 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." +} From c45a98848149c51ea423b083636d626c4a0f4a5f Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Mon, 6 Feb 2023 18:33:12 +0200 Subject: [PATCH 096/190] - Fix nullability issue - Update Flutter and Packages --- cw_bitcoin/pubspec.lock | 384 ++++++++++++++++++------------- cw_core/pubspec.lock | 367 +++++++++++++++++------------ cw_haven/pubspec.lock | 369 +++++++++++++++++------------ cw_monero/pubspec.lock | 365 +++++++++++++++++------------ lib/router.dart | 2 +- lib/utils/exception_handler.dart | 6 + 6 files changed, 887 insertions(+), 606 deletions(-) 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/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/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/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/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/utils/exception_handler.dart b/lib/utils/exception_handler.dart index 889f86c63..ee3da8551 100644 --- a/lib/utils/exception_handler.dart +++ b/lib/utils/exception_handler.dart @@ -5,6 +5,7 @@ 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'; @@ -59,6 +60,11 @@ class ExceptionHandler { } static void onError(FlutterErrorDetails errorDetails) { + if (kDebugMode) { + FlutterError.presentError(errorDetails); + return; + } + if (_ignoreError(errorDetails.exception.toString())) { return; } From d4e720f5c0a18dd992e3d5d447ef1474f6739b6a Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Mon, 6 Feb 2023 18:46:18 +0200 Subject: [PATCH 097/190] - Remove old wallet menu widgets - Remove Rescan option from Electrum wallets --- .../settings/connection_sync_page.dart | 11 +- lib/src/screens/wallet_list/wallet_menu.dart | 131 ------------------ .../widgets/wallet_menu_alert.dart | 112 --------------- 3 files changed, 7 insertions(+), 247 deletions(-) delete mode 100644 lib/src/screens/wallet_list/wallet_menu.dart delete mode 100644 lib/src/screens/wallet_list/widgets/wallet_menu_alert.dart diff --git a/lib/src/screens/settings/connection_sync_page.dart b/lib/src/screens/settings/connection_sync_page.dart index bf60a4405..bef196d60 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,12 @@ 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.type != WalletType.bitcoin && + dashboardViewModel.type != WalletType.litecoin) + 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/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/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 From c94aed6fb18df8fc46e5f7646fc9d5429b3f6070 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Mon, 6 Feb 2023 18:47:20 +0200 Subject: [PATCH 098/190] Remove unused wallet_menu_item.dart --- .../screens/wallet_list/wallet_menu_item.dart | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 lib/src/screens/wallet_list/wallet_menu_item.dart 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 From 03f55445457251e366c5c5501e5b198aa5ccf99f Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Mon, 6 Feb 2023 19:08:44 +0200 Subject: [PATCH 099/190] Ensure widget is still mounted before showing popup --- lib/src/screens/send/send_page.dart | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/lib/src/screens/send/send_page.dart b/lib/src/screens/send/send_page.dart index 2cd849f34..6f4cd0bde 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(); }, @@ -365,15 +365,17 @@ class SendPage extends BasePage { reaction((_) => sendViewModel.state, (ExecutionState state) { if (state is FailureState) { WidgetsBinding.instance.addPostFrameCallback((_) { - showPopUp( - context: context, - builder: (BuildContext context) { - return AlertWithOneAction( - alertTitle: S.of(context).error, - alertContent: state.error, - buttonText: S.of(context).ok, - buttonAction: () => Navigator.of(context).pop()); - }); + if (context.mounted) { + showPopUp( + context: context, + builder: (BuildContext context) { + return AlertWithOneAction( + alertTitle: S.of(context).error, + alertContent: state.error, + buttonText: S.of(context).ok, + buttonAction: () => Navigator.of(context).pop()); + }); + } }); } From 861ba815319df10b98dc203d8b289d4cd200925d Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Mon, 6 Feb 2023 19:56:55 +0200 Subject: [PATCH 100/190] Add "Connection reset by peer" error to ignored errors --- lib/utils/exception_handler.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/utils/exception_handler.dart b/lib/utils/exception_handler.dart index ee3da8551..b8d0089ec 100644 --- a/lib/utils/exception_handler.dart +++ b/lib/utils/exception_handler.dart @@ -106,6 +106,7 @@ class ExceptionHandler { /// Ignore User related errors or system errors static bool _ignoreError(String error) { return error.contains("errno = 103") || // SocketException: Software caused connection abort - error.contains("errno = 9"); // SocketException: Bad file descriptor (iOS socket exception) + error.contains("errno = 9") || // SocketException: Bad file descriptor + error.contains("errno = 54"); // SocketException: Connection reset by peer } } From 032a8c8c3387ab9cb87d54fc4aa21977dc30266a Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Mon, 6 Feb 2023 21:20:43 +0200 Subject: [PATCH 101/190] Add trocador exchange provider --- assets/images/trocador.png | Bin 0 -> 10417 bytes lib/entities/preferences_key.dart | 1 + .../changenow_exchange_provider.dart | 1 + lib/exchange/exchange_provider.dart | 1 + .../exchange_provider_description.dart | 27 +- .../trocador/trocador_exchange_provider.dart | 268 ++++++++++++++++++ lib/exchange/trocador/trocador_request.dart | 21 ++ .../screens/dashboard/widgets/trade_row.dart | 75 +++-- .../advanced_privacy_settings_page.dart | 13 +- lib/src/screens/settings/privacy_page.dart | 31 +- lib/store/dashboard/trade_filter_store.dart | 16 +- lib/store/settings_store.dart | 23 +- .../advanced_privacy_settings_view_model.dart | 37 ++- .../dashboard/dashboard_view_model.dart | 8 +- .../exchange/exchange_trade_view_model.dart | 4 + .../exchange/exchange_view_model.dart | 16 +- .../settings/privacy_settings_view_model.dart | 14 +- lib/view_model/trade_details_view_model.dart | 4 + tool/utils/secret_key.dart | 1 + 19 files changed, 453 insertions(+), 108 deletions(-) create mode 100644 assets/images/trocador.png create mode 100644 lib/exchange/trocador/trocador_exchange_provider.dart create mode 100644 lib/exchange/trocador/trocador_request.dart diff --git a/assets/images/trocador.png b/assets/images/trocador.png new file mode 100644 index 0000000000000000000000000000000000000000..67c9f221c8586f309e22acf4853735ffdd4c3e15 GIT binary patch literal 10417 zcmdUV_dlFX)ILcbB!Uzr!77pHB}HE?YO3CQ3DLVH>J8T=`^zjEvX!sq$l8-|uS^Z~S$KPkwLm+`Y?riOPf{H0AD1a(JVPOuEoWY_>O!5=>X;c;SG)ZKz?Uef3I~Hy8-iH#%N=H8w$$ZKGt~dDt?Q{bh-_Tgd z7Za zorv|7{eWdS3oo2wD0k6O23!knCEJ5AN8DQbRe7x7!Y`GyIeXa8XpM109s1#?UvW)x}(3* zT?Qko=ktiIo8g9je&Y9mmDI0kB?O|(-2OPQT@LH!H?XiY$Eu1Sx_&9|Al~;5Gj1H%>iQJf$LYnSh{%_wqbAh z36sXo9u&0YK^u4EaOouV7HGL$T`hs{54s=9l7qL%-|jP8U(d7JL8yWC$PG52O znt;)+XW+^Iny4quQt~GRPMt4r|1dj$m4haGsv+2u^4cYgPSp+vP5RVX6lh%otz(W| zjf#{O7HwzBCnNQ;RT>&m?L!}~MqOR#tIQqJ3ORGQe62KKBMa)D32O#T>IbJ{u9$4T|ovxE`f&mfgT z70e>uW3pUkNO1N9#IZt8uS?4b(dUS{*s(0-A{tr{<9ds&3*IrQi_JWS>oUv+?mM9x zB+c9AM`>sDBC4I5ZxsKiPPupnQT; zw88}&_-DmfU&nDO@)ahFvs$11elJunxL-kuQ=fhlwyQ1JJVA9t+oLa-xmvat;Uin? zFvrPxaDD_R(_rORsMl} zC}WP#FjW2rzr7#aT|TXqgFWB+Fi7)Bb<(S2k1!BzR)A|11<0o|}h z*ck0~=JF5qgIE|<*={9uw*K& zTpe8oxsZZ==_uD+eGw_Ghzipx)or~a&5MIYD@ZzhBC)wZFV*s^I7$t`s2=g|e`5Yp z^5#0j_VFuEZrZ*`MI7g+@AMAa;Ah-YK!q7-(RD}I-_kgS4a1KfVt6Rt96Dr& zX#b3Szq7lLG1YVA=+=7Y8O_S>_=c3zC*j^|NV8TfVl)5~vq=ALHj$QcEv?wF{BT3* zfgy=GXYfL$);G_vdaOo_#~V(oce3;m_Pkk7LzXjTaF@R;p_IOG)AVt@MK9Vbn%7$6 zKhTzN`8g?Sre4UvZ=xzF2@=i(92fG_`=(e^++|ip)LerwOQwnMtvm>t?NmBEtl?i$ zEIIkX!Aq2l1eR`4Oh$Ez@wa$r+cyPMSQdWMwmRnOkjp)_`|d)z|9X7lS%?REAhfFjjrBF>B_h{AjIl)Td&QyY-IcCF0HC2Q@HdOE(G=LGGfu6#sk{n{|^MdvWa#yKqb9+BCZ$Nj=W zG;QRcJ{uMOE58=YE}fJ$unGNyT-Ym`Nr5U_`^U2hUHM~{OABe^nCdg>hQdSJGB7*# zS{q9oY?CJCA0GZiQk9Q0Vl14Xp*R2Xt7b;G_ZKyDXxyL5%d@_|OLs_je|79w$haNM z?EZKnCXn93rS_Viv7f3Z=L&{L9DHxrIv^>J#0>WTabcP^Kg~eRwl%<7_wkrQEas`rG?@2$Zu-g8A>j_wN{^G#2eE^!IqF? zsEnF$SqgTED(*1)ap*3JJ~kvZ-Kt{s<)P~nr2DQbaYw2AgDPTIoXm8vOecWJQO!Qd zEKqR2U@`dnOE%v;oSaQbn-%YgUf1gL3@6I4n**_?KyHo<(%! z_5fi*R3x+Iq->W>b!{~NZGQa zN&$^UMQ7fE974xk{rTk(5azDHDN$X*15X24;1}Cmrt+I2bZ>UpCDi@Q$`F{PEcg+& zcJ0aNo9DZq1lUm|NLIwL%!gaiKb*8qp#@hq7o{!gy{7JMrS=F@_y6W@K=j4U5UOLc z$1-XeX{g~9&!1I5IQSk(tYD1S26b#6irrD-3P8`T{g6Z6thv*=LD@JC38f;Pm)c`ZyEhw4+_QwubEirrYEEsHc9Q!ku=~+WNQdSd zRg#-z0mRR=g0p;LLd?6-{EAbnTf4T29Es?sOoCOA=4_&VlFObK#k-ubGoxaAe4-s) z>I!32V1nHl>jH^^&bcpc0XU*Z8}kHmeEKktcBtjuxpg{6hN!R;ZBImjiS9-TQgp0m z=5{PP?AWi^)f9YDgKVSePWrb@&;ABl-QG7uD)rZl+z-qW((C5;H%NBa6G_Ko7IO6t zhmCQZ-?#tTRU{-wuVfkCrI&~n7j^VBy$5w(+Q{y(Q<)s(P6~j>qL)ndN+@5Lr^33a zao#2EcJlW@kf^q!X3@rF+MBKqjrYtv#U)i?kH()=oY8emLt~<$gPttZwpw%OYt{_Me3i+wL5?N>Ut5);xp% zV?Pxef)phL(^Vx2Wk53U7+2d6^@yW6|1Vx0JM)Yo#9rQ^U*zXUWl=o*@-1Sv>3VXq zcVC#XN(E1_=l)xbYGP##wt7=t1REJefo(uk_AtM44_NoL3@N#?T+#7#d?>rr{|{fs z$4vZ*l~z=y$2!}EHx)BZRMpXaIZ9Vc)*;(h<@XjWl9Rlb)r=ok@I-p) z7f8?H#bSs=v=Td(5c$wWOx*Ao7tr$X58Njt(_=CbX=RobZCnKG7V^RyYTv|>Ol_8O z48-h>^Yw2Lv$zlfj9UBGUTjT_6xo}yA1rZ-VT)Xb`Xlt7Rq(v^+%GRQSPsO7UBp(} zJLWgZjhCL^SiAe}YnL4y^+Zb~3S5>pQmdk*_ina2?9FSEPGK_-yFK8N8}l{h65@eK z4xRE3?`^*sPw8ZOocJWKU7M`PecTq1*^9*W%ml@v*Ix<@>$uWTrfNI7AFob(w}w|4 z#OLqIE)+dHX`25*k!C!R?iN&VPZWKVcc0^%t~JaQE6gM`C}Wd$>Eq)7rmqQuqQK0|46%}H|=8PQhg5Fubi7!38`=RHFWgleir^>&Z{tW zA&)Jiwmg1s^+cP(lTx%Q0pE1)&SNY-`R$xCa(d>aHxtSRr>Ht)?I(+e^Y0Znd06Hf z6o?Mb^A;w*CvN$lyAwNd`Ndaxu7H9%bDp?mrKE|g9kRjZ#RK_I6SgRQlAJwbhxL?p zD`s*T_hTDew@Ec>UKj65SAx+A%OS>22jBl+{5bvD?Y{_M_8c2fB%)4crY+D zo4RFJ#oadi%DK+?i}OoYBmL5k_x#fABtCl574e9}H$C6zRdBb`$Q{dqBqZuVRZX71 zZk|1U5j{sMRP~_D*`T69t%5}rML8B3Ra>+zvB@33yvBUd;qFtOJ*;N#=P(1K2D!&2h^LYva`n{8r~HcU!>5t&?Z)PKyO#lC)3$)Lznz4;j&Quu)T+1mT8$T-L0b?ns~?1e9oB;96j za%$ftHsPDk>-`meu_JFe?{&F?@I0_;5O-8Mc25lHNV3z32tu0ObbvhvBc(CgyUmi2 zF_SOm1w++xpUd+!cZbZS%NxpvG4qRh@iBrL1OHm5Y{|0|zJQ;SIO{~cz^3|!;Ai#S z*w|;4XWVY}dU9L1s2CQUv?td1rG%8^Af#vS=*wD?VRJi+xE6_1Z&XRBm?F&zWp)4#{UqnS=Z=gFCrZ9FMnPx4MMA8i-(@aQE+AG@WLe*)k1bH->zLN@vYXs z8GnoQSM zrdYy~d&c4j4HY;wzg>BKjf%&vGu=j>EpsXw32A1ab^=>-M7e_sehLS(6GK6>`(bX^*r6mVI)G{*ori3f@U&Cf@~KDbt{LGu}RL?N?N;P!Co^91MD zu0!Da5{E*lQ`AslSO8n$k>|^30H1r%bOcX(&RhgqmKB={0j&pGIkcjFY_;>bIve|%vAE9*4`I8#KeMsT9ckMn5dw_da4y4{i)7X z>93hA7OOg)f14I`D8*|+9Ue!*IeqUDKMIo3DtfwumW@T!u=ayfk8$GlDApD&F^F<$ zIyIN?K56d#lXYbO)=fi9%B^g>yT0>ywoFET=5Z|I!zxav{0S5M@!y{LnpB*l<0h9M z@#ERS&i2V^(p*b~S<6EZ&!!KzxuoL)tKWLkMLb9hR}qzIfzcWq+vl@QIXiB87#V98 zrMl3d)4miQ9mA6S97_(FPv4yRD(CgDmt^6UtTfNDw9{f%HP%$CBuwI)v5dSKb+}me ziPb*S`~ji=?GF7*j~tlIbrk{}u0?9XRwP?r56DSaV=bw%iVL(^H#zh{zC-OeL~R=z!c`p{sJ z#|K`ST$yed_GZ@=mVx=&$1X4+dN^?xq#h+*Selk|&&_03nH#rqRy~pm@m~7ziiz+w z_n+2r+}9&bgrQKdT7%TQgZy(+>*k=NSWw;&<7+E(tbl5h({6OvX<<+>HgVq)H=rOvKhv+A-eFIHC zvx8IFycpCYPWZRDJN);qM@s%KT^As^mPCwL2cB=A$jA(QH+m;GD!u}ZMJTX-y&39M=LNb8+=w`deMGjKh%_ZK$rdK9ScX_4egp?5UrFD+zp?QI&1M($DnXMJxHV{1E6sW&F!@7Yv}93V zhsZu=^5{z3OpeG|y+hLa@XY5C+2-w+DN8w}uB-hE2eo5+!&Y#A!#sP_xbEB$_OzVD zcOAQvHWn?9=xuyoLGA7bbYo%Ik#H4a1WBVlW(Y^ z5EGjxq9UwwY(!)FC_wXvh&(`Rw$0x%o#JbIXZQOxlT61!;l~WTEZ{)GRp`I$yZ6_a zmx$J!Mk=PvlY-yA`Yx(a!75G3@5?4IK!1qgibcaAvBieU7;Tp&_tw~&)CouT6N{Lw zDOkiKiZ`|_^_1Ow1M_c@NuHK!S<*XHA zHOa2EbXC?m#012mnP|E-1!pH9ke=F~rgX0NYffXrmUCw)uo7$IR##)3v2`ERv!-y5 zQ3!SQb4F@?4FXX|Im88GMgUW?v{HTA@Uv;-kL(8(Z~l`>#*PV-0d4w-<-(a;^GC$0 zT93G<-Jm`TI?9FAyDeP%)0-c-50>;%PP}lpk19JU|79{wG_^lLNSRvB3Zov9Re(m_ zVnb1GM~Hns7gSB{Pe zfj|jq!K_EA69w(uZL-llLrVWJ-~8oeJE%h+abM;qh~6hVyde&;Xdb+{V!~B$Q8Se4 zCPL^5UcjTkLTi7I>{NNx1QfYK?&a-zl7ofKb$PWjL&W}otoe%EX&Zq%^*=e}0NuLoilPw|Gh z%b&^sIW#9MhR#015?2_6F^qMq8VCnPpd74j+M+BZULZV_+If;p7@~-2!zK00DNf!M z?QL1pOudoAm#x;|7V$^>D4Rw0uXBf;;?$*x7XAra&oc7k*|BnIx!4m@rzhP!mulA)$VKLu_3W#zwbAkS95UXB^ ze2CF?fKtj#zwt{mNAmtvF~lqloJ61a)=kQQb=QAf2rjd2~g z*XbN)-_VpO03$N_S?zc@)qvJEu!4WM?n+k~XEhF~A|;#T_-bND4>&dBOF_BW-u z+h9~c&Xk;UJC7>fztC0Eg)fqm&&lsPN%N^LaQr~vr1dQ{{yOLAT$RE_UaC(hdbl?F z-|})crKN!Z8(#Qb;+(X~T!B3@h0ChfW!MOC+>I=!56q{Q!2)i_LceI6m)e^OusAO* zXCEYk=uG=`pc6s-!LbKD2LX7H$)+88QFj3J>x^2vw(;IzZ=|s?rRF&*D+0EvD@t1L zo`aVT?h3es1xwV`RRhH#3*WEO?|Y5ysLrP3cS%D3^a;Dm)GG&Bofg4W7`>F-v1 zUm0rKSZv%au?HbObAZ4HN=w$DuxYLopab29ayrF2_sE|6Hf57P+a-==S*QYxP-32O zgvHTXH5%!w^|o+@SBN?UuU(_f!1rISE*eQ`!YIlX>xzs@ie5>5=#aj43G{saF;z6& zdjV6OZIzeXy6YFW##-hG;MI2*AXtFSng2{vn~8@}ZSyCI73;2J$9u>NulS9sPXpB# zlH6dlBn;SBApsWAV%<#$(yK8wgMhp#31AatDsCmjBc|uj8?7!fJg$n9vV0o&{(t3` zQawKA1om86X=kk{brHR|pxlh6#|L#@YGoLMLVHs&A*7e#R?M>$^W4R2r?03nlllK+ z6gLZ{k8(1r5qT-2GefAzv3zpBew7bi35c#tk2p^qt)yzBrLaZ2hcF`z6xXK$6Z)tM z$VLMjK3zbmjE4T~dL)7n3x!qafE<9CZflixg3mgk_Ao1CoaJN3ms~q&=IoyJ<#h zZ2a5n(vQz_@SIQOP4cHaEmf>@DVEc3__ymYoXSaUMexFxqs3}%tJbd7--zU**u1AF zR4b-1MFljtiE49fQ5mG!4F;jDzt8KoS@yj0t|l~?Z(lRH;wh6*1*ADmT*ATAG=c~` zU8%={xiZU`cYgx_;6Y!c+~tMcB-4T|Kb+L3N+u+ssd0@v9j~;~+R;a|C1&N3!rcb4 zFBt9JnJWH(bsZe%)pUHzvV~X@tHFsnPU?b{RaEY;s+5KoL4KHLYC-@S0-niR4p5J# z$!{tM->YUXoWVx2{&k&Bp;GhE z>Xr>kVs%KH)>XZ$xDe>+K=pR^H0|{)ileMEDJ=E3hlUc54M<<)vhX+E_odAm24Elh zB7W~aq#Q8bH7}+;?SoOV06hl2;abTBG?1S_X;3I|(h@DHzD?`g4&u_X5{^?4g!2Zi zZr4y*qcWA(31hTxgK(oi0PniB`i(ewnTXgk12(?oCU}XVXgZ0zSvg6%)=)}Vb&>g$ zVb|mLC4PC_k=U^Y-d0#}HtV-yoZ8AaR-BZK3`ZU8Own+0}%6FBT07 zT6zOEAOpv;-SF?mJ@JQ1T#w|>;8a4BC3H?zkw%uM{Q`QFcEm>K-DfXh`TBf0CqeM# z_cQGj8|f;XxZcTB4p6F7;vhQ!yO7tvdNzY~B9U#}JIfsVpF#-g7EuXqz;=*LAqu4h zE7)$HS9Vla7brbQ!&ID?W9)IC3k;B83yfAVm%|>YoFVfkq;X18ih-C)c6RW(s$R8X z{W>VIcx_&qIR;e)^S@#Xc6M8lN`FDcPoso+;eeJX!WtMm-Qe$@JfFtyoAYcceGGbD z#Ni`iK(J53d>wG6Bny^(gVLTl2BZ`FYzmZY{gASIQV)!e@ypk4>svKb0md_#1bhU$ z|EpG6sx!==vp?so$?6u?&-rCI8QWI1%OPVoNWCG!2FEVR^(Xmj*B*mHnvKwgfz{|t zJo)H;g3BRoHwh3K!L}mKgK!5}-h)80;FluK!~5~0wAYpEyeKWZw?)wpz^kFDxPmzc z7`R|K>PEzk5d?X+;me}vr=ar4+!nf8M@p-9ywL4>Yk@WttIe`-D%cH3Q3zG(7Dcti zX5y8AG&}e|=Y1W11{S2mD<{*B3@jdWom-m~Hjh8J*-Zl4B~>ZhY4;bSg!wYzO3IT8 zbc83RqDv3=oXDo`yFk#62JN+jV!tW?KQ;80?;ea`1 ztaWN~sDQ9g`#L2nvF{#mn2D>;usfW9!N^Z33Zq*Q4M3ScKs$4$z+ zI}sA%gm$4?+c false; @override String toString() => title; diff --git a/lib/exchange/exchange_provider_description.dart b/lib/exchange/exchange_provider_description.dart index 2fd231085..e545f69ce 100644 --- a/lib/exchange/exchange_provider_description.dart +++ b/lib/exchange/exchange_provider_description.dart @@ -1,31 +1,30 @@ import 'package:cw_core/enumerable_item.dart'; -class ExchangeProviderDescription extends EnumerableItem - with Serializable { - const ExchangeProviderDescription({ - required String title, - required int raw, - required this.image, - this.horizontalLogo = false}) +class ExchangeProviderDescription extends EnumerableItem with Serializable { + const ExchangeProviderDescription( + {required String title, required int raw, required this.image, this.horizontalLogo = false}) : super(title: title, raw: raw); final bool horizontalLogo; final String image; - static const xmrto = ExchangeProviderDescription(title: 'XMR.TO', raw: 0, image: 'assets/images/xmrto.png'); + static const xmrto = + ExchangeProviderDescription(title: 'XMR.TO', raw: 0, image: 'assets/images/xmrto.png'); static const changeNow = ExchangeProviderDescription(title: 'ChangeNOW', raw: 1, image: 'assets/images/changenow.png'); static const morphToken = ExchangeProviderDescription(title: 'MorphToken', raw: 2, image: 'assets/images/morph.png'); - static const sideShift = + static const sideShift = ExchangeProviderDescription(title: 'SideShift', raw: 3, image: 'assets/images/sideshift.png'); - static const simpleSwap = - ExchangeProviderDescription(title: 'SimpleSwap', raw: 4, image: 'assets/images/simpleSwap.png'); + static const simpleSwap = ExchangeProviderDescription( + title: 'SimpleSwap', raw: 4, image: 'assets/images/simpleSwap.png'); - static const all = - ExchangeProviderDescription(title: 'All trades', raw: 5, image:''); + static const trocador = + ExchangeProviderDescription(title: 'Trocador', raw: 5, image: 'assets/images/trocador.png'); + + static const all = ExchangeProviderDescription(title: 'All trades', raw: 6, image: ''); static ExchangeProviderDescription deserialize({required int raw}) { switch (raw) { @@ -40,6 +39,8 @@ class ExchangeProviderDescription extends EnumerableItem case 4: return simpleSwap; case 5: + return trocador; + case 6: return all; default: throw Exception('Unexpected token: $raw for ExchangeProviderDescription deserialize'); diff --git a/lib/exchange/trocador/trocador_exchange_provider.dart b/lib/exchange/trocador/trocador_exchange_provider.dart new file mode 100644 index 000000000..18ea27895 --- /dev/null +++ b/lib/exchange/trocador/trocador_exchange_provider.dart @@ -0,0 +1,268 @@ +import 'dart:convert'; + +import 'package:cake_wallet/exchange/exchange_pair.dart'; +import 'package:cake_wallet/exchange/exchange_provider.dart'; +import 'package:cake_wallet/exchange/trade_state.dart'; +import 'package:cake_wallet/exchange/trocador/trocador_request.dart'; +import 'package:cw_core/crypto_currency.dart'; +import 'package:cake_wallet/exchange/trade_request.dart'; +import 'package:cake_wallet/exchange/trade.dart'; +import 'package:cake_wallet/exchange/limits.dart'; +import 'package:cake_wallet/exchange/exchange_provider_description.dart'; +import 'package:cake_wallet/.secrets.g.dart' as secrets; +import 'package:http/http.dart'; + +class TrocadorExchangeProvider extends ExchangeProvider { + TrocadorExchangeProvider() + : _lastUsedRateId = '', + super(pairList: _supportedPairs()); + + static const List _notSupported = [ + CryptoCurrency.xhv, + CryptoCurrency.dcr, + CryptoCurrency.oxt, + CryptoCurrency.pivx, + CryptoCurrency.scrt, + CryptoCurrency.stx, + CryptoCurrency.bttc, + CryptoCurrency.zaddr, + CryptoCurrency.usdcpoly, + CryptoCurrency.maticpoly, + ]; + + static List _supportedPairs() { + final supportedCurrencies = + CryptoCurrency.all.where((element) => !_notSupported.contains(element)).toList(); + + return supportedCurrencies + .map((i) => supportedCurrencies.map((k) => ExchangePair(from: i, to: k, reverse: true))) + .expand((i) => i) + .toList(); + } + + static const onionApiAuthority = 'trocadorfyhlu27aefre5u7zri66gudtzdyelymftvr4yjwcxhfaqsid.onion'; + static const clearNetAuthority = 'trocador.app'; + static const apiKey = secrets.trocadorApiKey; + static const newRatePath = '/api/new_rate'; + static const createTradePath = 'api/new_trade'; + static const tradePath = 'api/trade'; + String _lastUsedRateId; + + @override + Future checkIsAvailable() async => true; + + @override + Future createTrade({required TradeRequest request, required bool isFixedRateMode}) { + final _request = request as TrocadorRequest; + return _createTrade(request: _request, isFixedRateMode: isFixedRateMode); + } + + Future _createTrade({ + required TrocadorRequest request, + required bool isFixedRateMode, + }) async { + final params = { + 'api_key': apiKey, + 'ticker_from': request.from.title.toLowerCase(), + 'ticker_to': request.to.title.toLowerCase(), + 'network_from': _networkFor(request.from), + 'network_to': _networkFor(request.to), + 'payment': isFixedRateMode ? 'True' : 'False', + 'min_kycrating': 'C', + 'markup': '3', + 'best_only': 'True', + if (!isFixedRateMode) 'amount_from': request.fromAmount, + if (isFixedRateMode) 'amount_to': request.toAmount, + 'address': request.address, + 'refund': request.refundAddress + }; + + if (isFixedRateMode) { + await fetchRate( + from: request.from, + to: request.to, + amount: double.tryParse(request.toAmount) ?? 0, + isFixedRateMode: true, + isReceiveAmount: true, + ); + params['id'] = _lastUsedRateId; + } + + final String apiAuthority = shouldUseOnionAddress ? await _getAuthority() : clearNetAuthority; + + final uri = Uri.https(apiAuthority, createTradePath, params); + final response = await get(uri); + + if (response.statusCode == 400) { + final responseJSON = json.decode(response.body) as Map; + final error = responseJSON['error'] as String; + final message = responseJSON['message'] as String; + throw Exception('${error}\n$message'); + } + + if (response.statusCode != 200) { + throw Exception('Unexpected http status: ${response.statusCode}'); + } + + final responseJSON = json.decode(response.body) as Map; + final id = responseJSON['trade_id'] as String; + final inputAddress = responseJSON['address_provider'] as String; + final refundAddress = responseJSON['refund_address'] as String; + final status = responseJSON['status'] as String; + final state = TradeState.deserialize(raw: status); + final payoutAddress = responseJSON['address_user'] as String; + final date = responseJSON['date'] as String; + + return Trade( + id: id, + from: request.from, + to: request.to, + provider: description, + inputAddress: inputAddress, + refundAddress: refundAddress, + state: state, + createdAt: DateTime.tryParse(date)?.toLocal(), + amount: responseJSON['amount_from']?.toString() ?? request.fromAmount, + payoutAddress: payoutAddress); + } + + @override + ExchangeProviderDescription get description => ExchangeProviderDescription.trocador; + + @override + Future fetchLimits( + {required CryptoCurrency from, + required CryptoCurrency to, + required bool isFixedRateMode}) async { + //TODO: implement limits from trocador api + return Limits( + min: 0.0, + ); + } + + @override + Future fetchRate( + {required CryptoCurrency from, + required CryptoCurrency to, + required double amount, + required bool isFixedRateMode, + required bool isReceiveAmount}) async { + try { + if (amount == 0) { + return 0.0; + } + + final String apiAuthority = shouldUseOnionAddress ? await _getAuthority() : clearNetAuthority; + + final params = { + 'api_key': apiKey, + 'ticker_from': from.title.toLowerCase(), + 'ticker_to': to.title.toLowerCase(), + 'network_from': _networkFor(from), + 'network_to': _networkFor(to), + 'amount_from': amount.toString(), + 'amount_to': amount.toString(), + 'payment': isFixedRateMode ? 'True' : 'False', + 'min_kycrating': 'C', + 'markup': '3', + 'best_only': 'True', + }; + + final uri = Uri.https(apiAuthority, newRatePath, params); + final response = await get(uri); + final responseJSON = json.decode(response.body) as Map; + final fromAmount = double.parse(responseJSON['amount_from'].toString()); + final toAmount = double.parse(responseJSON['amount_to'].toString()); + final rateId = responseJSON['trade_id'] as String? ?? ''; + + if (rateId.isNotEmpty) { + _lastUsedRateId = rateId; + } + + return isReceiveAmount ? (amount / fromAmount) : (toAmount / amount); + } catch (e) { + print(e.toString()); + return 0.0; + } + } + + @override + Future findTradeById({required String id}) async { + final String apiAuthority = shouldUseOnionAddress ? await _getAuthority() : clearNetAuthority; + final uri = Uri.https(apiAuthority, tradePath, {'api_key': apiKey, 'id': id}); + return get(uri).then((response) { + if (response.statusCode != 200) { + throw Exception('Unexpected http status: ${response.statusCode}'); + } + + final responseListJson = json.decode(response.body) as List; + + final responseJSON = responseListJson.first; + final id = responseJSON['trade_id'] as String; + final inputAddress = responseJSON['address_user'] as String; + final refundAddress = responseJSON['refund_address'] as String; + final payoutAddress = responseJSON['address_provider'] as String; + final fromAmount = responseJSON['amount_from']?.toString() ?? '0'; + final from = CryptoCurrency.fromString(responseJSON['ticker_from'] as String); + final to = CryptoCurrency.fromString(responseJSON['ticker_to'] as String); + final state = TradeState.deserialize(raw: responseJSON['status'] as String); + final date = DateTime.parse(responseJSON['date'] as String); + + return Trade( + id: id, + from: from, + to: to, + provider: description, + inputAddress: inputAddress, + refundAddress: refundAddress, + createdAt: date, + amount: fromAmount, + state: state, + payoutAddress: payoutAddress, + ); + }); + } + + @override + bool get isAvailable => true; + + @override + bool get isEnabled => true; + + @override + bool get supportsFixedRate => true; + + @override + bool get shouldUseOnionAddress => true; + + @override + String get title => 'Trocador'; + + String _networkFor(CryptoCurrency currency) { + switch (currency) { + case CryptoCurrency.usdt: + return CryptoCurrency.btc.title.toLowerCase(); + default: + return currency.tag != null ? _normalizeTag(currency.tag!) : 'Mainnet'; + } + } + + String _normalizeTag(String tag) { + switch (tag) { + case 'ETH': + return 'ERC20'; + default: + return tag.toLowerCase(); + } + } + + Future _getAuthority() async { + try { + final uri = Uri.https(onionApiAuthority, '/api/trade'); + await get(uri); + return onionApiAuthority; + } catch (e) { + return clearNetAuthority; + } + } +} diff --git a/lib/exchange/trocador/trocador_request.dart b/lib/exchange/trocador/trocador_request.dart new file mode 100644 index 000000000..fbb8fdc84 --- /dev/null +++ b/lib/exchange/trocador/trocador_request.dart @@ -0,0 +1,21 @@ +import 'package:cake_wallet/exchange/trade_request.dart'; +import 'package:cw_core/crypto_currency.dart'; + +class TrocadorRequest extends TradeRequest { + TrocadorRequest( + {required this.from, + required this.to, + required this.address, + required this.fromAmount, + required this.toAmount, + required this.refundAddress, + required this.isReverse}); + + CryptoCurrency from; + CryptoCurrency to; + String address; + String fromAmount; + String toAmount; + String refundAddress; + bool isReverse; +} diff --git a/lib/src/screens/dashboard/widgets/trade_row.dart b/lib/src/screens/dashboard/widgets/trade_row.dart index 21952140e..3b613b0e2 100644 --- a/lib/src/screens/dashboard/widgets/trade_row.dart +++ b/lib/src/screens/dashboard/widgets/trade_row.dart @@ -9,7 +9,8 @@ class TradeRow extends StatelessWidget { required this.to, required this.createdAtFormattedDate, this.onTap, - this.formattedAmount,}); + this.formattedAmount, + }); final VoidCallback? onTap; final ExchangeProviderDescription provider; @@ -35,47 +36,40 @@ class TradeRow extends StatelessWidget { SizedBox(width: 12), Expanded( child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text('${from.toString()} → ${to.toString()}', - style: TextStyle( - fontSize: 16, - fontWeight: FontWeight.w500, - color: Theme.of(context).accentTextTheme!.headline2!.backgroundColor! - )), - formattedAmount != null - ? Text(formattedAmount! + ' ' + amountCrypto, - style: TextStyle( - fontSize: 16, - fontWeight: FontWeight.w500, - color: Theme.of(context).accentTextTheme!.headline2!.backgroundColor! - )) - : Container() - ]), - SizedBox(height: 5), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - if (createdAtFormattedDate != null) - Text(createdAtFormattedDate!, - style: TextStyle( - fontSize: 14, - color: Theme.of(context).textTheme! - .overline!.backgroundColor!)) - ]) - ], - ) - ) + mainAxisSize: MainAxisSize.min, + children: [ + Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ + Text('${from.toString()} → ${to.toString()}', + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w500, + color: Theme.of(context).accentTextTheme!.headline2!.backgroundColor!)), + formattedAmount != null + ? Text(formattedAmount! + ' ' + amountCrypto, + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w500, + color: + Theme.of(context).accentTextTheme!.headline2!.backgroundColor!)) + : Container() + ]), + SizedBox(height: 5), + Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ + if (createdAtFormattedDate != null) + Text(createdAtFormattedDate!, + style: TextStyle( + fontSize: 14, + color: Theme.of(context).textTheme!.overline!.backgroundColor!)) + ]) + ], + )) ], ), )); } - Image? _getPoweredImage(ExchangeProviderDescription provider) { - Image? image; + Widget? _getPoweredImage(ExchangeProviderDescription provider) { + Widget? image; switch (provider) { case ExchangeProviderDescription.xmrto: @@ -93,10 +87,15 @@ class TradeRow extends StatelessWidget { case ExchangeProviderDescription.simpleSwap: image = Image.asset('assets/images/simpleSwap.png', width: 36, height: 36); break; + case ExchangeProviderDescription.trocador: + image = ClipRRect( + borderRadius: BorderRadius.circular(50), + child: Image.asset('assets/images/trocador.png', width: 36, height: 36)); + break; default: image = null; } return image; } -} \ No newline at end of file +} diff --git a/lib/src/screens/new_wallet/advanced_privacy_settings_page.dart b/lib/src/screens/new_wallet/advanced_privacy_settings_page.dart index 6c2f996df..2a9f4d291 100644 --- a/lib/src/screens/new_wallet/advanced_privacy_settings_page.dart +++ b/lib/src/screens/new_wallet/advanced_privacy_settings_page.dart @@ -1,7 +1,11 @@ +import 'package:cake_wallet/entities/fiat_api_mode.dart'; import 'package:cake_wallet/src/screens/nodes/widgets/node_form.dart'; +import 'package:cake_wallet/src/screens/settings/widgets/settings_choices_cell.dart'; import 'package:cake_wallet/src/screens/settings/widgets/settings_switcher_cell.dart'; import 'package:cake_wallet/view_model/node_list/node_create_or_edit_view_model.dart'; import 'package:cake_wallet/view_model/advanced_privacy_settings_view_model.dart'; +import 'package:cake_wallet/view_model/settings/choices_list_item.dart'; +import 'package:cake_wallet/view_model/settings/switcher_list_item.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:flutter/material.dart'; import 'package:cake_wallet/generated/i18n.dart'; @@ -48,9 +52,14 @@ class _AdvancedPrivacySettingsBodyState extends State>().map( (item) => Observer( - builder: (_) => SettingsSwitcherCell( + builder: (_) => SettingsChoicesCell(item) + ), + ), + ...widget.privacySettingsViewModel.settings.whereType().map( + (item) => Observer( + builder: (_) => SettingsSwitcherCell( title: item.title, value: item.value(), onValueChange: item.onValueChange, diff --git a/lib/src/screens/settings/privacy_page.dart b/lib/src/screens/settings/privacy_page.dart index 2f15cc225..974f9a3d7 100644 --- a/lib/src/screens/settings/privacy_page.dart +++ b/lib/src/screens/settings/privacy_page.dart @@ -1,6 +1,9 @@ +import 'package:cake_wallet/entities/fiat_api_mode.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; +import 'package:cake_wallet/src/screens/settings/widgets/settings_choices_cell.dart'; import 'package:cake_wallet/src/screens/settings/widgets/settings_switcher_cell.dart'; +import 'package:cake_wallet/view_model/settings/choices_list_item.dart'; import 'package:cake_wallet/view_model/settings/privacy_settings_view_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; @@ -21,18 +24,22 @@ class PrivacyPage extends BasePage { return Column( mainAxisSize: MainAxisSize.min, children: [ - SettingsSwitcherCell( - title: S.current.disable_fiat, - value: _privacySettingsViewModel.isFiatDisabled, - onValueChange: (BuildContext context, bool value) { - _privacySettingsViewModel.setFiatMode(value); - }), - SettingsSwitcherCell( - title: S.current.disable_exchange, - value: _privacySettingsViewModel.disableExchange, - onValueChange: (BuildContext context, bool value) { - _privacySettingsViewModel.setEnableExchange(value); - }), + SettingsChoicesCell( + ChoicesListItem( + title: S.current.fiat_api, + items: FiatApiMode.all, + selectedItem: _privacySettingsViewModel.fiatApi, + onItemSelected: (FiatApiMode mode) => _privacySettingsViewModel.setFiatMode(mode), + ), + ), + SettingsChoicesCell( + ChoicesListItem( + title: S.current.exchange, + items: FiatApiMode.all, + selectedItem: _privacySettingsViewModel.exchangeStatus, + onItemSelected: (FiatApiMode mode) => _privacySettingsViewModel.setEnableExchange(mode), + ), + ), SettingsSwitcherCell( title: S.current.settings_save_recipient_address, value: _privacySettingsViewModel.shouldSaveRecipientAddress, diff --git a/lib/store/dashboard/trade_filter_store.dart b/lib/store/dashboard/trade_filter_store.dart index 87fa749a9..c772a35d6 100644 --- a/lib/store/dashboard/trade_filter_store.dart +++ b/lib/store/dashboard/trade_filter_store.dart @@ -12,7 +12,8 @@ abstract class TradeFilterStoreBase with Store { displayChangeNow = true, displaySideShift = true, displayMorphToken = true, - displaySimpleSwap = true; + displaySimpleSwap = true, + displayTrocador = true; @observable bool displayXMRTO; @@ -29,8 +30,11 @@ abstract class TradeFilterStoreBase with Store { @observable bool displaySimpleSwap; + @observable + bool displayTrocador; + @computed - bool get displayAllTrades => displayChangeNow && displaySideShift && displaySimpleSwap; + bool get displayAllTrades => displayChangeNow && displaySideShift && displaySimpleSwap && displayTrocador; @action void toggleDisplayExchange(ExchangeProviderDescription provider) { @@ -50,6 +54,9 @@ abstract class TradeFilterStoreBase with Store { case ExchangeProviderDescription.morphToken: displayMorphToken = !displayMorphToken; break; + case ExchangeProviderDescription.trocador: + displayTrocador = !displayTrocador; + break; case ExchangeProviderDescription.all: if (displayAllTrades) { displayChangeNow = false; @@ -57,12 +64,14 @@ abstract class TradeFilterStoreBase with Store { displayXMRTO = false; displayMorphToken = false; displaySimpleSwap = false; + displayTrocador = false; } else { displayChangeNow = true; displaySideShift = true; displayXMRTO = true; displayMorphToken = true; displaySimpleSwap = true; + displayTrocador = true; } break; } @@ -88,7 +97,8 @@ abstract class TradeFilterStoreBase with Store { ExchangeProviderDescription.morphToken) ||(displaySimpleSwap && item.trade.provider == - ExchangeProviderDescription.simpleSwap)) + ExchangeProviderDescription.simpleSwap) + ||(displayTrocador && item.trade.provider == ExchangeProviderDescription.trocador)) .toList() : _trades; } diff --git a/lib/store/settings_store.dart b/lib/store/settings_store.dart index b10e0d08d..989fdae33 100644 --- a/lib/store/settings_store.dart +++ b/lib/store/settings_store.dart @@ -31,7 +31,7 @@ abstract class SettingsStoreBase with Store { required bool initialSaveRecipientAddress, required FiatApiMode initialFiatMode, required bool initialAllowBiometricalAuthentication, - required bool initialExchangeEnabled, + required FiatApiMode initialExchangeStatus, required ThemeBase initialTheme, required int initialPinLength, required String initialLanguageCode, @@ -53,7 +53,7 @@ abstract class SettingsStoreBase with Store { shouldSaveRecipientAddress = initialSaveRecipientAddress, fiatApiMode = initialFiatMode, allowBiometricalAuthentication = initialAllowBiometricalAuthentication, - disableExchange = initialExchangeEnabled, + exchangeStatus = initialExchangeStatus, currentTheme = initialTheme, pinCodeLength = initialPinLength, languageCode = initialLanguageCode, @@ -153,9 +153,9 @@ abstract class SettingsStoreBase with Store { PreferencesKey.currentBalanceDisplayModeKey, mode.serialize())); reaction( - (_) => disableExchange, - (bool disableExchange) => sharedPreferences.setBool( - PreferencesKey.disableExchangeKey, disableExchange)); + (_) => exchangeStatus, + (FiatApiMode mode) => sharedPreferences.setInt( + PreferencesKey.exchangeStatusKey, mode.serialize())); this .nodes @@ -192,7 +192,7 @@ abstract class SettingsStoreBase with Store { bool allowBiometricalAuthentication; @observable - bool disableExchange; + FiatApiMode exchangeStatus; @observable ThemeBase currentTheme; @@ -284,8 +284,9 @@ abstract class SettingsStoreBase with Store { final allowBiometricalAuthentication = sharedPreferences .getBool(PreferencesKey.allowBiometricalAuthenticationKey) ?? false; - final disableExchange = sharedPreferences - .getBool(PreferencesKey.disableExchangeKey) ?? false; + final exchangeStatus = FiatApiMode.deserialize( + raw: sharedPreferences + .getInt(PreferencesKey.exchangeStatusKey) ?? FiatApiMode.enabled.raw); final legacyTheme = (sharedPreferences.getBool(PreferencesKey.isDarkThemeLegacy) ?? false) ? ThemeType.dark.index @@ -354,7 +355,7 @@ abstract class SettingsStoreBase with Store { initialSaveRecipientAddress: shouldSaveRecipientAddress, initialFiatMode: currentFiatApiMode, initialAllowBiometricalAuthentication: allowBiometricalAuthentication, - initialExchangeEnabled: disableExchange, + initialExchangeStatus: exchangeStatus, initialTheme: savedTheme, actionlistDisplayMode: actionListDisplayMode, initialPinLength: pinLength, @@ -400,7 +401,9 @@ abstract class SettingsStoreBase with Store { allowBiometricalAuthentication = sharedPreferences .getBool(PreferencesKey.allowBiometricalAuthenticationKey) ?? allowBiometricalAuthentication; - disableExchange = sharedPreferences.getBool(PreferencesKey.disableExchangeKey) ?? disableExchange; + exchangeStatus = FiatApiMode.deserialize( + raw: sharedPreferences + .getInt(PreferencesKey.exchangeStatusKey) ?? FiatApiMode.enabled.raw); final legacyTheme = (sharedPreferences.getBool(PreferencesKey.isDarkThemeLegacy) ?? false) ? ThemeType.dark.index diff --git a/lib/view_model/advanced_privacy_settings_view_model.dart b/lib/view_model/advanced_privacy_settings_view_model.dart index f800e3418..80b62fdd0 100644 --- a/lib/view_model/advanced_privacy_settings_view_model.dart +++ b/lib/view_model/advanced_privacy_settings_view_model.dart @@ -1,5 +1,7 @@ import 'package:cake_wallet/entities/fiat_api_mode.dart'; import 'package:cake_wallet/store/settings_store.dart'; +import 'package:cake_wallet/view_model/settings/choices_list_item.dart'; +import 'package:cake_wallet/view_model/settings/settings_list_item.dart'; import 'package:cake_wallet/view_model/settings/switcher_list_item.dart'; import 'package:cw_core/wallet_type.dart'; import 'package:mobx/mobx.dart'; @@ -14,18 +16,19 @@ abstract class AdvancedPrivacySettingsViewModelBase with Store { AdvancedPrivacySettingsViewModelBase(this.type, this._settingsStore) : _addCustomNode = false { settings = [ - SwitcherListItem( - title: S.current.disable_fiat, - value: () => _settingsStore.fiatApiMode == FiatApiMode.disabled, - onValueChange: (_, bool value) => setFiatMode(value), - ), - SwitcherListItem( - title: S.current.disable_exchange, - value: () => _settingsStore.disableExchange, - onValueChange: (_, bool value) { - _settingsStore.disableExchange = value; - }, - ), + ChoicesListItem( + title: S.current.fiat_api, + items: FiatApiMode.all, + selectedItem: _settingsStore.fiatApiMode, + onItemSelected: (FiatApiMode mode) => setFiatMode(mode), + ), + + ChoicesListItem( + title: S.current.exchange, + items: FiatApiMode.all, + selectedItem: _settingsStore.exchangeStatus, + onItemSelected: (FiatApiMode mode) => _settingsStore.exchangeStatus = mode, + ), SwitcherListItem( title: S.current.add_custom_node, value: () => _addCustomNode, @@ -34,7 +37,7 @@ abstract class AdvancedPrivacySettingsViewModelBase with Store { ]; } - late List settings; + late List settings; @observable bool _addCustomNode = false; @@ -46,11 +49,7 @@ abstract class AdvancedPrivacySettingsViewModelBase with Store { bool get addCustomNode => _addCustomNode; @action - void setFiatMode(bool value) { - if (value) { - _settingsStore.fiatApiMode = FiatApiMode.disabled; - return; - } - _settingsStore.fiatApiMode = FiatApiMode.enabled; + void setFiatMode(FiatApiMode value) { + _settingsStore.fiatApiMode = value; } } diff --git a/lib/view_model/dashboard/dashboard_view_model.dart b/lib/view_model/dashboard/dashboard_view_model.dart index 57720d92f..dab2bafd1 100644 --- a/lib/view_model/dashboard/dashboard_view_model.dart +++ b/lib/view_model/dashboard/dashboard_view_model.dart @@ -1,3 +1,4 @@ +import 'package:cake_wallet/entities/fiat_api_mode.dart'; import 'package:cake_wallet/wallet_type_utils.dart'; import 'package:cw_core/transaction_history.dart'; import 'package:cw_core/balance.dart'; @@ -96,6 +97,11 @@ abstract class DashboardViewModelBase with Store { caption: ExchangeProviderDescription.simpleSwap.title, onChanged: () => tradeFilterStore .toggleDisplayExchange(ExchangeProviderDescription.simpleSwap)), + FilterItem( + value: () => tradeFilterStore.displayTrocador, + caption: ExchangeProviderDescription.trocador.title, + onChanged: () => tradeFilterStore + .toggleDisplayExchange(ExchangeProviderDescription.trocador)), ] }, subname = '', @@ -268,7 +274,7 @@ abstract class DashboardViewModelBase with Store { settingsStore.shouldShowYatPopup = shouldShow; @computed - bool get isEnabledExchangeAction => !settingsStore.disableExchange; + bool get isEnabledExchangeAction => settingsStore.exchangeStatus != FiatApiMode.disabled; @observable bool hasExchangeAction; diff --git a/lib/view_model/exchange/exchange_trade_view_model.dart b/lib/view_model/exchange/exchange_trade_view_model.dart index 541b74396..94c874979 100644 --- a/lib/view_model/exchange/exchange_trade_view_model.dart +++ b/lib/view_model/exchange/exchange_trade_view_model.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'package:cake_wallet/exchange/sideshift/sideshift_exchange_provider.dart'; import 'package:cake_wallet/exchange/simpleswap/simpleswap_exchange_provider.dart'; +import 'package:cake_wallet/exchange/trocador/trocador_exchange_provider.dart'; import 'package:cw_core/wallet_base.dart'; import 'package:cw_core/crypto_currency.dart'; import 'package:cake_wallet/exchange/changenow/changenow_exchange_provider.dart'; @@ -46,6 +47,9 @@ abstract class ExchangeTradeViewModelBase with Store { case ExchangeProviderDescription.simpleSwap: _provider = SimpleSwapExchangeProvider(); break; + case ExchangeProviderDescription.trocador: + _provider = TrocadorExchangeProvider(); + break; } _updateItems(); diff --git a/lib/view_model/exchange/exchange_view_model.dart b/lib/view_model/exchange/exchange_view_model.dart index 5c1f696b8..f9f5683d9 100644 --- a/lib/view_model/exchange/exchange_view_model.dart +++ b/lib/view_model/exchange/exchange_view_model.dart @@ -7,6 +7,8 @@ import 'package:cake_wallet/exchange/sideshift/sideshift_exchange_provider.dart' import 'package:cake_wallet/exchange/sideshift/sideshift_request.dart'; import 'package:cake_wallet/exchange/simpleswap/simpleswap_exchange_provider.dart'; import 'package:cake_wallet/exchange/simpleswap/simpleswap_request.dart'; +import 'package:cake_wallet/exchange/trocador/trocador_exchange_provider.dart'; +import 'package:cake_wallet/exchange/trocador/trocador_request.dart'; import 'package:cw_core/transaction_priority.dart'; import 'package:cw_core/wallet_base.dart'; import 'package:cw_core/crypto_currency.dart'; @@ -60,7 +62,7 @@ abstract class ExchangeViewModelBase with Store { limitsState = LimitsInitialState(), receiveCurrency = wallet.currency, depositCurrency = wallet.currency, - providerList = [ChangeNowExchangeProvider(), SideShiftExchangeProvider(), SimpleSwapExchangeProvider()], + providerList = [ChangeNowExchangeProvider(), SideShiftExchangeProvider(), SimpleSwapExchangeProvider(), TrocadorExchangeProvider()], selectedProviders = ObservableList() { const excludeDepositCurrencies = [CryptoCurrency.btt, CryptoCurrency.nano]; const excludeReceiveCurrencies = [CryptoCurrency.xlm, CryptoCurrency.xrp, @@ -449,6 +451,18 @@ abstract class ExchangeViewModelBase with Store { amount = isFixedRateMode ? receiveAmount : depositAmount; } + if (provider is TrocadorExchangeProvider) { + request = TrocadorRequest( + from: depositCurrency, + to: receiveCurrency, + fromAmount: depositAmount.replaceAll(',', '.'), + toAmount: receiveAmount.replaceAll(',', '.'), + refundAddress: depositAddress, + address: receiveAddress, + isReverse: isFixedRateMode); + amount = isFixedRateMode ? receiveAmount : depositAmount; + } + amount = amount.replaceAll(',', '.'); if (limitsState is LimitsLoadedSuccessfully) { diff --git a/lib/view_model/settings/privacy_settings_view_model.dart b/lib/view_model/settings/privacy_settings_view_model.dart index f8c3e5b50..db345d0f2 100644 --- a/lib/view_model/settings/privacy_settings_view_model.dart +++ b/lib/view_model/settings/privacy_settings_view_model.dart @@ -12,27 +12,23 @@ abstract class PrivacySettingsViewModelBase with Store { final SettingsStore _settingsStore; @computed - bool get disableExchange => _settingsStore.disableExchange; + FiatApiMode get exchangeStatus => _settingsStore.exchangeStatus; @computed bool get shouldSaveRecipientAddress => _settingsStore.shouldSaveRecipientAddress; @computed - bool get isFiatDisabled => _settingsStore.fiatApiMode == FiatApiMode.disabled; + FiatApiMode get fiatApi => _settingsStore.fiatApiMode; @action void setShouldSaveRecipientAddress(bool value) => _settingsStore.shouldSaveRecipientAddress = value; @action - void setEnableExchange(bool value) => _settingsStore.disableExchange = value; + void setEnableExchange(FiatApiMode value) => _settingsStore.exchangeStatus = value; @action - void setFiatMode(bool value) { - if (value) { - _settingsStore.fiatApiMode = FiatApiMode.disabled; - return; - } - _settingsStore.fiatApiMode = FiatApiMode.enabled; + void setFiatMode(FiatApiMode value) { + _settingsStore.fiatApiMode = value; } } diff --git a/lib/view_model/trade_details_view_model.dart b/lib/view_model/trade_details_view_model.dart index 5a1f78774..97bb40fe4 100644 --- a/lib/view_model/trade_details_view_model.dart +++ b/lib/view_model/trade_details_view_model.dart @@ -6,6 +6,7 @@ import 'package:cake_wallet/exchange/morphtoken/morphtoken_exchange_provider.dar import 'package:cake_wallet/exchange/sideshift/sideshift_exchange_provider.dart'; import 'package:cake_wallet/exchange/simpleswap/simpleswap_exchange_provider.dart'; import 'package:cake_wallet/exchange/trade.dart'; +import 'package:cake_wallet/exchange/trocador/trocador_exchange_provider.dart'; import 'package:cake_wallet/exchange/xmrto/xmrto_exchange_provider.dart'; import 'package:cake_wallet/store/settings_store.dart'; import 'package:cake_wallet/utils/date_formatter.dart'; @@ -48,6 +49,9 @@ abstract class TradeDetailsViewModelBase with Store { case ExchangeProviderDescription.simpleSwap: _provider = SimpleSwapExchangeProvider(); break; + case ExchangeProviderDescription.trocador: + _provider = TrocadorExchangeProvider(); + break; } items = ObservableList(); diff --git a/tool/utils/secret_key.dart b/tool/utils/secret_key.dart index e5202a829..ff74da8a7 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('trocadorApiKey', () => ''), ]; final String name; From 37045578c27f3edc368fd4a5f5b71f148af62815 Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Mon, 6 Feb 2023 21:42:17 +0200 Subject: [PATCH 102/190] Check if fixed rate --- lib/exchange/trocador/trocador_exchange_provider.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/exchange/trocador/trocador_exchange_provider.dart b/lib/exchange/trocador/trocador_exchange_provider.dart index 18ea27895..6babc8e94 100644 --- a/lib/exchange/trocador/trocador_exchange_provider.dart +++ b/lib/exchange/trocador/trocador_exchange_provider.dart @@ -160,8 +160,8 @@ class TrocadorExchangeProvider extends ExchangeProvider { 'ticker_to': to.title.toLowerCase(), 'network_from': _networkFor(from), 'network_to': _networkFor(to), - 'amount_from': amount.toString(), - 'amount_to': amount.toString(), + if (!isFixedRateMode) 'amount_from': amount.toString(), + if (isFixedRateMode) 'amount_to': amount.toString(), 'payment': isFixedRateMode ? 'True' : 'False', 'min_kycrating': 'C', 'markup': '3', From a5179939615ddbb2314090abda4d2b466daa19de Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Mon, 6 Feb 2023 22:20:46 +0200 Subject: [PATCH 103/190] add trocador key to secrets --- .github/workflows/pr_test_build.yml | 2 ++ lib/exchange/trocador/trocador_exchange_provider.dart | 5 +++-- tool/utils/secret_key.dart | 1 + 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr_test_build.yml b/.github/workflows/pr_test_build.yml index c3c61865f..1766bbe86 100644 --- a/.github/workflows/pr_test_build.yml +++ b/.github/workflows/pr_test_build.yml @@ -111,6 +111,8 @@ jobs: 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 + echo "const trocadorApiKey = '${{ secrets.TROCADOR_API_KEY }}';" >> lib/.secrets.g.dart + echo "const trocadorExchangeMarkup = '${{ secrets.TROCADOR_EXCHANGE_MARKUP }}';" >> 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/lib/exchange/trocador/trocador_exchange_provider.dart b/lib/exchange/trocador/trocador_exchange_provider.dart index 6babc8e94..9785b67c2 100644 --- a/lib/exchange/trocador/trocador_exchange_provider.dart +++ b/lib/exchange/trocador/trocador_exchange_provider.dart @@ -43,6 +43,7 @@ class TrocadorExchangeProvider extends ExchangeProvider { static const onionApiAuthority = 'trocadorfyhlu27aefre5u7zri66gudtzdyelymftvr4yjwcxhfaqsid.onion'; static const clearNetAuthority = 'trocador.app'; static const apiKey = secrets.trocadorApiKey; + static const markup = secrets.trocadorExchangeMarkup; static const newRatePath = '/api/new_rate'; static const createTradePath = 'api/new_trade'; static const tradePath = 'api/trade'; @@ -69,7 +70,7 @@ class TrocadorExchangeProvider extends ExchangeProvider { 'network_to': _networkFor(request.to), 'payment': isFixedRateMode ? 'True' : 'False', 'min_kycrating': 'C', - 'markup': '3', + 'markup': markup, 'best_only': 'True', if (!isFixedRateMode) 'amount_from': request.fromAmount, if (isFixedRateMode) 'amount_to': request.toAmount, @@ -164,7 +165,7 @@ class TrocadorExchangeProvider extends ExchangeProvider { if (isFixedRateMode) 'amount_to': amount.toString(), 'payment': isFixedRateMode ? 'True' : 'False', 'min_kycrating': 'C', - 'markup': '3', + 'markup': markup, 'best_only': 'True', }; diff --git a/tool/utils/secret_key.dart b/tool/utils/secret_key.dart index 8ac236088..68308d1c6 100644 --- a/tool/utils/secret_key.dart +++ b/tool/utils/secret_key.dart @@ -25,6 +25,7 @@ class SecretKey { SecretKey('onramperApiKey', () => ''), SecretKey('ioniaClientId', () => ''), SecretKey('trocadorApiKey', () => ''), + SecretKey('trocadorExchangeMarkup', () => '3'), SecretKey('twitterBearerToken', () => ''), ]; From bf73fb24e575faaedadea451ac86dd9a73d8acf9 Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Mon, 6 Feb 2023 23:18:54 +0200 Subject: [PATCH 104/190] [skip ci] remove default value for trocador --- tool/utils/secret_key.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tool/utils/secret_key.dart b/tool/utils/secret_key.dart index 68308d1c6..c27bc5ff7 100644 --- a/tool/utils/secret_key.dart +++ b/tool/utils/secret_key.dart @@ -25,7 +25,7 @@ class SecretKey { SecretKey('onramperApiKey', () => ''), SecretKey('ioniaClientId', () => ''), SecretKey('trocadorApiKey', () => ''), - SecretKey('trocadorExchangeMarkup', () => '3'), + SecretKey('trocadorExchangeMarkup', () => ''), SecretKey('twitterBearerToken', () => ''), ]; From a8025ffbec13f05009c5f688464544a72223fdb5 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Tue, 7 Feb 2023 16:53:57 +0200 Subject: [PATCH 105/190] Add cool-down of 7 days between reports --- lib/entities/preferences_key.dart | 1 + lib/utils/exception_handler.dart | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) 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/utils/exception_handler.dart b/lib/utils/exception_handler.dart index b8d0089ec..0886cd8de 100644 --- a/lib/utils/exception_handler.dart +++ b/lib/utils/exception_handler.dart @@ -1,6 +1,7 @@ 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'; @@ -9,6 +10,7 @@ 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; @@ -59,7 +61,7 @@ class ExceptionHandler { } } - static void onError(FlutterErrorDetails errorDetails) { + static void onError(FlutterErrorDetails errorDetails) async { if (kDebugMode) { FlutterError.presentError(errorDetails); return; @@ -71,11 +73,22 @@ class ExceptionHandler { _saveException(errorDetails.exception.toString(), errorDetails.stack); - if (_hasError) { + final sharedPrefs = await SharedPreferences.getInstance(); + + final lastPopupDate = + DateTime.tryParse(sharedPrefs.getString(PreferencesKey.lastPopupDate) ?? '') ?? + DateTime.parse("2001-01-01"); + + final durationSinceLastReport = DateTime.now().difference(lastPopupDate).inDays; + + // cool-down duration to be 7 days between reports + if (_hasError || durationSinceLastReport < 7) { return; } _hasError = true; + sharedPrefs.setString(PreferencesKey.lastPopupDate, DateTime.now().toString()); + WidgetsBinding.instance.addPostFrameCallback( (timeStamp) async { await showPopUp( From f770e095a1b765984aa4e8bff5ccb04592b0cc9a Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Tue, 7 Feb 2023 17:12:34 +0200 Subject: [PATCH 106/190] Fix advance privacy setting set state --- .../advanced_privacy_settings_page.dart | 66 ++++++++++--------- .../advanced_privacy_settings_view_model.dart | 47 +++++-------- 2 files changed, 53 insertions(+), 60 deletions(-) diff --git a/lib/src/screens/new_wallet/advanced_privacy_settings_page.dart b/lib/src/screens/new_wallet/advanced_privacy_settings_page.dart index 2a9f4d291..7d720e4e5 100644 --- a/lib/src/screens/new_wallet/advanced_privacy_settings_page.dart +++ b/lib/src/screens/new_wallet/advanced_privacy_settings_page.dart @@ -5,7 +5,6 @@ import 'package:cake_wallet/src/screens/settings/widgets/settings_switcher_cell. import 'package:cake_wallet/view_model/node_list/node_create_or_edit_view_model.dart'; import 'package:cake_wallet/view_model/advanced_privacy_settings_view_model.dart'; import 'package:cake_wallet/view_model/settings/choices_list_item.dart'; -import 'package:cake_wallet/view_model/settings/switcher_list_item.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:flutter/material.dart'; import 'package:cake_wallet/generated/i18n.dart'; @@ -49,38 +48,43 @@ class _AdvancedPrivacySettingsBodyState extends State>().map( - (item) => Observer( - builder: (_) => SettingsChoicesCell(item) - ), - ), - ...widget.privacySettingsViewModel.settings.whereType().map( - (item) => Observer( - builder: (_) => SettingsSwitcherCell( - title: item.title, - value: item.value(), - onValueChange: item.onValueChange, + content: Observer( + builder: (_) => Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SettingsChoicesCell( + ChoicesListItem( + title: S.current.fiat_api, + items: FiatApiMode.all, + selectedItem: widget.privacySettingsViewModel.fiatApi, + onItemSelected: (FiatApiMode mode) => + widget.privacySettingsViewModel.setFiatMode(mode), ), ), - ), - Observer( - builder: (_) { - if (widget.privacySettingsViewModel.addCustomNode) { - return Padding( - padding: EdgeInsets.only(left: 24, right: 24, top: 24), - child: NodeForm( - formKey: _formKey, - nodeViewModel: widget.nodeViewModel, - ), - ); - } - return const SizedBox(); - }, - ), - ], + SettingsChoicesCell( + ChoicesListItem( + title: S.current.exchange, + items: FiatApiMode.all, + selectedItem: widget.privacySettingsViewModel.exchangeStatus, + onItemSelected: (FiatApiMode mode) => + widget.privacySettingsViewModel.setEnableExchange(mode), + ), + ), + SettingsSwitcherCell( + title: S.current.add_custom_node, + value: widget.privacySettingsViewModel.addCustomNode, + onValueChange: (_, __) => widget.privacySettingsViewModel.toggleAddCustomNode(), + ), + if (widget.privacySettingsViewModel.addCustomNode) + Padding( + padding: EdgeInsets.only(left: 24, right: 24, top: 24), + child: NodeForm( + formKey: _formKey, + nodeViewModel: widget.nodeViewModel, + ), + ) + ], + ), ), bottomSectionPadding: EdgeInsets.all(24), bottomSection: Column( diff --git a/lib/view_model/advanced_privacy_settings_view_model.dart b/lib/view_model/advanced_privacy_settings_view_model.dart index 80b62fdd0..7d526047d 100644 --- a/lib/view_model/advanced_privacy_settings_view_model.dart +++ b/lib/view_model/advanced_privacy_settings_view_model.dart @@ -1,11 +1,7 @@ import 'package:cake_wallet/entities/fiat_api_mode.dart'; import 'package:cake_wallet/store/settings_store.dart'; -import 'package:cake_wallet/view_model/settings/choices_list_item.dart'; -import 'package:cake_wallet/view_model/settings/settings_list_item.dart'; -import 'package:cake_wallet/view_model/settings/switcher_list_item.dart'; import 'package:cw_core/wallet_type.dart'; import 'package:mobx/mobx.dart'; -import 'package:cake_wallet/generated/i18n.dart'; part 'advanced_privacy_settings_view_model.g.dart'; @@ -13,36 +9,19 @@ class AdvancedPrivacySettingsViewModel = AdvancedPrivacySettingsViewModelBase with _$AdvancedPrivacySettingsViewModel; abstract class AdvancedPrivacySettingsViewModelBase with Store { - AdvancedPrivacySettingsViewModelBase(this.type, this._settingsStore) - : _addCustomNode = false { - settings = [ - ChoicesListItem( - title: S.current.fiat_api, - items: FiatApiMode.all, - selectedItem: _settingsStore.fiatApiMode, - onItemSelected: (FiatApiMode mode) => setFiatMode(mode), - ), - - ChoicesListItem( - title: S.current.exchange, - items: FiatApiMode.all, - selectedItem: _settingsStore.exchangeStatus, - onItemSelected: (FiatApiMode mode) => _settingsStore.exchangeStatus = mode, - ), - SwitcherListItem( - title: S.current.add_custom_node, - value: () => _addCustomNode, - onValueChange: (_, bool value) => _addCustomNode = value, - ), - ]; - } + AdvancedPrivacySettingsViewModelBase(this.type, this._settingsStore) : _addCustomNode = false; - late List settings; + @computed + FiatApiMode get exchangeStatus => _settingsStore.exchangeStatus; + + @computed + FiatApiMode get fiatApi => _settingsStore.fiatApiMode; @observable bool _addCustomNode = false; final WalletType type; + final SettingsStore _settingsStore; @computed @@ -50,6 +29,16 @@ abstract class AdvancedPrivacySettingsViewModelBase with Store { @action void setFiatMode(FiatApiMode value) { - _settingsStore.fiatApiMode = value; + _settingsStore.fiatApiMode = value; + } + + @action + void setEnableExchange(FiatApiMode value) { + _settingsStore.exchangeStatus = value; + } + + @action + void toggleAddCustomNode() { + _addCustomNode = !_addCustomNode; } } From bf407bedecc11736865d3b0ea3cc69a07ddd38d3 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Tue, 7 Feb 2023 18:03:31 +0200 Subject: [PATCH 107/190] Check if widget is mounted before showing popups --- lib/src/screens/send/send_page.dart | 20 +++++++++----------- lib/utils/exception_handler.dart | 1 + lib/utils/show_pop_up.dart | 21 ++++++++++++--------- 3 files changed, 22 insertions(+), 20 deletions(-) diff --git a/lib/src/screens/send/send_page.dart b/lib/src/screens/send/send_page.dart index 6f4cd0bde..33e199487 100644 --- a/lib/src/screens/send/send_page.dart +++ b/lib/src/screens/send/send_page.dart @@ -365,17 +365,15 @@ class SendPage extends BasePage { reaction((_) => sendViewModel.state, (ExecutionState state) { if (state is FailureState) { WidgetsBinding.instance.addPostFrameCallback((_) { - if (context.mounted) { - showPopUp( - context: context, - builder: (BuildContext context) { - return AlertWithOneAction( - alertTitle: S.of(context).error, - alertContent: state.error, - buttonText: S.of(context).ok, - buttonAction: () => Navigator.of(context).pop()); - }); - } + showPopUp( + context: context, + builder: (BuildContext context) { + return AlertWithOneAction( + alertTitle: S.of(context).error, + alertContent: state.error, + buttonText: S.of(context).ok, + buttonAction: () => Navigator.of(context).pop()); + }); }); } diff --git a/lib/utils/exception_handler.dart b/lib/utils/exception_handler.dart index 0886cd8de..5a481cf42 100644 --- a/lib/utils/exception_handler.dart +++ b/lib/utils/exception_handler.dart @@ -120,6 +120,7 @@ class ExceptionHandler { static bool _ignoreError(String error) { return error.contains("errno = 103") || // SocketException: Software caused connection abort error.contains("errno = 9") || // SocketException: Bad file descriptor + error.contains("errno = 32") || // SocketException: Write failed (OS Error: Broken pipe) error.contains("errno = 54"); // SocketException: Connection reset by peer } } diff --git a/lib/utils/show_pop_up.dart b/lib/utils/show_pop_up.dart index 190b2a6d7..66748f6c2 100644 --- a/lib/utils/show_pop_up.dart +++ b/lib/utils/show_pop_up.dart @@ -8,13 +8,16 @@ Future showPopUp({ bool useSafeArea = false, bool useRootNavigator = true, RouteSettings? routeSettings -}) { - return showDialog( - context: context, - builder: builder, - barrierDismissible: barrierDismissible, - barrierColor: barrierColor, - useSafeArea: useSafeArea, - useRootNavigator: useRootNavigator, - routeSettings: routeSettings); +}) async { + if (context.mounted) { + return showDialog( + context: context, + builder: builder, + barrierDismissible: barrierDismissible, + barrierColor: barrierColor, + useSafeArea: useSafeArea, + useRootNavigator: useRootNavigator, + routeSettings: routeSettings); + } + return null; } From f1b0a5adb6369b66d2e104083f5a1bfe4dd1485c Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Tue, 7 Feb 2023 19:39:39 +0200 Subject: [PATCH 108/190] Add trocador provider and password to transaction details --- lib/exchange/trade.dart | 51 +++++++++++-------- .../trocador/trocador_exchange_provider.dart | 12 +++++ lib/view_model/trade_details_view_model.dart | 47 ++++++++--------- 3 files changed, 67 insertions(+), 43 deletions(-) diff --git a/lib/exchange/trade.dart b/lib/exchange/trade.dart index f20a080b7..70dfa5713 100644 --- a/lib/exchange/trade.dart +++ b/lib/exchange/trade.dart @@ -8,21 +8,25 @@ part 'trade.g.dart'; @HiveType(typeId: Trade.typeId) class Trade extends HiveObject { - Trade( - {required this.id, - required this.amount, - ExchangeProviderDescription? provider, - CryptoCurrency? from, - CryptoCurrency? to, - TradeState? state, - this.createdAt, - this.expiredAt, - this.inputAddress, - this.extraId, - this.outputTransaction, - this.refundAddress, - this.walletId, - this.payoutAddress}) { + Trade({ + required this.id, + required this.amount, + ExchangeProviderDescription? provider, + CryptoCurrency? from, + CryptoCurrency? to, + TradeState? state, + this.createdAt, + this.expiredAt, + this.inputAddress, + this.extraId, + this.outputTransaction, + this.refundAddress, + this.walletId, + this.payoutAddress, + this.password, + this.providerId, + this.providerName, + }) { if (provider != null) { providerRaw = provider.raw; } @@ -92,16 +96,23 @@ class Trade extends HiveObject { @HiveField(13) String? payoutAddress; + @HiveField(14) + String? password; + + @HiveField(15) + String? providerId; + + @HiveField(16) + String? providerName; + static Trade fromMap(Map map) { return Trade( id: map['id'] as String, - provider: ExchangeProviderDescription.deserialize( - raw: map['provider'] as int), + provider: ExchangeProviderDescription.deserialize(raw: map['provider'] as int), from: CryptoCurrency.deserialize(raw: map['input'] as int), to: CryptoCurrency.deserialize(raw: map['output'] as int), - createdAt: map['date'] != null - ? DateTime.fromMillisecondsSinceEpoch(map['date'] as int) - : null, + createdAt: + map['date'] != null ? DateTime.fromMillisecondsSinceEpoch(map['date'] as int) : null, amount: map['amount'] as String, walletId: map['wallet_id'] as String); } diff --git a/lib/exchange/trocador/trocador_exchange_provider.dart b/lib/exchange/trocador/trocador_exchange_provider.dart index 9785b67c2..ecdeebe84 100644 --- a/lib/exchange/trocador/trocador_exchange_provider.dart +++ b/lib/exchange/trocador/trocador_exchange_provider.dart @@ -113,6 +113,9 @@ class TrocadorExchangeProvider extends ExchangeProvider { final state = TradeState.deserialize(raw: status); final payoutAddress = responseJSON['address_user'] as String; final date = responseJSON['date'] as String; + final password = responseJSON['password'] as String; + final providerId = responseJSON['id_provider'] as String; + final providerName = responseJSON['provider'] as String; return Trade( id: id, @@ -122,6 +125,9 @@ class TrocadorExchangeProvider extends ExchangeProvider { inputAddress: inputAddress, refundAddress: refundAddress, state: state, + password: password, + providerId: providerId, + providerName: providerName, createdAt: DateTime.tryParse(date)?.toLocal(), amount: responseJSON['amount_from']?.toString() ?? request.fromAmount, payoutAddress: payoutAddress); @@ -208,6 +214,9 @@ class TrocadorExchangeProvider extends ExchangeProvider { final to = CryptoCurrency.fromString(responseJSON['ticker_to'] as String); final state = TradeState.deserialize(raw: responseJSON['status'] as String); final date = DateTime.parse(responseJSON['date'] as String); + final password = responseJSON['password'] as String; + final providerId = responseJSON['id_provider'] as String; + final providerName = responseJSON['provider'] as String; return Trade( id: id, @@ -220,6 +229,9 @@ class TrocadorExchangeProvider extends ExchangeProvider { amount: fromAmount, state: state, payoutAddress: payoutAddress, + password: password, + providerId: providerId, + providerName: providerName, ); }); } diff --git a/lib/view_model/trade_details_view_model.dart b/lib/view_model/trade_details_view_model.dart index 97bb40fe4..3a6f1ec74 100644 --- a/lib/view_model/trade_details_view_model.dart +++ b/lib/view_model/trade_details_view_model.dart @@ -23,16 +23,15 @@ import 'package:cake_wallet/src/screens/trade_details/trade_details_status_item. import 'package:url_launcher/url_launcher.dart'; part 'trade_details_view_model.g.dart'; -class TradeDetailsViewModel = TradeDetailsViewModelBase - with _$TradeDetailsViewModel; +class TradeDetailsViewModel = TradeDetailsViewModelBase with _$TradeDetailsViewModel; abstract class TradeDetailsViewModelBase with Store { TradeDetailsViewModelBase({ required Trade tradeForDetails, required this.trades, - required this.settingsStore}) - : items = ObservableList(), - trade = tradeForDetails { + required this.settingsStore, + }) : items = ObservableList(), + trade = tradeForDetails { switch (trade.provider) { case ExchangeProviderDescription.xmrto: _provider = XMRTOExchangeProvider(); @@ -46,7 +45,7 @@ abstract class TradeDetailsViewModelBase with Store { case ExchangeProviderDescription.sideShift: _provider = SideShiftExchangeProvider(); break; - case ExchangeProviderDescription.simpleSwap: + case ExchangeProviderDescription.simpleSwap: _provider = SimpleSwapExchangeProvider(); break; case ExchangeProviderDescription.trocador: @@ -100,12 +99,7 @@ abstract class TradeDetailsViewModelBase with Store { items.clear(); items.add( - DetailsListStatusItem( - title: S.current.trade_details_state, - value: trade.state != null - ? trade.state.toString() - : S.current.trade_details_fetching) - ); + DetailsListStatusItem(title: S.current.trade_details_state, value: trade.state.toString())); items.add(TradeDetailsListCardItem.tradeDetails( id: trade.id, @@ -118,15 +112,11 @@ abstract class TradeDetailsViewModelBase with Store { }, )); - if (trade.provider != null) { - items.add(StandartListItem( - title: S.current.trade_details_provider, - value: trade.provider.toString())); - } + items.add(StandartListItem( + title: S.current.trade_details_provider, value: trade.provider.toString())); if (trade.provider == ExchangeProviderDescription.changeNow) { - final buildURL = - 'https://changenow.io/exchange/txs/${trade.id.toString()}'; + final buildURL = 'https://changenow.io/exchange/txs/${trade.id.toString()}'; items.add(TrackTradeListItem( title: 'Track', value: buildURL, @@ -137,14 +127,25 @@ abstract class TradeDetailsViewModelBase with Store { if (trade.provider == ExchangeProviderDescription.sideShift) { final buildURL = 'https://sideshift.ai/orders/${trade.id.toString()}'; - items.add(TrackTradeListItem( - title: 'Track', value: buildURL, onTap: () => launch(buildURL))); + items.add(TrackTradeListItem(title: 'Track', value: buildURL, onTap: () => launch(buildURL))); } if (trade.provider == ExchangeProviderDescription.simpleSwap) { final buildURL = 'https://simpleswap.io/exchange?id=${trade.id.toString()}'; - items.add(TrackTradeListItem( - title: 'Track', value: buildURL, onTap: () => launch(buildURL))); + items.add(TrackTradeListItem(title: 'Track', value: buildURL, onTap: () => launch(buildURL))); + } + + if (trade.provider == ExchangeProviderDescription.trocador) { + final buildURL = 'https://trocador.app/en/checkout/${trade.id.toString()}'; + items.add(TrackTradeListItem(title: 'Track', value: buildURL, onTap: () => launch(buildURL))); + + items.add(StandartListItem( + title: '${trade.providerName} ${S.current.id.toUpperCase()}', + value: trade.providerId ?? '')); + + if (trade.password != null && trade.password!.isNotEmpty) + items.add(StandartListItem( + title: '${trade.providerName} ${S.current.password}', value: trade.password ?? '')); } } } From 74b571fc77561c74d592084905db54930cda9e5a Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Tue, 7 Feb 2023 22:11:25 +0200 Subject: [PATCH 109/190] Add exceptions for user errors --- lib/utils/exception_handler.dart | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/utils/exception_handler.dart b/lib/utils/exception_handler.dart index 5a481cf42..a4df85a7b 100644 --- a/lib/utils/exception_handler.dart +++ b/lib/utils/exception_handler.dart @@ -121,6 +121,10 @@ class ExceptionHandler { return error.contains("errno = 103") || // SocketException: Software caused connection abort error.contains("errno = 9") || // SocketException: Bad file descriptor error.contains("errno = 32") || // SocketException: Write failed (OS Error: Broken pipe) - error.contains("errno = 54"); // SocketException: Connection reset by peer + error.contains("errno = 60") || // SocketException: Operation timed out + error.contains("errno = 54") || // SocketException: Connection reset by peer + error.contains("errno = 49") || // SocketException: Can't assign requested address + error.contains("PERMISSION_NOT_GRANTED") || + error.contains("errno = 28"); // OS Error: No space left on device } } From e67b484613445d7efb2d5dbcde05eefc956b5d0a Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Tue, 7 Feb 2023 23:48:10 +0200 Subject: [PATCH 110/190] - Fix RangeError due to changes in _tradeAvailableProviders while the Futures complete - Silently catch "Concurrent modification during iteration" --- lib/view_model/exchange/exchange_view_model.dart | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) 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 Date: Wed, 8 Feb 2023 00:06:47 +0200 Subject: [PATCH 111/190] Fix Share on iPad and Mac "https://pub.dev/packages/share_plus#known-issues" --- lib/src/screens/dashboard/widgets/address_page.dart | 9 ++++++++- lib/src/screens/receive/receive_page.dart | 9 ++++++++- lib/src/screens/seed/wallet_seed_page.dart | 10 ++++++++-- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/lib/src/screens/dashboard/widgets/address_page.dart b/lib/src/screens/dashboard/widgets/address_page.dart index 9a06dc39d..92528d0d3 100644 --- a/lib/src/screens/dashboard/widgets/address_page.dart +++ b/lib/src/screens/dashboard/widgets/address_page.dart @@ -100,7 +100,14 @@ class AddressPage extends BasePage { highlightColor: Colors.transparent, splashColor: Colors.transparent, iconSize: 25, - onPressed: () => Share.share(addressListViewModel.address.address), + onPressed: () { + final box = context.findRenderObject() as RenderBox?; + + Share.share( + addressListViewModel.address.address, + sharePositionOrigin: box!.localToGlobal(Offset.zero) & box.size, + ); + }, icon: shareImage, ), ) : null; diff --git a/lib/src/screens/receive/receive_page.dart b/lib/src/screens/receive/receive_page.dart index 71ee578a0..aeef99341 100644 --- a/lib/src/screens/receive/receive_page.dart +++ b/lib/src/screens/receive/receive_page.dart @@ -101,7 +101,14 @@ class ReceivePage extends BasePage { highlightColor: Colors.transparent, splashColor: Colors.transparent, iconSize: 25, - onPressed: () => Share.share(addressListViewModel.address.address), + onPressed: () { + final box = context.findRenderObject() as RenderBox?; + + Share.share( + addressListViewModel.address.address, + sharePositionOrigin: box!.localToGlobal(Offset.zero) & box.size, + ); + }, icon: shareImage ) ); diff --git a/lib/src/screens/seed/wallet_seed_page.dart b/lib/src/screens/seed/wallet_seed_page.dart index 8de1526e8..13181cecf 100644 --- a/lib/src/screens/seed/wallet_seed_page.dart +++ b/lib/src/screens/seed/wallet_seed_page.dart @@ -159,8 +159,14 @@ class WalletSeedPage extends BasePage { child: Container( padding: EdgeInsets.only(right: 8.0), child: PrimaryButton( - onPressed: () => - Share.share(walletSeedViewModel.seed), + onPressed: () { + final box = context.findRenderObject() as RenderBox?; + + Share.share( + walletSeedViewModel.seed, + sharePositionOrigin: box!.localToGlobal(Offset.zero) & box.size, + ); + }, text: S.of(context).save, color: Colors.green, textColor: Colors.white), From 013816e30ce6b8f02ee4b0eea1572c5f6b063cf1 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Wed, 8 Feb 2023 00:34:32 +0200 Subject: [PATCH 112/190] Update Flutter version in Github workflow --- .github/workflows/pr_test_build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr_test_build.yml b/.github/workflows/pr_test_build.yml index c3c61865f..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 From 50641e2ddca9570ac26012519de7ab67faf31ee9 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Wed, 8 Feb 2023 16:07:59 +0200 Subject: [PATCH 113/190] Add pubspec.lock files and Podfile.lock to .gitignore [skip ci] --- .gitignore | 1 + cw_bitcoin/.gitignore | 1 + cw_bitcoin/pubspec.lock | 750 -------------------------------- cw_core/.gitignore | 1 + cw_core/pubspec.lock | 669 ---------------------------- cw_haven/.gitignore | 1 + cw_haven/pubspec.lock | 676 ---------------------------- cw_monero/.gitignore | 1 + cw_monero/pubspec.lock | 676 ---------------------------- cw_shared_external/.gitignore | 1 + cw_shared_external/pubspec.lock | 147 ------- ios/Podfile.lock | 255 ----------- 12 files changed, 6 insertions(+), 3173 deletions(-) delete mode 100644 cw_bitcoin/pubspec.lock delete mode 100644 cw_core/pubspec.lock delete mode 100644 cw_haven/pubspec.lock delete mode 100644 cw_monero/pubspec.lock delete mode 100644 cw_shared_external/pubspec.lock delete mode 100644 ios/Podfile.lock diff --git a/.gitignore b/.gitignore index 7e3f38beb..d8714290b 100644 --- a/.gitignore +++ b/.gitignore @@ -133,5 +133,6 @@ assets/images/app_logo.png /pubspec.yaml /pubspec.lock +/ios/podfile.lock /android/app.properties /android/app/src/main/AndroidManifest.xml diff --git a/cw_bitcoin/.gitignore b/cw_bitcoin/.gitignore index 1985397a2..612ef20be 100644 --- a/cw_bitcoin/.gitignore +++ b/cw_bitcoin/.gitignore @@ -8,6 +8,7 @@ .buildlog/ .history .svn/ +/pubspec.lock # IntelliJ related *.iml diff --git a/cw_bitcoin/pubspec.lock b/cw_bitcoin/pubspec.lock deleted file mode 100644 index bfcd9e5a6..000000000 --- a/cw_bitcoin/pubspec.lock +++ /dev/null @@ -1,750 +0,0 @@ -# Generated by pub -# See https://dart.dev/tools/pub/glossary#lockfile -packages: - _fe_analyzer_shared: - dependency: transitive - description: - name: _fe_analyzer_shared - sha256: "4897882604d919befd350648c7f91926a9d5de99e67b455bf0917cc2362f4bb8" - url: "https://pub.dev" - source: hosted - version: "47.0.0" - analyzer: - dependency: transitive - description: - name: analyzer - sha256: "690e335554a8385bc9d787117d9eb52c0c03ee207a607e593de3c9d71b1cfe80" - url: "https://pub.dev" - source: hosted - version: "4.7.0" - args: - dependency: transitive - description: - name: args - sha256: "139d809800a412ebb26a3892da228b2d0ba36f0ef5d9a82166e5e52ec8d61611" - url: "https://pub.dev" - source: hosted - version: "2.3.2" - asn1lib: - dependency: transitive - description: - name: asn1lib - sha256: ab96a1cb3beeccf8145c52e449233fe68364c9641623acd3adad66f8184f1039 - url: "https://pub.dev" - source: hosted - version: "1.4.0" - async: - dependency: transitive - description: - name: async - sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 - url: "https://pub.dev" - source: hosted - version: "2.10.0" - bech32: - dependency: transitive - description: - path: "." - ref: "cake-0.2.1" - resolved-ref: cafd1c270641e95017d57d69f55cca9831d4db56 - url: "https://github.com/cake-tech/bech32.git" - source: git - version: "0.2.1" - bip32: - dependency: transitive - description: - name: bip32 - sha256: "54787cd7a111e9d37394aabbf53d1fc5e2e0e0af2cd01c459147a97c0e3f8a97" - url: "https://pub.dev" - source: hosted - version: "2.0.0" - bip39: - dependency: transitive - description: - name: bip39 - sha256: de1ee27ebe7d96b84bb3a04a4132a0a3007dcdd5ad27dd14aa87a29d97c45edc - url: "https://pub.dev" - source: hosted - version: "1.0.6" - bitcoin_flutter: - dependency: "direct main" - description: - path: "." - ref: cake-update-v2 - resolved-ref: "8f86453761c0c26e368392d0ff2c6f12f3b7397b" - url: "https://github.com/cake-tech/bitcoin_flutter.git" - source: git - version: "2.0.2" - boolean_selector: - dependency: transitive - description: - name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - bs58check: - dependency: transitive - description: - name: bs58check - sha256: c4a164d42b25c2f6bc88a8beccb9fc7d01440f3c60ba23663a20a70faf484ea9 - url: "https://pub.dev" - source: hosted - version: "1.0.2" - build: - dependency: transitive - description: - name: build - sha256: "3fbda25365741f8251b39f3917fb3c8e286a96fd068a5a242e11c2012d495777" - url: "https://pub.dev" - source: hosted - version: "2.3.1" - build_config: - dependency: transitive - description: - name: build_config - sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 - url: "https://pub.dev" - source: hosted - version: "1.1.1" - build_daemon: - dependency: transitive - description: - name: build_daemon - sha256: "6bc5544ea6ce4428266e7ea680e945c68806c4aae2da0eb5e9ccf38df8d6acbf" - url: "https://pub.dev" - source: hosted - version: "3.1.0" - build_resolvers: - dependency: "direct dev" - description: - name: build_resolvers - sha256: "687cf90a3951affac1bd5f9ecb5e3e90b60487f3d9cdc359bb310f8876bb02a6" - url: "https://pub.dev" - source: hosted - version: "2.0.10" - build_runner: - dependency: "direct dev" - description: - name: build_runner - sha256: b0a8a7b8a76c493e85f1b84bffa0588859a06197863dba8c9036b15581fd9727 - url: "https://pub.dev" - source: hosted - version: "2.3.3" - build_runner_core: - dependency: transitive - description: - name: build_runner_core - sha256: "14febe0f5bac5ae474117a36099b4de6f1dbc52df6c5e55534b3da9591bf4292" - url: "https://pub.dev" - source: hosted - version: "7.2.7" - built_collection: - dependency: transitive - description: - name: built_collection - sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" - url: "https://pub.dev" - source: hosted - version: "5.1.1" - built_value: - dependency: transitive - description: - name: built_value - sha256: "169565c8ad06adb760c3645bf71f00bff161b00002cace266cad42c5d22a7725" - url: "https://pub.dev" - source: hosted - version: "8.4.3" - characters: - dependency: transitive - description: - name: characters - sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c - url: "https://pub.dev" - source: hosted - version: "1.2.1" - checked_yaml: - dependency: transitive - description: - name: checked_yaml - sha256: "3d1505d91afa809d177efd4eed5bb0eb65805097a1463abdd2add076effae311" - url: "https://pub.dev" - source: hosted - version: "2.0.2" - clock: - dependency: transitive - description: - name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf - url: "https://pub.dev" - source: hosted - version: "1.1.1" - code_builder: - dependency: transitive - description: - name: code_builder - sha256: "0d43dd1288fd145de1ecc9a3948ad4a6d5a82f0a14c4fdd0892260787d975cbe" - url: "https://pub.dev" - source: hosted - version: "4.4.0" - collection: - dependency: transitive - description: - name: collection - sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 - url: "https://pub.dev" - source: hosted - version: "1.17.0" - convert: - dependency: transitive - description: - name: convert - sha256: "196284f26f69444b7f5c50692b55ec25da86d9e500451dc09333bf2e3ad69259" - url: "https://pub.dev" - source: hosted - version: "3.0.2" - crypto: - dependency: transitive - description: - name: crypto - sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 - url: "https://pub.dev" - source: hosted - version: "3.0.2" - cryptography: - dependency: "direct main" - description: - name: cryptography - sha256: e0e37f79665cd5c86e8897f9abe1accfe813c0cc5299dab22256e22fddc1fef8 - url: "https://pub.dev" - source: hosted - version: "2.0.5" - cw_core: - dependency: "direct main" - description: - path: "../cw_core" - relative: true - source: path - version: "0.0.1" - dart_style: - dependency: transitive - description: - name: dart_style - sha256: "7a03456c3490394c8e7665890333e91ae8a49be43542b616e414449ac358acd4" - url: "https://pub.dev" - source: hosted - version: "2.2.4" - encrypt: - dependency: "direct main" - description: - name: encrypt - sha256: "4fd4e4fdc21b9d7d4141823e1e6515cd94e7b8d84749504c232999fba25d9bbb" - url: "https://pub.dev" - source: hosted - version: "5.0.1" - fake_async: - dependency: transitive - description: - name: fake_async - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" - url: "https://pub.dev" - source: hosted - version: "1.3.1" - ffi: - dependency: transitive - description: - name: ffi - sha256: a38574032c5f1dd06c4aee541789906c12ccaab8ba01446e800d9c5b79c4a978 - url: "https://pub.dev" - source: hosted - version: "2.0.1" - file: - dependency: transitive - description: - name: file - sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" - url: "https://pub.dev" - source: hosted - version: "6.1.4" - fixnum: - dependency: transitive - description: - name: fixnum - sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - flutter: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_mobx: - dependency: "direct main" - description: - name: flutter_mobx - sha256: "0da4add0016387a7bf309a0d0c41d36c6b3ae25ed7a176409267f166509e723e" - url: "https://pub.dev" - source: hosted - version: "2.0.6+5" - flutter_test: - dependency: "direct dev" - description: flutter - source: sdk - version: "0.0.0" - frontend_server_client: - dependency: transitive - description: - name: frontend_server_client - sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" - url: "https://pub.dev" - source: hosted - version: "3.2.0" - glob: - dependency: transitive - description: - name: glob - sha256: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - graphs: - dependency: transitive - description: - name: graphs - sha256: f9e130f3259f52d26f0cfc0e964513796dafed572fa52e45d2f8d6ca14db39b2 - url: "https://pub.dev" - source: hosted - version: "2.2.0" - hex: - dependency: transitive - description: - name: hex - sha256: "4e7cd54e4b59ba026432a6be2dd9d96e4c5205725194997193bf871703b82c4a" - url: "https://pub.dev" - source: hosted - version: "0.2.0" - hive: - dependency: transitive - description: - name: hive - sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941" - url: "https://pub.dev" - source: hosted - version: "2.2.3" - hive_generator: - dependency: "direct dev" - description: - name: hive_generator - sha256: "81fd20125cb2ce8fd23623d7744ffbaf653aae93706c9bd3bf7019ea0ace3938" - url: "https://pub.dev" - source: hosted - version: "1.1.3" - http: - dependency: "direct main" - description: - name: http - sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" - url: "https://pub.dev" - source: hosted - version: "0.13.5" - http_multi_server: - dependency: transitive - description: - name: http_multi_server - sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" - url: "https://pub.dev" - source: hosted - version: "3.2.1" - http_parser: - dependency: transitive - description: - name: http_parser - sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" - url: "https://pub.dev" - source: hosted - version: "4.0.2" - intl: - dependency: "direct main" - description: - name: intl - sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91" - url: "https://pub.dev" - source: hosted - version: "0.17.0" - io: - dependency: transitive - description: - name: io - sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" - url: "https://pub.dev" - source: hosted - version: "1.0.4" - js: - dependency: transitive - description: - name: js - sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" - url: "https://pub.dev" - source: hosted - version: "0.6.5" - json_annotation: - dependency: transitive - description: - name: json_annotation - sha256: c33da08e136c3df0190bd5bbe51ae1df4a7d96e7954d1d7249fea2968a72d317 - url: "https://pub.dev" - source: hosted - version: "4.8.0" - logging: - dependency: transitive - description: - name: logging - sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" - url: "https://pub.dev" - source: hosted - version: "1.1.1" - matcher: - dependency: transitive - description: - name: matcher - sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" - url: "https://pub.dev" - source: hosted - version: "0.12.13" - material_color_utilities: - dependency: transitive - description: - name: material_color_utilities - sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 - url: "https://pub.dev" - source: hosted - version: "0.2.0" - meta: - dependency: transitive - description: - name: meta - sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" - url: "https://pub.dev" - source: hosted - version: "1.8.0" - mime: - dependency: transitive - description: - name: mime - sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e - url: "https://pub.dev" - source: hosted - version: "1.0.4" - mobx: - dependency: "direct main" - description: - name: mobx - sha256: f1862bd92c6a903fab67338f27e2f731117c3cb9ea37cee1a487f9e4e0de314a - url: "https://pub.dev" - source: hosted - version: "2.1.3+1" - mobx_codegen: - dependency: "direct dev" - description: - name: mobx_codegen - sha256: "86122e410d8ea24dda0c69adb5c2a6ccadd5ce02ad46e144764e0d0184a06181" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - package_config: - dependency: transitive - description: - name: package_config - sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - path: - dependency: transitive - description: - name: path - sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b - url: "https://pub.dev" - source: hosted - version: "1.8.2" - path_provider: - dependency: "direct main" - description: - name: path_provider - sha256: dcea5feb97d8abf90cab9e9030b497fb7c3cbf26b7a1fe9e3ef7dcb0a1ddec95 - url: "https://pub.dev" - source: hosted - version: "2.0.12" - path_provider_android: - dependency: transitive - description: - name: path_provider_android - sha256: a776c088d671b27f6e3aa8881d64b87b3e80201c64e8869b811325de7a76c15e - url: "https://pub.dev" - source: hosted - version: "2.0.22" - path_provider_foundation: - dependency: transitive - description: - name: path_provider_foundation - sha256: "62a68e7e1c6c459f9289859e2fae58290c981ce21d1697faf54910fe1faa4c74" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - path_provider_linux: - dependency: transitive - description: - name: path_provider_linux - sha256: ab0987bf95bc591da42dffb38c77398fc43309f0b9b894dcc5d6f40c4b26c379 - url: "https://pub.dev" - source: hosted - version: "2.1.7" - path_provider_platform_interface: - dependency: transitive - description: - name: path_provider_platform_interface - sha256: f0abc8ebd7253741f05488b4813d936b4d07c6bae3e86148a09e342ee4b08e76 - url: "https://pub.dev" - source: hosted - version: "2.0.5" - path_provider_windows: - dependency: transitive - description: - name: path_provider_windows - sha256: bcabbe399d4042b8ee687e17548d5d3f527255253b4a639f5f8d2094a9c2b45c - url: "https://pub.dev" - source: hosted - version: "2.1.3" - platform: - dependency: transitive - description: - name: platform - sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" - url: "https://pub.dev" - source: hosted - version: "3.1.0" - plugin_platform_interface: - dependency: transitive - description: - name: plugin_platform_interface - sha256: dbf0f707c78beedc9200146ad3cb0ab4d5da13c246336987be6940f026500d3a - url: "https://pub.dev" - source: hosted - version: "2.1.3" - pointycastle: - dependency: transitive - description: - name: pointycastle - sha256: db7306cf0249f838d1a24af52b5a5887c5bf7f31d8bb4e827d071dc0939ad346 - url: "https://pub.dev" - source: hosted - version: "3.6.2" - pool: - dependency: transitive - description: - name: pool - sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" - url: "https://pub.dev" - source: hosted - version: "1.5.1" - process: - dependency: transitive - description: - name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" - url: "https://pub.dev" - source: hosted - version: "4.2.4" - pub_semver: - dependency: transitive - description: - name: pub_semver - sha256: "307de764d305289ff24ad257ad5c5793ce56d04947599ad68b3baa124105fc17" - url: "https://pub.dev" - source: hosted - version: "2.1.3" - pubspec_parse: - dependency: transitive - description: - name: pubspec_parse - sha256: "75f6614d6dde2dc68948dffbaa4fe5dae32cd700eb9fb763fe11dfb45a3c4d0a" - url: "https://pub.dev" - source: hosted - version: "1.2.1" - rxdart: - dependency: "direct main" - description: - name: rxdart - sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" - url: "https://pub.dev" - source: hosted - version: "0.27.7" - shelf: - dependency: transitive - description: - name: shelf - sha256: c24a96135a2ccd62c64b69315a14adc5c3419df63b4d7c05832a346fdb73682c - url: "https://pub.dev" - source: hosted - version: "1.4.0" - shelf_web_socket: - dependency: transitive - description: - name: shelf_web_socket - sha256: a988c0e8d8ffbdb8a28aa7ec8e449c260f3deb808781fe1284d22c5bba7156e8 - url: "https://pub.dev" - source: hosted - version: "1.0.3" - sky_engine: - dependency: transitive - description: flutter - source: sdk - version: "0.0.99" - source_gen: - dependency: transitive - description: - name: source_gen - sha256: "2d79738b6bbf38a43920e2b8d189e9a3ce6cc201f4b8fc76be5e4fe377b1c38d" - url: "https://pub.dev" - source: hosted - version: "1.2.6" - source_helper: - dependency: transitive - description: - name: source_helper - sha256: "3b67aade1d52416149c633ba1bb36df44d97c6b51830c2198e934e3fca87ca1f" - url: "https://pub.dev" - source: hosted - version: "1.3.3" - source_span: - dependency: transitive - description: - name: source_span - sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 - url: "https://pub.dev" - source: hosted - version: "1.9.1" - stack_trace: - dependency: transitive - description: - name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 - url: "https://pub.dev" - source: hosted - version: "1.11.0" - stream_channel: - dependency: transitive - description: - name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - stream_transform: - dependency: transitive - description: - name: stream_transform - sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - string_scanner: - dependency: transitive - description: - name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - term_glyph: - dependency: transitive - description: - name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 - url: "https://pub.dev" - source: hosted - version: "1.2.1" - test_api: - dependency: transitive - description: - name: test_api - sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 - url: "https://pub.dev" - source: hosted - version: "0.4.16" - timing: - dependency: transitive - description: - name: timing - sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" - url: "https://pub.dev" - source: hosted - version: "1.0.1" - typed_data: - dependency: transitive - description: - name: typed_data - sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" - url: "https://pub.dev" - source: hosted - version: "1.3.1" - unorm_dart: - dependency: "direct main" - description: - name: unorm_dart - sha256: "5b35bff83fce4d76467641438f9e867dc9bcfdb8c1694854f230579d68cd8f4b" - url: "https://pub.dev" - source: hosted - version: "0.2.0" - vector_math: - dependency: transitive - description: - name: vector_math - sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - watcher: - dependency: transitive - description: - name: watcher - sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" - url: "https://pub.dev" - source: hosted - version: "1.0.2" - web_socket_channel: - dependency: transitive - description: - name: web_socket_channel - sha256: ca49c0bc209c687b887f30527fb6a9d80040b072cc2990f34b9bec3e7663101b - url: "https://pub.dev" - source: hosted - version: "2.3.0" - win32: - dependency: transitive - description: - name: win32 - sha256: c9ebe7ee4ab0c2194e65d3a07d8c54c5d00bb001b76081c4a04cdb8448b59e46 - url: "https://pub.dev" - source: hosted - version: "3.1.3" - xdg_directories: - dependency: transitive - description: - name: xdg_directories - sha256: bd512f03919aac5f1313eb8249f223bacf4927031bf60b02601f81f687689e86 - url: "https://pub.dev" - source: hosted - version: "0.2.0+3" - yaml: - dependency: transitive - description: - name: yaml - sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" - url: "https://pub.dev" - source: hosted - version: "3.1.1" -sdks: - dart: ">=2.19.0 <3.0.0" - flutter: ">=3.0.0" diff --git a/cw_core/.gitignore b/cw_core/.gitignore index 1985397a2..612ef20be 100644 --- a/cw_core/.gitignore +++ b/cw_core/.gitignore @@ -8,6 +8,7 @@ .buildlog/ .history .svn/ +/pubspec.lock # IntelliJ related *.iml diff --git a/cw_core/pubspec.lock b/cw_core/pubspec.lock deleted file mode 100644 index 06997e8f1..000000000 --- a/cw_core/pubspec.lock +++ /dev/null @@ -1,669 +0,0 @@ -# Generated by pub -# See https://dart.dev/tools/pub/glossary#lockfile -packages: - _fe_analyzer_shared: - dependency: transitive - description: - name: _fe_analyzer_shared - sha256: "4897882604d919befd350648c7f91926a9d5de99e67b455bf0917cc2362f4bb8" - url: "https://pub.dev" - source: hosted - version: "47.0.0" - analyzer: - dependency: transitive - description: - name: analyzer - sha256: "690e335554a8385bc9d787117d9eb52c0c03ee207a607e593de3c9d71b1cfe80" - url: "https://pub.dev" - source: hosted - version: "4.7.0" - args: - dependency: transitive - description: - name: args - sha256: "139d809800a412ebb26a3892da228b2d0ba36f0ef5d9a82166e5e52ec8d61611" - url: "https://pub.dev" - source: hosted - version: "2.3.2" - asn1lib: - dependency: transitive - description: - name: asn1lib - sha256: ab96a1cb3beeccf8145c52e449233fe68364c9641623acd3adad66f8184f1039 - url: "https://pub.dev" - source: hosted - version: "1.4.0" - async: - dependency: transitive - description: - name: async - sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 - url: "https://pub.dev" - source: hosted - version: "2.10.0" - boolean_selector: - dependency: transitive - description: - name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - build: - dependency: transitive - description: - name: build - sha256: "3fbda25365741f8251b39f3917fb3c8e286a96fd068a5a242e11c2012d495777" - url: "https://pub.dev" - source: hosted - version: "2.3.1" - build_config: - dependency: transitive - description: - name: build_config - sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 - url: "https://pub.dev" - source: hosted - version: "1.1.1" - build_daemon: - dependency: transitive - description: - name: build_daemon - sha256: "6bc5544ea6ce4428266e7ea680e945c68806c4aae2da0eb5e9ccf38df8d6acbf" - url: "https://pub.dev" - source: hosted - version: "3.1.0" - build_resolvers: - dependency: "direct dev" - description: - name: build_resolvers - sha256: "687cf90a3951affac1bd5f9ecb5e3e90b60487f3d9cdc359bb310f8876bb02a6" - url: "https://pub.dev" - source: hosted - version: "2.0.10" - build_runner: - dependency: "direct dev" - description: - name: build_runner - sha256: b0a8a7b8a76c493e85f1b84bffa0588859a06197863dba8c9036b15581fd9727 - url: "https://pub.dev" - source: hosted - version: "2.3.3" - build_runner_core: - dependency: transitive - description: - name: build_runner_core - sha256: "14febe0f5bac5ae474117a36099b4de6f1dbc52df6c5e55534b3da9591bf4292" - url: "https://pub.dev" - source: hosted - version: "7.2.7" - built_collection: - dependency: transitive - description: - name: built_collection - sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" - url: "https://pub.dev" - source: hosted - version: "5.1.1" - built_value: - dependency: transitive - description: - name: built_value - sha256: "169565c8ad06adb760c3645bf71f00bff161b00002cace266cad42c5d22a7725" - url: "https://pub.dev" - source: hosted - version: "8.4.3" - characters: - dependency: transitive - description: - name: characters - sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c - url: "https://pub.dev" - source: hosted - version: "1.2.1" - checked_yaml: - dependency: transitive - description: - name: checked_yaml - sha256: "3d1505d91afa809d177efd4eed5bb0eb65805097a1463abdd2add076effae311" - url: "https://pub.dev" - source: hosted - version: "2.0.2" - clock: - dependency: transitive - description: - name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf - url: "https://pub.dev" - source: hosted - version: "1.1.1" - code_builder: - dependency: transitive - description: - name: code_builder - sha256: "0d43dd1288fd145de1ecc9a3948ad4a6d5a82f0a14c4fdd0892260787d975cbe" - url: "https://pub.dev" - source: hosted - version: "4.4.0" - collection: - dependency: transitive - description: - name: collection - sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 - url: "https://pub.dev" - source: hosted - version: "1.17.0" - convert: - dependency: transitive - description: - name: convert - sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" - url: "https://pub.dev" - source: hosted - version: "3.1.1" - crypto: - dependency: transitive - description: - name: crypto - sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 - url: "https://pub.dev" - source: hosted - version: "3.0.2" - dart_style: - dependency: transitive - description: - name: dart_style - sha256: "7a03456c3490394c8e7665890333e91ae8a49be43542b616e414449ac358acd4" - url: "https://pub.dev" - source: hosted - version: "2.2.4" - encrypt: - dependency: "direct main" - description: - name: encrypt - sha256: "4fd4e4fdc21b9d7d4141823e1e6515cd94e7b8d84749504c232999fba25d9bbb" - url: "https://pub.dev" - source: hosted - version: "5.0.1" - fake_async: - dependency: transitive - description: - name: fake_async - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" - url: "https://pub.dev" - source: hosted - version: "1.3.1" - ffi: - dependency: transitive - description: - name: ffi - sha256: a38574032c5f1dd06c4aee541789906c12ccaab8ba01446e800d9c5b79c4a978 - url: "https://pub.dev" - source: hosted - version: "2.0.1" - file: - dependency: transitive - description: - name: file - sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" - url: "https://pub.dev" - source: hosted - version: "6.1.4" - fixnum: - dependency: transitive - description: - name: fixnum - sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - flutter: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_mobx: - dependency: "direct main" - description: - name: flutter_mobx - sha256: "0da4add0016387a7bf309a0d0c41d36c6b3ae25ed7a176409267f166509e723e" - url: "https://pub.dev" - source: hosted - version: "2.0.6+5" - flutter_test: - dependency: "direct dev" - description: flutter - source: sdk - version: "0.0.0" - frontend_server_client: - dependency: transitive - description: - name: frontend_server_client - sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" - url: "https://pub.dev" - source: hosted - version: "3.2.0" - glob: - dependency: transitive - description: - name: glob - sha256: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - graphs: - dependency: transitive - description: - name: graphs - sha256: f9e130f3259f52d26f0cfc0e964513796dafed572fa52e45d2f8d6ca14db39b2 - url: "https://pub.dev" - source: hosted - version: "2.2.0" - hive: - dependency: transitive - description: - name: hive - sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941" - url: "https://pub.dev" - source: hosted - version: "2.2.3" - hive_generator: - dependency: "direct dev" - description: - name: hive_generator - sha256: "81fd20125cb2ce8fd23623d7744ffbaf653aae93706c9bd3bf7019ea0ace3938" - url: "https://pub.dev" - source: hosted - version: "1.1.3" - http: - dependency: "direct main" - description: - name: http - sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" - url: "https://pub.dev" - source: hosted - version: "0.13.5" - http_multi_server: - dependency: transitive - description: - name: http_multi_server - sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" - url: "https://pub.dev" - source: hosted - version: "3.2.1" - http_parser: - dependency: transitive - description: - name: http_parser - sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" - url: "https://pub.dev" - source: hosted - version: "4.0.2" - intl: - dependency: "direct main" - description: - name: intl - sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91" - url: "https://pub.dev" - source: hosted - version: "0.17.0" - io: - dependency: transitive - description: - name: io - sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" - url: "https://pub.dev" - source: hosted - version: "1.0.4" - js: - dependency: transitive - description: - name: js - sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" - url: "https://pub.dev" - source: hosted - version: "0.6.5" - json_annotation: - dependency: transitive - description: - name: json_annotation - sha256: c33da08e136c3df0190bd5bbe51ae1df4a7d96e7954d1d7249fea2968a72d317 - url: "https://pub.dev" - source: hosted - version: "4.8.0" - logging: - dependency: transitive - description: - name: logging - sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" - url: "https://pub.dev" - source: hosted - version: "1.1.1" - matcher: - dependency: transitive - description: - name: matcher - sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" - url: "https://pub.dev" - source: hosted - version: "0.12.13" - material_color_utilities: - dependency: transitive - description: - name: material_color_utilities - sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 - url: "https://pub.dev" - source: hosted - version: "0.2.0" - meta: - dependency: transitive - description: - name: meta - sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" - url: "https://pub.dev" - source: hosted - version: "1.8.0" - mime: - dependency: transitive - description: - name: mime - sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e - url: "https://pub.dev" - source: hosted - version: "1.0.4" - mobx: - dependency: "direct main" - description: - name: mobx - sha256: f1862bd92c6a903fab67338f27e2f731117c3cb9ea37cee1a487f9e4e0de314a - url: "https://pub.dev" - source: hosted - version: "2.1.3+1" - mobx_codegen: - dependency: "direct dev" - description: - name: mobx_codegen - sha256: "86122e410d8ea24dda0c69adb5c2a6ccadd5ce02ad46e144764e0d0184a06181" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - package_config: - dependency: transitive - description: - name: package_config - sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - path: - dependency: transitive - description: - name: path - sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b - url: "https://pub.dev" - source: hosted - version: "1.8.2" - path_provider: - dependency: "direct main" - description: - name: path_provider - sha256: dcea5feb97d8abf90cab9e9030b497fb7c3cbf26b7a1fe9e3ef7dcb0a1ddec95 - url: "https://pub.dev" - source: hosted - version: "2.0.12" - path_provider_android: - dependency: transitive - description: - name: path_provider_android - sha256: a776c088d671b27f6e3aa8881d64b87b3e80201c64e8869b811325de7a76c15e - url: "https://pub.dev" - source: hosted - version: "2.0.22" - path_provider_foundation: - dependency: transitive - description: - name: path_provider_foundation - sha256: "62a68e7e1c6c459f9289859e2fae58290c981ce21d1697faf54910fe1faa4c74" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - path_provider_linux: - dependency: transitive - description: - name: path_provider_linux - sha256: ab0987bf95bc591da42dffb38c77398fc43309f0b9b894dcc5d6f40c4b26c379 - url: "https://pub.dev" - source: hosted - version: "2.1.7" - path_provider_platform_interface: - dependency: transitive - description: - name: path_provider_platform_interface - sha256: f0abc8ebd7253741f05488b4813d936b4d07c6bae3e86148a09e342ee4b08e76 - url: "https://pub.dev" - source: hosted - version: "2.0.5" - path_provider_windows: - dependency: transitive - description: - name: path_provider_windows - sha256: bcabbe399d4042b8ee687e17548d5d3f527255253b4a639f5f8d2094a9c2b45c - url: "https://pub.dev" - source: hosted - version: "2.1.3" - platform: - dependency: transitive - description: - name: platform - sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" - url: "https://pub.dev" - source: hosted - version: "3.1.0" - plugin_platform_interface: - dependency: transitive - description: - name: plugin_platform_interface - sha256: dbf0f707c78beedc9200146ad3cb0ab4d5da13c246336987be6940f026500d3a - url: "https://pub.dev" - source: hosted - version: "2.1.3" - pointycastle: - dependency: transitive - description: - name: pointycastle - sha256: db7306cf0249f838d1a24af52b5a5887c5bf7f31d8bb4e827d071dc0939ad346 - url: "https://pub.dev" - source: hosted - version: "3.6.2" - pool: - dependency: transitive - description: - name: pool - sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" - url: "https://pub.dev" - source: hosted - version: "1.5.1" - process: - dependency: transitive - description: - name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" - url: "https://pub.dev" - source: hosted - version: "4.2.4" - pub_semver: - dependency: transitive - description: - name: pub_semver - sha256: "307de764d305289ff24ad257ad5c5793ce56d04947599ad68b3baa124105fc17" - url: "https://pub.dev" - source: hosted - version: "2.1.3" - pubspec_parse: - dependency: transitive - description: - name: pubspec_parse - sha256: "75f6614d6dde2dc68948dffbaa4fe5dae32cd700eb9fb763fe11dfb45a3c4d0a" - url: "https://pub.dev" - source: hosted - version: "1.2.1" - shelf: - dependency: transitive - description: - name: shelf - sha256: c24a96135a2ccd62c64b69315a14adc5c3419df63b4d7c05832a346fdb73682c - url: "https://pub.dev" - source: hosted - version: "1.4.0" - shelf_web_socket: - dependency: transitive - description: - name: shelf_web_socket - sha256: a988c0e8d8ffbdb8a28aa7ec8e449c260f3deb808781fe1284d22c5bba7156e8 - url: "https://pub.dev" - source: hosted - version: "1.0.3" - sky_engine: - dependency: transitive - description: flutter - source: sdk - version: "0.0.99" - source_gen: - dependency: transitive - description: - name: source_gen - sha256: "2d79738b6bbf38a43920e2b8d189e9a3ce6cc201f4b8fc76be5e4fe377b1c38d" - url: "https://pub.dev" - source: hosted - version: "1.2.6" - source_helper: - dependency: transitive - description: - name: source_helper - sha256: "3b67aade1d52416149c633ba1bb36df44d97c6b51830c2198e934e3fca87ca1f" - url: "https://pub.dev" - source: hosted - version: "1.3.3" - source_span: - dependency: transitive - description: - name: source_span - sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 - url: "https://pub.dev" - source: hosted - version: "1.9.1" - stack_trace: - dependency: transitive - description: - name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 - url: "https://pub.dev" - source: hosted - version: "1.11.0" - stream_channel: - dependency: transitive - description: - name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - stream_transform: - dependency: transitive - description: - name: stream_transform - sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - string_scanner: - dependency: transitive - description: - name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - term_glyph: - dependency: transitive - description: - name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 - url: "https://pub.dev" - source: hosted - version: "1.2.1" - test_api: - dependency: transitive - description: - name: test_api - sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 - url: "https://pub.dev" - source: hosted - version: "0.4.16" - timing: - dependency: transitive - description: - name: timing - sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" - url: "https://pub.dev" - source: hosted - version: "1.0.1" - typed_data: - dependency: transitive - description: - name: typed_data - sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" - url: "https://pub.dev" - source: hosted - version: "1.3.1" - vector_math: - dependency: transitive - description: - name: vector_math - sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - watcher: - dependency: transitive - description: - name: watcher - sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" - url: "https://pub.dev" - source: hosted - version: "1.0.2" - web_socket_channel: - dependency: transitive - description: - name: web_socket_channel - sha256: ca49c0bc209c687b887f30527fb6a9d80040b072cc2990f34b9bec3e7663101b - url: "https://pub.dev" - source: hosted - version: "2.3.0" - win32: - dependency: transitive - description: - name: win32 - sha256: c9ebe7ee4ab0c2194e65d3a07d8c54c5d00bb001b76081c4a04cdb8448b59e46 - url: "https://pub.dev" - source: hosted - version: "3.1.3" - xdg_directories: - dependency: transitive - description: - name: xdg_directories - sha256: bd512f03919aac5f1313eb8249f223bacf4927031bf60b02601f81f687689e86 - url: "https://pub.dev" - source: hosted - version: "0.2.0+3" - yaml: - dependency: transitive - description: - name: yaml - sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" - url: "https://pub.dev" - source: hosted - version: "3.1.1" -sdks: - dart: ">=2.19.0 <3.0.0" - flutter: ">=3.0.0" diff --git a/cw_haven/.gitignore b/cw_haven/.gitignore index e9dc58d3d..1b976a50e 100644 --- a/cw_haven/.gitignore +++ b/cw_haven/.gitignore @@ -3,5 +3,6 @@ .packages .pub/ +/pubspec.lock build/ diff --git a/cw_haven/pubspec.lock b/cw_haven/pubspec.lock deleted file mode 100644 index 84a4fe16a..000000000 --- a/cw_haven/pubspec.lock +++ /dev/null @@ -1,676 +0,0 @@ -# Generated by pub -# See https://dart.dev/tools/pub/glossary#lockfile -packages: - _fe_analyzer_shared: - dependency: transitive - description: - name: _fe_analyzer_shared - sha256: "4897882604d919befd350648c7f91926a9d5de99e67b455bf0917cc2362f4bb8" - url: "https://pub.dev" - source: hosted - version: "47.0.0" - analyzer: - dependency: transitive - description: - name: analyzer - sha256: "690e335554a8385bc9d787117d9eb52c0c03ee207a607e593de3c9d71b1cfe80" - url: "https://pub.dev" - source: hosted - version: "4.7.0" - args: - dependency: transitive - description: - name: args - sha256: "139d809800a412ebb26a3892da228b2d0ba36f0ef5d9a82166e5e52ec8d61611" - url: "https://pub.dev" - source: hosted - version: "2.3.2" - asn1lib: - dependency: transitive - description: - name: asn1lib - sha256: ab96a1cb3beeccf8145c52e449233fe68364c9641623acd3adad66f8184f1039 - url: "https://pub.dev" - source: hosted - version: "1.4.0" - async: - dependency: transitive - description: - name: async - sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 - url: "https://pub.dev" - source: hosted - version: "2.10.0" - boolean_selector: - dependency: transitive - description: - name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - build: - dependency: transitive - description: - name: build - sha256: "3fbda25365741f8251b39f3917fb3c8e286a96fd068a5a242e11c2012d495777" - url: "https://pub.dev" - source: hosted - version: "2.3.1" - build_config: - dependency: transitive - description: - name: build_config - sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 - url: "https://pub.dev" - source: hosted - version: "1.1.1" - build_daemon: - dependency: transitive - description: - name: build_daemon - sha256: "6bc5544ea6ce4428266e7ea680e945c68806c4aae2da0eb5e9ccf38df8d6acbf" - url: "https://pub.dev" - source: hosted - version: "3.1.0" - build_resolvers: - dependency: "direct dev" - description: - name: build_resolvers - sha256: "687cf90a3951affac1bd5f9ecb5e3e90b60487f3d9cdc359bb310f8876bb02a6" - url: "https://pub.dev" - source: hosted - version: "2.0.10" - build_runner: - dependency: "direct dev" - description: - name: build_runner - sha256: b0a8a7b8a76c493e85f1b84bffa0588859a06197863dba8c9036b15581fd9727 - url: "https://pub.dev" - source: hosted - version: "2.3.3" - build_runner_core: - dependency: transitive - description: - name: build_runner_core - sha256: "14febe0f5bac5ae474117a36099b4de6f1dbc52df6c5e55534b3da9591bf4292" - url: "https://pub.dev" - source: hosted - version: "7.2.7" - built_collection: - dependency: transitive - description: - name: built_collection - sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" - url: "https://pub.dev" - source: hosted - version: "5.1.1" - built_value: - dependency: transitive - description: - name: built_value - sha256: "169565c8ad06adb760c3645bf71f00bff161b00002cace266cad42c5d22a7725" - url: "https://pub.dev" - source: hosted - version: "8.4.3" - characters: - dependency: transitive - description: - name: characters - sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c - url: "https://pub.dev" - source: hosted - version: "1.2.1" - checked_yaml: - dependency: transitive - description: - name: checked_yaml - sha256: "3d1505d91afa809d177efd4eed5bb0eb65805097a1463abdd2add076effae311" - url: "https://pub.dev" - source: hosted - version: "2.0.2" - clock: - dependency: transitive - description: - name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf - url: "https://pub.dev" - source: hosted - version: "1.1.1" - code_builder: - dependency: transitive - description: - name: code_builder - sha256: "0d43dd1288fd145de1ecc9a3948ad4a6d5a82f0a14c4fdd0892260787d975cbe" - url: "https://pub.dev" - source: hosted - version: "4.4.0" - collection: - dependency: transitive - description: - name: collection - sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 - url: "https://pub.dev" - source: hosted - version: "1.17.0" - convert: - dependency: transitive - description: - name: convert - sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" - url: "https://pub.dev" - source: hosted - version: "3.1.1" - crypto: - dependency: transitive - description: - name: crypto - sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 - url: "https://pub.dev" - source: hosted - version: "3.0.2" - cw_core: - dependency: "direct main" - description: - path: "../cw_core" - relative: true - source: path - version: "0.0.1" - dart_style: - dependency: transitive - description: - name: dart_style - sha256: "7a03456c3490394c8e7665890333e91ae8a49be43542b616e414449ac358acd4" - url: "https://pub.dev" - source: hosted - version: "2.2.4" - encrypt: - dependency: transitive - description: - name: encrypt - sha256: "4fd4e4fdc21b9d7d4141823e1e6515cd94e7b8d84749504c232999fba25d9bbb" - url: "https://pub.dev" - source: hosted - version: "5.0.1" - fake_async: - dependency: transitive - description: - name: fake_async - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" - url: "https://pub.dev" - source: hosted - version: "1.3.1" - ffi: - dependency: "direct main" - description: - name: ffi - sha256: "13a6ccf6a459a125b3fcdb6ec73bd5ff90822e071207c663bfd1f70062d51d18" - url: "https://pub.dev" - source: hosted - version: "1.2.1" - file: - dependency: transitive - description: - name: file - sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" - url: "https://pub.dev" - source: hosted - version: "6.1.4" - fixnum: - dependency: transitive - description: - name: fixnum - sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - flutter: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_mobx: - dependency: "direct main" - description: - name: flutter_mobx - sha256: "0da4add0016387a7bf309a0d0c41d36c6b3ae25ed7a176409267f166509e723e" - url: "https://pub.dev" - source: hosted - version: "2.0.6+5" - flutter_test: - dependency: "direct dev" - description: flutter - source: sdk - version: "0.0.0" - frontend_server_client: - dependency: transitive - description: - name: frontend_server_client - sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" - url: "https://pub.dev" - source: hosted - version: "3.2.0" - glob: - dependency: transitive - description: - name: glob - sha256: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - graphs: - dependency: transitive - description: - name: graphs - sha256: f9e130f3259f52d26f0cfc0e964513796dafed572fa52e45d2f8d6ca14db39b2 - url: "https://pub.dev" - source: hosted - version: "2.2.0" - hive: - dependency: transitive - description: - name: hive - sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941" - url: "https://pub.dev" - source: hosted - version: "2.2.3" - hive_generator: - dependency: "direct dev" - description: - name: hive_generator - sha256: "81fd20125cb2ce8fd23623d7744ffbaf653aae93706c9bd3bf7019ea0ace3938" - url: "https://pub.dev" - source: hosted - version: "1.1.3" - http: - dependency: "direct main" - description: - name: http - sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" - url: "https://pub.dev" - source: hosted - version: "0.13.5" - http_multi_server: - dependency: transitive - description: - name: http_multi_server - sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" - url: "https://pub.dev" - source: hosted - version: "3.2.1" - http_parser: - dependency: transitive - description: - name: http_parser - sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" - url: "https://pub.dev" - source: hosted - version: "4.0.2" - intl: - dependency: "direct main" - description: - name: intl - sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91" - url: "https://pub.dev" - source: hosted - version: "0.17.0" - io: - dependency: transitive - description: - name: io - sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" - url: "https://pub.dev" - source: hosted - version: "1.0.4" - js: - dependency: transitive - description: - name: js - sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" - url: "https://pub.dev" - source: hosted - version: "0.6.5" - json_annotation: - dependency: transitive - description: - name: json_annotation - sha256: c33da08e136c3df0190bd5bbe51ae1df4a7d96e7954d1d7249fea2968a72d317 - url: "https://pub.dev" - source: hosted - version: "4.8.0" - logging: - dependency: transitive - description: - name: logging - sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" - url: "https://pub.dev" - source: hosted - version: "1.1.1" - matcher: - dependency: transitive - description: - name: matcher - sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" - url: "https://pub.dev" - source: hosted - version: "0.12.13" - material_color_utilities: - dependency: transitive - description: - name: material_color_utilities - sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 - url: "https://pub.dev" - source: hosted - version: "0.2.0" - meta: - dependency: transitive - description: - name: meta - sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" - url: "https://pub.dev" - source: hosted - version: "1.8.0" - mime: - dependency: transitive - description: - name: mime - sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e - url: "https://pub.dev" - source: hosted - version: "1.0.4" - mobx: - dependency: "direct main" - description: - name: mobx - sha256: f1862bd92c6a903fab67338f27e2f731117c3cb9ea37cee1a487f9e4e0de314a - url: "https://pub.dev" - source: hosted - version: "2.1.3+1" - mobx_codegen: - dependency: "direct dev" - description: - name: mobx_codegen - sha256: "86122e410d8ea24dda0c69adb5c2a6ccadd5ce02ad46e144764e0d0184a06181" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - package_config: - dependency: transitive - description: - name: package_config - sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - path: - dependency: transitive - description: - name: path - sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b - url: "https://pub.dev" - source: hosted - version: "1.8.2" - path_provider: - dependency: "direct main" - description: - name: path_provider - sha256: dcea5feb97d8abf90cab9e9030b497fb7c3cbf26b7a1fe9e3ef7dcb0a1ddec95 - url: "https://pub.dev" - source: hosted - version: "2.0.12" - path_provider_android: - dependency: transitive - description: - name: path_provider_android - sha256: a776c088d671b27f6e3aa8881d64b87b3e80201c64e8869b811325de7a76c15e - url: "https://pub.dev" - source: hosted - version: "2.0.22" - path_provider_foundation: - dependency: transitive - description: - name: path_provider_foundation - sha256: "62a68e7e1c6c459f9289859e2fae58290c981ce21d1697faf54910fe1faa4c74" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - path_provider_linux: - dependency: transitive - description: - name: path_provider_linux - sha256: ab0987bf95bc591da42dffb38c77398fc43309f0b9b894dcc5d6f40c4b26c379 - url: "https://pub.dev" - source: hosted - version: "2.1.7" - path_provider_platform_interface: - dependency: transitive - description: - name: path_provider_platform_interface - sha256: f0abc8ebd7253741f05488b4813d936b4d07c6bae3e86148a09e342ee4b08e76 - url: "https://pub.dev" - source: hosted - version: "2.0.5" - path_provider_windows: - dependency: transitive - description: - name: path_provider_windows - sha256: a34ecd7fb548f8e57321fd8e50d865d266941b54e6c3b7758cf8f37c24116905 - url: "https://pub.dev" - source: hosted - version: "2.0.7" - platform: - dependency: transitive - description: - name: platform - sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" - url: "https://pub.dev" - source: hosted - version: "3.1.0" - plugin_platform_interface: - dependency: transitive - description: - name: plugin_platform_interface - sha256: dbf0f707c78beedc9200146ad3cb0ab4d5da13c246336987be6940f026500d3a - url: "https://pub.dev" - source: hosted - version: "2.1.3" - pointycastle: - dependency: transitive - description: - name: pointycastle - sha256: db7306cf0249f838d1a24af52b5a5887c5bf7f31d8bb4e827d071dc0939ad346 - url: "https://pub.dev" - source: hosted - version: "3.6.2" - pool: - dependency: transitive - description: - name: pool - sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" - url: "https://pub.dev" - source: hosted - version: "1.5.1" - process: - dependency: transitive - description: - name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" - url: "https://pub.dev" - source: hosted - version: "4.2.4" - pub_semver: - dependency: transitive - description: - name: pub_semver - sha256: "307de764d305289ff24ad257ad5c5793ce56d04947599ad68b3baa124105fc17" - url: "https://pub.dev" - source: hosted - version: "2.1.3" - pubspec_parse: - dependency: transitive - description: - name: pubspec_parse - sha256: "75f6614d6dde2dc68948dffbaa4fe5dae32cd700eb9fb763fe11dfb45a3c4d0a" - url: "https://pub.dev" - source: hosted - version: "1.2.1" - shelf: - dependency: transitive - description: - name: shelf - sha256: c24a96135a2ccd62c64b69315a14adc5c3419df63b4d7c05832a346fdb73682c - url: "https://pub.dev" - source: hosted - version: "1.4.0" - shelf_web_socket: - dependency: transitive - description: - name: shelf_web_socket - sha256: a988c0e8d8ffbdb8a28aa7ec8e449c260f3deb808781fe1284d22c5bba7156e8 - url: "https://pub.dev" - source: hosted - version: "1.0.3" - sky_engine: - dependency: transitive - description: flutter - source: sdk - version: "0.0.99" - source_gen: - dependency: transitive - description: - name: source_gen - sha256: "2d79738b6bbf38a43920e2b8d189e9a3ce6cc201f4b8fc76be5e4fe377b1c38d" - url: "https://pub.dev" - source: hosted - version: "1.2.6" - source_helper: - dependency: transitive - description: - name: source_helper - sha256: "3b67aade1d52416149c633ba1bb36df44d97c6b51830c2198e934e3fca87ca1f" - url: "https://pub.dev" - source: hosted - version: "1.3.3" - source_span: - dependency: transitive - description: - name: source_span - sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 - url: "https://pub.dev" - source: hosted - version: "1.9.1" - stack_trace: - dependency: transitive - description: - name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 - url: "https://pub.dev" - source: hosted - version: "1.11.0" - stream_channel: - dependency: transitive - description: - name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - stream_transform: - dependency: transitive - description: - name: stream_transform - sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - string_scanner: - dependency: transitive - description: - name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - term_glyph: - dependency: transitive - description: - name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 - url: "https://pub.dev" - source: hosted - version: "1.2.1" - test_api: - dependency: transitive - description: - name: test_api - sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 - url: "https://pub.dev" - source: hosted - version: "0.4.16" - timing: - dependency: transitive - description: - name: timing - sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" - url: "https://pub.dev" - source: hosted - version: "1.0.1" - typed_data: - dependency: transitive - description: - name: typed_data - sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" - url: "https://pub.dev" - source: hosted - version: "1.3.1" - vector_math: - dependency: transitive - description: - name: vector_math - sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - watcher: - dependency: transitive - description: - name: watcher - sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" - url: "https://pub.dev" - source: hosted - version: "1.0.2" - web_socket_channel: - dependency: transitive - description: - name: web_socket_channel - sha256: ca49c0bc209c687b887f30527fb6a9d80040b072cc2990f34b9bec3e7663101b - url: "https://pub.dev" - source: hosted - version: "2.3.0" - win32: - dependency: transitive - description: - name: win32 - sha256: c0e3a4f7be7dae51d8f152230b86627e3397c1ba8c3fa58e63d44a9f3edc9cef - url: "https://pub.dev" - source: hosted - version: "2.6.1" - xdg_directories: - dependency: transitive - description: - name: xdg_directories - sha256: bd512f03919aac5f1313eb8249f223bacf4927031bf60b02601f81f687689e86 - url: "https://pub.dev" - source: hosted - version: "0.2.0+3" - yaml: - dependency: transitive - description: - name: yaml - sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" - url: "https://pub.dev" - source: hosted - version: "3.1.1" -sdks: - dart: ">=2.19.0 <3.0.0" - flutter: ">=3.0.0" diff --git a/cw_monero/.gitignore b/cw_monero/.gitignore index c8bb78494..fdc2e5ac7 100644 --- a/cw_monero/.gitignore +++ b/cw_monero/.gitignore @@ -3,6 +3,7 @@ .packages .pub/ +/pubspec.lock build/ diff --git a/cw_monero/pubspec.lock b/cw_monero/pubspec.lock deleted file mode 100644 index d75ee0928..000000000 --- a/cw_monero/pubspec.lock +++ /dev/null @@ -1,676 +0,0 @@ -# Generated by pub -# See https://dart.dev/tools/pub/glossary#lockfile -packages: - _fe_analyzer_shared: - dependency: transitive - description: - name: _fe_analyzer_shared - sha256: "4897882604d919befd350648c7f91926a9d5de99e67b455bf0917cc2362f4bb8" - url: "https://pub.dev" - source: hosted - version: "47.0.0" - analyzer: - dependency: transitive - description: - name: analyzer - sha256: "690e335554a8385bc9d787117d9eb52c0c03ee207a607e593de3c9d71b1cfe80" - url: "https://pub.dev" - source: hosted - version: "4.7.0" - args: - dependency: transitive - description: - name: args - sha256: "139d809800a412ebb26a3892da228b2d0ba36f0ef5d9a82166e5e52ec8d61611" - url: "https://pub.dev" - source: hosted - version: "2.3.2" - asn1lib: - dependency: transitive - description: - name: asn1lib - sha256: ab96a1cb3beeccf8145c52e449233fe68364c9641623acd3adad66f8184f1039 - url: "https://pub.dev" - source: hosted - version: "1.4.0" - async: - dependency: transitive - description: - name: async - sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 - url: "https://pub.dev" - source: hosted - version: "2.10.0" - boolean_selector: - dependency: transitive - description: - name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - build: - dependency: transitive - description: - name: build - sha256: "3fbda25365741f8251b39f3917fb3c8e286a96fd068a5a242e11c2012d495777" - url: "https://pub.dev" - source: hosted - version: "2.3.1" - build_config: - dependency: transitive - description: - name: build_config - sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 - url: "https://pub.dev" - source: hosted - version: "1.1.1" - build_daemon: - dependency: transitive - description: - name: build_daemon - sha256: "6bc5544ea6ce4428266e7ea680e945c68806c4aae2da0eb5e9ccf38df8d6acbf" - url: "https://pub.dev" - source: hosted - version: "3.1.0" - build_resolvers: - dependency: "direct dev" - description: - name: build_resolvers - sha256: "687cf90a3951affac1bd5f9ecb5e3e90b60487f3d9cdc359bb310f8876bb02a6" - url: "https://pub.dev" - source: hosted - version: "2.0.10" - build_runner: - dependency: "direct dev" - description: - name: build_runner - sha256: b0a8a7b8a76c493e85f1b84bffa0588859a06197863dba8c9036b15581fd9727 - url: "https://pub.dev" - source: hosted - version: "2.3.3" - build_runner_core: - dependency: transitive - description: - name: build_runner_core - sha256: "14febe0f5bac5ae474117a36099b4de6f1dbc52df6c5e55534b3da9591bf4292" - url: "https://pub.dev" - source: hosted - version: "7.2.7" - built_collection: - dependency: transitive - description: - name: built_collection - sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" - url: "https://pub.dev" - source: hosted - version: "5.1.1" - built_value: - dependency: transitive - description: - name: built_value - sha256: "169565c8ad06adb760c3645bf71f00bff161b00002cace266cad42c5d22a7725" - url: "https://pub.dev" - source: hosted - version: "8.4.3" - characters: - dependency: transitive - description: - name: characters - sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c - url: "https://pub.dev" - source: hosted - version: "1.2.1" - checked_yaml: - dependency: transitive - description: - name: checked_yaml - sha256: "3d1505d91afa809d177efd4eed5bb0eb65805097a1463abdd2add076effae311" - url: "https://pub.dev" - source: hosted - version: "2.0.2" - clock: - dependency: transitive - description: - name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf - url: "https://pub.dev" - source: hosted - version: "1.1.1" - code_builder: - dependency: transitive - description: - name: code_builder - sha256: "0d43dd1288fd145de1ecc9a3948ad4a6d5a82f0a14c4fdd0892260787d975cbe" - url: "https://pub.dev" - source: hosted - version: "4.4.0" - collection: - dependency: transitive - description: - name: collection - sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 - url: "https://pub.dev" - source: hosted - version: "1.17.0" - convert: - dependency: transitive - description: - name: convert - sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" - url: "https://pub.dev" - source: hosted - version: "3.1.1" - crypto: - dependency: transitive - description: - name: crypto - sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 - url: "https://pub.dev" - source: hosted - version: "3.0.2" - cw_core: - dependency: "direct main" - description: - path: "../cw_core" - relative: true - source: path - version: "0.0.1" - dart_style: - dependency: transitive - description: - name: dart_style - sha256: "7a03456c3490394c8e7665890333e91ae8a49be43542b616e414449ac358acd4" - url: "https://pub.dev" - source: hosted - version: "2.2.4" - encrypt: - dependency: "direct main" - description: - name: encrypt - sha256: "4fd4e4fdc21b9d7d4141823e1e6515cd94e7b8d84749504c232999fba25d9bbb" - url: "https://pub.dev" - source: hosted - version: "5.0.1" - fake_async: - dependency: transitive - description: - name: fake_async - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" - url: "https://pub.dev" - source: hosted - version: "1.3.1" - ffi: - dependency: "direct main" - description: - name: ffi - sha256: "13a6ccf6a459a125b3fcdb6ec73bd5ff90822e071207c663bfd1f70062d51d18" - url: "https://pub.dev" - source: hosted - version: "1.2.1" - file: - dependency: transitive - description: - name: file - sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" - url: "https://pub.dev" - source: hosted - version: "6.1.4" - fixnum: - dependency: transitive - description: - name: fixnum - sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - flutter: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_mobx: - dependency: "direct main" - description: - name: flutter_mobx - sha256: "0da4add0016387a7bf309a0d0c41d36c6b3ae25ed7a176409267f166509e723e" - url: "https://pub.dev" - source: hosted - version: "2.0.6+5" - flutter_test: - dependency: "direct dev" - description: flutter - source: sdk - version: "0.0.0" - frontend_server_client: - dependency: transitive - description: - name: frontend_server_client - sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" - url: "https://pub.dev" - source: hosted - version: "3.2.0" - glob: - dependency: transitive - description: - name: glob - sha256: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - graphs: - dependency: transitive - description: - name: graphs - sha256: f9e130f3259f52d26f0cfc0e964513796dafed572fa52e45d2f8d6ca14db39b2 - url: "https://pub.dev" - source: hosted - version: "2.2.0" - hive: - dependency: transitive - description: - name: hive - sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941" - url: "https://pub.dev" - source: hosted - version: "2.2.3" - hive_generator: - dependency: "direct dev" - description: - name: hive_generator - sha256: "81fd20125cb2ce8fd23623d7744ffbaf653aae93706c9bd3bf7019ea0ace3938" - url: "https://pub.dev" - source: hosted - version: "1.1.3" - http: - dependency: "direct main" - description: - name: http - sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" - url: "https://pub.dev" - source: hosted - version: "0.13.5" - http_multi_server: - dependency: transitive - description: - name: http_multi_server - sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" - url: "https://pub.dev" - source: hosted - version: "3.2.1" - http_parser: - dependency: transitive - description: - name: http_parser - sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" - url: "https://pub.dev" - source: hosted - version: "4.0.2" - intl: - dependency: "direct main" - description: - name: intl - sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91" - url: "https://pub.dev" - source: hosted - version: "0.17.0" - io: - dependency: transitive - description: - name: io - sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" - url: "https://pub.dev" - source: hosted - version: "1.0.4" - js: - dependency: transitive - description: - name: js - sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" - url: "https://pub.dev" - source: hosted - version: "0.6.5" - json_annotation: - dependency: transitive - description: - name: json_annotation - sha256: c33da08e136c3df0190bd5bbe51ae1df4a7d96e7954d1d7249fea2968a72d317 - url: "https://pub.dev" - source: hosted - version: "4.8.0" - logging: - dependency: transitive - description: - name: logging - sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" - url: "https://pub.dev" - source: hosted - version: "1.1.1" - matcher: - dependency: transitive - description: - name: matcher - sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" - url: "https://pub.dev" - source: hosted - version: "0.12.13" - material_color_utilities: - dependency: transitive - description: - name: material_color_utilities - sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 - url: "https://pub.dev" - source: hosted - version: "0.2.0" - meta: - dependency: transitive - description: - name: meta - sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" - url: "https://pub.dev" - source: hosted - version: "1.8.0" - mime: - dependency: transitive - description: - name: mime - sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e - url: "https://pub.dev" - source: hosted - version: "1.0.4" - mobx: - dependency: "direct main" - description: - name: mobx - sha256: f1862bd92c6a903fab67338f27e2f731117c3cb9ea37cee1a487f9e4e0de314a - url: "https://pub.dev" - source: hosted - version: "2.1.3+1" - mobx_codegen: - dependency: "direct dev" - description: - name: mobx_codegen - sha256: "86122e410d8ea24dda0c69adb5c2a6ccadd5ce02ad46e144764e0d0184a06181" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - package_config: - dependency: transitive - description: - name: package_config - sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - path: - dependency: transitive - description: - name: path - sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b - url: "https://pub.dev" - source: hosted - version: "1.8.2" - path_provider: - dependency: "direct main" - description: - name: path_provider - sha256: dcea5feb97d8abf90cab9e9030b497fb7c3cbf26b7a1fe9e3ef7dcb0a1ddec95 - url: "https://pub.dev" - source: hosted - version: "2.0.12" - path_provider_android: - dependency: transitive - description: - name: path_provider_android - sha256: a776c088d671b27f6e3aa8881d64b87b3e80201c64e8869b811325de7a76c15e - url: "https://pub.dev" - source: hosted - version: "2.0.22" - path_provider_foundation: - dependency: transitive - description: - name: path_provider_foundation - sha256: "62a68e7e1c6c459f9289859e2fae58290c981ce21d1697faf54910fe1faa4c74" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - path_provider_linux: - dependency: transitive - description: - name: path_provider_linux - sha256: ab0987bf95bc591da42dffb38c77398fc43309f0b9b894dcc5d6f40c4b26c379 - url: "https://pub.dev" - source: hosted - version: "2.1.7" - path_provider_platform_interface: - dependency: transitive - description: - name: path_provider_platform_interface - sha256: f0abc8ebd7253741f05488b4813d936b4d07c6bae3e86148a09e342ee4b08e76 - url: "https://pub.dev" - source: hosted - version: "2.0.5" - path_provider_windows: - dependency: transitive - description: - name: path_provider_windows - sha256: a34ecd7fb548f8e57321fd8e50d865d266941b54e6c3b7758cf8f37c24116905 - url: "https://pub.dev" - source: hosted - version: "2.0.7" - platform: - dependency: transitive - description: - name: platform - sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" - url: "https://pub.dev" - source: hosted - version: "3.1.0" - plugin_platform_interface: - dependency: transitive - description: - name: plugin_platform_interface - sha256: dbf0f707c78beedc9200146ad3cb0ab4d5da13c246336987be6940f026500d3a - url: "https://pub.dev" - source: hosted - version: "2.1.3" - pointycastle: - dependency: transitive - description: - name: pointycastle - sha256: db7306cf0249f838d1a24af52b5a5887c5bf7f31d8bb4e827d071dc0939ad346 - url: "https://pub.dev" - source: hosted - version: "3.6.2" - pool: - dependency: transitive - description: - name: pool - sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" - url: "https://pub.dev" - source: hosted - version: "1.5.1" - process: - dependency: transitive - description: - name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" - url: "https://pub.dev" - source: hosted - version: "4.2.4" - pub_semver: - dependency: transitive - description: - name: pub_semver - sha256: "307de764d305289ff24ad257ad5c5793ce56d04947599ad68b3baa124105fc17" - url: "https://pub.dev" - source: hosted - version: "2.1.3" - pubspec_parse: - dependency: transitive - description: - name: pubspec_parse - sha256: "75f6614d6dde2dc68948dffbaa4fe5dae32cd700eb9fb763fe11dfb45a3c4d0a" - url: "https://pub.dev" - source: hosted - version: "1.2.1" - shelf: - dependency: transitive - description: - name: shelf - sha256: c24a96135a2ccd62c64b69315a14adc5c3419df63b4d7c05832a346fdb73682c - url: "https://pub.dev" - source: hosted - version: "1.4.0" - shelf_web_socket: - dependency: transitive - description: - name: shelf_web_socket - sha256: a988c0e8d8ffbdb8a28aa7ec8e449c260f3deb808781fe1284d22c5bba7156e8 - url: "https://pub.dev" - source: hosted - version: "1.0.3" - sky_engine: - dependency: transitive - description: flutter - source: sdk - version: "0.0.99" - source_gen: - dependency: transitive - description: - name: source_gen - sha256: "2d79738b6bbf38a43920e2b8d189e9a3ce6cc201f4b8fc76be5e4fe377b1c38d" - url: "https://pub.dev" - source: hosted - version: "1.2.6" - source_helper: - dependency: transitive - description: - name: source_helper - sha256: "3b67aade1d52416149c633ba1bb36df44d97c6b51830c2198e934e3fca87ca1f" - url: "https://pub.dev" - source: hosted - version: "1.3.3" - source_span: - dependency: transitive - description: - name: source_span - sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 - url: "https://pub.dev" - source: hosted - version: "1.9.1" - stack_trace: - dependency: transitive - description: - name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 - url: "https://pub.dev" - source: hosted - version: "1.11.0" - stream_channel: - dependency: transitive - description: - name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - stream_transform: - dependency: transitive - description: - name: stream_transform - sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - string_scanner: - dependency: transitive - description: - name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - term_glyph: - dependency: transitive - description: - name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 - url: "https://pub.dev" - source: hosted - version: "1.2.1" - test_api: - dependency: transitive - description: - name: test_api - sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 - url: "https://pub.dev" - source: hosted - version: "0.4.16" - timing: - dependency: transitive - description: - name: timing - sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" - url: "https://pub.dev" - source: hosted - version: "1.0.1" - typed_data: - dependency: transitive - description: - name: typed_data - sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" - url: "https://pub.dev" - source: hosted - version: "1.3.1" - vector_math: - dependency: transitive - description: - name: vector_math - sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - watcher: - dependency: transitive - description: - name: watcher - sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" - url: "https://pub.dev" - source: hosted - version: "1.0.2" - web_socket_channel: - dependency: transitive - description: - name: web_socket_channel - sha256: ca49c0bc209c687b887f30527fb6a9d80040b072cc2990f34b9bec3e7663101b - url: "https://pub.dev" - source: hosted - version: "2.3.0" - win32: - dependency: transitive - description: - name: win32 - sha256: c0e3a4f7be7dae51d8f152230b86627e3397c1ba8c3fa58e63d44a9f3edc9cef - url: "https://pub.dev" - source: hosted - version: "2.6.1" - xdg_directories: - dependency: transitive - description: - name: xdg_directories - sha256: bd512f03919aac5f1313eb8249f223bacf4927031bf60b02601f81f687689e86 - url: "https://pub.dev" - source: hosted - version: "0.2.0+3" - yaml: - dependency: transitive - description: - name: yaml - sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" - url: "https://pub.dev" - source: hosted - version: "3.1.1" -sdks: - dart: ">=2.19.0 <3.0.0" - flutter: ">=3.0.0" diff --git a/cw_shared_external/.gitignore b/cw_shared_external/.gitignore index e9dc58d3d..1b976a50e 100644 --- a/cw_shared_external/.gitignore +++ b/cw_shared_external/.gitignore @@ -3,5 +3,6 @@ .packages .pub/ +/pubspec.lock build/ diff --git a/cw_shared_external/pubspec.lock b/cw_shared_external/pubspec.lock deleted file mode 100644 index ef01c9f9a..000000000 --- a/cw_shared_external/pubspec.lock +++ /dev/null @@ -1,147 +0,0 @@ -# Generated by pub -# See https://dart.dev/tools/pub/glossary#lockfile -packages: - async: - dependency: transitive - description: - name: async - url: "https://pub.dartlang.org" - source: hosted - version: "2.5.0" - boolean_selector: - dependency: transitive - description: - name: boolean_selector - url: "https://pub.dartlang.org" - source: hosted - version: "2.1.0" - characters: - dependency: transitive - description: - name: characters - url: "https://pub.dartlang.org" - source: hosted - version: "1.1.0" - charcode: - dependency: transitive - description: - name: charcode - url: "https://pub.dartlang.org" - source: hosted - version: "1.2.0" - clock: - dependency: transitive - description: - name: clock - url: "https://pub.dartlang.org" - source: hosted - version: "1.1.0" - collection: - dependency: transitive - description: - name: collection - url: "https://pub.dartlang.org" - source: hosted - version: "1.15.0" - fake_async: - dependency: transitive - description: - name: fake_async - url: "https://pub.dartlang.org" - source: hosted - version: "1.2.0" - flutter: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_test: - dependency: "direct dev" - description: flutter - source: sdk - version: "0.0.0" - matcher: - dependency: transitive - description: - name: matcher - url: "https://pub.dartlang.org" - source: hosted - version: "0.12.10" - meta: - dependency: transitive - description: - name: meta - url: "https://pub.dartlang.org" - source: hosted - version: "1.3.0" - path: - dependency: transitive - description: - name: path - url: "https://pub.dartlang.org" - source: hosted - version: "1.8.0" - sky_engine: - dependency: transitive - description: flutter - source: sdk - version: "0.0.99" - source_span: - dependency: transitive - description: - name: source_span - url: "https://pub.dartlang.org" - source: hosted - version: "1.8.0" - stack_trace: - dependency: transitive - description: - name: stack_trace - url: "https://pub.dartlang.org" - source: hosted - version: "1.10.0" - stream_channel: - dependency: transitive - description: - name: stream_channel - url: "https://pub.dartlang.org" - source: hosted - version: "2.1.0" - string_scanner: - dependency: transitive - description: - name: string_scanner - url: "https://pub.dartlang.org" - source: hosted - version: "1.1.0" - term_glyph: - dependency: transitive - description: - name: term_glyph - url: "https://pub.dartlang.org" - source: hosted - version: "1.2.0" - test_api: - dependency: transitive - description: - name: test_api - url: "https://pub.dartlang.org" - source: hosted - version: "0.2.19" - typed_data: - dependency: transitive - description: - name: typed_data - url: "https://pub.dartlang.org" - source: hosted - version: "1.3.0" - vector_math: - dependency: transitive - description: - name: vector_math - url: "https://pub.dartlang.org" - source: hosted - version: "2.1.0" -sdks: - dart: ">=2.12.0-0.0 <3.0.0" - flutter: ">=1.20.0" diff --git a/ios/Podfile.lock b/ios/Podfile.lock deleted file mode 100644 index 3a810430d..000000000 --- a/ios/Podfile.lock +++ /dev/null @@ -1,255 +0,0 @@ -PODS: - - barcode_scan2 (0.0.1): - - Flutter - - MTBBarcodeScanner - - SwiftProtobuf - - BigInt (5.2.0) - - connectivity (0.0.1): - - Flutter - - Reachability - - CryptoSwift (1.3.2) - - cw_haven (0.0.1): - - cw_haven/Boost (= 0.0.1) - - cw_haven/Haven (= 0.0.1) - - cw_haven/OpenSSL (= 0.0.1) - - cw_haven/Sodium (= 0.0.1) - - cw_shared_external - - Flutter - - cw_haven/Boost (0.0.1): - - cw_shared_external - - Flutter - - cw_haven/Haven (0.0.1): - - cw_shared_external - - Flutter - - cw_haven/OpenSSL (0.0.1): - - cw_shared_external - - Flutter - - cw_haven/Sodium (0.0.1): - - cw_shared_external - - Flutter - - cw_monero (0.0.2): - - cw_monero/Boost (= 0.0.2) - - cw_monero/Monero (= 0.0.2) - - cw_monero/OpenSSL (= 0.0.2) - - cw_monero/Sodium (= 0.0.2) - - cw_monero/Unbound (= 0.0.2) - - cw_shared_external - - Flutter - - cw_monero/Boost (0.0.2): - - cw_shared_external - - Flutter - - cw_monero/Monero (0.0.2): - - cw_shared_external - - Flutter - - cw_monero/OpenSSL (0.0.2): - - cw_shared_external - - Flutter - - cw_monero/Sodium (0.0.2): - - cw_shared_external - - Flutter - - cw_monero/Unbound (0.0.2): - - cw_shared_external - - Flutter - - cw_shared_external (0.0.1): - - cw_shared_external/Boost (= 0.0.1) - - cw_shared_external/OpenSSL (= 0.0.1) - - cw_shared_external/Sodium (= 0.0.1) - - Flutter - - cw_shared_external/Boost (0.0.1): - - Flutter - - cw_shared_external/OpenSSL (0.0.1): - - Flutter - - cw_shared_external/Sodium (0.0.1): - - Flutter - - device_display_brightness (0.0.1): - - Flutter - - device_info (0.0.1): - - Flutter - - devicelocale (0.0.1): - - Flutter - - DKImagePickerController/Core (4.3.2): - - DKImagePickerController/ImageDataManager - - DKImagePickerController/Resource - - DKImagePickerController/ImageDataManager (4.3.2) - - DKImagePickerController/PhotoGallery (4.3.2): - - DKImagePickerController/Core - - DKPhotoGallery - - DKImagePickerController/Resource (4.3.2) - - DKPhotoGallery (0.0.17): - - DKPhotoGallery/Core (= 0.0.17) - - DKPhotoGallery/Model (= 0.0.17) - - DKPhotoGallery/Preview (= 0.0.17) - - DKPhotoGallery/Resource (= 0.0.17) - - SDWebImage - - SwiftyGif - - DKPhotoGallery/Core (0.0.17): - - DKPhotoGallery/Model - - DKPhotoGallery/Preview - - SDWebImage - - SwiftyGif - - DKPhotoGallery/Model (0.0.17): - - SDWebImage - - SwiftyGif - - DKPhotoGallery/Preview (0.0.17): - - DKPhotoGallery/Model - - DKPhotoGallery/Resource - - SDWebImage - - SwiftyGif - - DKPhotoGallery/Resource (0.0.17): - - SDWebImage - - SwiftyGif - - file_picker (0.0.1): - - DKImagePickerController/PhotoGallery - - Flutter - - Flutter (1.0.0) - - flutter_secure_storage (3.3.1): - - Flutter - - local_auth_ios (0.0.1): - - Flutter - - MTBBarcodeScanner (5.0.11) - - package_info (0.0.1): - - Flutter - - path_provider_ios (0.0.1): - - Flutter - - permission_handler_apple (9.0.4): - - Flutter - - platform_device_id (0.0.1): - - Flutter - - Reachability (3.2) - - SDWebImage (5.9.1): - - SDWebImage/Core (= 5.9.1) - - SDWebImage/Core (5.9.1) - - share_plus (0.0.1): - - Flutter - - shared_preferences_ios (0.0.1): - - Flutter - - SwiftProtobuf (1.18.0) - - SwiftyGif (5.3.0) - - uni_links (0.0.1): - - Flutter - - UnstoppableDomainsResolution (4.0.0): - - BigInt - - CryptoSwift - - url_launcher_ios (0.0.1): - - Flutter - - webview_flutter_wkwebview (0.0.1): - - Flutter - -DEPENDENCIES: - - barcode_scan2 (from `.symlinks/plugins/barcode_scan2/ios`) - - connectivity (from `.symlinks/plugins/connectivity/ios`) - - CryptoSwift - - cw_haven (from `.symlinks/plugins/cw_haven/ios`) - - cw_monero (from `.symlinks/plugins/cw_monero/ios`) - - cw_shared_external (from `.symlinks/plugins/cw_shared_external/ios`) - - device_display_brightness (from `.symlinks/plugins/device_display_brightness/ios`) - - device_info (from `.symlinks/plugins/device_info/ios`) - - devicelocale (from `.symlinks/plugins/devicelocale/ios`) - - file_picker (from `.symlinks/plugins/file_picker/ios`) - - Flutter (from `Flutter`) - - flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`) - - local_auth_ios (from `.symlinks/plugins/local_auth_ios/ios`) - - package_info (from `.symlinks/plugins/package_info/ios`) - - path_provider_ios (from `.symlinks/plugins/path_provider_ios/ios`) - - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`) - - platform_device_id (from `.symlinks/plugins/platform_device_id/ios`) - - share_plus (from `.symlinks/plugins/share_plus/ios`) - - shared_preferences_ios (from `.symlinks/plugins/shared_preferences_ios/ios`) - - uni_links (from `.symlinks/plugins/uni_links/ios`) - - UnstoppableDomainsResolution (~> 4.0.0) - - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) - - webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`) - -SPEC REPOS: - https://github.com/CocoaPods/Specs.git: - - BigInt - - CryptoSwift - - DKImagePickerController - - DKPhotoGallery - - MTBBarcodeScanner - - Reachability - - SDWebImage - - SwiftProtobuf - - SwiftyGif - - UnstoppableDomainsResolution - -EXTERNAL SOURCES: - barcode_scan2: - :path: ".symlinks/plugins/barcode_scan2/ios" - connectivity: - :path: ".symlinks/plugins/connectivity/ios" - cw_haven: - :path: ".symlinks/plugins/cw_haven/ios" - cw_monero: - :path: ".symlinks/plugins/cw_monero/ios" - cw_shared_external: - :path: ".symlinks/plugins/cw_shared_external/ios" - device_display_brightness: - :path: ".symlinks/plugins/device_display_brightness/ios" - device_info: - :path: ".symlinks/plugins/device_info/ios" - devicelocale: - :path: ".symlinks/plugins/devicelocale/ios" - file_picker: - :path: ".symlinks/plugins/file_picker/ios" - Flutter: - :path: Flutter - flutter_secure_storage: - :path: ".symlinks/plugins/flutter_secure_storage/ios" - local_auth_ios: - :path: ".symlinks/plugins/local_auth_ios/ios" - package_info: - :path: ".symlinks/plugins/package_info/ios" - path_provider_ios: - :path: ".symlinks/plugins/path_provider_ios/ios" - permission_handler_apple: - :path: ".symlinks/plugins/permission_handler_apple/ios" - platform_device_id: - :path: ".symlinks/plugins/platform_device_id/ios" - share_plus: - :path: ".symlinks/plugins/share_plus/ios" - shared_preferences_ios: - :path: ".symlinks/plugins/shared_preferences_ios/ios" - uni_links: - :path: ".symlinks/plugins/uni_links/ios" - url_launcher_ios: - :path: ".symlinks/plugins/url_launcher_ios/ios" - webview_flutter_wkwebview: - :path: ".symlinks/plugins/webview_flutter_wkwebview/ios" - -SPEC CHECKSUMS: - barcode_scan2: 0af2bb63c81b4565aab6cd78278e4c0fa136dbb0 - BigInt: f668a80089607f521586bbe29513d708491ef2f7 - connectivity: c4130b2985d4ef6fd26f9702e886bd5260681467 - CryptoSwift: 093499be1a94b0cae36e6c26b70870668cb56060 - cw_haven: b3e54e1fbe7b8e6fda57a93206bc38f8e89b898a - cw_monero: 4cf3b96f2da8e95e2ef7d6703dd4d2c509127b7d - cw_shared_external: 2972d872b8917603478117c9957dfca611845a92 - device_display_brightness: 1510e72c567a1f6ce6ffe393dcd9afd1426034f7 - device_info: d7d233b645a32c40dfdc212de5cf646ca482f175 - devicelocale: b22617f40038496deffba44747101255cee005b0 - DKImagePickerController: b5eb7f7a388e4643264105d648d01f727110fc3d - DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179 - file_picker: 817ab1d8cd2da9d2da412a417162deee3500fc95 - Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 - flutter_secure_storage: 7953c38a04c3fdbb00571bcd87d8e3b5ceb9daec - local_auth_ios: 0d333dde7780f669e66f19d2ff6005f3ea84008d - MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb - package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62 - path_provider_ios: 14f3d2fd28c4fdb42f44e0f751d12861c43cee02 - permission_handler_apple: 44366e37eaf29454a1e7b1b7d736c2cceaeb17ce - platform_device_id: 81b3e2993881f87d0c82ef151dc274df4869aef5 - Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96 - SDWebImage: a990c053fff71e388a10f3357edb0be17929c9c5 - share_plus: 056a1e8ac890df3e33cb503afffaf1e9b4fbae68 - shared_preferences_ios: 548a61f8053b9b8a49ac19c1ffbc8b92c50d68ad - SwiftProtobuf: c3c12645230d9b09c72267e0de89468c5543bd86 - SwiftyGif: e466e86c660d343357ab944a819a101c4127cb40 - uni_links: d97da20c7701486ba192624d99bffaaffcfc298a - UnstoppableDomainsResolution: c3c67f4d0a5e2437cb00d4bd50c2e00d6e743841 - url_launcher_ios: 839c58cdb4279282219f5e248c3321761ff3c4de - webview_flutter_wkwebview: b7e70ef1ddded7e69c796c7390ee74180182971f - -PODFILE CHECKSUM: ae71bdf0eb731a1ffc399c122f6aa4dea0cb5f6f - -COCOAPODS: 1.11.3 From fa54ebe855bcb2d18cd47df70aff3394374bbb7c Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Wed, 8 Feb 2023 17:01:23 +0200 Subject: [PATCH 114/190] Fix popup null context as it was using a dismissed (unmounted) context [skip ci] --- .../exchange_trade/exchange_trade_page.dart | 232 +++++++++--------- lib/utils/show_pop_up.dart | 19 +- 2 files changed, 126 insertions(+), 125 deletions(-) diff --git a/lib/src/screens/exchange_trade/exchange_trade_page.dart b/lib/src/screens/exchange_trade/exchange_trade_page.dart index 1fe4983f6..f56ae6b2a 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( @@ -234,7 +234,7 @@ class ExchangeTradeState extends State { ); } - void _setEffects(BuildContext context) { + void _setEffects() { if (_effectsInstalled) { return; } @@ -245,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()); }); }); } @@ -259,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 @@ -385,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()); }); }); } @@ -398,4 +304,102 @@ class ExchangeTradeState extends State { _effectsInstalled = true; } + + 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/utils/show_pop_up.dart b/lib/utils/show_pop_up.dart index 66748f6c2..d9bc26162 100644 --- a/lib/utils/show_pop_up.dart +++ b/lib/utils/show_pop_up.dart @@ -9,15 +9,12 @@ Future showPopUp({ bool useRootNavigator = true, RouteSettings? routeSettings }) async { - if (context.mounted) { - return showDialog( - context: context, - builder: builder, - barrierDismissible: barrierDismissible, - barrierColor: barrierColor, - useSafeArea: useSafeArea, - useRootNavigator: useRootNavigator, - routeSettings: routeSettings); - } - return null; + return showDialog( + context: context, + builder: builder, + barrierDismissible: barrierDismissible, + barrierColor: barrierColor, + useSafeArea: useSafeArea, + useRootNavigator: useRootNavigator, + routeSettings: routeSettings); } From 9a5244ffedb75cf13e8364ca09260c49159825c6 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Wed, 8 Feb 2023 17:12:41 +0200 Subject: [PATCH 115/190] Revert changes to show_pop_up.dart --- lib/utils/show_pop_up.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/utils/show_pop_up.dart b/lib/utils/show_pop_up.dart index d9bc26162..190b2a6d7 100644 --- a/lib/utils/show_pop_up.dart +++ b/lib/utils/show_pop_up.dart @@ -8,7 +8,7 @@ Future showPopUp({ bool useSafeArea = false, bool useRootNavigator = true, RouteSettings? routeSettings -}) async { +}) { return showDialog( context: context, builder: builder, From 27f242a5ee251ce1a6961a5bf4a7e7945a93a586 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Wed, 8 Feb 2023 18:45:38 +0200 Subject: [PATCH 116/190] Use view model variable `hasRescan` instead [skip ci] --- lib/src/screens/settings/connection_sync_page.dart | 3 +-- lib/view_model/dashboard/dashboard_view_model.dart | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/src/screens/settings/connection_sync_page.dart b/lib/src/screens/settings/connection_sync_page.dart index bef196d60..9d2ce3cda 100644 --- a/lib/src/screens/settings/connection_sync_page.dart +++ b/lib/src/screens/settings/connection_sync_page.dart @@ -36,8 +36,7 @@ class ConnectionSyncPage extends BasePage { handler: (context) => _presentReconnectAlert(context), ), StandardListSeparator(padding: EdgeInsets.symmetric(horizontal: 24)), - if (dashboardViewModel.type != WalletType.bitcoin && - dashboardViewModel.type != WalletType.litecoin) + if (dashboardViewModel.hasRescan) SettingsCellWithArrow( title: S.current.rescan, handler: (context) => Navigator.of(context).pushNamed(Routes.rescan), 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; From c10105872c2318df6a5738583cc57c31b2c389ed Mon Sep 17 00:00:00 2001 From: Serhii Date: Wed, 8 Feb 2023 18:47:12 +0200 Subject: [PATCH 117/190] add number of confirmations to transactions --- cw_haven/lib/haven_transaction_info.dart | 6 +++- cw_monero/lib/monero_transaction_info.dart | 6 +++- .../dashboard/widgets/transaction_raw.dart | 9 ++---- .../dashboard/widgets/transactions_page.dart | 3 +- .../dashboard/transaction_list_item.dart | 31 +++++++++++++++++++ 5 files changed, 46 insertions(+), 9 deletions(-) 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_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/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/view_model/dashboard/transaction_list_item.dart b/lib/view_model/dashboard/transaction_list_item.dart index 35f30a937..19e93218d 100644 --- a/lib/view_model/dashboard/transaction_list_item.dart +++ b/lib/view_model/dashboard/transaction_list_item.dart @@ -1,5 +1,6 @@ import 'package:cake_wallet/entities/balance_display_mode.dart'; import 'package:cake_wallet/entities/fiat_currency.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 +12,8 @@ import 'package:cake_wallet/view_model/dashboard/balance_view_model.dart'; import 'package:cw_core/keyable.dart'; import 'package:cw_core/wallet_type.dart'; +import '../../generated/i18n.dart'; + class TransactionListItem extends ActionListItem with Keyable { TransactionListItem( {required this.transaction, @@ -35,6 +38,34 @@ 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) { + return S.current.pending; + } + if (transaction.confirmations > 0 && transaction.height < 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 transaction.isPending ? formattedPendingStatus : ''; + } + return transaction.isPending ? S.current.pending : ''; + } + return transaction.isPending ? S.current.pending : ''; + } String get formattedFiatAmount { var amount = ''; From 318e3b92e51c79c7a4e36fdf833665efa3d3faa1 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Wed, 8 Feb 2023 19:25:37 +0200 Subject: [PATCH 118/190] Revert "Add pubspec.lock files and Podfile.lock to .gitignore [skip ci]" This reverts commit 50641e2ddca9570ac26012519de7ab67faf31ee9. --- .gitignore | 1 - cw_bitcoin/.gitignore | 1 - cw_bitcoin/pubspec.lock | 750 ++++++++++++++++++++++++++++++++ cw_core/.gitignore | 1 - cw_core/pubspec.lock | 669 ++++++++++++++++++++++++++++ cw_haven/.gitignore | 1 - cw_haven/pubspec.lock | 676 ++++++++++++++++++++++++++++ cw_monero/.gitignore | 1 - cw_monero/pubspec.lock | 676 ++++++++++++++++++++++++++++ cw_shared_external/.gitignore | 1 - cw_shared_external/pubspec.lock | 147 +++++++ ios/Podfile.lock | 255 +++++++++++ 12 files changed, 3173 insertions(+), 6 deletions(-) create mode 100644 cw_bitcoin/pubspec.lock create mode 100644 cw_core/pubspec.lock create mode 100644 cw_haven/pubspec.lock create mode 100644 cw_monero/pubspec.lock create mode 100644 cw_shared_external/pubspec.lock create mode 100644 ios/Podfile.lock diff --git a/.gitignore b/.gitignore index d8714290b..7e3f38beb 100644 --- a/.gitignore +++ b/.gitignore @@ -133,6 +133,5 @@ assets/images/app_logo.png /pubspec.yaml /pubspec.lock -/ios/podfile.lock /android/app.properties /android/app/src/main/AndroidManifest.xml diff --git a/cw_bitcoin/.gitignore b/cw_bitcoin/.gitignore index 612ef20be..1985397a2 100644 --- a/cw_bitcoin/.gitignore +++ b/cw_bitcoin/.gitignore @@ -8,7 +8,6 @@ .buildlog/ .history .svn/ -/pubspec.lock # IntelliJ related *.iml diff --git a/cw_bitcoin/pubspec.lock b/cw_bitcoin/pubspec.lock new file mode 100644 index 000000000..bfcd9e5a6 --- /dev/null +++ b/cw_bitcoin/pubspec.lock @@ -0,0 +1,750 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + sha256: "4897882604d919befd350648c7f91926a9d5de99e67b455bf0917cc2362f4bb8" + url: "https://pub.dev" + source: hosted + version: "47.0.0" + analyzer: + dependency: transitive + description: + name: analyzer + sha256: "690e335554a8385bc9d787117d9eb52c0c03ee207a607e593de3c9d71b1cfe80" + url: "https://pub.dev" + source: hosted + version: "4.7.0" + args: + dependency: transitive + description: + name: args + sha256: "139d809800a412ebb26a3892da228b2d0ba36f0ef5d9a82166e5e52ec8d61611" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + asn1lib: + dependency: transitive + description: + name: asn1lib + sha256: ab96a1cb3beeccf8145c52e449233fe68364c9641623acd3adad66f8184f1039 + url: "https://pub.dev" + source: hosted + version: "1.4.0" + async: + dependency: transitive + description: + name: async + sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 + url: "https://pub.dev" + source: hosted + version: "2.10.0" + bech32: + dependency: transitive + description: + path: "." + ref: "cake-0.2.1" + resolved-ref: cafd1c270641e95017d57d69f55cca9831d4db56 + url: "https://github.com/cake-tech/bech32.git" + source: git + version: "0.2.1" + bip32: + dependency: transitive + description: + name: bip32 + sha256: "54787cd7a111e9d37394aabbf53d1fc5e2e0e0af2cd01c459147a97c0e3f8a97" + url: "https://pub.dev" + source: hosted + version: "2.0.0" + bip39: + dependency: transitive + description: + name: bip39 + sha256: de1ee27ebe7d96b84bb3a04a4132a0a3007dcdd5ad27dd14aa87a29d97c45edc + url: "https://pub.dev" + source: hosted + version: "1.0.6" + bitcoin_flutter: + dependency: "direct main" + description: + path: "." + ref: cake-update-v2 + resolved-ref: "8f86453761c0c26e368392d0ff2c6f12f3b7397b" + url: "https://github.com/cake-tech/bitcoin_flutter.git" + source: git + version: "2.0.2" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + bs58check: + dependency: transitive + description: + name: bs58check + sha256: c4a164d42b25c2f6bc88a8beccb9fc7d01440f3c60ba23663a20a70faf484ea9 + url: "https://pub.dev" + source: hosted + version: "1.0.2" + build: + dependency: transitive + description: + name: build + sha256: "3fbda25365741f8251b39f3917fb3c8e286a96fd068a5a242e11c2012d495777" + url: "https://pub.dev" + source: hosted + version: "2.3.1" + build_config: + dependency: transitive + description: + name: build_config + sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 + url: "https://pub.dev" + source: hosted + version: "1.1.1" + build_daemon: + dependency: transitive + description: + name: build_daemon + sha256: "6bc5544ea6ce4428266e7ea680e945c68806c4aae2da0eb5e9ccf38df8d6acbf" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + build_resolvers: + dependency: "direct dev" + description: + name: build_resolvers + sha256: "687cf90a3951affac1bd5f9ecb5e3e90b60487f3d9cdc359bb310f8876bb02a6" + url: "https://pub.dev" + source: hosted + version: "2.0.10" + build_runner: + dependency: "direct dev" + description: + name: build_runner + sha256: b0a8a7b8a76c493e85f1b84bffa0588859a06197863dba8c9036b15581fd9727 + url: "https://pub.dev" + source: hosted + version: "2.3.3" + build_runner_core: + dependency: transitive + description: + name: build_runner_core + sha256: "14febe0f5bac5ae474117a36099b4de6f1dbc52df6c5e55534b3da9591bf4292" + url: "https://pub.dev" + source: hosted + version: "7.2.7" + built_collection: + dependency: transitive + description: + name: built_collection + sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" + url: "https://pub.dev" + source: hosted + version: "5.1.1" + built_value: + dependency: transitive + description: + name: built_value + sha256: "169565c8ad06adb760c3645bf71f00bff161b00002cace266cad42c5d22a7725" + url: "https://pub.dev" + source: hosted + version: "8.4.3" + characters: + dependency: transitive + description: + name: characters + sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + url: "https://pub.dev" + source: hosted + version: "1.2.1" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: "3d1505d91afa809d177efd4eed5bb0eb65805097a1463abdd2add076effae311" + url: "https://pub.dev" + source: hosted + version: "2.0.2" + clock: + dependency: transitive + description: + name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" + source: hosted + version: "1.1.1" + code_builder: + dependency: transitive + description: + name: code_builder + sha256: "0d43dd1288fd145de1ecc9a3948ad4a6d5a82f0a14c4fdd0892260787d975cbe" + url: "https://pub.dev" + source: hosted + version: "4.4.0" + collection: + dependency: transitive + description: + name: collection + sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 + url: "https://pub.dev" + source: hosted + version: "1.17.0" + convert: + dependency: transitive + description: + name: convert + sha256: "196284f26f69444b7f5c50692b55ec25da86d9e500451dc09333bf2e3ad69259" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + crypto: + dependency: transitive + description: + name: crypto + sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 + url: "https://pub.dev" + source: hosted + version: "3.0.2" + cryptography: + dependency: "direct main" + description: + name: cryptography + sha256: e0e37f79665cd5c86e8897f9abe1accfe813c0cc5299dab22256e22fddc1fef8 + url: "https://pub.dev" + source: hosted + version: "2.0.5" + cw_core: + dependency: "direct main" + description: + path: "../cw_core" + relative: true + source: path + version: "0.0.1" + dart_style: + dependency: transitive + description: + name: dart_style + sha256: "7a03456c3490394c8e7665890333e91ae8a49be43542b616e414449ac358acd4" + url: "https://pub.dev" + source: hosted + version: "2.2.4" + encrypt: + dependency: "direct main" + description: + name: encrypt + sha256: "4fd4e4fdc21b9d7d4141823e1e6515cd94e7b8d84749504c232999fba25d9bbb" + url: "https://pub.dev" + source: hosted + version: "5.0.1" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + ffi: + dependency: transitive + description: + name: ffi + sha256: a38574032c5f1dd06c4aee541789906c12ccaab8ba01446e800d9c5b79c4a978 + url: "https://pub.dev" + source: hosted + version: "2.0.1" + file: + dependency: transitive + description: + name: file + sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + url: "https://pub.dev" + source: hosted + version: "6.1.4" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_mobx: + dependency: "direct main" + description: + name: flutter_mobx + sha256: "0da4add0016387a7bf309a0d0c41d36c6b3ae25ed7a176409267f166509e723e" + url: "https://pub.dev" + source: hosted + version: "2.0.6+5" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + glob: + dependency: transitive + description: + name: glob + sha256: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + graphs: + dependency: transitive + description: + name: graphs + sha256: f9e130f3259f52d26f0cfc0e964513796dafed572fa52e45d2f8d6ca14db39b2 + url: "https://pub.dev" + source: hosted + version: "2.2.0" + hex: + dependency: transitive + description: + name: hex + sha256: "4e7cd54e4b59ba026432a6be2dd9d96e4c5205725194997193bf871703b82c4a" + url: "https://pub.dev" + source: hosted + version: "0.2.0" + hive: + dependency: transitive + description: + name: hive + sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941" + url: "https://pub.dev" + source: hosted + version: "2.2.3" + hive_generator: + dependency: "direct dev" + description: + name: hive_generator + sha256: "81fd20125cb2ce8fd23623d7744ffbaf653aae93706c9bd3bf7019ea0ace3938" + url: "https://pub.dev" + source: hosted + version: "1.1.3" + http: + dependency: "direct main" + description: + name: http + sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" + url: "https://pub.dev" + source: hosted + version: "0.13.5" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" + intl: + dependency: "direct main" + description: + name: intl + sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91" + url: "https://pub.dev" + source: hosted + version: "0.17.0" + io: + dependency: transitive + description: + name: io + sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + js: + dependency: transitive + description: + name: js + sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" + url: "https://pub.dev" + source: hosted + version: "0.6.5" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: c33da08e136c3df0190bd5bbe51ae1df4a7d96e7954d1d7249fea2968a72d317 + url: "https://pub.dev" + source: hosted + version: "4.8.0" + logging: + dependency: transitive + description: + name: logging + sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" + url: "https://pub.dev" + source: hosted + version: "1.1.1" + matcher: + dependency: transitive + description: + name: matcher + sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" + url: "https://pub.dev" + source: hosted + version: "0.12.13" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + url: "https://pub.dev" + source: hosted + version: "0.2.0" + meta: + dependency: transitive + description: + name: meta + sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" + url: "https://pub.dev" + source: hosted + version: "1.8.0" + mime: + dependency: transitive + description: + name: mime + sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e + url: "https://pub.dev" + source: hosted + version: "1.0.4" + mobx: + dependency: "direct main" + description: + name: mobx + sha256: f1862bd92c6a903fab67338f27e2f731117c3cb9ea37cee1a487f9e4e0de314a + url: "https://pub.dev" + source: hosted + version: "2.1.3+1" + mobx_codegen: + dependency: "direct dev" + description: + name: mobx_codegen + sha256: "86122e410d8ea24dda0c69adb5c2a6ccadd5ce02ad46e144764e0d0184a06181" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + package_config: + dependency: transitive + description: + name: package_config + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + path: + dependency: transitive + description: + name: path + sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b + url: "https://pub.dev" + source: hosted + version: "1.8.2" + path_provider: + dependency: "direct main" + description: + name: path_provider + sha256: dcea5feb97d8abf90cab9e9030b497fb7c3cbf26b7a1fe9e3ef7dcb0a1ddec95 + url: "https://pub.dev" + source: hosted + version: "2.0.12" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: a776c088d671b27f6e3aa8881d64b87b3e80201c64e8869b811325de7a76c15e + url: "https://pub.dev" + source: hosted + version: "2.0.22" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: "62a68e7e1c6c459f9289859e2fae58290c981ce21d1697faf54910fe1faa4c74" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: ab0987bf95bc591da42dffb38c77398fc43309f0b9b894dcc5d6f40c4b26c379 + url: "https://pub.dev" + source: hosted + version: "2.1.7" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + sha256: f0abc8ebd7253741f05488b4813d936b4d07c6bae3e86148a09e342ee4b08e76 + url: "https://pub.dev" + source: hosted + version: "2.0.5" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: bcabbe399d4042b8ee687e17548d5d3f527255253b4a639f5f8d2094a9c2b45c + url: "https://pub.dev" + source: hosted + version: "2.1.3" + platform: + dependency: transitive + description: + name: platform + sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: dbf0f707c78beedc9200146ad3cb0ab4d5da13c246336987be6940f026500d3a + url: "https://pub.dev" + source: hosted + version: "2.1.3" + pointycastle: + dependency: transitive + description: + name: pointycastle + sha256: db7306cf0249f838d1a24af52b5a5887c5bf7f31d8bb4e827d071dc0939ad346 + url: "https://pub.dev" + source: hosted + version: "3.6.2" + pool: + dependency: transitive + description: + name: pool + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + url: "https://pub.dev" + source: hosted + version: "1.5.1" + process: + dependency: transitive + description: + name: process + sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "307de764d305289ff24ad257ad5c5793ce56d04947599ad68b3baa124105fc17" + url: "https://pub.dev" + source: hosted + version: "2.1.3" + pubspec_parse: + dependency: transitive + description: + name: pubspec_parse + sha256: "75f6614d6dde2dc68948dffbaa4fe5dae32cd700eb9fb763fe11dfb45a3c4d0a" + url: "https://pub.dev" + source: hosted + version: "1.2.1" + rxdart: + dependency: "direct main" + description: + name: rxdart + sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" + url: "https://pub.dev" + source: hosted + version: "0.27.7" + shelf: + dependency: transitive + description: + name: shelf + sha256: c24a96135a2ccd62c64b69315a14adc5c3419df63b4d7c05832a346fdb73682c + url: "https://pub.dev" + source: hosted + version: "1.4.0" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + sha256: a988c0e8d8ffbdb8a28aa7ec8e449c260f3deb808781fe1284d22c5bba7156e8 + url: "https://pub.dev" + source: hosted + version: "1.0.3" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_gen: + dependency: transitive + description: + name: source_gen + sha256: "2d79738b6bbf38a43920e2b8d189e9a3ce6cc201f4b8fc76be5e4fe377b1c38d" + url: "https://pub.dev" + source: hosted + version: "1.2.6" + source_helper: + dependency: transitive + description: + name: source_helper + sha256: "3b67aade1d52416149c633ba1bb36df44d97c6b51830c2198e934e3fca87ca1f" + url: "https://pub.dev" + source: hosted + version: "1.3.3" + source_span: + dependency: transitive + description: + name: source_span + sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + url: "https://pub.dev" + source: hosted + version: "1.9.1" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + url: "https://pub.dev" + source: hosted + version: "1.11.0" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + stream_transform: + dependency: transitive + description: + name: stream_transform + sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + test_api: + dependency: transitive + description: + name: test_api + sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 + url: "https://pub.dev" + source: hosted + version: "0.4.16" + timing: + dependency: transitive + description: + name: timing + sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + unorm_dart: + dependency: "direct main" + description: + name: unorm_dart + sha256: "5b35bff83fce4d76467641438f9e867dc9bcfdb8c1694854f230579d68cd8f4b" + url: "https://pub.dev" + source: hosted + version: "0.2.0" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + watcher: + dependency: transitive + description: + name: watcher + sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" + url: "https://pub.dev" + source: hosted + version: "1.0.2" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + sha256: ca49c0bc209c687b887f30527fb6a9d80040b072cc2990f34b9bec3e7663101b + url: "https://pub.dev" + source: hosted + version: "2.3.0" + win32: + dependency: transitive + description: + name: win32 + sha256: c9ebe7ee4ab0c2194e65d3a07d8c54c5d00bb001b76081c4a04cdb8448b59e46 + url: "https://pub.dev" + source: hosted + version: "3.1.3" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: bd512f03919aac5f1313eb8249f223bacf4927031bf60b02601f81f687689e86 + url: "https://pub.dev" + source: hosted + version: "0.2.0+3" + yaml: + dependency: transitive + description: + name: yaml + sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" + url: "https://pub.dev" + source: hosted + version: "3.1.1" +sdks: + dart: ">=2.19.0 <3.0.0" + flutter: ">=3.0.0" diff --git a/cw_core/.gitignore b/cw_core/.gitignore index 612ef20be..1985397a2 100644 --- a/cw_core/.gitignore +++ b/cw_core/.gitignore @@ -8,7 +8,6 @@ .buildlog/ .history .svn/ -/pubspec.lock # IntelliJ related *.iml diff --git a/cw_core/pubspec.lock b/cw_core/pubspec.lock new file mode 100644 index 000000000..06997e8f1 --- /dev/null +++ b/cw_core/pubspec.lock @@ -0,0 +1,669 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + sha256: "4897882604d919befd350648c7f91926a9d5de99e67b455bf0917cc2362f4bb8" + url: "https://pub.dev" + source: hosted + version: "47.0.0" + analyzer: + dependency: transitive + description: + name: analyzer + sha256: "690e335554a8385bc9d787117d9eb52c0c03ee207a607e593de3c9d71b1cfe80" + url: "https://pub.dev" + source: hosted + version: "4.7.0" + args: + dependency: transitive + description: + name: args + sha256: "139d809800a412ebb26a3892da228b2d0ba36f0ef5d9a82166e5e52ec8d61611" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + asn1lib: + dependency: transitive + description: + name: asn1lib + sha256: ab96a1cb3beeccf8145c52e449233fe68364c9641623acd3adad66f8184f1039 + url: "https://pub.dev" + source: hosted + version: "1.4.0" + async: + dependency: transitive + description: + name: async + sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 + url: "https://pub.dev" + source: hosted + version: "2.10.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + build: + dependency: transitive + description: + name: build + sha256: "3fbda25365741f8251b39f3917fb3c8e286a96fd068a5a242e11c2012d495777" + url: "https://pub.dev" + source: hosted + version: "2.3.1" + build_config: + dependency: transitive + description: + name: build_config + sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 + url: "https://pub.dev" + source: hosted + version: "1.1.1" + build_daemon: + dependency: transitive + description: + name: build_daemon + sha256: "6bc5544ea6ce4428266e7ea680e945c68806c4aae2da0eb5e9ccf38df8d6acbf" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + build_resolvers: + dependency: "direct dev" + description: + name: build_resolvers + sha256: "687cf90a3951affac1bd5f9ecb5e3e90b60487f3d9cdc359bb310f8876bb02a6" + url: "https://pub.dev" + source: hosted + version: "2.0.10" + build_runner: + dependency: "direct dev" + description: + name: build_runner + sha256: b0a8a7b8a76c493e85f1b84bffa0588859a06197863dba8c9036b15581fd9727 + url: "https://pub.dev" + source: hosted + version: "2.3.3" + build_runner_core: + dependency: transitive + description: + name: build_runner_core + sha256: "14febe0f5bac5ae474117a36099b4de6f1dbc52df6c5e55534b3da9591bf4292" + url: "https://pub.dev" + source: hosted + version: "7.2.7" + built_collection: + dependency: transitive + description: + name: built_collection + sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" + url: "https://pub.dev" + source: hosted + version: "5.1.1" + built_value: + dependency: transitive + description: + name: built_value + sha256: "169565c8ad06adb760c3645bf71f00bff161b00002cace266cad42c5d22a7725" + url: "https://pub.dev" + source: hosted + version: "8.4.3" + characters: + dependency: transitive + description: + name: characters + sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + url: "https://pub.dev" + source: hosted + version: "1.2.1" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: "3d1505d91afa809d177efd4eed5bb0eb65805097a1463abdd2add076effae311" + url: "https://pub.dev" + source: hosted + version: "2.0.2" + clock: + dependency: transitive + description: + name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" + source: hosted + version: "1.1.1" + code_builder: + dependency: transitive + description: + name: code_builder + sha256: "0d43dd1288fd145de1ecc9a3948ad4a6d5a82f0a14c4fdd0892260787d975cbe" + url: "https://pub.dev" + source: hosted + version: "4.4.0" + collection: + dependency: transitive + description: + name: collection + sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 + url: "https://pub.dev" + source: hosted + version: "1.17.0" + convert: + dependency: transitive + description: + name: convert + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" + source: hosted + version: "3.1.1" + crypto: + dependency: transitive + description: + name: crypto + sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 + url: "https://pub.dev" + source: hosted + version: "3.0.2" + dart_style: + dependency: transitive + description: + name: dart_style + sha256: "7a03456c3490394c8e7665890333e91ae8a49be43542b616e414449ac358acd4" + url: "https://pub.dev" + source: hosted + version: "2.2.4" + encrypt: + dependency: "direct main" + description: + name: encrypt + sha256: "4fd4e4fdc21b9d7d4141823e1e6515cd94e7b8d84749504c232999fba25d9bbb" + url: "https://pub.dev" + source: hosted + version: "5.0.1" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + ffi: + dependency: transitive + description: + name: ffi + sha256: a38574032c5f1dd06c4aee541789906c12ccaab8ba01446e800d9c5b79c4a978 + url: "https://pub.dev" + source: hosted + version: "2.0.1" + file: + dependency: transitive + description: + name: file + sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + url: "https://pub.dev" + source: hosted + version: "6.1.4" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_mobx: + dependency: "direct main" + description: + name: flutter_mobx + sha256: "0da4add0016387a7bf309a0d0c41d36c6b3ae25ed7a176409267f166509e723e" + url: "https://pub.dev" + source: hosted + version: "2.0.6+5" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + glob: + dependency: transitive + description: + name: glob + sha256: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + graphs: + dependency: transitive + description: + name: graphs + sha256: f9e130f3259f52d26f0cfc0e964513796dafed572fa52e45d2f8d6ca14db39b2 + url: "https://pub.dev" + source: hosted + version: "2.2.0" + hive: + dependency: transitive + description: + name: hive + sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941" + url: "https://pub.dev" + source: hosted + version: "2.2.3" + hive_generator: + dependency: "direct dev" + description: + name: hive_generator + sha256: "81fd20125cb2ce8fd23623d7744ffbaf653aae93706c9bd3bf7019ea0ace3938" + url: "https://pub.dev" + source: hosted + version: "1.1.3" + http: + dependency: "direct main" + description: + name: http + sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" + url: "https://pub.dev" + source: hosted + version: "0.13.5" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" + intl: + dependency: "direct main" + description: + name: intl + sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91" + url: "https://pub.dev" + source: hosted + version: "0.17.0" + io: + dependency: transitive + description: + name: io + sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + js: + dependency: transitive + description: + name: js + sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" + url: "https://pub.dev" + source: hosted + version: "0.6.5" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: c33da08e136c3df0190bd5bbe51ae1df4a7d96e7954d1d7249fea2968a72d317 + url: "https://pub.dev" + source: hosted + version: "4.8.0" + logging: + dependency: transitive + description: + name: logging + sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" + url: "https://pub.dev" + source: hosted + version: "1.1.1" + matcher: + dependency: transitive + description: + name: matcher + sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" + url: "https://pub.dev" + source: hosted + version: "0.12.13" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + url: "https://pub.dev" + source: hosted + version: "0.2.0" + meta: + dependency: transitive + description: + name: meta + sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" + url: "https://pub.dev" + source: hosted + version: "1.8.0" + mime: + dependency: transitive + description: + name: mime + sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e + url: "https://pub.dev" + source: hosted + version: "1.0.4" + mobx: + dependency: "direct main" + description: + name: mobx + sha256: f1862bd92c6a903fab67338f27e2f731117c3cb9ea37cee1a487f9e4e0de314a + url: "https://pub.dev" + source: hosted + version: "2.1.3+1" + mobx_codegen: + dependency: "direct dev" + description: + name: mobx_codegen + sha256: "86122e410d8ea24dda0c69adb5c2a6ccadd5ce02ad46e144764e0d0184a06181" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + package_config: + dependency: transitive + description: + name: package_config + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + path: + dependency: transitive + description: + name: path + sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b + url: "https://pub.dev" + source: hosted + version: "1.8.2" + path_provider: + dependency: "direct main" + description: + name: path_provider + sha256: dcea5feb97d8abf90cab9e9030b497fb7c3cbf26b7a1fe9e3ef7dcb0a1ddec95 + url: "https://pub.dev" + source: hosted + version: "2.0.12" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: a776c088d671b27f6e3aa8881d64b87b3e80201c64e8869b811325de7a76c15e + url: "https://pub.dev" + source: hosted + version: "2.0.22" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: "62a68e7e1c6c459f9289859e2fae58290c981ce21d1697faf54910fe1faa4c74" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: ab0987bf95bc591da42dffb38c77398fc43309f0b9b894dcc5d6f40c4b26c379 + url: "https://pub.dev" + source: hosted + version: "2.1.7" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + sha256: f0abc8ebd7253741f05488b4813d936b4d07c6bae3e86148a09e342ee4b08e76 + url: "https://pub.dev" + source: hosted + version: "2.0.5" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: bcabbe399d4042b8ee687e17548d5d3f527255253b4a639f5f8d2094a9c2b45c + url: "https://pub.dev" + source: hosted + version: "2.1.3" + platform: + dependency: transitive + description: + name: platform + sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: dbf0f707c78beedc9200146ad3cb0ab4d5da13c246336987be6940f026500d3a + url: "https://pub.dev" + source: hosted + version: "2.1.3" + pointycastle: + dependency: transitive + description: + name: pointycastle + sha256: db7306cf0249f838d1a24af52b5a5887c5bf7f31d8bb4e827d071dc0939ad346 + url: "https://pub.dev" + source: hosted + version: "3.6.2" + pool: + dependency: transitive + description: + name: pool + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + url: "https://pub.dev" + source: hosted + version: "1.5.1" + process: + dependency: transitive + description: + name: process + sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "307de764d305289ff24ad257ad5c5793ce56d04947599ad68b3baa124105fc17" + url: "https://pub.dev" + source: hosted + version: "2.1.3" + pubspec_parse: + dependency: transitive + description: + name: pubspec_parse + sha256: "75f6614d6dde2dc68948dffbaa4fe5dae32cd700eb9fb763fe11dfb45a3c4d0a" + url: "https://pub.dev" + source: hosted + version: "1.2.1" + shelf: + dependency: transitive + description: + name: shelf + sha256: c24a96135a2ccd62c64b69315a14adc5c3419df63b4d7c05832a346fdb73682c + url: "https://pub.dev" + source: hosted + version: "1.4.0" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + sha256: a988c0e8d8ffbdb8a28aa7ec8e449c260f3deb808781fe1284d22c5bba7156e8 + url: "https://pub.dev" + source: hosted + version: "1.0.3" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_gen: + dependency: transitive + description: + name: source_gen + sha256: "2d79738b6bbf38a43920e2b8d189e9a3ce6cc201f4b8fc76be5e4fe377b1c38d" + url: "https://pub.dev" + source: hosted + version: "1.2.6" + source_helper: + dependency: transitive + description: + name: source_helper + sha256: "3b67aade1d52416149c633ba1bb36df44d97c6b51830c2198e934e3fca87ca1f" + url: "https://pub.dev" + source: hosted + version: "1.3.3" + source_span: + dependency: transitive + description: + name: source_span + sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + url: "https://pub.dev" + source: hosted + version: "1.9.1" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + url: "https://pub.dev" + source: hosted + version: "1.11.0" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + stream_transform: + dependency: transitive + description: + name: stream_transform + sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + test_api: + dependency: transitive + description: + name: test_api + sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 + url: "https://pub.dev" + source: hosted + version: "0.4.16" + timing: + dependency: transitive + description: + name: timing + sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + watcher: + dependency: transitive + description: + name: watcher + sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" + url: "https://pub.dev" + source: hosted + version: "1.0.2" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + sha256: ca49c0bc209c687b887f30527fb6a9d80040b072cc2990f34b9bec3e7663101b + url: "https://pub.dev" + source: hosted + version: "2.3.0" + win32: + dependency: transitive + description: + name: win32 + sha256: c9ebe7ee4ab0c2194e65d3a07d8c54c5d00bb001b76081c4a04cdb8448b59e46 + url: "https://pub.dev" + source: hosted + version: "3.1.3" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: bd512f03919aac5f1313eb8249f223bacf4927031bf60b02601f81f687689e86 + url: "https://pub.dev" + source: hosted + version: "0.2.0+3" + yaml: + dependency: transitive + description: + name: yaml + sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" + url: "https://pub.dev" + source: hosted + version: "3.1.1" +sdks: + dart: ">=2.19.0 <3.0.0" + flutter: ">=3.0.0" diff --git a/cw_haven/.gitignore b/cw_haven/.gitignore index 1b976a50e..e9dc58d3d 100644 --- a/cw_haven/.gitignore +++ b/cw_haven/.gitignore @@ -3,6 +3,5 @@ .packages .pub/ -/pubspec.lock build/ diff --git a/cw_haven/pubspec.lock b/cw_haven/pubspec.lock new file mode 100644 index 000000000..84a4fe16a --- /dev/null +++ b/cw_haven/pubspec.lock @@ -0,0 +1,676 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + sha256: "4897882604d919befd350648c7f91926a9d5de99e67b455bf0917cc2362f4bb8" + url: "https://pub.dev" + source: hosted + version: "47.0.0" + analyzer: + dependency: transitive + description: + name: analyzer + sha256: "690e335554a8385bc9d787117d9eb52c0c03ee207a607e593de3c9d71b1cfe80" + url: "https://pub.dev" + source: hosted + version: "4.7.0" + args: + dependency: transitive + description: + name: args + sha256: "139d809800a412ebb26a3892da228b2d0ba36f0ef5d9a82166e5e52ec8d61611" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + asn1lib: + dependency: transitive + description: + name: asn1lib + sha256: ab96a1cb3beeccf8145c52e449233fe68364c9641623acd3adad66f8184f1039 + url: "https://pub.dev" + source: hosted + version: "1.4.0" + async: + dependency: transitive + description: + name: async + sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 + url: "https://pub.dev" + source: hosted + version: "2.10.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + build: + dependency: transitive + description: + name: build + sha256: "3fbda25365741f8251b39f3917fb3c8e286a96fd068a5a242e11c2012d495777" + url: "https://pub.dev" + source: hosted + version: "2.3.1" + build_config: + dependency: transitive + description: + name: build_config + sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 + url: "https://pub.dev" + source: hosted + version: "1.1.1" + build_daemon: + dependency: transitive + description: + name: build_daemon + sha256: "6bc5544ea6ce4428266e7ea680e945c68806c4aae2da0eb5e9ccf38df8d6acbf" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + build_resolvers: + dependency: "direct dev" + description: + name: build_resolvers + sha256: "687cf90a3951affac1bd5f9ecb5e3e90b60487f3d9cdc359bb310f8876bb02a6" + url: "https://pub.dev" + source: hosted + version: "2.0.10" + build_runner: + dependency: "direct dev" + description: + name: build_runner + sha256: b0a8a7b8a76c493e85f1b84bffa0588859a06197863dba8c9036b15581fd9727 + url: "https://pub.dev" + source: hosted + version: "2.3.3" + build_runner_core: + dependency: transitive + description: + name: build_runner_core + sha256: "14febe0f5bac5ae474117a36099b4de6f1dbc52df6c5e55534b3da9591bf4292" + url: "https://pub.dev" + source: hosted + version: "7.2.7" + built_collection: + dependency: transitive + description: + name: built_collection + sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" + url: "https://pub.dev" + source: hosted + version: "5.1.1" + built_value: + dependency: transitive + description: + name: built_value + sha256: "169565c8ad06adb760c3645bf71f00bff161b00002cace266cad42c5d22a7725" + url: "https://pub.dev" + source: hosted + version: "8.4.3" + characters: + dependency: transitive + description: + name: characters + sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + url: "https://pub.dev" + source: hosted + version: "1.2.1" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: "3d1505d91afa809d177efd4eed5bb0eb65805097a1463abdd2add076effae311" + url: "https://pub.dev" + source: hosted + version: "2.0.2" + clock: + dependency: transitive + description: + name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" + source: hosted + version: "1.1.1" + code_builder: + dependency: transitive + description: + name: code_builder + sha256: "0d43dd1288fd145de1ecc9a3948ad4a6d5a82f0a14c4fdd0892260787d975cbe" + url: "https://pub.dev" + source: hosted + version: "4.4.0" + collection: + dependency: transitive + description: + name: collection + sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 + url: "https://pub.dev" + source: hosted + version: "1.17.0" + convert: + dependency: transitive + description: + name: convert + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" + source: hosted + version: "3.1.1" + crypto: + dependency: transitive + description: + name: crypto + sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 + url: "https://pub.dev" + source: hosted + version: "3.0.2" + cw_core: + dependency: "direct main" + description: + path: "../cw_core" + relative: true + source: path + version: "0.0.1" + dart_style: + dependency: transitive + description: + name: dart_style + sha256: "7a03456c3490394c8e7665890333e91ae8a49be43542b616e414449ac358acd4" + url: "https://pub.dev" + source: hosted + version: "2.2.4" + encrypt: + dependency: transitive + description: + name: encrypt + sha256: "4fd4e4fdc21b9d7d4141823e1e6515cd94e7b8d84749504c232999fba25d9bbb" + url: "https://pub.dev" + source: hosted + version: "5.0.1" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + ffi: + dependency: "direct main" + description: + name: ffi + sha256: "13a6ccf6a459a125b3fcdb6ec73bd5ff90822e071207c663bfd1f70062d51d18" + url: "https://pub.dev" + source: hosted + version: "1.2.1" + file: + dependency: transitive + description: + name: file + sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + url: "https://pub.dev" + source: hosted + version: "6.1.4" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_mobx: + dependency: "direct main" + description: + name: flutter_mobx + sha256: "0da4add0016387a7bf309a0d0c41d36c6b3ae25ed7a176409267f166509e723e" + url: "https://pub.dev" + source: hosted + version: "2.0.6+5" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + glob: + dependency: transitive + description: + name: glob + sha256: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + graphs: + dependency: transitive + description: + name: graphs + sha256: f9e130f3259f52d26f0cfc0e964513796dafed572fa52e45d2f8d6ca14db39b2 + url: "https://pub.dev" + source: hosted + version: "2.2.0" + hive: + dependency: transitive + description: + name: hive + sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941" + url: "https://pub.dev" + source: hosted + version: "2.2.3" + hive_generator: + dependency: "direct dev" + description: + name: hive_generator + sha256: "81fd20125cb2ce8fd23623d7744ffbaf653aae93706c9bd3bf7019ea0ace3938" + url: "https://pub.dev" + source: hosted + version: "1.1.3" + http: + dependency: "direct main" + description: + name: http + sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" + url: "https://pub.dev" + source: hosted + version: "0.13.5" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" + intl: + dependency: "direct main" + description: + name: intl + sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91" + url: "https://pub.dev" + source: hosted + version: "0.17.0" + io: + dependency: transitive + description: + name: io + sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + js: + dependency: transitive + description: + name: js + sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" + url: "https://pub.dev" + source: hosted + version: "0.6.5" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: c33da08e136c3df0190bd5bbe51ae1df4a7d96e7954d1d7249fea2968a72d317 + url: "https://pub.dev" + source: hosted + version: "4.8.0" + logging: + dependency: transitive + description: + name: logging + sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" + url: "https://pub.dev" + source: hosted + version: "1.1.1" + matcher: + dependency: transitive + description: + name: matcher + sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" + url: "https://pub.dev" + source: hosted + version: "0.12.13" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + url: "https://pub.dev" + source: hosted + version: "0.2.0" + meta: + dependency: transitive + description: + name: meta + sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" + url: "https://pub.dev" + source: hosted + version: "1.8.0" + mime: + dependency: transitive + description: + name: mime + sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e + url: "https://pub.dev" + source: hosted + version: "1.0.4" + mobx: + dependency: "direct main" + description: + name: mobx + sha256: f1862bd92c6a903fab67338f27e2f731117c3cb9ea37cee1a487f9e4e0de314a + url: "https://pub.dev" + source: hosted + version: "2.1.3+1" + mobx_codegen: + dependency: "direct dev" + description: + name: mobx_codegen + sha256: "86122e410d8ea24dda0c69adb5c2a6ccadd5ce02ad46e144764e0d0184a06181" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + package_config: + dependency: transitive + description: + name: package_config + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + path: + dependency: transitive + description: + name: path + sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b + url: "https://pub.dev" + source: hosted + version: "1.8.2" + path_provider: + dependency: "direct main" + description: + name: path_provider + sha256: dcea5feb97d8abf90cab9e9030b497fb7c3cbf26b7a1fe9e3ef7dcb0a1ddec95 + url: "https://pub.dev" + source: hosted + version: "2.0.12" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: a776c088d671b27f6e3aa8881d64b87b3e80201c64e8869b811325de7a76c15e + url: "https://pub.dev" + source: hosted + version: "2.0.22" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: "62a68e7e1c6c459f9289859e2fae58290c981ce21d1697faf54910fe1faa4c74" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: ab0987bf95bc591da42dffb38c77398fc43309f0b9b894dcc5d6f40c4b26c379 + url: "https://pub.dev" + source: hosted + version: "2.1.7" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + sha256: f0abc8ebd7253741f05488b4813d936b4d07c6bae3e86148a09e342ee4b08e76 + url: "https://pub.dev" + source: hosted + version: "2.0.5" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: a34ecd7fb548f8e57321fd8e50d865d266941b54e6c3b7758cf8f37c24116905 + url: "https://pub.dev" + source: hosted + version: "2.0.7" + platform: + dependency: transitive + description: + name: platform + sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: dbf0f707c78beedc9200146ad3cb0ab4d5da13c246336987be6940f026500d3a + url: "https://pub.dev" + source: hosted + version: "2.1.3" + pointycastle: + dependency: transitive + description: + name: pointycastle + sha256: db7306cf0249f838d1a24af52b5a5887c5bf7f31d8bb4e827d071dc0939ad346 + url: "https://pub.dev" + source: hosted + version: "3.6.2" + pool: + dependency: transitive + description: + name: pool + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + url: "https://pub.dev" + source: hosted + version: "1.5.1" + process: + dependency: transitive + description: + name: process + sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "307de764d305289ff24ad257ad5c5793ce56d04947599ad68b3baa124105fc17" + url: "https://pub.dev" + source: hosted + version: "2.1.3" + pubspec_parse: + dependency: transitive + description: + name: pubspec_parse + sha256: "75f6614d6dde2dc68948dffbaa4fe5dae32cd700eb9fb763fe11dfb45a3c4d0a" + url: "https://pub.dev" + source: hosted + version: "1.2.1" + shelf: + dependency: transitive + description: + name: shelf + sha256: c24a96135a2ccd62c64b69315a14adc5c3419df63b4d7c05832a346fdb73682c + url: "https://pub.dev" + source: hosted + version: "1.4.0" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + sha256: a988c0e8d8ffbdb8a28aa7ec8e449c260f3deb808781fe1284d22c5bba7156e8 + url: "https://pub.dev" + source: hosted + version: "1.0.3" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_gen: + dependency: transitive + description: + name: source_gen + sha256: "2d79738b6bbf38a43920e2b8d189e9a3ce6cc201f4b8fc76be5e4fe377b1c38d" + url: "https://pub.dev" + source: hosted + version: "1.2.6" + source_helper: + dependency: transitive + description: + name: source_helper + sha256: "3b67aade1d52416149c633ba1bb36df44d97c6b51830c2198e934e3fca87ca1f" + url: "https://pub.dev" + source: hosted + version: "1.3.3" + source_span: + dependency: transitive + description: + name: source_span + sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + url: "https://pub.dev" + source: hosted + version: "1.9.1" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + url: "https://pub.dev" + source: hosted + version: "1.11.0" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + stream_transform: + dependency: transitive + description: + name: stream_transform + sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + test_api: + dependency: transitive + description: + name: test_api + sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 + url: "https://pub.dev" + source: hosted + version: "0.4.16" + timing: + dependency: transitive + description: + name: timing + sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + watcher: + dependency: transitive + description: + name: watcher + sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" + url: "https://pub.dev" + source: hosted + version: "1.0.2" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + sha256: ca49c0bc209c687b887f30527fb6a9d80040b072cc2990f34b9bec3e7663101b + url: "https://pub.dev" + source: hosted + version: "2.3.0" + win32: + dependency: transitive + description: + name: win32 + sha256: c0e3a4f7be7dae51d8f152230b86627e3397c1ba8c3fa58e63d44a9f3edc9cef + url: "https://pub.dev" + source: hosted + version: "2.6.1" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: bd512f03919aac5f1313eb8249f223bacf4927031bf60b02601f81f687689e86 + url: "https://pub.dev" + source: hosted + version: "0.2.0+3" + yaml: + dependency: transitive + description: + name: yaml + sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" + url: "https://pub.dev" + source: hosted + version: "3.1.1" +sdks: + dart: ">=2.19.0 <3.0.0" + flutter: ">=3.0.0" diff --git a/cw_monero/.gitignore b/cw_monero/.gitignore index fdc2e5ac7..c8bb78494 100644 --- a/cw_monero/.gitignore +++ b/cw_monero/.gitignore @@ -3,7 +3,6 @@ .packages .pub/ -/pubspec.lock build/ diff --git a/cw_monero/pubspec.lock b/cw_monero/pubspec.lock new file mode 100644 index 000000000..d75ee0928 --- /dev/null +++ b/cw_monero/pubspec.lock @@ -0,0 +1,676 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + sha256: "4897882604d919befd350648c7f91926a9d5de99e67b455bf0917cc2362f4bb8" + url: "https://pub.dev" + source: hosted + version: "47.0.0" + analyzer: + dependency: transitive + description: + name: analyzer + sha256: "690e335554a8385bc9d787117d9eb52c0c03ee207a607e593de3c9d71b1cfe80" + url: "https://pub.dev" + source: hosted + version: "4.7.0" + args: + dependency: transitive + description: + name: args + sha256: "139d809800a412ebb26a3892da228b2d0ba36f0ef5d9a82166e5e52ec8d61611" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + asn1lib: + dependency: transitive + description: + name: asn1lib + sha256: ab96a1cb3beeccf8145c52e449233fe68364c9641623acd3adad66f8184f1039 + url: "https://pub.dev" + source: hosted + version: "1.4.0" + async: + dependency: transitive + description: + name: async + sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 + url: "https://pub.dev" + source: hosted + version: "2.10.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + build: + dependency: transitive + description: + name: build + sha256: "3fbda25365741f8251b39f3917fb3c8e286a96fd068a5a242e11c2012d495777" + url: "https://pub.dev" + source: hosted + version: "2.3.1" + build_config: + dependency: transitive + description: + name: build_config + sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 + url: "https://pub.dev" + source: hosted + version: "1.1.1" + build_daemon: + dependency: transitive + description: + name: build_daemon + sha256: "6bc5544ea6ce4428266e7ea680e945c68806c4aae2da0eb5e9ccf38df8d6acbf" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + build_resolvers: + dependency: "direct dev" + description: + name: build_resolvers + sha256: "687cf90a3951affac1bd5f9ecb5e3e90b60487f3d9cdc359bb310f8876bb02a6" + url: "https://pub.dev" + source: hosted + version: "2.0.10" + build_runner: + dependency: "direct dev" + description: + name: build_runner + sha256: b0a8a7b8a76c493e85f1b84bffa0588859a06197863dba8c9036b15581fd9727 + url: "https://pub.dev" + source: hosted + version: "2.3.3" + build_runner_core: + dependency: transitive + description: + name: build_runner_core + sha256: "14febe0f5bac5ae474117a36099b4de6f1dbc52df6c5e55534b3da9591bf4292" + url: "https://pub.dev" + source: hosted + version: "7.2.7" + built_collection: + dependency: transitive + description: + name: built_collection + sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" + url: "https://pub.dev" + source: hosted + version: "5.1.1" + built_value: + dependency: transitive + description: + name: built_value + sha256: "169565c8ad06adb760c3645bf71f00bff161b00002cace266cad42c5d22a7725" + url: "https://pub.dev" + source: hosted + version: "8.4.3" + characters: + dependency: transitive + description: + name: characters + sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + url: "https://pub.dev" + source: hosted + version: "1.2.1" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: "3d1505d91afa809d177efd4eed5bb0eb65805097a1463abdd2add076effae311" + url: "https://pub.dev" + source: hosted + version: "2.0.2" + clock: + dependency: transitive + description: + name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" + source: hosted + version: "1.1.1" + code_builder: + dependency: transitive + description: + name: code_builder + sha256: "0d43dd1288fd145de1ecc9a3948ad4a6d5a82f0a14c4fdd0892260787d975cbe" + url: "https://pub.dev" + source: hosted + version: "4.4.0" + collection: + dependency: transitive + description: + name: collection + sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 + url: "https://pub.dev" + source: hosted + version: "1.17.0" + convert: + dependency: transitive + description: + name: convert + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" + source: hosted + version: "3.1.1" + crypto: + dependency: transitive + description: + name: crypto + sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 + url: "https://pub.dev" + source: hosted + version: "3.0.2" + cw_core: + dependency: "direct main" + description: + path: "../cw_core" + relative: true + source: path + version: "0.0.1" + dart_style: + dependency: transitive + description: + name: dart_style + sha256: "7a03456c3490394c8e7665890333e91ae8a49be43542b616e414449ac358acd4" + url: "https://pub.dev" + source: hosted + version: "2.2.4" + encrypt: + dependency: "direct main" + description: + name: encrypt + sha256: "4fd4e4fdc21b9d7d4141823e1e6515cd94e7b8d84749504c232999fba25d9bbb" + url: "https://pub.dev" + source: hosted + version: "5.0.1" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + ffi: + dependency: "direct main" + description: + name: ffi + sha256: "13a6ccf6a459a125b3fcdb6ec73bd5ff90822e071207c663bfd1f70062d51d18" + url: "https://pub.dev" + source: hosted + version: "1.2.1" + file: + dependency: transitive + description: + name: file + sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + url: "https://pub.dev" + source: hosted + version: "6.1.4" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_mobx: + dependency: "direct main" + description: + name: flutter_mobx + sha256: "0da4add0016387a7bf309a0d0c41d36c6b3ae25ed7a176409267f166509e723e" + url: "https://pub.dev" + source: hosted + version: "2.0.6+5" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + glob: + dependency: transitive + description: + name: glob + sha256: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + graphs: + dependency: transitive + description: + name: graphs + sha256: f9e130f3259f52d26f0cfc0e964513796dafed572fa52e45d2f8d6ca14db39b2 + url: "https://pub.dev" + source: hosted + version: "2.2.0" + hive: + dependency: transitive + description: + name: hive + sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941" + url: "https://pub.dev" + source: hosted + version: "2.2.3" + hive_generator: + dependency: "direct dev" + description: + name: hive_generator + sha256: "81fd20125cb2ce8fd23623d7744ffbaf653aae93706c9bd3bf7019ea0ace3938" + url: "https://pub.dev" + source: hosted + version: "1.1.3" + http: + dependency: "direct main" + description: + name: http + sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" + url: "https://pub.dev" + source: hosted + version: "0.13.5" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" + intl: + dependency: "direct main" + description: + name: intl + sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91" + url: "https://pub.dev" + source: hosted + version: "0.17.0" + io: + dependency: transitive + description: + name: io + sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + js: + dependency: transitive + description: + name: js + sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" + url: "https://pub.dev" + source: hosted + version: "0.6.5" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: c33da08e136c3df0190bd5bbe51ae1df4a7d96e7954d1d7249fea2968a72d317 + url: "https://pub.dev" + source: hosted + version: "4.8.0" + logging: + dependency: transitive + description: + name: logging + sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" + url: "https://pub.dev" + source: hosted + version: "1.1.1" + matcher: + dependency: transitive + description: + name: matcher + sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" + url: "https://pub.dev" + source: hosted + version: "0.12.13" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + url: "https://pub.dev" + source: hosted + version: "0.2.0" + meta: + dependency: transitive + description: + name: meta + sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" + url: "https://pub.dev" + source: hosted + version: "1.8.0" + mime: + dependency: transitive + description: + name: mime + sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e + url: "https://pub.dev" + source: hosted + version: "1.0.4" + mobx: + dependency: "direct main" + description: + name: mobx + sha256: f1862bd92c6a903fab67338f27e2f731117c3cb9ea37cee1a487f9e4e0de314a + url: "https://pub.dev" + source: hosted + version: "2.1.3+1" + mobx_codegen: + dependency: "direct dev" + description: + name: mobx_codegen + sha256: "86122e410d8ea24dda0c69adb5c2a6ccadd5ce02ad46e144764e0d0184a06181" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + package_config: + dependency: transitive + description: + name: package_config + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + path: + dependency: transitive + description: + name: path + sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b + url: "https://pub.dev" + source: hosted + version: "1.8.2" + path_provider: + dependency: "direct main" + description: + name: path_provider + sha256: dcea5feb97d8abf90cab9e9030b497fb7c3cbf26b7a1fe9e3ef7dcb0a1ddec95 + url: "https://pub.dev" + source: hosted + version: "2.0.12" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: a776c088d671b27f6e3aa8881d64b87b3e80201c64e8869b811325de7a76c15e + url: "https://pub.dev" + source: hosted + version: "2.0.22" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: "62a68e7e1c6c459f9289859e2fae58290c981ce21d1697faf54910fe1faa4c74" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: ab0987bf95bc591da42dffb38c77398fc43309f0b9b894dcc5d6f40c4b26c379 + url: "https://pub.dev" + source: hosted + version: "2.1.7" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + sha256: f0abc8ebd7253741f05488b4813d936b4d07c6bae3e86148a09e342ee4b08e76 + url: "https://pub.dev" + source: hosted + version: "2.0.5" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: a34ecd7fb548f8e57321fd8e50d865d266941b54e6c3b7758cf8f37c24116905 + url: "https://pub.dev" + source: hosted + version: "2.0.7" + platform: + dependency: transitive + description: + name: platform + sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: dbf0f707c78beedc9200146ad3cb0ab4d5da13c246336987be6940f026500d3a + url: "https://pub.dev" + source: hosted + version: "2.1.3" + pointycastle: + dependency: transitive + description: + name: pointycastle + sha256: db7306cf0249f838d1a24af52b5a5887c5bf7f31d8bb4e827d071dc0939ad346 + url: "https://pub.dev" + source: hosted + version: "3.6.2" + pool: + dependency: transitive + description: + name: pool + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + url: "https://pub.dev" + source: hosted + version: "1.5.1" + process: + dependency: transitive + description: + name: process + sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "307de764d305289ff24ad257ad5c5793ce56d04947599ad68b3baa124105fc17" + url: "https://pub.dev" + source: hosted + version: "2.1.3" + pubspec_parse: + dependency: transitive + description: + name: pubspec_parse + sha256: "75f6614d6dde2dc68948dffbaa4fe5dae32cd700eb9fb763fe11dfb45a3c4d0a" + url: "https://pub.dev" + source: hosted + version: "1.2.1" + shelf: + dependency: transitive + description: + name: shelf + sha256: c24a96135a2ccd62c64b69315a14adc5c3419df63b4d7c05832a346fdb73682c + url: "https://pub.dev" + source: hosted + version: "1.4.0" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + sha256: a988c0e8d8ffbdb8a28aa7ec8e449c260f3deb808781fe1284d22c5bba7156e8 + url: "https://pub.dev" + source: hosted + version: "1.0.3" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_gen: + dependency: transitive + description: + name: source_gen + sha256: "2d79738b6bbf38a43920e2b8d189e9a3ce6cc201f4b8fc76be5e4fe377b1c38d" + url: "https://pub.dev" + source: hosted + version: "1.2.6" + source_helper: + dependency: transitive + description: + name: source_helper + sha256: "3b67aade1d52416149c633ba1bb36df44d97c6b51830c2198e934e3fca87ca1f" + url: "https://pub.dev" + source: hosted + version: "1.3.3" + source_span: + dependency: transitive + description: + name: source_span + sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + url: "https://pub.dev" + source: hosted + version: "1.9.1" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + url: "https://pub.dev" + source: hosted + version: "1.11.0" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + stream_transform: + dependency: transitive + description: + name: stream_transform + sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + test_api: + dependency: transitive + description: + name: test_api + sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 + url: "https://pub.dev" + source: hosted + version: "0.4.16" + timing: + dependency: transitive + description: + name: timing + sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + watcher: + dependency: transitive + description: + name: watcher + sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" + url: "https://pub.dev" + source: hosted + version: "1.0.2" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + sha256: ca49c0bc209c687b887f30527fb6a9d80040b072cc2990f34b9bec3e7663101b + url: "https://pub.dev" + source: hosted + version: "2.3.0" + win32: + dependency: transitive + description: + name: win32 + sha256: c0e3a4f7be7dae51d8f152230b86627e3397c1ba8c3fa58e63d44a9f3edc9cef + url: "https://pub.dev" + source: hosted + version: "2.6.1" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: bd512f03919aac5f1313eb8249f223bacf4927031bf60b02601f81f687689e86 + url: "https://pub.dev" + source: hosted + version: "0.2.0+3" + yaml: + dependency: transitive + description: + name: yaml + sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" + url: "https://pub.dev" + source: hosted + version: "3.1.1" +sdks: + dart: ">=2.19.0 <3.0.0" + flutter: ">=3.0.0" diff --git a/cw_shared_external/.gitignore b/cw_shared_external/.gitignore index 1b976a50e..e9dc58d3d 100644 --- a/cw_shared_external/.gitignore +++ b/cw_shared_external/.gitignore @@ -3,6 +3,5 @@ .packages .pub/ -/pubspec.lock build/ diff --git a/cw_shared_external/pubspec.lock b/cw_shared_external/pubspec.lock new file mode 100644 index 000000000..ef01c9f9a --- /dev/null +++ b/cw_shared_external/pubspec.lock @@ -0,0 +1,147 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + async: + dependency: transitive + description: + name: async + url: "https://pub.dartlang.org" + source: hosted + version: "2.5.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + characters: + dependency: transitive + description: + name: characters + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + charcode: + dependency: transitive + description: + name: charcode + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + clock: + dependency: transitive + description: + name: clock + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + collection: + dependency: transitive + description: + name: collection + url: "https://pub.dartlang.org" + source: hosted + version: "1.15.0" + fake_async: + dependency: transitive + description: + name: fake_async + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + matcher: + dependency: transitive + description: + name: matcher + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.10" + meta: + dependency: transitive + description: + name: meta + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.0" + path: + dependency: transitive + description: + name: path + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.0" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.0" + stack_trace: + dependency: transitive + description: + name: stack_trace + url: "https://pub.dartlang.org" + source: hosted + version: "1.10.0" + stream_channel: + dependency: transitive + description: + name: stream_channel + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + test_api: + dependency: transitive + description: + name: test_api + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.19" + typed_data: + dependency: transitive + description: + name: typed_data + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.0" + vector_math: + dependency: transitive + description: + name: vector_math + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" +sdks: + dart: ">=2.12.0-0.0 <3.0.0" + flutter: ">=1.20.0" diff --git a/ios/Podfile.lock b/ios/Podfile.lock new file mode 100644 index 000000000..3a810430d --- /dev/null +++ b/ios/Podfile.lock @@ -0,0 +1,255 @@ +PODS: + - barcode_scan2 (0.0.1): + - Flutter + - MTBBarcodeScanner + - SwiftProtobuf + - BigInt (5.2.0) + - connectivity (0.0.1): + - Flutter + - Reachability + - CryptoSwift (1.3.2) + - cw_haven (0.0.1): + - cw_haven/Boost (= 0.0.1) + - cw_haven/Haven (= 0.0.1) + - cw_haven/OpenSSL (= 0.0.1) + - cw_haven/Sodium (= 0.0.1) + - cw_shared_external + - Flutter + - cw_haven/Boost (0.0.1): + - cw_shared_external + - Flutter + - cw_haven/Haven (0.0.1): + - cw_shared_external + - Flutter + - cw_haven/OpenSSL (0.0.1): + - cw_shared_external + - Flutter + - cw_haven/Sodium (0.0.1): + - cw_shared_external + - Flutter + - cw_monero (0.0.2): + - cw_monero/Boost (= 0.0.2) + - cw_monero/Monero (= 0.0.2) + - cw_monero/OpenSSL (= 0.0.2) + - cw_monero/Sodium (= 0.0.2) + - cw_monero/Unbound (= 0.0.2) + - cw_shared_external + - Flutter + - cw_monero/Boost (0.0.2): + - cw_shared_external + - Flutter + - cw_monero/Monero (0.0.2): + - cw_shared_external + - Flutter + - cw_monero/OpenSSL (0.0.2): + - cw_shared_external + - Flutter + - cw_monero/Sodium (0.0.2): + - cw_shared_external + - Flutter + - cw_monero/Unbound (0.0.2): + - cw_shared_external + - Flutter + - cw_shared_external (0.0.1): + - cw_shared_external/Boost (= 0.0.1) + - cw_shared_external/OpenSSL (= 0.0.1) + - cw_shared_external/Sodium (= 0.0.1) + - Flutter + - cw_shared_external/Boost (0.0.1): + - Flutter + - cw_shared_external/OpenSSL (0.0.1): + - Flutter + - cw_shared_external/Sodium (0.0.1): + - Flutter + - device_display_brightness (0.0.1): + - Flutter + - device_info (0.0.1): + - Flutter + - devicelocale (0.0.1): + - Flutter + - DKImagePickerController/Core (4.3.2): + - DKImagePickerController/ImageDataManager + - DKImagePickerController/Resource + - DKImagePickerController/ImageDataManager (4.3.2) + - DKImagePickerController/PhotoGallery (4.3.2): + - DKImagePickerController/Core + - DKPhotoGallery + - DKImagePickerController/Resource (4.3.2) + - DKPhotoGallery (0.0.17): + - DKPhotoGallery/Core (= 0.0.17) + - DKPhotoGallery/Model (= 0.0.17) + - DKPhotoGallery/Preview (= 0.0.17) + - DKPhotoGallery/Resource (= 0.0.17) + - SDWebImage + - SwiftyGif + - DKPhotoGallery/Core (0.0.17): + - DKPhotoGallery/Model + - DKPhotoGallery/Preview + - SDWebImage + - SwiftyGif + - DKPhotoGallery/Model (0.0.17): + - SDWebImage + - SwiftyGif + - DKPhotoGallery/Preview (0.0.17): + - DKPhotoGallery/Model + - DKPhotoGallery/Resource + - SDWebImage + - SwiftyGif + - DKPhotoGallery/Resource (0.0.17): + - SDWebImage + - SwiftyGif + - file_picker (0.0.1): + - DKImagePickerController/PhotoGallery + - Flutter + - Flutter (1.0.0) + - flutter_secure_storage (3.3.1): + - Flutter + - local_auth_ios (0.0.1): + - Flutter + - MTBBarcodeScanner (5.0.11) + - package_info (0.0.1): + - Flutter + - path_provider_ios (0.0.1): + - Flutter + - permission_handler_apple (9.0.4): + - Flutter + - platform_device_id (0.0.1): + - Flutter + - Reachability (3.2) + - SDWebImage (5.9.1): + - SDWebImage/Core (= 5.9.1) + - SDWebImage/Core (5.9.1) + - share_plus (0.0.1): + - Flutter + - shared_preferences_ios (0.0.1): + - Flutter + - SwiftProtobuf (1.18.0) + - SwiftyGif (5.3.0) + - uni_links (0.0.1): + - Flutter + - UnstoppableDomainsResolution (4.0.0): + - BigInt + - CryptoSwift + - url_launcher_ios (0.0.1): + - Flutter + - webview_flutter_wkwebview (0.0.1): + - Flutter + +DEPENDENCIES: + - barcode_scan2 (from `.symlinks/plugins/barcode_scan2/ios`) + - connectivity (from `.symlinks/plugins/connectivity/ios`) + - CryptoSwift + - cw_haven (from `.symlinks/plugins/cw_haven/ios`) + - cw_monero (from `.symlinks/plugins/cw_monero/ios`) + - cw_shared_external (from `.symlinks/plugins/cw_shared_external/ios`) + - device_display_brightness (from `.symlinks/plugins/device_display_brightness/ios`) + - device_info (from `.symlinks/plugins/device_info/ios`) + - devicelocale (from `.symlinks/plugins/devicelocale/ios`) + - file_picker (from `.symlinks/plugins/file_picker/ios`) + - Flutter (from `Flutter`) + - flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`) + - local_auth_ios (from `.symlinks/plugins/local_auth_ios/ios`) + - package_info (from `.symlinks/plugins/package_info/ios`) + - path_provider_ios (from `.symlinks/plugins/path_provider_ios/ios`) + - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`) + - platform_device_id (from `.symlinks/plugins/platform_device_id/ios`) + - share_plus (from `.symlinks/plugins/share_plus/ios`) + - shared_preferences_ios (from `.symlinks/plugins/shared_preferences_ios/ios`) + - uni_links (from `.symlinks/plugins/uni_links/ios`) + - UnstoppableDomainsResolution (~> 4.0.0) + - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) + - webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`) + +SPEC REPOS: + https://github.com/CocoaPods/Specs.git: + - BigInt + - CryptoSwift + - DKImagePickerController + - DKPhotoGallery + - MTBBarcodeScanner + - Reachability + - SDWebImage + - SwiftProtobuf + - SwiftyGif + - UnstoppableDomainsResolution + +EXTERNAL SOURCES: + barcode_scan2: + :path: ".symlinks/plugins/barcode_scan2/ios" + connectivity: + :path: ".symlinks/plugins/connectivity/ios" + cw_haven: + :path: ".symlinks/plugins/cw_haven/ios" + cw_monero: + :path: ".symlinks/plugins/cw_monero/ios" + cw_shared_external: + :path: ".symlinks/plugins/cw_shared_external/ios" + device_display_brightness: + :path: ".symlinks/plugins/device_display_brightness/ios" + device_info: + :path: ".symlinks/plugins/device_info/ios" + devicelocale: + :path: ".symlinks/plugins/devicelocale/ios" + file_picker: + :path: ".symlinks/plugins/file_picker/ios" + Flutter: + :path: Flutter + flutter_secure_storage: + :path: ".symlinks/plugins/flutter_secure_storage/ios" + local_auth_ios: + :path: ".symlinks/plugins/local_auth_ios/ios" + package_info: + :path: ".symlinks/plugins/package_info/ios" + path_provider_ios: + :path: ".symlinks/plugins/path_provider_ios/ios" + permission_handler_apple: + :path: ".symlinks/plugins/permission_handler_apple/ios" + platform_device_id: + :path: ".symlinks/plugins/platform_device_id/ios" + share_plus: + :path: ".symlinks/plugins/share_plus/ios" + shared_preferences_ios: + :path: ".symlinks/plugins/shared_preferences_ios/ios" + uni_links: + :path: ".symlinks/plugins/uni_links/ios" + url_launcher_ios: + :path: ".symlinks/plugins/url_launcher_ios/ios" + webview_flutter_wkwebview: + :path: ".symlinks/plugins/webview_flutter_wkwebview/ios" + +SPEC CHECKSUMS: + barcode_scan2: 0af2bb63c81b4565aab6cd78278e4c0fa136dbb0 + BigInt: f668a80089607f521586bbe29513d708491ef2f7 + connectivity: c4130b2985d4ef6fd26f9702e886bd5260681467 + CryptoSwift: 093499be1a94b0cae36e6c26b70870668cb56060 + cw_haven: b3e54e1fbe7b8e6fda57a93206bc38f8e89b898a + cw_monero: 4cf3b96f2da8e95e2ef7d6703dd4d2c509127b7d + cw_shared_external: 2972d872b8917603478117c9957dfca611845a92 + device_display_brightness: 1510e72c567a1f6ce6ffe393dcd9afd1426034f7 + device_info: d7d233b645a32c40dfdc212de5cf646ca482f175 + devicelocale: b22617f40038496deffba44747101255cee005b0 + DKImagePickerController: b5eb7f7a388e4643264105d648d01f727110fc3d + DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179 + file_picker: 817ab1d8cd2da9d2da412a417162deee3500fc95 + Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 + flutter_secure_storage: 7953c38a04c3fdbb00571bcd87d8e3b5ceb9daec + local_auth_ios: 0d333dde7780f669e66f19d2ff6005f3ea84008d + MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb + package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62 + path_provider_ios: 14f3d2fd28c4fdb42f44e0f751d12861c43cee02 + permission_handler_apple: 44366e37eaf29454a1e7b1b7d736c2cceaeb17ce + platform_device_id: 81b3e2993881f87d0c82ef151dc274df4869aef5 + Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96 + SDWebImage: a990c053fff71e388a10f3357edb0be17929c9c5 + share_plus: 056a1e8ac890df3e33cb503afffaf1e9b4fbae68 + shared_preferences_ios: 548a61f8053b9b8a49ac19c1ffbc8b92c50d68ad + SwiftProtobuf: c3c12645230d9b09c72267e0de89468c5543bd86 + SwiftyGif: e466e86c660d343357ab944a819a101c4127cb40 + uni_links: d97da20c7701486ba192624d99bffaaffcfc298a + UnstoppableDomainsResolution: c3c67f4d0a5e2437cb00d4bd50c2e00d6e743841 + url_launcher_ios: 839c58cdb4279282219f5e248c3321761ff3c4de + webview_flutter_wkwebview: b7e70ef1ddded7e69c796c7390ee74180182971f + +PODFILE CHECKSUM: ae71bdf0eb731a1ffc399c122f6aa4dea0cb5f6f + +COCOAPODS: 1.11.3 From 8a45cb4dc7f2abe03c06cd6c2e48d0cc2ea88f58 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Wed, 8 Feb 2023 20:16:12 +0200 Subject: [PATCH 119/190] - Add Linter rules for return types and final fields - Enhance exception_handler code - Add ShareUtil to unify modification point --- analysis_options.yaml | 2 ++ .../dashboard/widgets/address_page.dart | 13 +++------ .../exchange_trade/exchange_trade_page.dart | 2 +- lib/src/screens/receive/receive_page.dart | 12 +++----- lib/src/screens/seed/wallet_seed_page.dart | 11 +++---- lib/utils/exception_handler.dart | 29 ++++++++++--------- lib/utils/share_util.dart | 13 +++++++++ 7 files changed, 44 insertions(+), 38 deletions(-) create mode 100644 lib/utils/share_util.dart 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/lib/src/screens/dashboard/widgets/address_page.dart b/lib/src/screens/dashboard/widgets/address_page.dart index 92528d0d3..9a9a2c070 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({ @@ -101,11 +98,9 @@ class AddressPage extends BasePage { splashColor: Colors.transparent, iconSize: 25, onPressed: () { - final box = context.findRenderObject() as RenderBox?; - - Share.share( - addressListViewModel.address.address, - sharePositionOrigin: box!.localToGlobal(Offset.zero) & box.size, + ShareUtil.share( + text: addressListViewModel.address.address, + context: context, ); }, icon: shareImage, diff --git a/lib/src/screens/exchange_trade/exchange_trade_page.dart b/lib/src/screens/exchange_trade/exchange_trade_page.dart index f56ae6b2a..9eb17c762 100644 --- a/lib/src/screens/exchange_trade/exchange_trade_page.dart +++ b/lib/src/screens/exchange_trade/exchange_trade_page.dart @@ -305,7 +305,7 @@ class ExchangeTradeState extends State { _effectsInstalled = true; } - transactionStatePopup() { + void transactionStatePopup() { showPopUp( context: context, builder: (BuildContext popupContext) { diff --git a/lib/src/screens/receive/receive_page.dart b/lib/src/screens/receive/receive_page.dart index aeef99341..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'; @@ -102,11 +100,9 @@ class ReceivePage extends BasePage { splashColor: Colors.transparent, iconSize: 25, onPressed: () { - final box = context.findRenderObject() as RenderBox?; - - Share.share( - addressListViewModel.address.address, - sharePositionOrigin: box!.localToGlobal(Offset.zero) & box.size, + ShareUtil.share( + text: addressListViewModel.address.address, + context: context, ); }, icon: shareImage diff --git a/lib/src/screens/seed/wallet_seed_page.dart b/lib/src/screens/seed/wallet_seed_page.dart index 13181cecf..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'; @@ -160,11 +159,9 @@ class WalletSeedPage extends BasePage { padding: EdgeInsets.only(right: 8.0), child: PrimaryButton( onPressed: () { - final box = context.findRenderObject() as RenderBox?; - - Share.share( - walletSeedViewModel.seed, - sharePositionOrigin: box!.localToGlobal(Offset.zero) & box.size, + ShareUtil.share( + text: walletSeedViewModel.seed, + context: context, ); }, text: S.of(context).save, diff --git a/lib/utils/exception_handler.dart b/lib/utils/exception_handler.dart index a4df85a7b..5fb50dabf 100644 --- a/lib/utils/exception_handler.dart +++ b/lib/utils/exception_handler.dart @@ -14,6 +14,7 @@ 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(); @@ -77,12 +78,11 @@ class ExceptionHandler { final lastPopupDate = DateTime.tryParse(sharedPrefs.getString(PreferencesKey.lastPopupDate) ?? '') ?? - DateTime.parse("2001-01-01"); + DateTime.now().subtract(Duration(days: coolDownDurationInDays + 1)); final durationSinceLastReport = DateTime.now().difference(lastPopupDate).inDays; - // cool-down duration to be 7 days between reports - if (_hasError || durationSinceLastReport < 7) { + if (_hasError || durationSinceLastReport < coolDownDurationInDays) { return; } _hasError = true; @@ -117,14 +117,17 @@ class ExceptionHandler { } /// Ignore User related errors or system errors - static bool _ignoreError(String error) { - return error.contains("errno = 103") || // SocketException: Software caused connection abort - error.contains("errno = 9") || // SocketException: Bad file descriptor - error.contains("errno = 32") || // SocketException: Write failed (OS Error: Broken pipe) - error.contains("errno = 60") || // SocketException: Operation timed out - error.contains("errno = 54") || // SocketException: Connection reset by peer - error.contains("errno = 49") || // SocketException: Can't assign requested address - error.contains("PERMISSION_NOT_GRANTED") || - error.contains("errno = 28"); // OS Error: No space left on device - } + 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 = 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..5b33399c7 --- /dev/null +++ b/lib/utils/share_util.dart @@ -0,0 +1,13 @@ +import 'package:flutter/material.dart'; +import 'package:share_plus/share_plus.dart'; + +class ShareUtil { + static void share({required String text, required BuildContext context}) { + final box = context.findRenderObject() as RenderBox?; + + Share.share( + text, + sharePositionOrigin: box!.localToGlobal(Offset.zero) & box.size, + ); + } +} \ No newline at end of file From 51a11d0bc2c6bea464f89c79a360895ef0aa715b Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Wed, 8 Feb 2023 20:47:23 +0200 Subject: [PATCH 120/190] Make coolDownDuration private --- lib/utils/exception_handler.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/utils/exception_handler.dart b/lib/utils/exception_handler.dart index 5fb50dabf..4cbebdb5d 100644 --- a/lib/utils/exception_handler.dart +++ b/lib/utils/exception_handler.dart @@ -14,7 +14,7 @@ import 'package:shared_preferences/shared_preferences.dart'; class ExceptionHandler { static bool _hasError = false; - static const coolDownDurationInDays = 7; + static const _coolDownDurationInDays = 7; static void _saveException(String? error, StackTrace? stackTrace) async { final appDocDir = await getApplicationDocumentsDirectory(); @@ -78,11 +78,11 @@ class ExceptionHandler { final lastPopupDate = DateTime.tryParse(sharedPrefs.getString(PreferencesKey.lastPopupDate) ?? '') ?? - DateTime.now().subtract(Duration(days: coolDownDurationInDays + 1)); + DateTime.now().subtract(Duration(days: _coolDownDurationInDays + 1)); final durationSinceLastReport = DateTime.now().difference(lastPopupDate).inDays; - if (_hasError || durationSinceLastReport < coolDownDurationInDays) { + if (_hasError || durationSinceLastReport < _coolDownDurationInDays) { return; } _hasError = true; From 11a5831b08e16e4789eb2bbe572d130599e4817d Mon Sep 17 00:00:00 2001 From: Justin Ehrenhofer Date: Wed, 8 Feb 2023 13:33:54 -0600 Subject: [PATCH 121/190] Fix support URLs --- lib/view_model/support_view_model.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/view_model/support_view_model.dart b/lib/view_model/support_view_model.dart index 5fa81b288..3b919e750 100644 --- a/lib/view_model/support_view_model.dart +++ b/lib/view_model/support_view_model.dart @@ -42,7 +42,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 +84,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 From 576152de9994d7d7b32224c510636301c63ae2f4 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Wed, 8 Feb 2023 21:42:23 +0200 Subject: [PATCH 122/190] New Release versions - Cake Wallet 4.5.8 - Monero.com 1.2.7 --- scripts/android/app_env.sh | 8 ++++---- scripts/ios/app_env.sh | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/scripts/android/app_env.sh b/scripts/android/app_env.sh index 0de5985d5..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.6" -MONERO_COM_BUILD_NUMBER=37 +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.7" -CAKEWALLET_BUILD_NUMBER=143 +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 f0e701691..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.6" -MONERO_COM_BUILD_NUMBER=34 +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.7" -CAKEWALLET_BUILD_NUMBER=139 +CAKEWALLET_VERSION="4.5.8" +CAKEWALLET_BUILD_NUMBER=140 CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet" HAVEN_NAME="Haven" From 624036d00cda371d010a2d74733b427c4c5391bf Mon Sep 17 00:00:00 2001 From: Serhii Date: Thu, 9 Feb 2023 12:23:13 +0200 Subject: [PATCH 123/190] add address lookup for pinned tweet --- lib/entities/parse_address_from_domain.dart | 11 ++++++++--- lib/twitter/twitter_api.dart | 14 ++++++++++++-- lib/twitter/twitter_user.dart | 7 +++++-- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/lib/entities/parse_address_from_domain.dart b/lib/entities/parse_address_from_domain.dart index 6574d26fd..20ccb46c6 100644 --- a/lib/entities/parse_address_from_domain.dart +++ b/lib/entities/parse_address_from_domain.dart @@ -44,10 +44,15 @@ class AddressResolver { if (text.startsWith('@') && !text.substring(1).contains('@')) { final formattedName = text.substring(1); final twitterUser = await TwitterApi.lookupUserByName(userName: formattedName); - final address = extractAddressByType( + final addressFromBio = extractAddressByType( raw: twitterUser.description ?? '', type: CryptoCurrency.fromString(ticker)); - if (address != null) { - return ParsedAddress.fetchTwitterAddress(address: address, name: text); + final addressFromPinnedTweet = extractAddressByType( + raw: twitterUser.pinnedTweet ?? '', type: CryptoCurrency.fromString(ticker)); + if (addressFromBio != null) { + return ParsedAddress.fetchTwitterAddress(address: addressFromBio, name: text); + } + if (addressFromPinnedTweet != null) { + return ParsedAddress.fetchTwitterAddress(address: addressFromPinnedTweet, name: text); } } if (!text.startsWith('@') && text.contains('@') && !text.contains('.')) { diff --git a/lib/twitter/twitter_api.dart b/lib/twitter/twitter_api.dart index 27fb7d1a2..202e3d217 100644 --- a/lib/twitter/twitter_api.dart +++ b/lib/twitter/twitter_api.dart @@ -10,7 +10,7 @@ class TwitterApi { static const userPath = '/2/users/by/username/'; static Future lookupUserByName({required String userName}) async { - final queryParams = {'user.fields': 'description'}; + final queryParams = {'user.fields': 'description', 'expansions': 'pinned_tweet_id'}; final headers = {'authorization': 'Bearer $twitterBearerToken'}; @@ -32,6 +32,16 @@ class TwitterApi { throw Exception(responseJSON['errors'][0]['detail']); } - return TwitterUser.fromJson(responseJSON['data'] as Map); + final user = responseJSON['data'] as Map; + + try { + if (responseJSON['includes'] != null) { + user['pinnedTweet'] = responseJSON['includes']['tweets'][0]['text']; + } + } catch (e) { + print('responseJSON[includes][tweets][0][text] $e'); + } + + return TwitterUser.fromJson(user); } } diff --git a/lib/twitter/twitter_user.dart b/lib/twitter/twitter_user.dart index c4bda7859..bf5d7282a 100644 --- a/lib/twitter/twitter_user.dart +++ b/lib/twitter/twitter_user.dart @@ -1,16 +1,19 @@ class TwitterUser { - TwitterUser({required this.id, required this.username, required this.name, this.description}); + TwitterUser({required this.id, required this.username, required this.name, this.description, + this.pinnedTweet}); final String id; final String username; final String name; final String? description; + final String? pinnedTweet; factory TwitterUser.fromJson(Map json) { return TwitterUser( id: json['id'] as String, username: json['username'] as String, name: json['name'] as String, - description: json['description'] as String?); + description: json['description'] as String?, + pinnedTweet: json['pinnedTweet'] as String?); } } From 5f6b4477064cd88eda09d8ecc8e8a4478b9b2072 Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Thu, 9 Feb 2023 18:24:59 +0200 Subject: [PATCH 124/190] Fix _network normalize function --- lib/exchange/trocador/trocador_exchange_provider.dart | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/lib/exchange/trocador/trocador_exchange_provider.dart b/lib/exchange/trocador/trocador_exchange_provider.dart index ecdeebe84..cfbc5001a 100644 --- a/lib/exchange/trocador/trocador_exchange_provider.dart +++ b/lib/exchange/trocador/trocador_exchange_provider.dart @@ -252,12 +252,7 @@ class TrocadorExchangeProvider extends ExchangeProvider { String get title => 'Trocador'; String _networkFor(CryptoCurrency currency) { - switch (currency) { - case CryptoCurrency.usdt: - return CryptoCurrency.btc.title.toLowerCase(); - default: - return currency.tag != null ? _normalizeTag(currency.tag!) : 'Mainnet'; - } + return currency.tag != null ? _normalizeTag(currency.tag!) : 'Mainnet'; } String _normalizeTag(String tag) { From 6711d9530f7ed89dd9e767b948470f5b2b620c72 Mon Sep 17 00:00:00 2001 From: Justin Ehrenhofer Date: Thu, 9 Feb 2023 10:52:24 -0600 Subject: [PATCH 125/190] Normalize remaining tags/networks Also rename Cake `C-CHAIN` tag to `AVAXC`, which will result in a clearer situation for user if we later add USDT (AVAXC), for example. --- cw_core/lib/crypto_currency.dart | 2 +- .../trocador/trocador_exchange_provider.dart | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/cw_core/lib/crypto_currency.dart b/cw_core/lib/crypto_currency.dart index 90051f1f7..6c4bec03a 100644 --- a/cw_core/lib/crypto_currency.dart +++ b/cw_core/lib/crypto_currency.dart @@ -117,7 +117,7 @@ class CryptoCurrency extends EnumerableItem with Serializable { static const xusd = CryptoCurrency(title: 'XUSD', tag: 'XHV', raw: 29, name: 'xusd'); 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 avaxc = CryptoCurrency(title: 'AVAX', tag: 'AVAXC', 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: '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'); diff --git a/lib/exchange/trocador/trocador_exchange_provider.dart b/lib/exchange/trocador/trocador_exchange_provider.dart index cfbc5001a..3bf52040a 100644 --- a/lib/exchange/trocador/trocador_exchange_provider.dart +++ b/lib/exchange/trocador/trocador_exchange_provider.dart @@ -26,8 +26,6 @@ class TrocadorExchangeProvider extends ExchangeProvider { CryptoCurrency.stx, CryptoCurrency.bttc, CryptoCurrency.zaddr, - CryptoCurrency.usdcpoly, - CryptoCurrency.maticpoly, ]; static List _supportedPairs() { @@ -252,7 +250,18 @@ class TrocadorExchangeProvider extends ExchangeProvider { String get title => 'Trocador'; String _networkFor(CryptoCurrency currency) { - return currency.tag != null ? _normalizeTag(currency.tag!) : 'Mainnet'; + switch (currency) { + case CryptoCurrency.eth: + return 'ERC20'; + case CryptoCurrency.maticpoly: + return 'Mainnet'; + case CryptoCurrency.usdcpoly: + return 'MATIC'; + case CryptoCurrency.zec: + return 'Mainnet'; + default: + return currency.tag != null ? _normalizeTag(currency.tag!) : 'Mainnet'; + } } String _normalizeTag(String tag) { From 25228eb633485acac3179f66463c87c899009f9b Mon Sep 17 00:00:00 2001 From: Serhii Date: Fri, 10 Feb 2023 00:01:58 +0200 Subject: [PATCH 126/190] fix confirmations --- lib/view_model/dashboard/transaction_list_item.dart | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/view_model/dashboard/transaction_list_item.dart b/lib/view_model/dashboard/transaction_list_item.dart index 19e93218d..52cf31105 100644 --- a/lib/view_model/dashboard/transaction_list_item.dart +++ b/lib/view_model/dashboard/transaction_list_item.dart @@ -1,5 +1,6 @@ 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'; @@ -12,7 +13,6 @@ import 'package:cake_wallet/view_model/dashboard/balance_view_model.dart'; import 'package:cw_core/keyable.dart'; import 'package:cw_core/wallet_type.dart'; -import '../../generated/i18n.dart'; class TransactionListItem extends ActionListItem with Keyable { TransactionListItem( @@ -47,10 +47,10 @@ class TransactionListItem extends ActionListItem with Keyable { } String get formattedPendingStatus { - if (transaction.confirmations == 0) { + if (transaction.confirmations == 0 || transaction.isPending) { return S.current.pending; } - if (transaction.confirmations > 0 && transaction.height < 10) { + if (transaction.confirmations > 0 && transaction.confirmations < 10) { return ' (${transaction.confirmations}/10)'; } return ''; @@ -60,9 +60,8 @@ class TransactionListItem extends ActionListItem with Keyable { if (transaction.direction == TransactionDirection.incoming) { if (balanceViewModel.wallet.type == WalletType.monero || balanceViewModel.wallet.type == WalletType.haven) { - return transaction.isPending ? formattedPendingStatus : ''; + return formattedPendingStatus; } - return transaction.isPending ? S.current.pending : ''; } return transaction.isPending ? S.current.pending : ''; } From 8bae7d2179b81927a637b1be3d940c9cf75c32ab Mon Sep 17 00:00:00 2001 From: Serhii Date: Sun, 12 Feb 2023 16:22:05 +0200 Subject: [PATCH 127/190] minor fix --- lib/view_model/dashboard/transaction_list_item.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/view_model/dashboard/transaction_list_item.dart b/lib/view_model/dashboard/transaction_list_item.dart index 52cf31105..b10af9279 100644 --- a/lib/view_model/dashboard/transaction_list_item.dart +++ b/lib/view_model/dashboard/transaction_list_item.dart @@ -48,7 +48,7 @@ class TransactionListItem extends ActionListItem with Keyable { String get formattedPendingStatus { if (transaction.confirmations == 0 || transaction.isPending) { - return S.current.pending; + return S.current.pending + ' (${transaction.confirmations}/10)'; } if (transaction.confirmations > 0 && transaction.confirmations < 10) { return ' (${transaction.confirmations}/10)'; From 5c663c55965549ad683c525f373ddc28cab2388b Mon Sep 17 00:00:00 2001 From: Serhii Date: Mon, 13 Feb 2023 00:38:12 +0200 Subject: [PATCH 128/190] redesign user object --- lib/entities/parse_address_from_domain.dart | 19 +++-- lib/twitter/twitter_api.dart | 12 +-- lib/twitter/twitter_user.dart | 82 +++++++++++++++++---- 3 files changed, 83 insertions(+), 30 deletions(-) diff --git a/lib/entities/parse_address_from_domain.dart b/lib/entities/parse_address_from_domain.dart index 20ccb46c6..debd930cf 100644 --- a/lib/entities/parse_address_from_domain.dart +++ b/lib/entities/parse_address_from_domain.dart @@ -45,14 +45,23 @@ class AddressResolver { final formattedName = text.substring(1); final twitterUser = await TwitterApi.lookupUserByName(userName: formattedName); final addressFromBio = extractAddressByType( - raw: twitterUser.description ?? '', type: CryptoCurrency.fromString(ticker)); - final addressFromPinnedTweet = extractAddressByType( - raw: twitterUser.pinnedTweet ?? '', type: CryptoCurrency.fromString(ticker)); + raw: twitterUser.data.description, type: CryptoCurrency.fromString(ticker)); if (addressFromBio != null) { return ParsedAddress.fetchTwitterAddress(address: addressFromBio, name: text); } - if (addressFromPinnedTweet != null) { - return ParsedAddress.fetchTwitterAddress(address: addressFromPinnedTweet, name: text); + final tweets = twitterUser.includes?.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('.')) { diff --git a/lib/twitter/twitter_api.dart b/lib/twitter/twitter_api.dart index 202e3d217..41f5df61d 100644 --- a/lib/twitter/twitter_api.dart +++ b/lib/twitter/twitter_api.dart @@ -32,16 +32,6 @@ class TwitterApi { throw Exception(responseJSON['errors'][0]['detail']); } - final user = responseJSON['data'] as Map; - - try { - if (responseJSON['includes'] != null) { - user['pinnedTweet'] = responseJSON['includes']['tweets'][0]['text']; - } - } catch (e) { - print('responseJSON[includes][tweets][0][text] $e'); - } - - return TwitterUser.fromJson(user); + return TwitterUser.fromJson(responseJSON); } } diff --git a/lib/twitter/twitter_user.dart b/lib/twitter/twitter_user.dart index bf5d7282a..626f9cd7f 100644 --- a/lib/twitter/twitter_user.dart +++ b/lib/twitter/twitter_user.dart @@ -1,19 +1,73 @@ class TwitterUser { - TwitterUser({required this.id, required this.username, required this.name, this.description, - this.pinnedTweet}); + TwitterUser({ + required this.data, + this.includes, + }); - final String id; - final String username; - final String name; - final String? description; - final String? pinnedTweet; + late final Data data; + late final Includes? includes; - factory TwitterUser.fromJson(Map json) { - return TwitterUser( - id: json['id'] as String, - username: json['username'] as String, - name: json['name'] as String, - description: json['description'] as String?, - pinnedTweet: json['pinnedTweet'] as String?); + TwitterUser.fromJson(Map json) { + data = Data.fromJson(json['data'] as Map); + includes = json['includes'] != null + ? Includes.fromJson(json['includes'] as Map) + : null; + } +} + +class Data { + Data({ + required this.name, + required this.id, + required this.pinnedTweetId, + required this.description, + required this.username, + }); + + late final String name; + late final String id; + late final String? pinnedTweetId; + late final String description; + late final String username; + + Data.fromJson(Map json) { + name = json['name'] as String; + id = json['id'] as String; + pinnedTweetId = json['pinned_tweet_id'] as String?; + description = json['description'] as String; + username = json['username'] as String; + } +} + +class Includes { + Includes({ + required this.tweets, + }); + + late final List tweets; + + Includes.fromJson(Map json) { + tweets = List.from(json['tweets'] as Iterable) + .map((e) => Tweets.fromJson(e as Map)) + .toList(); + } +} + +class Tweets { + Tweets({ + required this.editHistoryTweetIds, + required this.id, + required this.text, + }); + + late final List editHistoryTweetIds; + late final String id; + late final String text; + + Tweets.fromJson(Map json) { + editHistoryTweetIds = + List.castFrom(json['edit_history_tweet_ids'] as List); + id = json['id'] as String; + text = json['text'] as String; } } From 891a9d3368189ca710c952c2a4a6d757659a0c6f Mon Sep 17 00:00:00 2001 From: Justin Ehrenhofer Date: Mon, 13 Feb 2023 08:51:26 -0600 Subject: [PATCH 129/190] Add 5 new assets and map TRX -> TRC20 --- lib/exchange/trocador/trocador_exchange_provider.dart | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/lib/exchange/trocador/trocador_exchange_provider.dart b/lib/exchange/trocador/trocador_exchange_provider.dart index 3bf52040a..457757ea7 100644 --- a/lib/exchange/trocador/trocador_exchange_provider.dart +++ b/lib/exchange/trocador/trocador_exchange_provider.dart @@ -18,13 +18,8 @@ class TrocadorExchangeProvider extends ExchangeProvider { super(pairList: _supportedPairs()); static const List _notSupported = [ - CryptoCurrency.xhv, - CryptoCurrency.dcr, - CryptoCurrency.oxt, - CryptoCurrency.pivx, CryptoCurrency.scrt, CryptoCurrency.stx, - CryptoCurrency.bttc, CryptoCurrency.zaddr, ]; @@ -268,6 +263,8 @@ class TrocadorExchangeProvider extends ExchangeProvider { switch (tag) { case 'ETH': return 'ERC20'; + case 'TRX': + return 'TRC20'; default: return tag.toLowerCase(); } From a3f332342f6fcc2ab266e08bbfd08f3273997e9e Mon Sep 17 00:00:00 2001 From: Serhii Date: Mon, 13 Feb 2023 18:46:53 +0200 Subject: [PATCH 130/190] minor fix --- lib/view_model/dashboard/transaction_list_item.dart | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/lib/view_model/dashboard/transaction_list_item.dart b/lib/view_model/dashboard/transaction_list_item.dart index b10af9279..0f16bdfe8 100644 --- a/lib/view_model/dashboard/transaction_list_item.dart +++ b/lib/view_model/dashboard/transaction_list_item.dart @@ -47,10 +47,7 @@ class TransactionListItem extends ActionListItem with Keyable { } String get formattedPendingStatus { - if (transaction.confirmations == 0 || transaction.isPending) { - return S.current.pending + ' (${transaction.confirmations}/10)'; - } - if (transaction.confirmations > 0 && transaction.confirmations < 10) { + if (transaction.confirmations >= 0 && transaction.confirmations < 10) { return ' (${transaction.confirmations}/10)'; } return ''; From 1fe1b2fd87cf8ab8c4b1fd5dc79bd0d05b0ef25e Mon Sep 17 00:00:00 2001 From: Dimitris Apostolou Date: Sun, 5 Feb 2023 00:59:57 +0200 Subject: [PATCH 131/190] Fix typos --- README.md | 4 ++-- lib/anypay/any_pay_payment.dart | 2 +- lib/core/wallet_loading_service.dart | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 96f59e704..bd37590b4 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 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/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); From b5542d9f7daed4efdd9d774a3467870c15cd0b7a Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Mon, 13 Feb 2023 20:41:18 +0200 Subject: [PATCH 132/190] Add share files to share utils and unify the fix for ipad --- lib/src/screens/backup/backup_page.dart | 15 ++++-------- lib/utils/share_util.dart | 32 +++++++++++++++++++++---- 2 files changed, 33 insertions(+), 14 deletions(-) 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/utils/share_util.dart b/lib/utils/share_util.dart index 5b33399c7..518590fdd 100644 --- a/lib/utils/share_util.dart +++ b/lib/utils/share_util.dart @@ -1,13 +1,37 @@ import 'package:flutter/material.dart'; import 'package:share_plus/share_plus.dart'; +import 'package:cross_file/cross_file.dart'; class ShareUtil { - static void share({required String text, required BuildContext context}) { - final box = context.findRenderObject() as RenderBox?; + static const _mimeType = 'application/*'; + static void share({required String text, required BuildContext context}) { Share.share( text, - sharePositionOrigin: box!.localToGlobal(Offset.zero) & box.size, + sharePositionOrigin: _sharePosition(context), ); } -} \ No newline at end of file + + 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; + } +} From f49695f4179948df945ec4a87172982b696ef181 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Mon, 13 Feb 2023 20:44:23 +0200 Subject: [PATCH 133/190] Fix support links/emails not opening --- .../screens/settings/widgets/settings_link_provider_cell.dart | 4 ++-- lib/view_model/support_view_model.dart | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) 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..1b67f60e4 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,6 @@ class SettingsLinkProviderCell extends StandardListRow { color: Palette.blueCraiola)); static void _launchUrl(String url) async { - if (await canLaunch(url)) await launch(url, forceSafariVC: false); + await launch(url, forceSafariVC: false); } -} \ No newline at end of file +} diff --git a/lib/view_model/support_view_model.dart b/lib/view_model/support_view_model.dart index 3b919e750..4e602089a 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,7 @@ abstract class SupportViewModelBase with Store { RegularListItem( title: S.current.faq, handler: (BuildContext context) async { - if (await canLaunch(url)) await launch(url); + await launch(url); }, ), LinkListItem( From 6d7ce369bf08d1b05bc59c88000b9f9daa976214 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Mon, 13 Feb 2023 23:05:08 +0200 Subject: [PATCH 134/190] Add connection timed out error to ignored errors [skip ci] --- lib/utils/exception_handler.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/utils/exception_handler.dart b/lib/utils/exception_handler.dart index 4cbebdb5d..ed9f00fcb 100644 --- a/lib/utils/exception_handler.dart +++ b/lib/utils/exception_handler.dart @@ -125,6 +125,7 @@ class ExceptionHandler { "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 From 7235d8c9c23872de7706cacd3d39bb9215edbc34 Mon Sep 17 00:00:00 2001 From: Serhii Date: Tue, 14 Feb 2023 00:23:57 +0200 Subject: [PATCH 135/190] redesign user object --- lib/entities/parse_address_from_domain.dart | 4 +- lib/twitter/twitter_user.dart | 92 +++++++-------------- 2 files changed, 34 insertions(+), 62 deletions(-) diff --git a/lib/entities/parse_address_from_domain.dart b/lib/entities/parse_address_from_domain.dart index debd930cf..fce9d9a56 100644 --- a/lib/entities/parse_address_from_domain.dart +++ b/lib/entities/parse_address_from_domain.dart @@ -45,11 +45,11 @@ class AddressResolver { final formattedName = text.substring(1); final twitterUser = await TwitterApi.lookupUserByName(userName: formattedName); final addressFromBio = extractAddressByType( - raw: twitterUser.data.description, type: CryptoCurrency.fromString(ticker)); + raw: twitterUser.description, type: CryptoCurrency.fromString(ticker)); if (addressFromBio != null) { return ParsedAddress.fetchTwitterAddress(address: addressFromBio, name: text); } - final tweets = twitterUser.includes?.tweets; + final tweets = twitterUser.tweets; if (tweets != null) { var subString = StringBuffer(); tweets.forEach((item) { diff --git a/lib/twitter/twitter_user.dart b/lib/twitter/twitter_user.dart index 626f9cd7f..d24a68ca0 100644 --- a/lib/twitter/twitter_user.dart +++ b/lib/twitter/twitter_user.dart @@ -1,73 +1,45 @@ class TwitterUser { - TwitterUser({ - required this.data, - this.includes, - }); + TwitterUser( + {required this.id, + required this.username, + required this.name, + required this.description, + this.tweets}); - late final Data data; - late final Includes? includes; + final String id; + final String username; + final String name; + final String description; + final List? tweets; - TwitterUser.fromJson(Map json) { - data = Data.fromJson(json['data'] as Map); - includes = json['includes'] != null - ? Includes.fromJson(json['includes'] as Map) - : null; + 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 Data { - Data({ - required this.name, - required this.id, - required this.pinnedTweetId, - required this.description, - required this.username, - }); - - late final String name; - late final String id; - late final String? pinnedTweetId; - late final String description; - late final String username; - - Data.fromJson(Map json) { - name = json['name'] as String; - id = json['id'] as String; - pinnedTweetId = json['pinned_tweet_id'] as String?; - description = json['description'] as String; - username = json['username'] as String; - } -} - -class Includes { - Includes({ - required this.tweets, - }); - - late final List tweets; - - Includes.fromJson(Map json) { - tweets = List.from(json['tweets'] as Iterable) - .map((e) => Tweets.fromJson(e as Map)) - .toList(); - } -} - -class Tweets { - Tweets({ - required this.editHistoryTweetIds, +class Tweet { + Tweet({ required this.id, required this.text, }); - late final List editHistoryTweetIds; - late final String id; - late final String text; + final String id; + final String text; - Tweets.fromJson(Map json) { - editHistoryTweetIds = - List.castFrom(json['edit_history_tweet_ids'] as List); - id = json['id'] as String; - text = json['text'] as String; + factory Tweet.fromJson(Map json) { + return Tweet( + id: json['id'] as String, + text: json['text'] as String, + ); } } From f77a9592b2c76e3fec32f034aee93479d4a5e62d Mon Sep 17 00:00:00 2001 From: Omar Hatem Date: Tue, 14 Feb 2023 15:17:28 +0200 Subject: [PATCH 136/190] Add nullability check on description [skip ci] --- lib/twitter/twitter_user.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/twitter/twitter_user.dart b/lib/twitter/twitter_user.dart index d24a68ca0..ac373fd62 100644 --- a/lib/twitter/twitter_user.dart +++ b/lib/twitter/twitter_user.dart @@ -17,7 +17,7 @@ class 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, + description: json['data']['description'] as String? ?? '', tweets: json['includes'] != null ? List.from(json['includes']['tweets'] as List) .map((e) => Tweet.fromJson(e as Map)) From 54dab5883f283ec4897f9c62d17cf37dd36795bb Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Wed, 15 Feb 2023 17:50:48 +0200 Subject: [PATCH 137/190] Check for context first before showing popup --- lib/src/screens/dashboard/dashboard_page.dart | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/src/screens/dashboard/dashboard_page.dart b/lib/src/screens/dashboard/dashboard_page.dart index c21365aa4..173e8c4de 100644 --- a/lib/src/screens/dashboard/dashboard_page.dart +++ b/lib/src/screens/dashboard/dashboard_page.dart @@ -229,7 +229,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 +240,7 @@ class DashboardPage extends BasePage { buttonText: S.of(context).understand, buttonAction: () => Navigator.of(context).pop()); }); + } }); var needToPresentYat = false; From 5abbc8f4ddaab9a58ed79327441aecb710f3c538 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Wed, 15 Feb 2023 23:16:21 +0200 Subject: [PATCH 138/190] Fix incorrect amount parsing due to bytes approximation --- cw_bitcoin/lib/bitcoin_amount_format.dart | 2 +- cw_core/lib/monero_amount_format.dart | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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_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(); From 7b35604ff586ecd7d040a5a941bdd60aa6f5827f Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Mon, 20 Feb 2023 22:17:41 +0200 Subject: [PATCH 139/190] Add app version and device info to error report --- android/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- cw_haven/pubspec.yaml | 2 +- cw_monero/pubspec.yaml | 2 +- lib/utils/exception_handler.dart | 88 ++++++++++++++++++- 5 files changed, 90 insertions(+), 6 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 04c2af566..692e8dfb1 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlin_version = '1.5.10' + ext.kotlin_version = '1.6.21' repositories { google() jcenter() diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index b7ca2e6de..733c691d3 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip diff --git a/cw_haven/pubspec.yaml b/cw_haven/pubspec.yaml index 28f2c315e..7a5ac6aa4 100644 --- a/cw_haven/pubspec.yaml +++ b/cw_haven/pubspec.yaml @@ -12,7 +12,7 @@ environment: dependencies: flutter: sdk: flutter - ffi: ^1.1.2 + ffi: ^2.0.1 http: ^0.13.4 path_provider: ^2.0.11 mobx: ^2.0.7+4 diff --git a/cw_monero/pubspec.yaml b/cw_monero/pubspec.yaml index 23e8782cb..6d5041dfa 100644 --- a/cw_monero/pubspec.yaml +++ b/cw_monero/pubspec.yaml @@ -12,7 +12,7 @@ environment: dependencies: flutter: sdk: flutter - ffi: ^1.1.2 + ffi: ^2.0.1 http: ^0.13.4 path_provider: ^2.0.11 mobx: ^2.0.7+4 diff --git a/lib/utils/exception_handler.dart b/lib/utils/exception_handler.dart index 4cbebdb5d..8aefe7bc6 100644 --- a/lib/utils/exception_handler.dart +++ b/lib/utils/exception_handler.dart @@ -1,4 +1,3 @@ -import 'dart:convert'; import 'dart:io'; import 'package:cake_wallet/entities/preferences_key.dart'; @@ -6,9 +5,11 @@ 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:device_info_plus/device_info_plus.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_mailer/flutter_mailer.dart'; +import 'package:package_info/package_info.dart'; import 'package:path_provider/path_provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; @@ -31,7 +32,7 @@ class ExceptionHandler { ==========================================================\n\n'''; await file.writeAsString( - jsonEncode(exception) + separator, + "$exception $separator", mode: FileMode.append, ); } @@ -42,6 +43,8 @@ class ExceptionHandler { final file = File('${appDocDir.path}/error.txt'); + await _addDeviceInfo(file); + final MailOptions mailOptions = MailOptions( subject: 'Mobile App Issue', recipients: ['support@cakewallet.com'], @@ -130,4 +133,85 @@ class ExceptionHandler { "errno = 28", // OS Error: No space left on device "PERMISSION_NOT_GRANTED", ]; + + static Future _addDeviceInfo(File file) async { + final packageInfo = await PackageInfo.fromPlatform(); + final currentVersion = packageInfo.version; + + final deviceInfoPlugin = DeviceInfoPlugin(); + Map deviceInfo = {}; + + if (Platform.isAndroid) { + deviceInfo = _readAndroidBuildData(await deviceInfoPlugin.androidInfo); + deviceInfo["Platform"] = "Android"; + } else if (Platform.isIOS) { + deviceInfo = _readIosDeviceInfo(await deviceInfoPlugin.iosInfo); + deviceInfo["Platform"] = "iOS"; + } else if (Platform.isLinux) { + deviceInfo = _readLinuxDeviceInfo(await deviceInfoPlugin.linuxInfo); + deviceInfo["Platform"] = "Linux"; + } else if (Platform.isMacOS) { + deviceInfo = _readMacOsDeviceInfo(await deviceInfoPlugin.macOsInfo); + deviceInfo["Platform"] = "MacOS"; + } else if (Platform.isWindows) { + deviceInfo = _readWindowsDeviceInfo(await deviceInfoPlugin.windowsInfo); + deviceInfo["Platform"] = "Windows"; + } + + await file.writeAsString( + "App Version: $currentVersion\n\nDevice Info $deviceInfo", + mode: FileMode.append, + ); + } + + static Map _readAndroidBuildData(AndroidDeviceInfo build) { + return { + 'brand': build.brand, + 'device': build.device, + 'manufacturer': build.manufacturer, + 'model': build.model, + 'product': build.product, + }; + } + + static Map _readIosDeviceInfo(IosDeviceInfo data) { + return { + 'systemName': data.systemName, + 'systemVersion': data.systemVersion, + 'model': data.model, + 'localizedModel': data.localizedModel, + }; + } + + static Map _readLinuxDeviceInfo(LinuxDeviceInfo data) { + return { + 'name': data.name, + 'version': data.version, + 'versionCodename': data.versionCodename, + 'versionId': data.versionId, + 'prettyName': data.prettyName, + 'buildId': data.buildId, + 'variant': data.variant, + 'variantId': data.variantId, + }; + } + + static Map _readMacOsDeviceInfo(MacOsDeviceInfo data) { + return { + 'arch': data.arch, + 'model': data.model, + 'kernelVersion': data.kernelVersion, + 'osRelease': data.osRelease, + }; + } + + static Map _readWindowsDeviceInfo(WindowsDeviceInfo data) { + return { + 'majorVersion': data.majorVersion, + 'minorVersion': data.minorVersion, + 'buildNumber': data.buildNumber, + 'productType': data.productType, + 'productName': data.productName, + }; + } } From 37ea2d341f2a305265b0dc21b92cbc110fdb41eb Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Mon, 20 Feb 2023 22:25:54 +0200 Subject: [PATCH 140/190] Add Exception handler to report loading wallet issues --- lib/reactions/on_authentication_state_change.dart | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/reactions/on_authentication_state_change.dart b/lib/reactions/on_authentication_state_change.dart index edadf33b0..7521170e6 100644 --- a/lib/reactions/on_authentication_state_change.dart +++ b/lib/reactions/on_authentication_state_change.dart @@ -1,4 +1,5 @@ import 'package:cake_wallet/routes.dart'; +import 'package:cake_wallet/utils/exception_handler.dart'; import 'package:flutter/widgets.dart'; import 'package:mobx/mobx.dart'; import 'package:cake_wallet/entities/load_current_wallet.dart'; @@ -16,8 +17,9 @@ void startAuthenticationStateChange(AuthenticationStore authenticationStore, if (state == AuthenticationState.installed) { try { await loadCurrentWallet(); - } catch (e) { - loginError = e; + } catch (error, stack) { + loginError = error; + ExceptionHandler.onError(FlutterErrorDetails(exception: error, stack: stack)); } return; } From d589e72ae8a618a49af57afa131ccfc82b48b013 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Tue, 21 Feb 2023 00:03:57 +0200 Subject: [PATCH 141/190] update file picker version --- pubspec_base.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec_base.yaml b/pubspec_base.yaml index 2caa9052f..6086d698a 100644 --- a/pubspec_base.yaml +++ b/pubspec_base.yaml @@ -55,7 +55,7 @@ dependencies: another_flushbar: ^1.12.29 archive: ^3.3.0 cryptography: ^2.0.5 - file_picker: ^4.6.1 + file_picker: ^5.2.5 unorm_dart: ^0.2.0 # check unorm_dart for usage and for replace permission_handler: ^10.0.0 From 38b7a2ff45aec1767b4c5d9b9aea7209cddf20f9 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Tue, 21 Feb 2023 01:28:30 +0200 Subject: [PATCH 142/190] Add device info dependency to pubspec_base.yaml --- pubspec_base.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/pubspec_base.yaml b/pubspec_base.yaml index 6086d698a..079ba7c76 100644 --- a/pubspec_base.yaml +++ b/pubspec_base.yaml @@ -62,6 +62,7 @@ dependencies: device_display_brightness: ^0.0.6 platform_device_id: ^1.0.1 flutter_mailer: ^2.0.2 + device_info_plus: ^8.1.0 cake_backup: git: url: https://github.com/cake-tech/cake_backup.git From db1fdac2b50e752ea81d16dfdf0a0f8ef74f17c0 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Wed, 22 Feb 2023 04:15:18 +0200 Subject: [PATCH 143/190] Add connection timed out error to ignored exceptions [skip ci] --- lib/utils/exception_handler.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/utils/exception_handler.dart b/lib/utils/exception_handler.dart index 8aefe7bc6..55d27e6a1 100644 --- a/lib/utils/exception_handler.dart +++ b/lib/utils/exception_handler.dart @@ -128,6 +128,7 @@ class ExceptionHandler { "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 From cf5cee946b5c99230dbe0ae2f9a13e3b56592209 Mon Sep 17 00:00:00 2001 From: cr0mll Date: Sat, 25 Feb 2023 19:34:23 +0200 Subject: [PATCH 144/190] Added Bulgarian language --- lib/entities/language_service.dart | 2 + res/values/strings_bg.arb | 688 +++++++++++++++++++++++++++++ 2 files changed, 690 insertions(+) create mode 100644 res/values/strings_bg.arb diff --git a/lib/entities/language_service.dart b/lib/entities/language_service.dart index 2f3443c02..dda28c14b 100644 --- a/lib/entities/language_service.dart +++ b/lib/entities/language_service.dart @@ -23,6 +23,7 @@ class LanguageService { 'ar': 'العربية (Arabic)', 'tr': 'Türkçe (Turkish)', 'my': 'မြန်မာ (Burmese)', + 'bg': 'Български (Bulgarian)' }; static const Map localeCountryCode = { @@ -45,6 +46,7 @@ class LanguageService { 'ar': 'sau', 'tr': 'tur', 'my': 'mmr', + 'bg': 'bgr' }; static final list = {}; diff --git a/res/values/strings_bg.arb b/res/values/strings_bg.arb new file mode 100644 index 000000000..32e9ed0c5 --- /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Моля, изпратете доклада до нашия отдел поддръжка, за да подобрим приложението." +} From 2c43f29d64adc344e463a4b1b32da721780e2d1a Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Mon, 27 Feb 2023 15:59:20 +0200 Subject: [PATCH 145/190] Check if context is still mounted before showing a popup [skip ci] --- lib/src/screens/dashboard/dashboard_page.dart | 5 +++-- lib/src/screens/dashboard/widgets/address_page.dart | 4 +++- lib/src/screens/send/send_page.dart | 4 +++- 3 files changed, 9 insertions(+), 4 deletions(-) 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 9a9a2c070..a09eb2ba8 100644 --- a/lib/src/screens/dashboard/widgets/address_page.dart +++ b/lib/src/screens/dashboard/widgets/address_page.dart @@ -117,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( @@ -131,6 +132,7 @@ class AddressPage extends BasePage { Navigator.of(context).pop(); }); }); + } }); return KeyboardActions( diff --git a/lib/src/screens/send/send_page.dart b/lib/src/screens/send/send_page.dart index 33e199487..881536944 100644 --- a/lib/src/screens/send/send_page.dart +++ b/lib/src/screens/send/send_page.dart @@ -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()); }); + } }); } From f470723ece0d0f3403834341dcd30394151c8cdb Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Mon, 27 Feb 2023 16:07:22 +0200 Subject: [PATCH 146/190] Add try/catch block in case launch url throws a platform exception --- .../screens/settings/widgets/settings_link_provider_cell.dart | 4 +++- lib/view_model/support_view_model.dart | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) 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 1b67f60e4..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 { - await launch(url, forceSafariVC: false); + try { + await launch(url, forceSafariVC: false); + } catch (e) {} } } diff --git a/lib/view_model/support_view_model.dart b/lib/view_model/support_view_model.dart index 4e602089a..15c25968f 100644 --- a/lib/view_model/support_view_model.dart +++ b/lib/view_model/support_view_model.dart @@ -18,7 +18,9 @@ abstract class SupportViewModelBase with Store { RegularListItem( title: S.current.faq, handler: (BuildContext context) async { - await launch(url); + try { + await launch(url); + } catch (e) {} }, ), LinkListItem( From 72d679ca250be208715c072d0b69bfadaa85c88c Mon Sep 17 00:00:00 2001 From: Justin Ehrenhofer Date: Mon, 27 Feb 2023 09:50:27 -0600 Subject: [PATCH 147/190] Delete Refund Policy It was never used, and we don't need it here. --- Refund Pollicy.md | 27 --------------------------- 1 file changed, 27 deletions(-) delete mode 100644 Refund Pollicy.md 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 From 9c26912ce948d4cad6734bdfa8e849a97f0a76ca Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Mon, 27 Feb 2023 18:28:30 +0200 Subject: [PATCH 148/190] Add Socket exception to ignored errors [skip ci] --- lib/utils/exception_handler.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/utils/exception_handler.dart b/lib/utils/exception_handler.dart index 55d27e6a1..8285b9c52 100644 --- a/lib/utils/exception_handler.dart +++ b/lib/utils/exception_handler.dart @@ -131,6 +131,7 @@ class ExceptionHandler { "errno = 110", // SocketException: Connection timed out "errno = 54", // SocketException: Connection reset by peer "errno = 49", // SocketException: Can't assign requested address + "errno = 57", // SocketException: Read failed (OS Error: Socket is not connected) "errno = 28", // OS Error: No space left on device "PERMISSION_NOT_GRANTED", ]; From afb3c7ddaf44bd52cc818790d115567fa05b2635 Mon Sep 17 00:00:00 2001 From: Justin Ehrenhofer Date: Mon, 27 Feb 2023 11:43:07 -0600 Subject: [PATCH 149/190] Add fiat currencies Adds: AED, ARS, BDT, CLP, COP, EGP, GHS, GTQ, IRR, MAD, NGN, PKR, SAR, THB, TRY, UAH, VND This may mess things up because of TRY, so I'll test the PR and make changes as needed --- assets/images/flags/are.png | Bin 0 -> 287 bytes assets/images/flags/arg.png | Bin 0 -> 340 bytes assets/images/flags/bgd.png | Bin 0 -> 446 bytes assets/images/flags/chl.png | Bin 0 -> 351 bytes assets/images/flags/col.png | Bin 0 -> 217 bytes assets/images/flags/egy.png | Bin 0 -> 431 bytes assets/images/flags/gha.png | Bin 0 -> 432 bytes assets/images/flags/gtm.png | Bin 0 -> 477 bytes assets/images/flags/irn.png | Bin 0 -> 615 bytes assets/images/flags/mar.png | Bin 0 -> 429 bytes assets/images/flags/nga.png | Bin 0 -> 193 bytes assets/images/flags/twn.png | Bin 0 -> 373 bytes assets/images/flags/vnm.png | Bin 0 -> 448 bytes lib/entities/fiat_currency.dart | 59 +++++++++++++++++++++++++------- 14 files changed, 46 insertions(+), 13 deletions(-) create mode 100644 assets/images/flags/are.png create mode 100644 assets/images/flags/arg.png create mode 100644 assets/images/flags/bgd.png create mode 100644 assets/images/flags/chl.png create mode 100644 assets/images/flags/col.png create mode 100644 assets/images/flags/egy.png create mode 100644 assets/images/flags/gha.png create mode 100644 assets/images/flags/gtm.png create mode 100644 assets/images/flags/irn.png create mode 100644 assets/images/flags/mar.png create mode 100644 assets/images/flags/nga.png create mode 100644 assets/images/flags/twn.png create mode 100644 assets/images/flags/vnm.png diff --git a/assets/images/flags/are.png b/assets/images/flags/are.png new file mode 100644 index 0000000000000000000000000000000000000000..ae68c4ff2a1768cadb388223715b2f0dc75642df GIT binary patch literal 287 zcmeAS@N?(olHy`uVBq!ia0vp^T0ktt!3HD`?mYJmNHG=%xjQkeJ16rJ$YDu$^mSxl z*x1kgCy^D%=PdAuEM{QfI}E~%$MaXD00p;rx;TbJxF<`nDvKI8Wg7h8ciV9=TThJb zZAGbpulR*(!FP6Q8n!PEu5ez-+qT^KKlA2W_v`B=C0?{nWboYiPgq{uxv*O4uzH-{ z3Xa@^t9In=`0Y`o(Y!)~`S8})JUmK=0vK;GxhXUlo%C4z|G%T;7uLl)=iN$>u%0qg z^3(!-g|!t)>FFBZJ}_MV!mv7QtNn{1`Jpz0}Tuav6FIs(X@rhT9Prm*S0{_0hef<9JiH}dN-P_%JaelgpT+y^?3zb&dGGD+yErfW;=G8(Ctd>$TX{@F2}ntl1o;Jn&A}uX z&I;?j0;=IG@Q5sCVBk9p!i>lBSEK+13q4&NLoEESUOdUwpdiwkxLHO@X4Ap%^_La; z8WW4mb^jC;Ka77d)pgVVAh!z%w*(cQ>i?}R@@Stk!OOEzQFD3KoM*1d9$hOpo~ush zb<wn>X~kpFh7oHSu()$H($e-eoTJOAO;ayjFXwZ&ErLXgPzY LtDnm{r-UW|t%;#5 literal 0 HcmV?d00001 diff --git a/assets/images/flags/bgd.png b/assets/images/flags/bgd.png new file mode 100644 index 0000000000000000000000000000000000000000..0f8c5cfe543515fb1c5b2e9520656dbc2783beb3 GIT binary patch literal 446 zcmeAS@N?(olHy`uVBq!ia0vp^T0ktt!3-q7rQ00=QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`D*}8%Tp6jjdJ;fA zoCO|{#S9F5he4R}c>anMpx|sz7sn6_|E-r^@--Oa-AF8!18XjzB xvG?B8RJCz?e)rl9>$?x{Yw>-e87#eWtE#f1n{TytM!T literal 0 HcmV?d00001 diff --git a/assets/images/flags/chl.png b/assets/images/flags/chl.png new file mode 100644 index 0000000000000000000000000000000000000000..73a38f406dcf90e3faebc0be75ad62082c76c2a5 GIT binary patch literal 351 zcmeAS@N?(olHy`uVBq!ia0vp^T0ktt!3-q7rQ00=QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`!vlOmTp28viF&Pl_3p?2|Nr@1RB9d{>3#N_bol>TXK-udbyCrY*qI~FYZ14^Y+bA9j)Vf+BdBYZ`m4M*OmvG zou@x_6OfWE3GxdDnv4@LM7BN80xIMz@Q5sCVBk9p!i>lBSEK+1Gdx`!LoEE?p5M-O zz<|f~qDb_+!m6+T>(h-S_DFo@^kYJ@1h5rq^#}W#nhqT}!_`J|q5;^~>c&B5PQ9AF@r54V9B- S6Hx=&$>8bg=d#Wzp$Pz4<(P2* literal 0 HcmV?d00001 diff --git a/assets/images/flags/col.png b/assets/images/flags/col.png new file mode 100644 index 0000000000000000000000000000000000000000..9a0fc6ac169953ac83b00dbcdef14529a6242e0f GIT binary patch literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^T0ktt!3-q7rQ00=QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`B?5dxT>qbCcy)kV)V7Afpj}Y6VY{&D2?0HzWXq&w4}cU$NswRge+Xc> z*St3pD8^af5n0T@z;_sg8IR|$NC66(dAc};Sops^wUd{@fQQ-e`PF~YyDu_a=kO4` zrjxic>cIMoRt(oUcjzfZnLnsvxX!&NXraqgsb|pwjmIy3SPC?O!PC{xWt~$(69A0L BN8tbf literal 0 HcmV?d00001 diff --git a/assets/images/flags/egy.png b/assets/images/flags/egy.png new file mode 100644 index 0000000000000000000000000000000000000000..062ee21cffb817a2175fc63e6feeffc3a923ecf2 GIT binary patch literal 431 zcmeAS@N?(olHy`uVBq!ia0vp^T0ktt!3-q7rQ00=QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`>jHd2T+a!ro#jyI{>_N!JF%(%LEzul57)ncdHCY`!gmjM zzJId+{gVTCkCtBAe9jvD7udy2bFM1F~So;zc2xMbVkAm_vU%i8nZ@5oP>7veNWpXohsP;lzZZ>6>& zHLrHedv7Jt;@@o0b(o>~L*}Hk?Is5ma%SC^cMS})RQs_1n(yte{ya@zmP#GVtm2no jdAa7{{$StgB|&<=8CeUry$hKKbPt24tDnm{r-UW|um;*( literal 0 HcmV?d00001 diff --git a/assets/images/flags/gha.png b/assets/images/flags/gha.png new file mode 100644 index 0000000000000000000000000000000000000000..8d6801e816e465426525c8b78e3ca509e0b7cb19 GIT binary patch literal 432 zcmeAS@N?(olHy`uVBq!ia0vp^T0ktt!3-q7rQ00=QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`O9OmDT+a!ro#j)z8>DzINb$Ol!r#kc|F4Oy=;ix!QSA2xvF~Taew`O{ zw`TisPHaXUubnZgsSYbU8{?0&Vq2#P$Vq~%`gK9<^C?jcMP?y>rvH~j|6dW?JyRgs zi~aT%q0nB#us%bF8vUSdLxxNThAan$Y*ltb__vSfin$JCxm@chPN#aSWcWelF{r5}E+EySQ}# literal 0 HcmV?d00001 diff --git a/assets/images/flags/gtm.png b/assets/images/flags/gtm.png new file mode 100644 index 0000000000000000000000000000000000000000..2083ad806201dab8c664d23f312a03005a84ae58 GIT binary patch literal 477 zcmV<30V4j1P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0dh%1K~z{r?UqkV z0znvuf4gd{tC>O&YKJHyAp%LSdG`zS8R`?+7w8gQ>e3;^z)R3SBPk`+wlFO=(sFIv z7PoC3f=&rDfzUjcci8zcJp0Zt3^@N4fmDY~wrG*zuT1#d*jQa~>M(TPOss8HoH{If z>xpkak<^igi?W7`vWA(cWeqM2!+b~I>N{hWFcH01737X~U>F+e^1a?6Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0sKisK~z{r?NmW) z6G0UIW@dMjHkT+xu=G$BBGf}~y$Sva^{juO*Zzebd-3YUi+Jr15WMx4TS+lq#2^F- zfh8MfcEpiaNZ%-5p^ixMrmjYOI#_1NEzwp z&AE>cn(1lHg*Ekb=J&LZPcPoj{4E%L(|#8o-+3sUH{lH#yqP2OnsQ8sXD)-$28oH0 z+L0KF=zx(U9@V7ZI{R-u@su_5dXtFm%kV2+KY6~~DBY;=^W?wvB#5rT6F z<1sW1M6gyu@9fAr@*IfhP2@XGgKO{UO|vpY+{3@XN_`yv?*B_a>mzQjuW|S6Y`M|y z!9j=*4~26xiPvf`ZX1=+3KdEL@C&cMcXNVJ|C9g#002ovPDHLkV1m^= BADsXI literal 0 HcmV?d00001 diff --git a/assets/images/flags/mar.png b/assets/images/flags/mar.png new file mode 100644 index 0000000000000000000000000000000000000000..65b31c8922927a7de8b332a4ddf9af8c22f061e8 GIT binary patch literal 429 zcmeAS@N?(olHy`uVBq!ia0vp^T0ktt!3-q7rQ00=QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`a{_!qTo0=29#+?#X{>idO*hQL;E=lRQ8nESI(kVi21^X|;$00goD7QX z^}W3f{k;tLYv@ie(+~7CXtL4|@-$edt9MvUcekc)vWtOrfMK?yL7S!i7HwV2K*PzV zdQ(jGavcqJXzA|M(%q+_3$*a`(uX!cN~I*oFZe%Uz!0Is%L`P`S>O>_%)r2R7=#&* z=dVZs3eNI$aSXBWzkB{PU$cUML!gM`(d|u-ZlC)9KUvyJ(bwAd#*U2lY%}HvC>-1U zTI1sj{tSUO#+=xAjb0_LXmKaW=Qe(merz<5xM`>9?K(|7HS)`?Pu_0;QT zrL4-*PMxpVb(hLju{NhmsFuvxGVj>-{)HuRM|O3kwkfv+ZhhMxw7vFo#evLTtG5SR jgZ9WTnHTHWyOa5&v_*(i>NO6aD;Ydp{an^LB{Ts53(lu; literal 0 HcmV?d00001 diff --git a/assets/images/flags/nga.png b/assets/images/flags/nga.png new file mode 100644 index 0000000000000000000000000000000000000000..ebfd82449d575856a0f2622a4cb1dacd2a8c8107 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^T0ktt!3-q7rQ00=QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1``2&1HTp8K}MJFb_`ugGj|NlU-HHv!^fD~&O!RVdW437PqN=TC$;DyMmM$ eb*F6Fz`$_p497z6Nn{1`V*`9bTp1XqiZXP*WZ?P7z`)KvgNbRHgv5Mi=4m1#b1N&4$H(tsV3=ZU zy{@$M*!1aFu3ULrQgYPVdMyXX3_H8^4GpKheEIeN|Nqj`qaq9)q6{6H47INrxL+}F z|6yPR+A#Ii<8mM+UlQaO3{-{(Fr1Yv696jZEbxddW?liAS lxR#%7@O1TaS?83{1OP(Cm7xFt literal 0 HcmV?d00001 diff --git a/assets/images/flags/vnm.png b/assets/images/flags/vnm.png new file mode 100644 index 0000000000000000000000000000000000000000..3cbbf878f49fb4e71c9cb2a85ce3896d9fd2c55e GIT binary patch literal 448 zcmeAS@N?(olHy`uVBq!ia0vp^T0ktt!3-q7rQ00=QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`a{_!qTyLq$-cpu*7$|;IN%q4Ep1bDKzh5xl)|R=gC38z%_C=-8|NjiP zRAe6oiGSI{`SUjGj~lE%uCxAm$8^t1>it5Ve?J%>g^K@rz;eex`qzDyXE`Dtmhybr z&-wiv`{PKlTWYe;ONDOh$UH9*0$RxZx8ov^QYi`Y3;s_SFhuC^@&eU!7I;J!GcfQS z24TkI`72U@f@?ip978Pp&rZC_*KEMUVi?Z!tgS$P>CgZ5I$Ok=)I9bm82a~_MrF!6 z$33&Vy5m4_sDbZ-!pAOKb8asJQl&B17Zy5)N4A9Qlizu(vRDGbR!2_VaN1^NsQKz!SH7r}th&1Bg;nF*k8!uI)JZTN zTR8v4U+3jk>nm3>fBsz&m8bP0 Hl+XkKu%*pp literal 0 HcmV?d00001 diff --git a/lib/entities/fiat_currency.dart b/lib/entities/fiat_currency.dart index 9cad6f468..b8f0a63bd 100644 --- a/lib/entities/fiat_currency.dart +++ b/lib/entities/fiat_currency.dart @@ -9,76 +9,109 @@ class FiatCurrency extends EnumerableItem with Serializable { static List get all => _all.values.toList(); static List get currenciesAvailableToBuyWith => - [aud, brl, cad, chf, czk, eur, dkk, gbp, hkd, ils, jpy, krw, mxn, myr, nok, nzd, pln, sek, sgd, thb, usd, zar]; + [aed, aud, bgn, brl, cad, chf, clp, cop, czk, dkk, egp, eur, gbp, gtq, hkd, hrk, huf, idr, ils, inr, isk, jpy, krw, mad, mxn, myr, ngn, nok, nzd, php, pkr, pln, ron, sek, sgd, thb, try, twd, usd, vnd, zar]; + static const aed = FiatCurrency(symbol: 'AED', countryCode: "are", fullName: "United Arab Emirates Dirham"); + static const ars = FiatCurrency(symbol: 'ARS', countryCode: "arg", fullName: "Argentine Peso"); static const aud = FiatCurrency(symbol: 'AUD', countryCode: "aus", fullName: "Australian Dollar"); + static const bdt = FiatCurrency(symbol: 'BDT', countryCode: "bgd", fullName: "Bangladeshi Taka"); static const bgn = FiatCurrency(symbol: 'BGN', countryCode: "bgr", fullName: "Bulgarian Lev"); static const brl = FiatCurrency(symbol: 'BRL', countryCode: "bra", fullName: "Brazilian Real"); static const cad = FiatCurrency(symbol: 'CAD', countryCode: "cad", fullName: "Canadian Dollar"); static const chf = FiatCurrency(symbol: 'CHF', countryCode: "che", fullName: "Swiss Franc"); + static const clp = FiatCurrency(symbol: 'CLP', countryCode: "chl", fullName: "Chilean Peso"); static const cny = FiatCurrency(symbol: 'CNY', countryCode: "chn", fullName: "Chinese Yuan"); + static const cop = FiatCurrency(symbol: 'COP', countryCode: "col", fullName: "Colombian Peso"); static const czk = FiatCurrency(symbol: 'CZK', countryCode: "czk", fullName: "Czech Koruna"); - static const eur = FiatCurrency(symbol: 'EUR', countryCode: "eur", fullName: "Euro"); static const dkk = FiatCurrency(symbol: 'DKK', countryCode: "dnk", fullName: "Danish Krone"); - static const gbp = FiatCurrency(symbol: 'GBP', countryCode: "gbr", fullName: "Pound sterling"); + static const egp = FiatCurrency(symbol: 'EGP', countryCode: "egy", fullName: "Egyptian Pound"); + static const eur = FiatCurrency(symbol: 'EUR', countryCode: "eur", fullName: "Euro"); + static const gbp = FiatCurrency(symbol: 'GBP', countryCode: "gbr", fullName: "Pound Sterling"); + static const ghs = FiatCurrency(symbol: 'GHS', countryCode: "gha", fullName: "Ghanaian Cedi"); + static const gtq = FiatCurrency(symbol: 'GTQ', countryCode: "gtm", fullName: "Guatemalan Quetzal"); static const hkd = FiatCurrency(symbol: 'HKD', countryCode: "hkg", fullName: "Hong Kong Dollar"); static const hrk = FiatCurrency(symbol: 'HRK', countryCode: "hrv", fullName: "Croatian Kuna"); static const huf = FiatCurrency(symbol: 'HUF', countryCode: "hun", fullName: "Hungarian Forint"); static const idr = FiatCurrency(symbol: 'IDR', countryCode: "idn", fullName: "Indonesian Rupiah"); static const ils = FiatCurrency(symbol: 'ILS', countryCode: "isr", fullName: "Israeli New Shekel"); static const inr = FiatCurrency(symbol: 'INR', countryCode: "ind", fullName: "Indian Rupee"); - static const isk = FiatCurrency(symbol: 'ISK', countryCode: "isl", fullName: "Icelandic Króna"); - static const jpy = FiatCurrency(symbol: 'JPY', countryCode: "jpn", fullName: "Japanese Yen equals"); - static const krw = FiatCurrency(symbol: 'KRW', countryCode: "kor", fullName: "South Korean won"); + static const irr = FiatCurrency(symbol: 'IRR', countryCode: "irn", fullName: "Iranian Rial"); + static const isk = FiatCurrency(symbol: 'ISK', countryCode: "isl", fullName: "Icelandic Krona Króna"); + static const jpy = FiatCurrency(symbol: 'JPY', countryCode: "jpn", fullName: "Japanese Yen"); + static const krw = FiatCurrency(symbol: 'KRW', countryCode: "kor", fullName: "South Korean Won"); + static const mad = FiatCurrency(symbol: 'MAD', countryCode: "mar", fullName: "Moroccan Dirham"); static const mxn = FiatCurrency(symbol: 'MXN', countryCode: "mex", fullName: "Mexican Peso"); static const myr = FiatCurrency(symbol: 'MYR', countryCode: "mys", fullName: "Malaysian Ringgit"); + static const ngn = FiatCurrency(symbol: 'NGN', countryCode: "nga", fullName: "Nigerian Naira"); static const nok = FiatCurrency(symbol: 'NOK', countryCode: "nor", fullName: "Norwegian Krone"); static const nzd = FiatCurrency(symbol: 'NZD', countryCode: "nzl", fullName: "New Zealand Dollar"); - static const php = FiatCurrency(symbol: 'PHP', countryCode: "phl", fullName: "Philippine peso"); - static const pln = FiatCurrency(symbol: 'PLN', countryCode: "pol", fullName: "Poland złoty"); + static const php = FiatCurrency(symbol: 'PHP', countryCode: "phl", fullName: "Philippine Peso"); + static const pkr = FiatCurrency(symbol: 'PKR', countryCode: "pak", fullName: "Pakistani Rupee"); + static const pln = FiatCurrency(symbol: 'PLN', countryCode: "pol", fullName: "Poland Zloty złoty"); static const ron = FiatCurrency(symbol: 'RON', countryCode: "rou", fullName: "Romanian Leu"); static const rub = FiatCurrency(symbol: 'RUB', countryCode: "rus", fullName: "Russian Ruble"); + static const sar = FiatCurrency(symbol: 'SAR', countryCode: "sau", fullName: "Saudi Riyal"); static const sek = FiatCurrency(symbol: 'SEK', countryCode: "swe", fullName: "Swedish Krona"); static const sgd = FiatCurrency(symbol: 'SGD', countryCode: "sgp", fullName: "Singapore Dollar"); - static const thb = FiatCurrency(symbol: 'THB', countryCode: "tha", fullName: "Thai Baht"); + static const thb = FiatCurrency(symbol: 'THB', countryCode: "tha", fullName: "New Thaiwan Dollar"); + static const try = FiatCurrency(symbol: 'TRY', countryCode: "tur", fullName: "Turkish Lira"); + static const twd = FiatCurrency(symbol: 'TWD', countryCode: "twn", fullName: "Thai Baht"); + static const uah = FiatCurrency(symbol: 'UAH', countryCode: "ukr", fullName: "Ukrainian Hryvnia"); static const usd = FiatCurrency(symbol: 'USD', countryCode: "usa", fullName: "United States Dollar"); + static const vef = FiatCurrency(symbol: 'VEF', countryCode: "ven", fullName: "Venezuelan Bolivar Bolívar"); + static const vnd = FiatCurrency(symbol: 'VND', countryCode: "vnm", fullName: "Vietnamese Dong đồng"); static const zar = FiatCurrency(symbol: 'ZAR', countryCode: "saf", fullName: "South African Rand"); - static const vef = FiatCurrency(symbol: 'VEF', countryCode: "ven", fullName: "Venezuelan Bolívar"); static final _all = { + FiatCurrency.aed.raw: FiatCurrency.aed, + FiatCurrency.ars.raw: FiatCurrency.ars, FiatCurrency.aud.raw: FiatCurrency.aud, + FiatCurrency.bdt.raw: FiatCurrency.bdt, FiatCurrency.bgn.raw: FiatCurrency.bgn, FiatCurrency.brl.raw: FiatCurrency.brl, FiatCurrency.cad.raw: FiatCurrency.cad, FiatCurrency.chf.raw: FiatCurrency.chf, FiatCurrency.cny.raw: FiatCurrency.cny, + FiatCurrency.cop.raw: FiatCurrency.cop, FiatCurrency.czk.raw: FiatCurrency.czk, - FiatCurrency.eur.raw: FiatCurrency.eur, FiatCurrency.dkk.raw: FiatCurrency.dkk, + FiatCurrency.egp.raw: FiatCurrency.egp, + FiatCurrency.eur.raw: FiatCurrency.eur, FiatCurrency.gbp.raw: FiatCurrency.gbp, + FiatCurrency.ghs.raw: FiatCurrency.ghs, + FiatCurrency.gtq.raw: FiatCurrency.gtq, FiatCurrency.hkd.raw: FiatCurrency.hkd, FiatCurrency.hrk.raw: FiatCurrency.hrk, FiatCurrency.huf.raw: FiatCurrency.huf, FiatCurrency.idr.raw: FiatCurrency.idr, FiatCurrency.ils.raw: FiatCurrency.ils, FiatCurrency.inr.raw: FiatCurrency.inr, + FiatCurrency.irr.raw: FiatCurrency.irr, FiatCurrency.isk.raw: FiatCurrency.isk, FiatCurrency.jpy.raw: FiatCurrency.jpy, FiatCurrency.krw.raw: FiatCurrency.krw, + FiatCurrency.mad.raw: FiatCurrency.mad, FiatCurrency.mxn.raw: FiatCurrency.mxn, FiatCurrency.myr.raw: FiatCurrency.myr, + FiatCurrency.ngn.raw: FiatCurrency.ngn, FiatCurrency.nok.raw: FiatCurrency.nok, FiatCurrency.nzd.raw: FiatCurrency.nzd, FiatCurrency.php.raw: FiatCurrency.php, + FiatCurrency.pkr.raw: FiatCurrency.pkr, FiatCurrency.pln.raw: FiatCurrency.pln, FiatCurrency.ron.raw: FiatCurrency.ron, FiatCurrency.rub.raw: FiatCurrency.rub, + FiatCurrency.sar.raw: FiatCurrency.sar, FiatCurrency.sek.raw: FiatCurrency.sek, FiatCurrency.sgd.raw: FiatCurrency.sgd, FiatCurrency.thb.raw: FiatCurrency.thb, + FiatCurrency.try.raw: FiatCurrency.try, + FiatCurrency.twd.raw: FiatCurrency.twd, + FiatCurrency.uah.raw: FiatCurrency.uah, FiatCurrency.usd.raw: FiatCurrency.usd, - FiatCurrency.zar.raw: FiatCurrency.zar, - FiatCurrency.vef.raw: FiatCurrency.vef + FiatCurrency.vef.raw: FiatCurrency.vef, + FiatCurrency.vnd.raw: FiatCurrency.vnd, + FiatCurrency.zar.raw: FiatCurrency.zar }; static FiatCurrency deserialize({required String raw}) => _all[raw]!; From b5005400728bcdde02214ca594b8dc8d2bc13f62 Mon Sep 17 00:00:00 2001 From: Justin Ehrenhofer Date: Mon, 27 Feb 2023 11:55:01 -0600 Subject: [PATCH 150/190] Test fix for TRY As suspected: https://github.com/cake-tech/cake_wallet/actions/runs/4285241568/jobs/7463282181#step:13:306 This might not work depending on how the const is used, so will test the build --- lib/entities/fiat_currency.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/entities/fiat_currency.dart b/lib/entities/fiat_currency.dart index b8f0a63bd..3dc1e49a5 100644 --- a/lib/entities/fiat_currency.dart +++ b/lib/entities/fiat_currency.dart @@ -9,7 +9,7 @@ class FiatCurrency extends EnumerableItem with Serializable { static List get all => _all.values.toList(); static List get currenciesAvailableToBuyWith => - [aed, aud, bgn, brl, cad, chf, clp, cop, czk, dkk, egp, eur, gbp, gtq, hkd, hrk, huf, idr, ils, inr, isk, jpy, krw, mad, mxn, myr, ngn, nok, nzd, php, pkr, pln, ron, sek, sgd, thb, try, twd, usd, vnd, zar]; + [aed, aud, bgn, brl, cad, chf, clp, cop, czk, dkk, egp, eur, gbp, gtq, hkd, hrk, huf, idr, ils, inr, isk, jpy, krw, mad, mxn, myr, ngn, nok, nzd, php, pkr, pln, ron, sek, sgd, thb, turtry, twd, usd, vnd, zar]; static const aed = FiatCurrency(symbol: 'AED', countryCode: "are", fullName: "United Arab Emirates Dirham"); static const ars = FiatCurrency(symbol: 'ARS', countryCode: "arg", fullName: "Argentine Peso"); @@ -54,7 +54,7 @@ class FiatCurrency extends EnumerableItem with Serializable { static const sek = FiatCurrency(symbol: 'SEK', countryCode: "swe", fullName: "Swedish Krona"); static const sgd = FiatCurrency(symbol: 'SGD', countryCode: "sgp", fullName: "Singapore Dollar"); static const thb = FiatCurrency(symbol: 'THB', countryCode: "tha", fullName: "New Thaiwan Dollar"); - static const try = FiatCurrency(symbol: 'TRY', countryCode: "tur", fullName: "Turkish Lira"); + static const turtry = FiatCurrency(symbol: 'TRY', countryCode: "tur", fullName: "Turkish Lira"); static const twd = FiatCurrency(symbol: 'TWD', countryCode: "twn", fullName: "Thai Baht"); static const uah = FiatCurrency(symbol: 'UAH', countryCode: "ukr", fullName: "Ukrainian Hryvnia"); static const usd = FiatCurrency(symbol: 'USD', countryCode: "usa", fullName: "United States Dollar"); @@ -105,7 +105,7 @@ class FiatCurrency extends EnumerableItem with Serializable { FiatCurrency.sek.raw: FiatCurrency.sek, FiatCurrency.sgd.raw: FiatCurrency.sgd, FiatCurrency.thb.raw: FiatCurrency.thb, - FiatCurrency.try.raw: FiatCurrency.try, + FiatCurrency.turtry.raw: FiatCurrency.turtry, FiatCurrency.twd.raw: FiatCurrency.twd, FiatCurrency.uah.raw: FiatCurrency.uah, FiatCurrency.usd.raw: FiatCurrency.usd, From c6f6ab0bc963f37112428a1288fae7fa247a4b1e Mon Sep 17 00:00:00 2001 From: Justin Ehrenhofer Date: Mon, 27 Feb 2023 12:29:05 -0600 Subject: [PATCH 151/190] Add missing clp --- lib/entities/fiat_currency.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/entities/fiat_currency.dart b/lib/entities/fiat_currency.dart index 3dc1e49a5..6d871bf48 100644 --- a/lib/entities/fiat_currency.dart +++ b/lib/entities/fiat_currency.dart @@ -71,6 +71,7 @@ class FiatCurrency extends EnumerableItem with Serializable { FiatCurrency.brl.raw: FiatCurrency.brl, FiatCurrency.cad.raw: FiatCurrency.cad, FiatCurrency.chf.raw: FiatCurrency.chf, + FiatCurrency.clp.raw: FiatCurrency.clp, FiatCurrency.cny.raw: FiatCurrency.cny, FiatCurrency.cop.raw: FiatCurrency.cop, FiatCurrency.czk.raw: FiatCurrency.czk, From c30bbc75b145564c19ff8b0eaf8c9d5b783a30c5 Mon Sep 17 00:00:00 2001 From: MihailKovachev Date: Tue, 28 Feb 2023 10:04:39 +0200 Subject: [PATCH 152/190] Updated Readme with supported languages --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8e94080cb..e18db31a0 100644 --- a/README.md +++ b/README.md @@ -105,6 +105,7 @@ Edit the applicable `strings_XX.arb` file in `res/values/` and open a pull reque - Turkish - Burmese - Urdu +- Bulgarian ## Add a new language From 25ec44b4e515b1628ee53db2fd2dda744f8b66ac Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Tue, 28 Feb 2023 15:37:20 +0200 Subject: [PATCH 153/190] Add missing Nano currency image [skip ci] --- cw_core/lib/crypto_currency.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cw_core/lib/crypto_currency.dart b/cw_core/lib/crypto_currency.dart index 90051f1f7..00bfc237c 100644 --- a/cw_core/lib/crypto_currency.dart +++ b/cw_core/lib/crypto_currency.dart @@ -94,7 +94,7 @@ class CryptoCurrency extends EnumerableItem with Serializable { static const eos = CryptoCurrency(title: 'EOS', fullName: 'EOS', raw: 7, name: 'eos', iconPath: 'assets/images/eos_icon.png'); static const eth = CryptoCurrency(title: 'ETH', fullName: 'Ethereum', raw: 8, name: 'eth', iconPath: 'assets/images/eth_icon.png'); static const ltc = CryptoCurrency(title: 'LTC', fullName: 'Litecoin', raw: 9, name: 'ltc', iconPath: 'assets/images/litecoin-ltc_icon.png'); - static const nano = CryptoCurrency(title: 'NANO', raw: 10, name: 'nano'); + static const nano = CryptoCurrency(title: 'NANO', raw: 10, name: 'nano', iconPath: 'assets/images/nano.png'); static const trx = CryptoCurrency(title: 'TRX', fullName: 'TRON', raw: 11, name: 'trx', iconPath: 'assets/images/trx_icon.png'); static const usdt = CryptoCurrency(title: 'USDT', tag: 'OMNI', fullName: 'USDT Tether', raw: 12, name: 'usdt', iconPath: 'assets/images/usdt_icon.png'); static const usdterc20 = CryptoCurrency(title: 'USDT', tag: 'ETH', fullName: 'USDT Tether', raw: 13, name: 'usdterc20', iconPath: 'assets/images/usdterc20_icon.png'); From ee67bc76d716c07cb91420f3f1194bcf8339ea4d Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Tue, 28 Feb 2023 16:18:06 +0200 Subject: [PATCH 154/190] Fix translation issue --- res/values/strings_bg.arb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/values/strings_bg.arb b/res/values/strings_bg.arb index 32e9ed0c5..2099abc19 100644 --- a/res/values/strings_bg.arb +++ b/res/values/strings_bg.arb @@ -327,7 +327,7 @@ "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_wallet_name" : "Името на портфейла може да съдържа само букви, цифри, и символите _ и - \n и трябва да е между 1 и 33 символа", "error_text_keys" : "Ключовете за портфейл може да съдържат само 64 шестнайсетични символа", "error_text_crypto_currency" : "Броят на цифрите след десетичната запетая\nможе да бъде най-много 12", "error_text_minimal_limit" : "Сделка за ${provider} не беше създадена. Сумата е по-малко от минималната: ${min} ${currency}", From 7ba88699d4ba758355dd17a05e35fc0c0511c435 Mon Sep 17 00:00:00 2001 From: Justin Ehrenhofer Date: Tue, 28 Feb 2023 10:02:23 -0600 Subject: [PATCH 155/190] [skip ci] Remove AED --- lib/entities/fiat_currency.dart | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/entities/fiat_currency.dart b/lib/entities/fiat_currency.dart index 6d871bf48..895219143 100644 --- a/lib/entities/fiat_currency.dart +++ b/lib/entities/fiat_currency.dart @@ -9,9 +9,8 @@ class FiatCurrency extends EnumerableItem with Serializable { static List get all => _all.values.toList(); static List get currenciesAvailableToBuyWith => - [aed, aud, bgn, brl, cad, chf, clp, cop, czk, dkk, egp, eur, gbp, gtq, hkd, hrk, huf, idr, ils, inr, isk, jpy, krw, mad, mxn, myr, ngn, nok, nzd, php, pkr, pln, ron, sek, sgd, thb, turtry, twd, usd, vnd, zar]; + [aud, bgn, brl, cad, chf, clp, cop, czk, dkk, egp, eur, gbp, gtq, hkd, hrk, huf, idr, ils, inr, isk, jpy, krw, mad, mxn, myr, ngn, nok, nzd, php, pkr, pln, ron, sek, sgd, thb, turtry, twd, usd, vnd, zar]; - static const aed = FiatCurrency(symbol: 'AED', countryCode: "are", fullName: "United Arab Emirates Dirham"); static const ars = FiatCurrency(symbol: 'ARS', countryCode: "arg", fullName: "Argentine Peso"); static const aud = FiatCurrency(symbol: 'AUD', countryCode: "aus", fullName: "Australian Dollar"); static const bdt = FiatCurrency(symbol: 'BDT', countryCode: "bgd", fullName: "Bangladeshi Taka"); @@ -63,7 +62,6 @@ class FiatCurrency extends EnumerableItem with Serializable { static const zar = FiatCurrency(symbol: 'ZAR', countryCode: "saf", fullName: "South African Rand"); static final _all = { - FiatCurrency.aed.raw: FiatCurrency.aed, FiatCurrency.ars.raw: FiatCurrency.ars, FiatCurrency.aud.raw: FiatCurrency.aud, FiatCurrency.bdt.raw: FiatCurrency.bdt, From dfcdfd87d18092788a4580cab1f2240588c6c28c Mon Sep 17 00:00:00 2001 From: Justin Ehrenhofer Date: Tue, 28 Feb 2023 10:03:31 -0600 Subject: [PATCH 156/190] [skip ci] Remove Haven USD hardcode --- lib/reactions/on_current_wallet_change.dart | 5 ----- 1 file changed, 5 deletions(-) diff --git a/lib/reactions/on_current_wallet_change.dart b/lib/reactions/on_current_wallet_change.dart index 270415820..89b096d86 100644 --- a/lib/reactions/on_current_wallet_change.dart +++ b/lib/reactions/on_current_wallet_change.dart @@ -66,11 +66,6 @@ void startCurrentWalletChangeReaction(AppStore appStore, PreferencesKey.currentWalletType, serializeToInt(wallet.type)); await wallet.connectToNode(node: node); - if (wallet.type == WalletType.haven) { - settingsStore.fiatCurrency = FiatCurrency.usd; - await updateHavenRate(fiatConversionStore); - } - if (wallet.walletInfo.address?.isEmpty ?? true) { wallet.walletInfo.address = wallet.walletAddresses.address; From 8419767c4f39dc33cd3ac974322bb826d3e0ddd1 Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Tue, 28 Feb 2023 18:12:24 +0200 Subject: [PATCH 157/190] Add limit query to trocador --- .../trocador/trocador_exchange_provider.dart | 30 +++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/lib/exchange/trocador/trocador_exchange_provider.dart b/lib/exchange/trocador/trocador_exchange_provider.dart index 457757ea7..49503a1d0 100644 --- a/lib/exchange/trocador/trocador_exchange_provider.dart +++ b/lib/exchange/trocador/trocador_exchange_provider.dart @@ -40,6 +40,7 @@ class TrocadorExchangeProvider extends ExchangeProvider { static const newRatePath = '/api/new_rate'; static const createTradePath = 'api/new_trade'; static const tradePath = 'api/trade'; + static const coinPath = 'api/coin'; String _lastUsedRateId; @override @@ -134,9 +135,34 @@ class TrocadorExchangeProvider extends ExchangeProvider { {required CryptoCurrency from, required CryptoCurrency to, required bool isFixedRateMode}) async { - //TODO: implement limits from trocador api + + final params = { + 'api_key': apiKey, + 'ticker': from.title.toLowerCase(), + 'name': from.name, + }; + + final String apiAuthority = shouldUseOnionAddress ? await _getAuthority() : clearNetAuthority; + final uri = Uri.https(apiAuthority, coinPath, params); + + final response = await get(uri); + + if (response.statusCode != 200) { + throw Exception('Unexpected http status: ${response.statusCode}'); + } + + final responseJSON = json.decode(response.body) as List; + + if (responseJSON.isEmpty) { + throw Exception('No data'); + } + + final coinJson = responseJSON.first as Map; + + return Limits( - min: 0.0, + min: coinJson['minimum'] as double, + max: coinJson['maximum'] as double, ); } From f65f7b892c96906e2bf7bdf94bbd75448149ba46 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Tue, 28 Feb 2023 18:13:21 +0200 Subject: [PATCH 158/190] Fix translation issue [skip ci] --- res/values/strings_bg.arb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/values/strings_bg.arb b/res/values/strings_bg.arb index 32e9ed0c5..2099abc19 100644 --- a/res/values/strings_bg.arb +++ b/res/values/strings_bg.arb @@ -327,7 +327,7 @@ "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_wallet_name" : "Името на портфейла може да съдържа само букви, цифри, и символите _ и - \n и трябва да е между 1 и 33 символа", "error_text_keys" : "Ключовете за портфейл може да съдържат само 64 шестнайсетични символа", "error_text_crypto_currency" : "Броят на цифрите след десетичната запетая\nможе да бъде най-много 12", "error_text_minimal_limit" : "Сделка за ${provider} не беше създадена. Сумата е по-малко от минималната: ${min} ${currency}", From ce4b1cd4aefbee242e2492e62e9d6154af969ea5 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Tue, 28 Feb 2023 18:23:21 +0200 Subject: [PATCH 159/190] Update fiat API version Enable Tor support for Fiat --- lib/core/fiat_conversion_service.dart | 46 +++++++++++------- lib/reactions/bootstrap.dart | 2 + lib/reactions/fiat_rate_update.dart | 4 +- .../on_current_fiat_api_mode_change.dart | 25 ++++++++++ lib/reactions/on_current_fiat_change.dart | 7 ++- lib/reactions/on_current_wallet_change.dart | 6 ++- lib/src/screens/settings/privacy_page.dart | 48 +++++++++++-------- .../settings/privacy_settings_view_model.dart | 10 +--- 8 files changed, 97 insertions(+), 51 deletions(-) create mode 100644 lib/reactions/on_current_fiat_api_mode_change.dart diff --git a/lib/core/fiat_conversion_service.dart b/lib/core/fiat_conversion_service.dart index f4ec3775b..96dff9614 100644 --- a/lib/core/fiat_conversion_service.dart +++ b/lib/core/fiat_conversion_service.dart @@ -4,18 +4,30 @@ import 'dart:convert'; import 'package:flutter/foundation.dart'; import 'package:http/http.dart'; -const fiatApiAuthority = 'fiat-api.cakewallet.com'; -const fiatApiPath = '/v1/rates'; +const _fiatApiClearNetAuthority = 'fiat-api.cakewallet.com'; +const _fiatApiOnionAuthority = 'n4z7bdcmwk2oyddxvzaap3x2peqcplh3pzdy7tpkk5ejz5n4mhfvoxqd.onion'; +const _fiatApiPath = '/v2/rates'; Future _fetchPrice(Map args) async { final crypto = args['crypto'] as CryptoCurrency; final fiat = args['fiat'] as FiatCurrency; + final torOnly = args['torOnly'] as bool; double price = 0.0; + print("@@@@@@@@@@@@@@"); + print(crypto); + print(fiat); + print(torOnly); try { - final fiatStringified = fiat.toString(); - final uri = Uri.https(fiatApiAuthority, fiatApiPath, - {'convert': fiatStringified}); + final uri = Uri.https( + torOnly ? _fiatApiOnionAuthority : _fiatApiClearNetAuthority, + _fiatApiPath, + { + 'interval_count': '1', + 'base': crypto.toString(), + 'quote': fiat.toString(), + }, + ); final response = await get(uri); if (response.statusCode != 200) { @@ -23,14 +35,12 @@ Future _fetchPrice(Map args) async { } final responseJSON = json.decode(response.body) as Map; - final data = responseJSON['data'] as List; + final results = responseJSON['results'] as Map; - for (final item in data) { - if (item['symbol'] == crypto.title) { - price = item['quote'][fiatStringified]['price'] as double; - break; - } + if (results.isNotEmpty) { + price = results.values.first as double; } + print(price); return price; } catch (e) { @@ -38,12 +48,14 @@ Future _fetchPrice(Map args) async { } } -Future _fetchPriceAsync( - CryptoCurrency crypto, FiatCurrency fiat) async => - compute(_fetchPrice, {'fiat': fiat, 'crypto': crypto}); +Future _fetchPriceAsync(CryptoCurrency crypto, FiatCurrency fiat, bool torOnly) async => + compute(_fetchPrice, {'fiat': fiat, 'crypto': crypto, 'torOnly': torOnly}); class FiatConversionService { - static Future fetchPrice( - CryptoCurrency crypto, FiatCurrency fiat) async => - await _fetchPriceAsync(crypto, fiat); + static Future fetchPrice({ + required CryptoCurrency crypto, + required FiatCurrency fiat, + required bool torOnly, + }) async => + await _fetchPriceAsync(crypto, fiat, torOnly); } diff --git a/lib/reactions/bootstrap.dart b/lib/reactions/bootstrap.dart index 4b65ed9d2..6451c92c5 100644 --- a/lib/reactions/bootstrap.dart +++ b/lib/reactions/bootstrap.dart @@ -1,5 +1,6 @@ import 'dart:async'; import 'package:cake_wallet/reactions/fiat_rate_update.dart'; +import 'package:cake_wallet/reactions/on_current_fiat_api_mode_change.dart'; import 'package:cake_wallet/reactions/on_current_node_change.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/widgets.dart'; @@ -31,6 +32,7 @@ Future bootstrap(GlobalKey navigatorKey) async { startCurrentWalletChangeReaction( appStore, settingsStore, fiatConversionStore); startCurrentFiatChangeReaction(appStore, settingsStore, fiatConversionStore); + startCurrentFiatApiModeChangeReaction(appStore, settingsStore, fiatConversionStore); startOnCurrentNodeChangeReaction(appStore); startFiatRateUpdate(appStore, settingsStore, fiatConversionStore); } diff --git a/lib/reactions/fiat_rate_update.dart b/lib/reactions/fiat_rate_update.dart index 48c61d8ca..f9ddbef52 100644 --- a/lib/reactions/fiat_rate_update.dart +++ b/lib/reactions/fiat_rate_update.dart @@ -26,7 +26,9 @@ Future startFiatRateUpdate( } else { fiatConversionStore.prices[appStore.wallet!.currency] = await FiatConversionService.fetchPrice( - appStore.wallet!.currency, settingsStore.fiatCurrency); + crypto: appStore.wallet!.currency, + fiat: settingsStore.fiatCurrency, + torOnly: settingsStore.fiatApiMode == FiatApiMode.torOnly); } } catch (e) { print(e); diff --git a/lib/reactions/on_current_fiat_api_mode_change.dart b/lib/reactions/on_current_fiat_api_mode_change.dart new file mode 100644 index 000000000..5bcaeef4c --- /dev/null +++ b/lib/reactions/on_current_fiat_api_mode_change.dart @@ -0,0 +1,25 @@ +import 'package:cake_wallet/entities/fiat_api_mode.dart'; +import 'package:mobx/mobx.dart'; +import 'package:cake_wallet/core/fiat_conversion_service.dart'; +import 'package:cake_wallet/store/dashboard/fiat_conversion_store.dart'; +import 'package:cake_wallet/store/settings_store.dart'; +import 'package:cake_wallet/store/app_store.dart'; + +ReactionDisposer? _onCurrentFiatCurrencyChangeDisposer; + +void startCurrentFiatApiModeChangeReaction(AppStore appStore, + SettingsStore settingsStore, FiatConversionStore fiatConversionStore) { + _onCurrentFiatCurrencyChangeDisposer?.reaction.dispose(); + _onCurrentFiatCurrencyChangeDisposer = reaction( + (_) => settingsStore.fiatApiMode, (FiatApiMode fiatApiMode) async { + if (appStore.wallet == null || fiatApiMode == FiatApiMode.disabled) { + return; + } + + fiatConversionStore.prices[appStore.wallet!.currency] = + await FiatConversionService.fetchPrice( + crypto: appStore.wallet!.currency, + fiat: settingsStore.fiatCurrency, + torOnly: fiatApiMode == FiatApiMode.torOnly); + }); +} diff --git a/lib/reactions/on_current_fiat_change.dart b/lib/reactions/on_current_fiat_change.dart index 5170c4576..873984940 100644 --- a/lib/reactions/on_current_fiat_change.dart +++ b/lib/reactions/on_current_fiat_change.dart @@ -18,7 +18,10 @@ void startCurrentFiatChangeReaction(AppStore appStore, } final cryptoCurrency = appStore.wallet!.currency; - fiatConversionStore.prices[appStore.wallet!.currency] = - await FiatConversionService.fetchPrice(cryptoCurrency, fiatCurrency); + fiatConversionStore.prices[cryptoCurrency] = + await FiatConversionService.fetchPrice( + crypto: cryptoCurrency, + fiat: fiatCurrency, + torOnly: settingsStore.fiatApiMode == FiatApiMode.torOnly); }); } diff --git a/lib/reactions/on_current_wallet_change.dart b/lib/reactions/on_current_wallet_change.dart index 270415820..2325fe382 100644 --- a/lib/reactions/on_current_wallet_change.dart +++ b/lib/reactions/on_current_wallet_change.dart @@ -71,7 +71,7 @@ void startCurrentWalletChangeReaction(AppStore appStore, await updateHavenRate(fiatConversionStore); } - if (wallet.walletInfo.address?.isEmpty ?? true) { + if (wallet.walletInfo.address.isEmpty) { wallet.walletInfo.address = wallet.walletAddresses.address; if (wallet.walletInfo.isInBox) { @@ -95,7 +95,9 @@ void startCurrentWalletChangeReaction(AppStore appStore, fiatConversionStore.prices[wallet.currency] = 0; fiatConversionStore.prices[wallet.currency] = await FiatConversionService.fetchPrice( - wallet.currency, settingsStore.fiatCurrency); + crypto: wallet.currency, + fiat: settingsStore.fiatCurrency, + torOnly: settingsStore.fiatApiMode == FiatApiMode.torOnly); } catch (e) { print(e.toString()); } diff --git a/lib/src/screens/settings/privacy_page.dart b/lib/src/screens/settings/privacy_page.dart index 2f15cc225..8fd6bab82 100644 --- a/lib/src/screens/settings/privacy_page.dart +++ b/lib/src/screens/settings/privacy_page.dart @@ -1,6 +1,9 @@ +import 'package:cake_wallet/entities/fiat_api_mode.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; +import 'package:cake_wallet/src/screens/settings/widgets/settings_choices_cell.dart'; import 'package:cake_wallet/src/screens/settings/widgets/settings_switcher_cell.dart'; +import 'package:cake_wallet/view_model/settings/choices_list_item.dart'; import 'package:cake_wallet/view_model/settings/privacy_settings_view_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; @@ -18,29 +21,32 @@ class PrivacyPage extends BasePage { return Container( padding: EdgeInsets.only(top: 10), child: Observer(builder: (_) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - SettingsSwitcherCell( - title: S.current.disable_fiat, - value: _privacySettingsViewModel.isFiatDisabled, + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + SettingsChoicesCell( + ChoicesListItem( + title: S.current.fiat_api, + items: FiatApiMode.all, + selectedItem: _privacySettingsViewModel.fiatApiMode, + onItemSelected: (FiatApiMode fiatApiMode) => + _privacySettingsViewModel.setFiatMode(fiatApiMode), + ), + ), + SettingsSwitcherCell( + title: S.current.disable_exchange, + value: _privacySettingsViewModel.disableExchange, onValueChange: (BuildContext context, bool value) { - _privacySettingsViewModel.setFiatMode(value); + _privacySettingsViewModel.setEnableExchange(value); }), - SettingsSwitcherCell( - title: S.current.disable_exchange, - value: _privacySettingsViewModel.disableExchange, - onValueChange: (BuildContext context, bool value) { - _privacySettingsViewModel.setEnableExchange(value); - }), - SettingsSwitcherCell( - title: S.current.settings_save_recipient_address, - value: _privacySettingsViewModel.shouldSaveRecipientAddress, - onValueChange: (BuildContext _, bool value) { - _privacySettingsViewModel.setShouldSaveRecipientAddress(value); - }) - ], - ); + SettingsSwitcherCell( + title: S.current.settings_save_recipient_address, + value: _privacySettingsViewModel.shouldSaveRecipientAddress, + onValueChange: (BuildContext _, bool value) { + _privacySettingsViewModel.setShouldSaveRecipientAddress(value); + }), + ], + ); }), ); } diff --git a/lib/view_model/settings/privacy_settings_view_model.dart b/lib/view_model/settings/privacy_settings_view_model.dart index f8c3e5b50..efa7cdc36 100644 --- a/lib/view_model/settings/privacy_settings_view_model.dart +++ b/lib/view_model/settings/privacy_settings_view_model.dart @@ -18,7 +18,7 @@ abstract class PrivacySettingsViewModelBase with Store { bool get shouldSaveRecipientAddress => _settingsStore.shouldSaveRecipientAddress; @computed - bool get isFiatDisabled => _settingsStore.fiatApiMode == FiatApiMode.disabled; + FiatApiMode get fiatApiMode => _settingsStore.fiatApiMode; @action void setShouldSaveRecipientAddress(bool value) => _settingsStore.shouldSaveRecipientAddress = value; @@ -27,12 +27,6 @@ abstract class PrivacySettingsViewModelBase with Store { void setEnableExchange(bool value) => _settingsStore.disableExchange = value; @action - void setFiatMode(bool value) { - if (value) { - _settingsStore.fiatApiMode = FiatApiMode.disabled; - return; - } - _settingsStore.fiatApiMode = FiatApiMode.enabled; - } + void setFiatMode(FiatApiMode fiatApiMode) => _settingsStore.fiatApiMode = fiatApiMode; } From 18af7e7661bfbcecc859e5270536172a750c0d0b Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Tue, 28 Feb 2023 18:36:39 +0200 Subject: [PATCH 160/190] remove print statements [skip ci] --- lib/core/fiat_conversion_service.dart | 5 ----- 1 file changed, 5 deletions(-) diff --git a/lib/core/fiat_conversion_service.dart b/lib/core/fiat_conversion_service.dart index 96dff9614..95c1e23a4 100644 --- a/lib/core/fiat_conversion_service.dart +++ b/lib/core/fiat_conversion_service.dart @@ -13,10 +13,6 @@ Future _fetchPrice(Map args) async { final fiat = args['fiat'] as FiatCurrency; final torOnly = args['torOnly'] as bool; double price = 0.0; - print("@@@@@@@@@@@@@@"); - print(crypto); - print(fiat); - print(torOnly); try { final uri = Uri.https( @@ -40,7 +36,6 @@ Future _fetchPrice(Map args) async { if (results.isNotEmpty) { price = results.values.first as double; } - print(price); return price; } catch (e) { From 2c5b44426fcb32196af2354e6d6821d0f74226b9 Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Tue, 28 Feb 2023 20:34:51 +0200 Subject: [PATCH 161/190] Upgrade flutter packages --- .github/workflows/pr_test_build.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/pr_test_build.yml b/.github/workflows/pr_test_build.yml index 1766bbe86..a6a66cac2 100644 --- a/.github/workflows/pr_test_build.yml +++ b/.github/workflows/pr_test_build.yml @@ -77,6 +77,11 @@ jobs: run: | cd /opt/android/cake_wallet flutter packages pub run tool/generate_localization.dart + + - name: Upgrade flutter packages + run: | + cd /opt/android/cake_wallet + flutter pub upgrade - name: Build generated code run: | From 2c9f17e728df856c790e0b4e44dc77a069746b08 Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Tue, 28 Feb 2023 20:45:03 +0200 Subject: [PATCH 162/190] Upgrade flutter packages --- .github/workflows/pr_test_build.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pr_test_build.yml b/.github/workflows/pr_test_build.yml index a6a66cac2..60dd1bc68 100644 --- a/.github/workflows/pr_test_build.yml +++ b/.github/workflows/pr_test_build.yml @@ -81,7 +81,10 @@ jobs: - name: Upgrade flutter packages run: | cd /opt/android/cake_wallet - flutter pub upgrade + cd cw_core && flutter pub upgrade && cd .. + cd cw_monero && flutter pub upgrade && cd .. + cd cw_bitcoin && flutter pub upgrade && cd .. + cd cw_haven && flutter pub upgrade && cd .. - name: Build generated code run: | From c9726403ec9175bf716d1afded7e1563b6d06fa1 Mon Sep 17 00:00:00 2001 From: Justin Ehrenhofer Date: Tue, 28 Feb 2023 12:51:44 -0600 Subject: [PATCH 163/190] Remove TRY Ideally this asset would be supported, but it's not worth devoting effort to fix this 1 currency right now --- lib/entities/fiat_currency.dart | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/entities/fiat_currency.dart b/lib/entities/fiat_currency.dart index 895219143..12ceff92a 100644 --- a/lib/entities/fiat_currency.dart +++ b/lib/entities/fiat_currency.dart @@ -9,7 +9,7 @@ class FiatCurrency extends EnumerableItem with Serializable { static List get all => _all.values.toList(); static List get currenciesAvailableToBuyWith => - [aud, bgn, brl, cad, chf, clp, cop, czk, dkk, egp, eur, gbp, gtq, hkd, hrk, huf, idr, ils, inr, isk, jpy, krw, mad, mxn, myr, ngn, nok, nzd, php, pkr, pln, ron, sek, sgd, thb, turtry, twd, usd, vnd, zar]; + [aud, bgn, brl, cad, chf, clp, cop, czk, dkk, egp, eur, gbp, gtq, hkd, hrk, huf, idr, ils, inr, isk, jpy, krw, mad, mxn, myr, ngn, nok, nzd, php, pkr, pln, ron, sek, sgd, thb, twd, usd, vnd, zar]; static const ars = FiatCurrency(symbol: 'ARS', countryCode: "arg", fullName: "Argentine Peso"); static const aud = FiatCurrency(symbol: 'AUD', countryCode: "aus", fullName: "Australian Dollar"); @@ -53,7 +53,6 @@ class FiatCurrency extends EnumerableItem with Serializable { static const sek = FiatCurrency(symbol: 'SEK', countryCode: "swe", fullName: "Swedish Krona"); static const sgd = FiatCurrency(symbol: 'SGD', countryCode: "sgp", fullName: "Singapore Dollar"); static const thb = FiatCurrency(symbol: 'THB', countryCode: "tha", fullName: "New Thaiwan Dollar"); - static const turtry = FiatCurrency(symbol: 'TRY', countryCode: "tur", fullName: "Turkish Lira"); static const twd = FiatCurrency(symbol: 'TWD', countryCode: "twn", fullName: "Thai Baht"); static const uah = FiatCurrency(symbol: 'UAH', countryCode: "ukr", fullName: "Ukrainian Hryvnia"); static const usd = FiatCurrency(symbol: 'USD', countryCode: "usa", fullName: "United States Dollar"); @@ -104,7 +103,6 @@ class FiatCurrency extends EnumerableItem with Serializable { FiatCurrency.sek.raw: FiatCurrency.sek, FiatCurrency.sgd.raw: FiatCurrency.sgd, FiatCurrency.thb.raw: FiatCurrency.thb, - FiatCurrency.turtry.raw: FiatCurrency.turtry, FiatCurrency.twd.raw: FiatCurrency.twd, FiatCurrency.uah.raw: FiatCurrency.uah, FiatCurrency.usd.raw: FiatCurrency.usd, From 9b173f4fc82aca61213cec6fe3dfd4b19920d2ab Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Wed, 1 Mar 2023 05:12:36 +0200 Subject: [PATCH 164/190] Separate test build apk from overriding the original app --- .github/workflows/pr_test_build.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pr_test_build.yml b/.github/workflows/pr_test_build.yml index f8496ffcd..0be2a5e68 100644 --- a/.github/workflows/pr_test_build.yml +++ b/.github/workflows/pr_test_build.yml @@ -5,7 +5,7 @@ on: branches: [ main ] jobs: - test: + PR_test_build: runs-on: ubuntu-20.04 env: @@ -36,6 +36,7 @@ jobs: cd cake_wallet/scripts/android/ ./install_ndk.sh source ./app_env.sh cakewallet + export APP_ANDROID_PACKAGE="com.cakewallet.cake_wallet.test" ./app_config.sh - name: Cache Externals From 23128dbe3c73b94f2daa787f0de913f46fbcc688 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Wed, 1 Mar 2023 05:40:52 +0200 Subject: [PATCH 165/190] Separate test build apk from overriding the original app --- .github/workflows/pr_test_build.yml | 3 +-- scripts/android/app_env.sh | 12 +++++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pr_test_build.yml b/.github/workflows/pr_test_build.yml index 0be2a5e68..759aa218d 100644 --- a/.github/workflows/pr_test_build.yml +++ b/.github/workflows/pr_test_build.yml @@ -35,8 +35,7 @@ jobs: git clone https://github.com/cake-tech/cake_wallet.git --branch $GITHUB_HEAD_REF cd cake_wallet/scripts/android/ ./install_ndk.sh - source ./app_env.sh cakewallet - export APP_ANDROID_PACKAGE="com.cakewallet.cake_wallet.test" + source ./app_env.sh cakewallet.test ./app_config.sh - name: Cache Externals diff --git a/scripts/android/app_env.sh b/scripts/android/app_env.sh index eabd192ce..26b5a399b 100644 --- a/scripts/android/app_env.sh +++ b/scripts/android/app_env.sh @@ -9,8 +9,9 @@ APP_ANDROID_PACKAGE="" MONERO_COM="monero.com" CAKEWALLET="cakewallet" HAVEN="haven" +CAKEWALLET_TEST="cakewallet.test" -TYPES=($MONERO_COM $CAKEWALLET $HAVEN) +TYPES=($MONERO_COM $CAKEWALLET $HAVEN $CAKEWALLET_TEST) APP_ANDROID_TYPE=$1 MONERO_COM_NAME="Monero.com" @@ -31,6 +32,8 @@ HAVEN_BUILD_NUMBER=1 HAVEN_BUNDLE_ID="com.cakewallet.haven" HAVEN_PACKAGE="com.cakewallet.haven" +CAKEWALLET_TEST_PACKAGE="com.cakewallet.cake_wallet.test" + if ! [[ " ${TYPES[*]} " =~ " ${APP_ANDROID_TYPE} " ]]; then echo "Wrong app type." return 1 2>/dev/null @@ -59,6 +62,13 @@ case $APP_ANDROID_TYPE in APP_ANDROID_BUNDLE_ID=$HAVEN_BUNDLE_ID APP_ANDROID_PACKAGE=$HAVEN_PACKAGE ;; + $CAKEWALLET_TEST) + APP_ANDROID_NAME=$CAKEWALLET_NAME + APP_ANDROID_VERSION=$CAKEWALLET_VERSION + APP_ANDROID_BUILD_NUMBER=$CAKEWALLET_BUILD_NUMBER + APP_ANDROID_BUNDLE_ID=$CAKEWALLET_BUNDLE_ID + APP_ANDROID_PACKAGE=CAKEWALLET_TEST_PACKAGE + ;; esac export APP_ANDROID_TYPE From 1481ebc22920e0d830298aa9319aafad8b592cee Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Wed, 1 Mar 2023 06:34:10 +0200 Subject: [PATCH 166/190] Separate test build apk from overriding the original app --- scripts/android/app_env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/android/app_env.sh b/scripts/android/app_env.sh index 26b5a399b..c456f8466 100644 --- a/scripts/android/app_env.sh +++ b/scripts/android/app_env.sh @@ -32,7 +32,7 @@ HAVEN_BUILD_NUMBER=1 HAVEN_BUNDLE_ID="com.cakewallet.haven" HAVEN_PACKAGE="com.cakewallet.haven" -CAKEWALLET_TEST_PACKAGE="com.cakewallet.cake_wallet.test" +CAKEWALLET_TEST_PACKAGE="com.cakewallet.test" if ! [[ " ${TYPES[*]} " =~ " ${APP_ANDROID_TYPE} " ]]; then echo "Wrong app type." From 4ab7edf90b517c97258f8cbefd5f19abb3d53f42 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Wed, 1 Mar 2023 07:01:17 +0200 Subject: [PATCH 167/190] Separate test build apk from overriding the original app --- .github/workflows/pr_test_build.yml | 6 +++++- scripts/android/app_env.sh | 14 ++------------ 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/.github/workflows/pr_test_build.yml b/.github/workflows/pr_test_build.yml index 759aa218d..bd158a84d 100644 --- a/.github/workflows/pr_test_build.yml +++ b/.github/workflows/pr_test_build.yml @@ -35,7 +35,11 @@ jobs: git clone https://github.com/cake-tech/cake_wallet.git --branch $GITHUB_HEAD_REF cd cake_wallet/scripts/android/ ./install_ndk.sh - source ./app_env.sh cakewallet.test + source ./app_env.sh cakewallet + APP_ANDROID_PACKAGE="com.cakewallet.test" + export APP_ANDROID_PACKAGE="com.cakewallet.test" + set APP_ANDROID_PACKAGE="com.cakewallet.test" + env APP_ANDROID_PACKAGE="com.cakewallet.test" ./app_config.sh - name: Cache Externals diff --git a/scripts/android/app_env.sh b/scripts/android/app_env.sh index c456f8466..d2bee1773 100644 --- a/scripts/android/app_env.sh +++ b/scripts/android/app_env.sh @@ -9,9 +9,8 @@ APP_ANDROID_PACKAGE="" MONERO_COM="monero.com" CAKEWALLET="cakewallet" HAVEN="haven" -CAKEWALLET_TEST="cakewallet.test" -TYPES=($MONERO_COM $CAKEWALLET $HAVEN $CAKEWALLET_TEST) +TYPES=($MONERO_COM $CAKEWALLET $HAVEN) APP_ANDROID_TYPE=$1 MONERO_COM_NAME="Monero.com" @@ -32,8 +31,6 @@ HAVEN_BUILD_NUMBER=1 HAVEN_BUNDLE_ID="com.cakewallet.haven" HAVEN_PACKAGE="com.cakewallet.haven" -CAKEWALLET_TEST_PACKAGE="com.cakewallet.test" - if ! [[ " ${TYPES[*]} " =~ " ${APP_ANDROID_TYPE} " ]]; then echo "Wrong app type." return 1 2>/dev/null @@ -62,13 +59,6 @@ case $APP_ANDROID_TYPE in APP_ANDROID_BUNDLE_ID=$HAVEN_BUNDLE_ID APP_ANDROID_PACKAGE=$HAVEN_PACKAGE ;; - $CAKEWALLET_TEST) - APP_ANDROID_NAME=$CAKEWALLET_NAME - APP_ANDROID_VERSION=$CAKEWALLET_VERSION - APP_ANDROID_BUILD_NUMBER=$CAKEWALLET_BUILD_NUMBER - APP_ANDROID_BUNDLE_ID=$CAKEWALLET_BUNDLE_ID - APP_ANDROID_PACKAGE=CAKEWALLET_TEST_PACKAGE - ;; esac export APP_ANDROID_TYPE @@ -76,4 +66,4 @@ export APP_ANDROID_NAME export APP_ANDROID_VERSION export APP_ANDROID_BUILD_NUMBER export APP_ANDROID_BUNDLE_ID -export APP_ANDROID_PACKAGE +export APP_ANDROID_PACKAGE \ No newline at end of file From c3c1999048410edcddd896a5f6b995302ee5f156 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Wed, 1 Mar 2023 15:39:34 +0200 Subject: [PATCH 168/190] Change package name when renaming test app --- .github/workflows/pr_test_build.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pr_test_build.yml b/.github/workflows/pr_test_build.yml index bd158a84d..790316617 100644 --- a/.github/workflows/pr_test_build.yml +++ b/.github/workflows/pr_test_build.yml @@ -117,7 +117,9 @@ jobs: 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 + run: | + sed -i -e "s/\${APP_NAME}/$GITHUB_HEAD_REF/g" /opt/android/cake_wallet/android/app/src/main/AndroidManifest.xml + sed -i -e "s/\com.cakewallet.cake_wallet/com.cakewallet.cake_wallet.test/g" /opt/android/cake_wallet/android/app/src/main/AndroidManifest.xml - name: Build run: | From 247ec24e46693d3248d9a0e69d89a5aaf28020e2 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Wed, 1 Mar 2023 15:47:16 +0200 Subject: [PATCH 169/190] Re-organize ignored errors in ascending order of errno [skip ci] --- lib/utils/exception_handler.dart | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/lib/utils/exception_handler.dart b/lib/utils/exception_handler.dart index 8285b9c52..51a525394 100644 --- a/lib/utils/exception_handler.dart +++ b/lib/utils/exception_handler.dart @@ -124,15 +124,16 @@ class ExceptionHandler { _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 = 57", // SocketException: Read failed (OS Error: Socket is not connected) "errno = 28", // OS Error: No space left on device + "errno = 32", // SocketException: Write failed (OS Error: Broken pipe) + "errno = 49", // SocketException: Can't assign requested address + "errno = 54", // SocketException: Connection reset by peer + "errno = 57", // SocketException: Read failed (OS Error: Socket is not connected) + "errno = 60", // SocketException: Operation timed out + "errno = 103", // SocketException: Software caused connection abort + "errno = 104", // SocketException: Connection reset by peer + "errno = 110", // SocketException: Connection timed out "PERMISSION_NOT_GRANTED", ]; From dbfbadffdaef761abad0b493b27714c51fb22b01 Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Wed, 1 Mar 2023 15:50:31 +0200 Subject: [PATCH 170/190] Filter to use Tor only exchange --- lib/src/widgets/check_box_picker.dart | 16 ++++++++-------- .../exchange/exchange_view_model.dart | 19 ++++++++++++++++++- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/lib/src/widgets/check_box_picker.dart b/lib/src/widgets/check_box_picker.dart index e2f817fc4..80461e26d 100644 --- a/lib/src/widgets/check_box_picker.dart +++ b/lib/src/widgets/check_box_picker.dart @@ -38,7 +38,7 @@ class CheckBoxPickerState extends State { Column( mainAxisSize: MainAxisSize.min, children: [ - if (widget.title?.isNotEmpty ?? false) + if (widget.title.isNotEmpty) Container( padding: EdgeInsets.symmetric(horizontal: 24), child: Text( @@ -58,7 +58,7 @@ class CheckBoxPickerState extends State { child: ClipRRect( borderRadius: BorderRadius.all(Radius.circular(30)), child: Container( - color: Theme.of(context).accentTextTheme!.headline6!.color!, + color: Theme.of(context).accentTextTheme.headline6!.color!, child: ConstrainedBox( constraints: BoxConstraints( maxHeight: MediaQuery.of(context).size.height * 0.65, @@ -70,7 +70,7 @@ class CheckBoxPickerState extends State { child: Stack( alignment: Alignment.center, children: [ - (items?.length ?? 0) > 3 + (items.length) > 3 ? Scrollbar( controller: controller, child: itemsList(), @@ -95,14 +95,14 @@ class CheckBoxPickerState extends State { Widget itemsList() { return Container( - color: Theme.of(context).accentTextTheme!.headline6!.backgroundColor!, + color: Theme.of(context).accentTextTheme.headline6!.backgroundColor!, child: ListView.separated( padding: EdgeInsets.zero, controller: controller, shrinkWrap: true, separatorBuilder: (context, index) => widget.isSeparated ? Divider( - color: Theme.of(context).accentTextTheme!.headline6!.backgroundColor!, + color: Theme.of(context).accentTextTheme.headline6!.backgroundColor!, height: 1, ) : const SizedBox(), @@ -121,13 +121,13 @@ class CheckBoxPickerState extends State { }, child: Container( height: 55, - color: Theme.of(context).accentTextTheme!.headline6!.color!, + color: Theme.of(context).accentTextTheme.headline6!.color!, padding: EdgeInsets.only(left: 24, right: 24), child: CheckboxListTile( value: item.value, activeColor: item.value ? Palette.blueCraiola - : Theme.of(context).accentTextTheme!.subtitle1!.decorationColor!, + : Theme.of(context).accentTextTheme.subtitle1!.decorationColor!, checkColor: Colors.white, title: widget.displayItem?.call(item) ?? Text( @@ -138,7 +138,7 @@ class CheckBoxPickerState extends State { fontWeight: FontWeight.w600, color: item.isDisabled ? Colors.grey.withOpacity(0.5) - : Theme.of(context).primaryTextTheme!.headline6!.color!, + : Theme.of(context).primaryTextTheme.headline6!.color!, decoration: TextDecoration.none, ), ), diff --git a/lib/view_model/exchange/exchange_view_model.dart b/lib/view_model/exchange/exchange_view_model.dart index f9f5683d9..7921115c6 100644 --- a/lib/view_model/exchange/exchange_view_model.dart +++ b/lib/view_model/exchange/exchange_view_model.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'dart:collection'; import 'dart:convert'; +import 'package:cake_wallet/entities/fiat_api_mode.dart'; import 'package:cake_wallet/entities/preferences_key.dart'; import 'package:cake_wallet/exchange/sideshift/sideshift_exchange_provider.dart'; import 'package:cake_wallet/exchange/sideshift/sideshift_request.dart'; @@ -62,8 +63,9 @@ abstract class ExchangeViewModelBase with Store { limitsState = LimitsInitialState(), receiveCurrency = wallet.currency, depositCurrency = wallet.currency, - providerList = [ChangeNowExchangeProvider(), SideShiftExchangeProvider(), SimpleSwapExchangeProvider(), TrocadorExchangeProvider()], + providerList = [], selectedProviders = ObservableList() { + _setProviders(); const excludeDepositCurrencies = [CryptoCurrency.btt, CryptoCurrency.nano]; const excludeReceiveCurrencies = [CryptoCurrency.xlm, CryptoCurrency.xrp, CryptoCurrency.bnb, CryptoCurrency.btt, CryptoCurrency.nano]; @@ -126,6 +128,13 @@ abstract class ExchangeViewModelBase with Store { final TradesStore tradesStore; final SharedPreferences sharedPreferences; + final _allProviders = [ + ChangeNowExchangeProvider(), + SideShiftExchangeProvider(), + SimpleSwapExchangeProvider(), + TrocadorExchangeProvider(), + ]; + @observable ExchangeProvider? provider; @@ -683,4 +692,12 @@ abstract class ExchangeViewModelBase with Store { break; } } + + void _setProviders(){ + if (_settingsStore.exchangeStatus == FiatApiMode.torOnly) { + providerList = _allProviders.where((provider) => provider.shouldUseOnionAddress).toList(); + } else { + providerList = _allProviders; + } + } } From bfaf5d11d1324e103a356cdba9e62d549505cf1e Mon Sep 17 00:00:00 2001 From: Omar Hatem Date: Wed, 1 Mar 2023 16:01:28 +0200 Subject: [PATCH 171/190] Update pr_test_build.yml --- .github/workflows/pr_test_build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr_test_build.yml b/.github/workflows/pr_test_build.yml index 790316617..0638ac095 100644 --- a/.github/workflows/pr_test_build.yml +++ b/.github/workflows/pr_test_build.yml @@ -119,7 +119,7 @@ jobs: - name: Rename app run: | sed -i -e "s/\${APP_NAME}/$GITHUB_HEAD_REF/g" /opt/android/cake_wallet/android/app/src/main/AndroidManifest.xml - sed -i -e "s/\com.cakewallet.cake_wallet/com.cakewallet.cake_wallet.test/g" /opt/android/cake_wallet/android/app/src/main/AndroidManifest.xml + sed -i -e "s/com.cakewallet.cake_wallet/com.cakewallet.test/g" /opt/android/cake_wallet/android/app/src/main/AndroidManifest.xml - name: Build run: | From 1219cd2c14212850618879b83bc27b38e934ff82 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Wed, 1 Mar 2023 16:57:55 +0200 Subject: [PATCH 172/190] Rename package along with app name in app.properties --- .github/workflows/pr_test_build.yml | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/.github/workflows/pr_test_build.yml b/.github/workflows/pr_test_build.yml index 0638ac095..cdf537cdb 100644 --- a/.github/workflows/pr_test_build.yml +++ b/.github/workflows/pr_test_build.yml @@ -36,10 +36,6 @@ jobs: cd cake_wallet/scripts/android/ ./install_ndk.sh source ./app_env.sh cakewallet - APP_ANDROID_PACKAGE="com.cakewallet.test" - export APP_ANDROID_PACKAGE="com.cakewallet.test" - set APP_ANDROID_PACKAGE="com.cakewallet.test" - env APP_ANDROID_PACKAGE="com.cakewallet.test" ./app_config.sh - name: Cache Externals @@ -117,9 +113,7 @@ jobs: 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 - sed -i -e "s/com.cakewallet.cake_wallet/com.cakewallet.test/g" /opt/android/cake_wallet/android/app/src/main/AndroidManifest.xml + run: echo -e "id=com.cakewallet.test\nname=$GITHUB_HEAD_REF" > /opt/android/cake_wallet/android/app.properties - name: Build run: | From 861616fda2da5006d5ed6efcb32ca45d1f82743e Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Wed, 1 Mar 2023 23:24:52 +0200 Subject: [PATCH 173/190] use Http protocol for onion connection --- lib/core/fiat_conversion_service.dart | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/lib/core/fiat_conversion_service.dart b/lib/core/fiat_conversion_service.dart index 95c1e23a4..66997675d 100644 --- a/lib/core/fiat_conversion_service.dart +++ b/lib/core/fiat_conversion_service.dart @@ -12,18 +12,23 @@ Future _fetchPrice(Map args) async { final crypto = args['crypto'] as CryptoCurrency; final fiat = args['fiat'] as FiatCurrency; final torOnly = args['torOnly'] as bool; + + final Map queryParams = { + 'interval_count': '1', + 'base': crypto.toString(), + 'quote': fiat.toString(), + }; + double price = 0.0; try { - final uri = Uri.https( - torOnly ? _fiatApiOnionAuthority : _fiatApiClearNetAuthority, - _fiatApiPath, - { - 'interval_count': '1', - 'base': crypto.toString(), - 'quote': fiat.toString(), - }, - ); + late final Uri uri; + if (torOnly) { + uri = Uri.http(_fiatApiOnionAuthority, _fiatApiPath, queryParams); + } else { + uri = Uri.https(_fiatApiClearNetAuthority, _fiatApiPath, queryParams); + } + final response = await get(uri); if (response.statusCode != 200) { From b0175719b93a4297d842b569887b5f214f779f96 Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Wed, 1 Mar 2023 23:44:15 +0200 Subject: [PATCH 174/190] Fix issues from code review --- .github/workflows/pr_test_build.yml | 8 -- lib/entities/default_settings_migration.dart | 16 +++- lib/entities/exchange_api_mode.dart | 39 +++++++++ lib/exchange/exchange_provider.dart | 2 +- .../trocador/trocador_exchange_provider.dart | 24 ++++-- .../advanced_privacy_settings_page.dart | 85 +++++++++++-------- lib/src/screens/settings/privacy_page.dart | 21 +++-- lib/store/settings_store.dart | 15 ++-- .../advanced_privacy_settings_view_model.dart | 13 ++- .../exchange/exchange_view_model.dart | 10 ++- .../settings/privacy_settings_view_model.dart | 15 ++-- 11 files changed, 165 insertions(+), 83 deletions(-) create mode 100644 lib/entities/exchange_api_mode.dart diff --git a/.github/workflows/pr_test_build.yml b/.github/workflows/pr_test_build.yml index 60dd1bc68..1766bbe86 100644 --- a/.github/workflows/pr_test_build.yml +++ b/.github/workflows/pr_test_build.yml @@ -77,14 +77,6 @@ jobs: run: | cd /opt/android/cake_wallet flutter packages pub run tool/generate_localization.dart - - - name: Upgrade flutter packages - run: | - cd /opt/android/cake_wallet - cd cw_core && flutter pub upgrade && cd .. - cd cw_monero && flutter pub upgrade && cd .. - cd cw_bitcoin && flutter pub upgrade && cd .. - cd cw_haven && flutter pub upgrade && cd .. - name: Build generated code run: | diff --git a/lib/entities/default_settings_migration.dart b/lib/entities/default_settings_migration.dart index 3c8d9fbbe..b1bb144be 100644 --- a/lib/entities/default_settings_migration.dart +++ b/lib/entities/default_settings_migration.dart @@ -1,10 +1,12 @@ import 'dart:io' show File, Platform; import 'package:cake_wallet/bitcoin/bitcoin.dart'; +import 'package:cake_wallet/entities/exchange_api_mode.dart'; import 'package:cw_core/pathForWallet.dart'; import 'package:cake_wallet/entities/secret_store_key.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:hive/hive.dart'; +import 'package:share_plus/share_plus.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:cake_wallet/entities/preferences_key.dart'; import 'package:cw_core/wallet_type.dart'; @@ -142,7 +144,9 @@ Future defaultSettingsMigration( case 19: await validateBitcoinSavedTransactionPriority(sharedPreferences); break; - + case 20: + await migrateExchangeStatus(sharedPreferences); + break; default: break; } @@ -501,3 +505,13 @@ Future changeDefaultHavenNode( await node.save(); }); } + +Future migrateExchangeStatus(SharedPreferences sharedPreferences) async { + final isExchangeDisabled = sharedPreferences.getBool(PreferencesKey.disableExchangeKey); + if (isExchangeDisabled == null) { + return; + } + + await sharedPreferences.setInt(PreferencesKey.exchangeStatusKey, isExchangeDisabled + ? ExchangeApiMode.disabled.raw : ExchangeApiMode.enabled.raw); +} diff --git a/lib/entities/exchange_api_mode.dart b/lib/entities/exchange_api_mode.dart new file mode 100644 index 000000000..0b8b575a5 --- /dev/null +++ b/lib/entities/exchange_api_mode.dart @@ -0,0 +1,39 @@ +import 'package:cake_wallet/generated/i18n.dart'; +import 'package:cw_core/enumerable_item.dart'; + +class ExchangeApiMode extends EnumerableItem with Serializable { + const ExchangeApiMode({required String title, required int raw}) : super(title: title, raw: raw); + + static const all = [ExchangeApiMode.enabled, ExchangeApiMode.torOnly, ExchangeApiMode.disabled]; + + static const enabled = ExchangeApiMode(raw: 0, title: 'Enabled'); + static const torOnly = ExchangeApiMode(raw: 1, title: 'Tor only'); + static const disabled = ExchangeApiMode(raw: 2, title: 'Disabled'); + + static ExchangeApiMode deserialize({required int raw}) { + switch (raw) { + case 0: + return enabled; + case 1: + return torOnly; + case 2: + return disabled; + default: + throw Exception('Unexpected token: $raw for ExchangeApiMode deserialize'); + } + } + + @override + String toString() { + switch (this) { + case ExchangeApiMode.enabled: + return S.current.enabled; + case ExchangeApiMode.torOnly: + return S.current.tor_only; + case ExchangeApiMode.disabled: + return S.current.disabled; + default: + return ''; + } + } +} \ No newline at end of file diff --git a/lib/exchange/exchange_provider.dart b/lib/exchange/exchange_provider.dart index 99e6da913..cc81a21f6 100644 --- a/lib/exchange/exchange_provider.dart +++ b/lib/exchange/exchange_provider.dart @@ -14,7 +14,7 @@ abstract class ExchangeProvider { bool get isAvailable; bool get isEnabled; bool get supportsFixedRate; - bool get shouldUseOnionAddress => false; + bool get supportsOnionAddress => false; @override String toString() => title; diff --git a/lib/exchange/trocador/trocador_exchange_provider.dart b/lib/exchange/trocador/trocador_exchange_provider.dart index 49503a1d0..750ffb98a 100644 --- a/lib/exchange/trocador/trocador_exchange_provider.dart +++ b/lib/exchange/trocador/trocador_exchange_provider.dart @@ -13,9 +13,11 @@ import 'package:cake_wallet/.secrets.g.dart' as secrets; import 'package:http/http.dart'; class TrocadorExchangeProvider extends ExchangeProvider { - TrocadorExchangeProvider() + TrocadorExchangeProvider({this.useTorOnly = false}) : _lastUsedRateId = '', super(pairList: _supportedPairs()); + + bool useTorOnly; static const List _notSupported = [ CryptoCurrency.scrt, @@ -83,7 +85,7 @@ class TrocadorExchangeProvider extends ExchangeProvider { params['id'] = _lastUsedRateId; } - final String apiAuthority = shouldUseOnionAddress ? await _getAuthority() : clearNetAuthority; + final String apiAuthority = await _getAuthority(); final uri = Uri.https(apiAuthority, createTradePath, params); final response = await get(uri); @@ -142,7 +144,7 @@ class TrocadorExchangeProvider extends ExchangeProvider { 'name': from.name, }; - final String apiAuthority = shouldUseOnionAddress ? await _getAuthority() : clearNetAuthority; + final String apiAuthority = await _getAuthority(); final uri = Uri.https(apiAuthority, coinPath, params); final response = await get(uri); @@ -178,7 +180,7 @@ class TrocadorExchangeProvider extends ExchangeProvider { return 0.0; } - final String apiAuthority = shouldUseOnionAddress ? await _getAuthority() : clearNetAuthority; + final String apiAuthority = await _getAuthority(); final params = { 'api_key': apiKey, @@ -214,7 +216,7 @@ class TrocadorExchangeProvider extends ExchangeProvider { @override Future findTradeById({required String id}) async { - final String apiAuthority = shouldUseOnionAddress ? await _getAuthority() : clearNetAuthority; + final String apiAuthority = await _getAuthority(); final uri = Uri.https(apiAuthority, tradePath, {'api_key': apiKey, 'id': id}); return get(uri).then((response) { if (response.statusCode != 200) { @@ -265,7 +267,7 @@ class TrocadorExchangeProvider extends ExchangeProvider { bool get supportsFixedRate => true; @override - bool get shouldUseOnionAddress => true; + bool get supportsOnionAddress => true; @override String get title => 'Trocador'; @@ -297,11 +299,21 @@ class TrocadorExchangeProvider extends ExchangeProvider { } Future _getAuthority() async { + if(!supportsOnionAddress){ + return clearNetAuthority; + } + try { + if (useTorOnly) { + return onionApiAuthority; + } + final uri = Uri.https(onionApiAuthority, '/api/trade'); await get(uri); + return onionApiAuthority; } catch (e) { + return clearNetAuthority; } } diff --git a/lib/src/screens/new_wallet/advanced_privacy_settings_page.dart b/lib/src/screens/new_wallet/advanced_privacy_settings_page.dart index 7d720e4e5..42ba0debb 100644 --- a/lib/src/screens/new_wallet/advanced_privacy_settings_page.dart +++ b/lib/src/screens/new_wallet/advanced_privacy_settings_page.dart @@ -1,3 +1,4 @@ +import 'package:cake_wallet/entities/exchange_api_mode.dart'; import 'package:cake_wallet/entities/fiat_api_mode.dart'; import 'package:cake_wallet/src/screens/nodes/widgets/node_form.dart'; import 'package:cake_wallet/src/screens/settings/widgets/settings_choices_cell.dart'; @@ -48,43 +49,55 @@ class _AdvancedPrivacySettingsBodyState extends State Column( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - SettingsChoicesCell( - ChoicesListItem( - title: S.current.fiat_api, - items: FiatApiMode.all, - selectedItem: widget.privacySettingsViewModel.fiatApi, - onItemSelected: (FiatApiMode mode) => - widget.privacySettingsViewModel.setFiatMode(mode), - ), - ), - SettingsChoicesCell( - ChoicesListItem( - title: S.current.exchange, - items: FiatApiMode.all, - selectedItem: widget.privacySettingsViewModel.exchangeStatus, - onItemSelected: (FiatApiMode mode) => - widget.privacySettingsViewModel.setEnableExchange(mode), - ), - ), - SettingsSwitcherCell( - title: S.current.add_custom_node, - value: widget.privacySettingsViewModel.addCustomNode, - onValueChange: (_, __) => widget.privacySettingsViewModel.toggleAddCustomNode(), - ), - if (widget.privacySettingsViewModel.addCustomNode) - Padding( - padding: EdgeInsets.only(left: 24, right: 24, top: 24), - child: NodeForm( - formKey: _formKey, - nodeViewModel: widget.nodeViewModel, + content: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Observer( + builder: (_) { + return SettingsSwitcherCell( + title: S.current.disable_fiat, + value: widget.privacySettingsViewModel.fiatApi == FiatApiMode.disabled, + onValueChange: (BuildContext context, bool value) { + widget.privacySettingsViewModel.setFiatMode(value); + }); + } + ), + Observer( + builder: (_) { + return SettingsChoicesCell( + ChoicesListItem( + title: S.current.exchange, + items: ExchangeApiMode.all, + selectedItem: widget.privacySettingsViewModel.exchangeStatus, + onItemSelected: (ExchangeApiMode mode) => + widget.privacySettingsViewModel.setEnableExchange(mode), ), - ) - ], - ), + ); + } + ), + Observer( + builder: (_) { + return Column( + children: [ + SettingsSwitcherCell( + title: S.current.add_custom_node, + value: widget.privacySettingsViewModel.addCustomNode, + onValueChange: (_, __) => widget.privacySettingsViewModel.toggleAddCustomNode(), + ), + if (widget.privacySettingsViewModel.addCustomNode) + Padding( + padding: EdgeInsets.only(left: 24, right: 24, top: 24), + child: NodeForm( + formKey: _formKey, + nodeViewModel: widget.nodeViewModel, + ), + ) + ], + ); + } + ), + + ], ), bottomSectionPadding: EdgeInsets.all(24), bottomSection: Column( diff --git a/lib/src/screens/settings/privacy_page.dart b/lib/src/screens/settings/privacy_page.dart index 974f9a3d7..cc6acc826 100644 --- a/lib/src/screens/settings/privacy_page.dart +++ b/lib/src/screens/settings/privacy_page.dart @@ -1,3 +1,4 @@ +import 'package:cake_wallet/entities/exchange_api_mode.dart'; import 'package:cake_wallet/entities/fiat_api_mode.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; @@ -24,20 +25,18 @@ class PrivacyPage extends BasePage { return Column( mainAxisSize: MainAxisSize.min, children: [ + SettingsSwitcherCell( + title: S.current.disable_fiat, + value: _privacySettingsViewModel.isFiatDisabled, + onValueChange: (BuildContext context, bool value) { + _privacySettingsViewModel.setFiatMode(value); + }), SettingsChoicesCell( - ChoicesListItem( - title: S.current.fiat_api, - items: FiatApiMode.all, - selectedItem: _privacySettingsViewModel.fiatApi, - onItemSelected: (FiatApiMode mode) => _privacySettingsViewModel.setFiatMode(mode), - ), - ), - SettingsChoicesCell( - ChoicesListItem( + ChoicesListItem( title: S.current.exchange, - items: FiatApiMode.all, + items: ExchangeApiMode.all, selectedItem: _privacySettingsViewModel.exchangeStatus, - onItemSelected: (FiatApiMode mode) => _privacySettingsViewModel.setEnableExchange(mode), + onItemSelected: (ExchangeApiMode mode) => _privacySettingsViewModel.setEnableExchange(mode), ), ), SettingsSwitcherCell( diff --git a/lib/store/settings_store.dart b/lib/store/settings_store.dart index 989fdae33..b6e5a7549 100644 --- a/lib/store/settings_store.dart +++ b/lib/store/settings_store.dart @@ -1,4 +1,5 @@ import 'package:cake_wallet/bitcoin/bitcoin.dart'; +import 'package:cake_wallet/entities/exchange_api_mode.dart'; import 'package:cake_wallet/entities/pin_code_required_duration.dart'; import 'package:cake_wallet/entities/preferences_key.dart'; import 'package:cw_core/transaction_priority.dart'; @@ -31,7 +32,7 @@ abstract class SettingsStoreBase with Store { required bool initialSaveRecipientAddress, required FiatApiMode initialFiatMode, required bool initialAllowBiometricalAuthentication, - required FiatApiMode initialExchangeStatus, + required ExchangeApiMode initialExchangeStatus, required ThemeBase initialTheme, required int initialPinLength, required String initialLanguageCode, @@ -154,7 +155,7 @@ abstract class SettingsStoreBase with Store { reaction( (_) => exchangeStatus, - (FiatApiMode mode) => sharedPreferences.setInt( + (ExchangeApiMode mode) => sharedPreferences.setInt( PreferencesKey.exchangeStatusKey, mode.serialize())); this @@ -192,7 +193,7 @@ abstract class SettingsStoreBase with Store { bool allowBiometricalAuthentication; @observable - FiatApiMode exchangeStatus; + ExchangeApiMode exchangeStatus; @observable ThemeBase currentTheme; @@ -284,9 +285,9 @@ abstract class SettingsStoreBase with Store { final allowBiometricalAuthentication = sharedPreferences .getBool(PreferencesKey.allowBiometricalAuthenticationKey) ?? false; - final exchangeStatus = FiatApiMode.deserialize( + final exchangeStatus = ExchangeApiMode.deserialize( raw: sharedPreferences - .getInt(PreferencesKey.exchangeStatusKey) ?? FiatApiMode.enabled.raw); + .getInt(PreferencesKey.exchangeStatusKey) ?? ExchangeApiMode.enabled.raw); final legacyTheme = (sharedPreferences.getBool(PreferencesKey.isDarkThemeLegacy) ?? false) ? ThemeType.dark.index @@ -401,9 +402,9 @@ abstract class SettingsStoreBase with Store { allowBiometricalAuthentication = sharedPreferences .getBool(PreferencesKey.allowBiometricalAuthenticationKey) ?? allowBiometricalAuthentication; - exchangeStatus = FiatApiMode.deserialize( + exchangeStatus = ExchangeApiMode.deserialize( raw: sharedPreferences - .getInt(PreferencesKey.exchangeStatusKey) ?? FiatApiMode.enabled.raw); + .getInt(PreferencesKey.exchangeStatusKey) ?? ExchangeApiMode.enabled.raw); final legacyTheme = (sharedPreferences.getBool(PreferencesKey.isDarkThemeLegacy) ?? false) ? ThemeType.dark.index diff --git a/lib/view_model/advanced_privacy_settings_view_model.dart b/lib/view_model/advanced_privacy_settings_view_model.dart index 7d526047d..1bc2ecd9f 100644 --- a/lib/view_model/advanced_privacy_settings_view_model.dart +++ b/lib/view_model/advanced_privacy_settings_view_model.dart @@ -1,3 +1,4 @@ +import 'package:cake_wallet/entities/exchange_api_mode.dart'; import 'package:cake_wallet/entities/fiat_api_mode.dart'; import 'package:cake_wallet/store/settings_store.dart'; import 'package:cw_core/wallet_type.dart'; @@ -12,7 +13,7 @@ abstract class AdvancedPrivacySettingsViewModelBase with Store { AdvancedPrivacySettingsViewModelBase(this.type, this._settingsStore) : _addCustomNode = false; @computed - FiatApiMode get exchangeStatus => _settingsStore.exchangeStatus; + ExchangeApiMode get exchangeStatus => _settingsStore.exchangeStatus; @computed FiatApiMode get fiatApi => _settingsStore.fiatApiMode; @@ -28,12 +29,16 @@ abstract class AdvancedPrivacySettingsViewModelBase with Store { bool get addCustomNode => _addCustomNode; @action - void setFiatMode(FiatApiMode value) { - _settingsStore.fiatApiMode = value; + void setFiatMode(bool value) { + if (value) { + _settingsStore.fiatApiMode = FiatApiMode.disabled; + return; + } + _settingsStore.fiatApiMode = FiatApiMode.enabled; } @action - void setEnableExchange(FiatApiMode value) { + void setEnableExchange(ExchangeApiMode value) { _settingsStore.exchangeStatus = value; } diff --git a/lib/view_model/exchange/exchange_view_model.dart b/lib/view_model/exchange/exchange_view_model.dart index 7921115c6..20a5a8e76 100644 --- a/lib/view_model/exchange/exchange_view_model.dart +++ b/lib/view_model/exchange/exchange_view_model.dart @@ -56,6 +56,7 @@ abstract class ExchangeViewModelBase with Store { isDepositAddressEnabled = false, isReceiveAddressEnabled = false, isReceiveAmountEditable = false, + _providerUseTorOnly = false, receiveCurrencies = [], depositCurrencies = [], limits = Limits(min: 0, max: 0), @@ -65,6 +66,7 @@ abstract class ExchangeViewModelBase with Store { depositCurrency = wallet.currency, providerList = [], selectedProviders = ObservableList() { + _providerUseTorOnly = _settingsStore.exchangeStatus == FiatApiMode.torOnly; _setProviders(); const excludeDepositCurrencies = [CryptoCurrency.btt, CryptoCurrency.nano]; const excludeReceiveCurrencies = [CryptoCurrency.xlm, CryptoCurrency.xrp, @@ -121,18 +123,18 @@ abstract class ExchangeViewModelBase with Store { _calculateBestRate(); }); } - + bool _providerUseTorOnly; final WalletBase wallet; final Box trades; final ExchangeTemplateStore _exchangeTemplateStore; final TradesStore tradesStore; final SharedPreferences sharedPreferences; - final _allProviders = [ + List get _allProviders => [ ChangeNowExchangeProvider(), SideShiftExchangeProvider(), SimpleSwapExchangeProvider(), - TrocadorExchangeProvider(), + TrocadorExchangeProvider(useTorOnly: _providerUseTorOnly), ]; @observable @@ -695,7 +697,7 @@ abstract class ExchangeViewModelBase with Store { void _setProviders(){ if (_settingsStore.exchangeStatus == FiatApiMode.torOnly) { - providerList = _allProviders.where((provider) => provider.shouldUseOnionAddress).toList(); + providerList = _allProviders.where((provider) => provider.supportsOnionAddress).toList(); } else { providerList = _allProviders; } diff --git a/lib/view_model/settings/privacy_settings_view_model.dart b/lib/view_model/settings/privacy_settings_view_model.dart index db345d0f2..1919b1944 100644 --- a/lib/view_model/settings/privacy_settings_view_model.dart +++ b/lib/view_model/settings/privacy_settings_view_model.dart @@ -1,3 +1,4 @@ +import 'package:cake_wallet/entities/exchange_api_mode.dart'; import 'package:cake_wallet/store/settings_store.dart'; import 'package:mobx/mobx.dart'; import 'package:cake_wallet/entities/fiat_api_mode.dart'; @@ -12,23 +13,27 @@ abstract class PrivacySettingsViewModelBase with Store { final SettingsStore _settingsStore; @computed - FiatApiMode get exchangeStatus => _settingsStore.exchangeStatus; + ExchangeApiMode get exchangeStatus => _settingsStore.exchangeStatus; @computed bool get shouldSaveRecipientAddress => _settingsStore.shouldSaveRecipientAddress; @computed - FiatApiMode get fiatApi => _settingsStore.fiatApiMode; + bool get isFiatDisabled => _settingsStore.fiatApiMode == FiatApiMode.disabled; @action void setShouldSaveRecipientAddress(bool value) => _settingsStore.shouldSaveRecipientAddress = value; @action - void setEnableExchange(FiatApiMode value) => _settingsStore.exchangeStatus = value; + void setEnableExchange(ExchangeApiMode value) => _settingsStore.exchangeStatus = value; @action - void setFiatMode(FiatApiMode value) { - _settingsStore.fiatApiMode = value; + void setFiatMode(bool value) { + if (value) { + _settingsStore.fiatApiMode = FiatApiMode.disabled; + return; + } + _settingsStore.fiatApiMode = FiatApiMode.enabled; } } From 9f952cda4076eb28094d368d8ccf4cb3276563ac Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Wed, 1 Mar 2023 23:46:05 +0200 Subject: [PATCH 175/190] Remove disableExchangeKey from sharedpreference --- lib/entities/default_settings_migration.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/entities/default_settings_migration.dart b/lib/entities/default_settings_migration.dart index b1bb144be..94fc7ede8 100644 --- a/lib/entities/default_settings_migration.dart +++ b/lib/entities/default_settings_migration.dart @@ -514,4 +514,6 @@ Future migrateExchangeStatus(SharedPreferences sharedPreferences) async { await sharedPreferences.setInt(PreferencesKey.exchangeStatusKey, isExchangeDisabled ? ExchangeApiMode.disabled.raw : ExchangeApiMode.enabled.raw); + + await sharedPreferences.remove(PreferencesKey.disableExchangeKey); } From a6b03c4a8189b5b3ab75cafbd3493ab8f4a8647f Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Wed, 1 Mar 2023 23:51:44 +0200 Subject: [PATCH 176/190] Add file to dependecies --- pubspec_base.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/pubspec_base.yaml b/pubspec_base.yaml index 2caa9052f..7ff933520 100644 --- a/pubspec_base.yaml +++ b/pubspec_base.yaml @@ -56,6 +56,7 @@ dependencies: archive: ^3.3.0 cryptography: ^2.0.5 file_picker: ^4.6.1 + file: ^6.1.4 unorm_dart: ^0.2.0 # check unorm_dart for usage and for replace permission_handler: ^10.0.0 From d4b5f24d5e88422e6e1486e78e3599fb19ed8c0c Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Thu, 2 Mar 2023 00:00:47 +0200 Subject: [PATCH 177/190] Add file to dependecies to core --- cw_core/pubspec.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/cw_core/pubspec.yaml b/cw_core/pubspec.yaml index 50503361c..e33aeb803 100644 --- a/cw_core/pubspec.yaml +++ b/cw_core/pubspec.yaml @@ -13,6 +13,7 @@ dependencies: flutter: sdk: flutter http: ^0.13.4 + file: ^6.1.4 path_provider: ^2.0.11 mobx: ^2.0.7+4 flutter_mobx: ^2.0.6+1 From 8f85f99a98f937cdc785bb8f6a48860ee67ab109 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Thu, 2 Mar 2023 16:58:04 +0200 Subject: [PATCH 178/190] Fixate MobX version to avoid un-expected behavior --- pubspec_base.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec_base.yaml b/pubspec_base.yaml index 2caa9052f..1e6a27cb7 100644 --- a/pubspec_base.yaml +++ b/pubspec_base.yaml @@ -22,7 +22,7 @@ dependencies: barcode_scan2: ^4.2.1 http: ^0.13.4 path_provider: ^2.0.11 - mobx: ^2.0.7+4 + mobx: 2.0.7+4 flutter_mobx: ^2.0.6+1 flutter_slidable: ^2.0.0 share_plus: ^4.0.10 From 15237d5f799953c7c317325869603d6ce1c328ac Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Thu, 2 Mar 2023 17:13:25 +0200 Subject: [PATCH 179/190] Fix issues from code review --- lib/core/backup_service.dart | 10 +++++----- lib/exchange/trocador/trocador_exchange_provider.dart | 2 +- .../new_wallet/advanced_privacy_settings_page.dart | 2 +- lib/src/screens/settings/privacy_page.dart | 2 +- .../advanced_privacy_settings_view_model.dart | 2 +- lib/view_model/dashboard/dashboard_view_model.dart | 3 ++- lib/view_model/exchange/exchange_view_model.dart | 11 ++++++----- .../settings/privacy_settings_view_model.dart | 2 +- pubspec_base.yaml | 1 - 9 files changed, 18 insertions(+), 17 deletions(-) diff --git a/lib/core/backup_service.dart b/lib/core/backup_service.dart index ffcb9eb4c..0439e9fb4 100644 --- a/lib/core/backup_service.dart +++ b/lib/core/backup_service.dart @@ -217,7 +217,7 @@ class BackupService { final fiatApiMode = data[PreferencesKey.currentFiatApiModeKey] as int?; final currentPinLength = data[PreferencesKey.currentPinLength] as int?; final currentTheme = data[PreferencesKey.currentTheme] as int?; - final disableExchange = data[PreferencesKey.disableExchangeKey] as bool?; + final exchangeStatus = data[PreferencesKey.exchangeStatusKey] as bool?; final currentDefaultSettingsMigrationVersion = data[PreferencesKey.currentDefaultSettingsMigrationVersion] as int?; final moneroTransactionPriority = data[PreferencesKey.moneroTransactionPriority] as int?; final bitcoinTransactionPriority = data[PreferencesKey.bitcoinTransactionPriority] as int?; @@ -280,9 +280,9 @@ class BackupService { await _sharedPreferences.setInt( PreferencesKey.currentTheme, currentTheme); - if (disableExchange != null) + if (exchangeStatus != null) await _sharedPreferences.setBool( - PreferencesKey.disableExchangeKey, disableExchange); + PreferencesKey.exchangeStatusKey, exchangeStatus); if (currentDefaultSettingsMigrationVersion != null) await _sharedPreferences.setInt( @@ -431,8 +431,8 @@ class BackupService { _sharedPreferences.getInt(PreferencesKey.displayActionListModeKey), PreferencesKey.currentTheme: _sharedPreferences.getInt(PreferencesKey.currentTheme), - PreferencesKey.disableExchangeKey: - _sharedPreferences.getBool(PreferencesKey.disableExchangeKey), + PreferencesKey.exchangeStatusKey: + _sharedPreferences.getBool(PreferencesKey.exchangeStatusKey), PreferencesKey.currentDefaultSettingsMigrationVersion: _sharedPreferences .getInt(PreferencesKey.currentDefaultSettingsMigrationVersion), PreferencesKey.bitcoinTransactionPriority: diff --git a/lib/exchange/trocador/trocador_exchange_provider.dart b/lib/exchange/trocador/trocador_exchange_provider.dart index 750ffb98a..e289b4e0b 100644 --- a/lib/exchange/trocador/trocador_exchange_provider.dart +++ b/lib/exchange/trocador/trocador_exchange_provider.dart @@ -308,7 +308,7 @@ class TrocadorExchangeProvider extends ExchangeProvider { return onionApiAuthority; } - final uri = Uri.https(onionApiAuthority, '/api/trade'); + final uri = Uri.https(onionApiAuthority, tradePath); await get(uri); return onionApiAuthority; diff --git a/lib/src/screens/new_wallet/advanced_privacy_settings_page.dart b/lib/src/screens/new_wallet/advanced_privacy_settings_page.dart index 42ba0debb..a82ddaf4e 100644 --- a/lib/src/screens/new_wallet/advanced_privacy_settings_page.dart +++ b/lib/src/screens/new_wallet/advanced_privacy_settings_page.dart @@ -70,7 +70,7 @@ class _AdvancedPrivacySettingsBodyState extends State - widget.privacySettingsViewModel.setEnableExchange(mode), + widget.privacySettingsViewModel.setExchangeApiMode(mode), ), ); } diff --git a/lib/src/screens/settings/privacy_page.dart b/lib/src/screens/settings/privacy_page.dart index cc6acc826..5322c488f 100644 --- a/lib/src/screens/settings/privacy_page.dart +++ b/lib/src/screens/settings/privacy_page.dart @@ -36,7 +36,7 @@ class PrivacyPage extends BasePage { title: S.current.exchange, items: ExchangeApiMode.all, selectedItem: _privacySettingsViewModel.exchangeStatus, - onItemSelected: (ExchangeApiMode mode) => _privacySettingsViewModel.setEnableExchange(mode), + onItemSelected: (ExchangeApiMode mode) => _privacySettingsViewModel.setExchangeApiMode(mode), ), ), SettingsSwitcherCell( diff --git a/lib/view_model/advanced_privacy_settings_view_model.dart b/lib/view_model/advanced_privacy_settings_view_model.dart index 1bc2ecd9f..fad5fff34 100644 --- a/lib/view_model/advanced_privacy_settings_view_model.dart +++ b/lib/view_model/advanced_privacy_settings_view_model.dart @@ -38,7 +38,7 @@ abstract class AdvancedPrivacySettingsViewModelBase with Store { } @action - void setEnableExchange(ExchangeApiMode value) { + void setExchangeApiMode(ExchangeApiMode value) { _settingsStore.exchangeStatus = value; } diff --git a/lib/view_model/dashboard/dashboard_view_model.dart b/lib/view_model/dashboard/dashboard_view_model.dart index dab2bafd1..4bc6e577d 100644 --- a/lib/view_model/dashboard/dashboard_view_model.dart +++ b/lib/view_model/dashboard/dashboard_view_model.dart @@ -1,3 +1,4 @@ +import 'package:cake_wallet/entities/exchange_api_mode.dart'; import 'package:cake_wallet/entities/fiat_api_mode.dart'; import 'package:cake_wallet/wallet_type_utils.dart'; import 'package:cw_core/transaction_history.dart'; @@ -274,7 +275,7 @@ abstract class DashboardViewModelBase with Store { settingsStore.shouldShowYatPopup = shouldShow; @computed - bool get isEnabledExchangeAction => settingsStore.exchangeStatus != FiatApiMode.disabled; + bool get isEnabledExchangeAction => settingsStore.exchangeStatus != ExchangeApiMode.disabled; @observable bool hasExchangeAction; diff --git a/lib/view_model/exchange/exchange_view_model.dart b/lib/view_model/exchange/exchange_view_model.dart index 20a5a8e76..d0698990c 100644 --- a/lib/view_model/exchange/exchange_view_model.dart +++ b/lib/view_model/exchange/exchange_view_model.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'dart:collection'; import 'dart:convert'; +import 'package:cake_wallet/entities/exchange_api_mode.dart'; import 'package:cake_wallet/entities/fiat_api_mode.dart'; import 'package:cake_wallet/entities/preferences_key.dart'; import 'package:cake_wallet/exchange/sideshift/sideshift_exchange_provider.dart'; @@ -56,7 +57,7 @@ abstract class ExchangeViewModelBase with Store { isDepositAddressEnabled = false, isReceiveAddressEnabled = false, isReceiveAmountEditable = false, - _providerUseTorOnly = false, + _useTorOnly = false, receiveCurrencies = [], depositCurrencies = [], limits = Limits(min: 0, max: 0), @@ -66,7 +67,7 @@ abstract class ExchangeViewModelBase with Store { depositCurrency = wallet.currency, providerList = [], selectedProviders = ObservableList() { - _providerUseTorOnly = _settingsStore.exchangeStatus == FiatApiMode.torOnly; + _useTorOnly = _settingsStore.exchangeStatus == ExchangeApiMode.torOnly; _setProviders(); const excludeDepositCurrencies = [CryptoCurrency.btt, CryptoCurrency.nano]; const excludeReceiveCurrencies = [CryptoCurrency.xlm, CryptoCurrency.xrp, @@ -123,7 +124,7 @@ abstract class ExchangeViewModelBase with Store { _calculateBestRate(); }); } - bool _providerUseTorOnly; + bool _useTorOnly; final WalletBase wallet; final Box trades; final ExchangeTemplateStore _exchangeTemplateStore; @@ -134,7 +135,7 @@ abstract class ExchangeViewModelBase with Store { ChangeNowExchangeProvider(), SideShiftExchangeProvider(), SimpleSwapExchangeProvider(), - TrocadorExchangeProvider(useTorOnly: _providerUseTorOnly), + TrocadorExchangeProvider(useTorOnly: _useTorOnly), ]; @observable @@ -696,7 +697,7 @@ abstract class ExchangeViewModelBase with Store { } void _setProviders(){ - if (_settingsStore.exchangeStatus == FiatApiMode.torOnly) { + if (_settingsStore.exchangeStatus == ExchangeApiMode.torOnly) { providerList = _allProviders.where((provider) => provider.supportsOnionAddress).toList(); } else { providerList = _allProviders; diff --git a/lib/view_model/settings/privacy_settings_view_model.dart b/lib/view_model/settings/privacy_settings_view_model.dart index 1919b1944..1d58fc323 100644 --- a/lib/view_model/settings/privacy_settings_view_model.dart +++ b/lib/view_model/settings/privacy_settings_view_model.dart @@ -25,7 +25,7 @@ abstract class PrivacySettingsViewModelBase with Store { void setShouldSaveRecipientAddress(bool value) => _settingsStore.shouldSaveRecipientAddress = value; @action - void setEnableExchange(ExchangeApiMode value) => _settingsStore.exchangeStatus = value; + void setExchangeApiMode(ExchangeApiMode value) => _settingsStore.exchangeStatus = value; @action void setFiatMode(bool value) { diff --git a/pubspec_base.yaml b/pubspec_base.yaml index 7ff933520..2caa9052f 100644 --- a/pubspec_base.yaml +++ b/pubspec_base.yaml @@ -56,7 +56,6 @@ dependencies: archive: ^3.3.0 cryptography: ^2.0.5 file_picker: ^4.6.1 - file: ^6.1.4 unorm_dart: ^0.2.0 # check unorm_dart for usage and for replace permission_handler: ^10.0.0 From d5c4bd0236032878f138ffbd8ad3625dfacf112d Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Thu, 2 Mar 2023 17:43:42 +0200 Subject: [PATCH 180/190] change type to int --- lib/core/backup_service.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/core/backup_service.dart b/lib/core/backup_service.dart index 0439e9fb4..3cb434efe 100644 --- a/lib/core/backup_service.dart +++ b/lib/core/backup_service.dart @@ -217,7 +217,7 @@ class BackupService { final fiatApiMode = data[PreferencesKey.currentFiatApiModeKey] as int?; final currentPinLength = data[PreferencesKey.currentPinLength] as int?; final currentTheme = data[PreferencesKey.currentTheme] as int?; - final exchangeStatus = data[PreferencesKey.exchangeStatusKey] as bool?; + final exchangeStatus = data[PreferencesKey.exchangeStatusKey] as int?; final currentDefaultSettingsMigrationVersion = data[PreferencesKey.currentDefaultSettingsMigrationVersion] as int?; final moneroTransactionPriority = data[PreferencesKey.moneroTransactionPriority] as int?; final bitcoinTransactionPriority = data[PreferencesKey.bitcoinTransactionPriority] as int?; @@ -281,7 +281,7 @@ class BackupService { PreferencesKey.currentTheme, currentTheme); if (exchangeStatus != null) - await _sharedPreferences.setBool( + await _sharedPreferences.setInt( PreferencesKey.exchangeStatusKey, exchangeStatus); if (currentDefaultSettingsMigrationVersion != null) @@ -432,7 +432,7 @@ class BackupService { PreferencesKey.currentTheme: _sharedPreferences.getInt(PreferencesKey.currentTheme), PreferencesKey.exchangeStatusKey: - _sharedPreferences.getBool(PreferencesKey.exchangeStatusKey), + _sharedPreferences.getInt(PreferencesKey.exchangeStatusKey), PreferencesKey.currentDefaultSettingsMigrationVersion: _sharedPreferences .getInt(PreferencesKey.currentDefaultSettingsMigrationVersion), PreferencesKey.bitcoinTransactionPriority: From ddbf03a2f86d6c928e783d7d2ed43eff5be054dc Mon Sep 17 00:00:00 2001 From: Omar Hatem Date: Thu, 2 Mar 2023 18:10:40 +0200 Subject: [PATCH 181/190] Update pull_request_template.md --- .github/pull_request_template.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index d7c1b7241..4eb4ffac5 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -7,3 +7,7 @@ Please include a summary of the changes and which issue is fixed / feature is ad # Pull Request - Checklist - [ ] Initial Manual Tests Passed +- [ ] Double check modified code and verify it with the feature/task requirements +- [ ] Formate code +- [ ] Look for code duplication +- [ ] Clear naming for variables and methods From de629873386403c29b2d5f64462193c5ac81702e Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Thu, 2 Mar 2023 19:13:00 +0200 Subject: [PATCH 182/190] Add Fiat API mode to advanced privacy settings page --- .../advanced_privacy_settings_page.dart | 68 +++++++++---------- .../advanced_privacy_settings_view_model.dart | 18 ++--- 2 files changed, 36 insertions(+), 50 deletions(-) diff --git a/lib/src/screens/new_wallet/advanced_privacy_settings_page.dart b/lib/src/screens/new_wallet/advanced_privacy_settings_page.dart index a82ddaf4e..05ff65889 100644 --- a/lib/src/screens/new_wallet/advanced_privacy_settings_page.dart +++ b/lib/src/screens/new_wallet/advanced_privacy_settings_page.dart @@ -52,39 +52,37 @@ class _AdvancedPrivacySettingsBodyState extends State( title: S.current.disable_fiat, - value: widget.privacySettingsViewModel.fiatApi == FiatApiMode.disabled, - onValueChange: (BuildContext context, bool value) { - widget.privacySettingsViewModel.setFiatMode(value); - }); - } - ), - Observer( - builder: (_) { - return SettingsChoicesCell( - ChoicesListItem( - title: S.current.exchange, - items: ExchangeApiMode.all, - selectedItem: widget.privacySettingsViewModel.exchangeStatus, - onItemSelected: (ExchangeApiMode mode) => - widget.privacySettingsViewModel.setExchangeApiMode(mode), + items: FiatApiMode.all, + selectedItem: widget.privacySettingsViewModel.fiatApiMode, + onItemSelected: (FiatApiMode mode) => + widget.privacySettingsViewModel.setFiatApiMode(mode), + ), + ); + }), + Observer(builder: (_) { + return SettingsChoicesCell( + ChoicesListItem( + title: S.current.exchange, + items: ExchangeApiMode.all, + selectedItem: widget.privacySettingsViewModel.exchangeStatus, + onItemSelected: (ExchangeApiMode mode) => + widget.privacySettingsViewModel.setExchangeApiMode(mode), + ), + ); + }), + Observer(builder: (_) { + return Column( + children: [ + SettingsSwitcherCell( + title: S.current.add_custom_node, + value: widget.privacySettingsViewModel.addCustomNode, + onValueChange: (_, __) => widget.privacySettingsViewModel.toggleAddCustomNode(), ), - ); - } - ), - Observer( - builder: (_) { - return Column( - children: [ - SettingsSwitcherCell( - title: S.current.add_custom_node, - value: widget.privacySettingsViewModel.addCustomNode, - onValueChange: (_, __) => widget.privacySettingsViewModel.toggleAddCustomNode(), - ), - if (widget.privacySettingsViewModel.addCustomNode) + if (widget.privacySettingsViewModel.addCustomNode) Padding( padding: EdgeInsets.only(left: 24, right: 24, top: 24), child: NodeForm( @@ -92,11 +90,9 @@ class _AdvancedPrivacySettingsBodyState extends State _settingsStore.exchangeStatus; @computed - FiatApiMode get fiatApi => _settingsStore.fiatApiMode; + FiatApiMode get fiatApiMode => _settingsStore.fiatApiMode; @observable bool _addCustomNode = false; @@ -29,21 +29,11 @@ abstract class AdvancedPrivacySettingsViewModelBase with Store { bool get addCustomNode => _addCustomNode; @action - void setFiatMode(bool value) { - if (value) { - _settingsStore.fiatApiMode = FiatApiMode.disabled; - return; - } - _settingsStore.fiatApiMode = FiatApiMode.enabled; - } + void setFiatApiMode(FiatApiMode fiatApiMode) => _settingsStore.fiatApiMode = fiatApiMode; @action - void setExchangeApiMode(ExchangeApiMode value) { - _settingsStore.exchangeStatus = value; - } + void setExchangeApiMode(ExchangeApiMode value) => _settingsStore.exchangeStatus = value; @action - void toggleAddCustomNode() { - _addCustomNode = !_addCustomNode; - } + void toggleAddCustomNode() => _addCustomNode = !_addCustomNode; } From 29e9bb2181ef60e419d67938f62afa8e5d39ca9c Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Thu, 2 Mar 2023 19:24:52 +0200 Subject: [PATCH 183/190] Call Onion API from http --- .../trocador/trocador_exchange_provider.dart | 79 ++++++++----------- 1 file changed, 35 insertions(+), 44 deletions(-) diff --git a/lib/exchange/trocador/trocador_exchange_provider.dart b/lib/exchange/trocador/trocador_exchange_provider.dart index e289b4e0b..1c2a85163 100644 --- a/lib/exchange/trocador/trocador_exchange_provider.dart +++ b/lib/exchange/trocador/trocador_exchange_provider.dart @@ -16,7 +16,7 @@ class TrocadorExchangeProvider extends ExchangeProvider { TrocadorExchangeProvider({this.useTorOnly = false}) : _lastUsedRateId = '', super(pairList: _supportedPairs()); - + bool useTorOnly; static const List _notSupported = [ @@ -85,9 +85,7 @@ class TrocadorExchangeProvider extends ExchangeProvider { params['id'] = _lastUsedRateId; } - final String apiAuthority = await _getAuthority(); - - final uri = Uri.https(apiAuthority, createTradePath, params); + final uri = await _getUri(createTradePath, params); final response = await get(uri); if (response.statusCode == 400) { @@ -137,31 +135,28 @@ class TrocadorExchangeProvider extends ExchangeProvider { {required CryptoCurrency from, required CryptoCurrency to, required bool isFixedRateMode}) async { - - final params = { - 'api_key': apiKey, - 'ticker': from.title.toLowerCase(), - 'name': from.name, - }; - - final String apiAuthority = await _getAuthority(); - final uri = Uri.https(apiAuthority, coinPath, params); - - final response = await get(uri); + final params = { + 'api_key': apiKey, + 'ticker': from.title.toLowerCase(), + 'name': from.name, + }; - if (response.statusCode != 200) { - throw Exception('Unexpected http status: ${response.statusCode}'); - } + final uri = await _getUri(coinPath, params); + + final response = await get(uri); + + if (response.statusCode != 200) { + throw Exception('Unexpected http status: ${response.statusCode}'); + } + + final responseJSON = json.decode(response.body) as List; + + if (responseJSON.isEmpty) { + throw Exception('No data'); + } + + final coinJson = responseJSON.first as Map; - final responseJSON = json.decode(response.body) as List; - - if (responseJSON.isEmpty) { - throw Exception('No data'); - } - - final coinJson = responseJSON.first as Map; - - return Limits( min: coinJson['minimum'] as double, max: coinJson['maximum'] as double, @@ -180,8 +175,6 @@ class TrocadorExchangeProvider extends ExchangeProvider { return 0.0; } - final String apiAuthority = await _getAuthority(); - final params = { 'api_key': apiKey, 'ticker_from': from.title.toLowerCase(), @@ -196,7 +189,7 @@ class TrocadorExchangeProvider extends ExchangeProvider { 'best_only': 'True', }; - final uri = Uri.https(apiAuthority, newRatePath, params); + final uri = await _getUri(newRatePath, params); final response = await get(uri); final responseJSON = json.decode(response.body) as Map; final fromAmount = double.parse(responseJSON['amount_from'].toString()); @@ -216,8 +209,7 @@ class TrocadorExchangeProvider extends ExchangeProvider { @override Future findTradeById({required String id}) async { - final String apiAuthority = await _getAuthority(); - final uri = Uri.https(apiAuthority, tradePath, {'api_key': apiKey, 'id': id}); + final uri = await _getUri(tradePath, {'api_key': apiKey, 'id': id}); return get(uri).then((response) { if (response.statusCode != 200) { throw Exception('Unexpected http status: ${response.statusCode}'); @@ -298,23 +290,22 @@ class TrocadorExchangeProvider extends ExchangeProvider { } } - Future _getAuthority() async { - if(!supportsOnionAddress){ - return clearNetAuthority; - } + Future _getUri(String createTradePath, Map queryParams) async { + if (!supportsOnionAddress) { + return Uri.https(clearNetAuthority, tradePath, queryParams); + } + + if (useTorOnly) { + return Uri.http(onionApiAuthority, tradePath, queryParams); + } try { - if (useTorOnly) { - return onionApiAuthority; - } - - final uri = Uri.https(onionApiAuthority, tradePath); + final uri = Uri.http(onionApiAuthority, tradePath); await get(uri); - return onionApiAuthority; + return Uri.http(onionApiAuthority, tradePath, queryParams); } catch (e) { - - return clearNetAuthority; + return Uri.https(clearNetAuthority, tradePath, queryParams); } } } From 60f47e5e9fed8d83252014a4814eca045b6fd0b5 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Thu, 2 Mar 2023 21:13:19 +0200 Subject: [PATCH 184/190] Fix calling wrong path --- .../trocador/trocador_exchange_provider.dart | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/exchange/trocador/trocador_exchange_provider.dart b/lib/exchange/trocador/trocador_exchange_provider.dart index 1c2a85163..98726a265 100644 --- a/lib/exchange/trocador/trocador_exchange_provider.dart +++ b/lib/exchange/trocador/trocador_exchange_provider.dart @@ -290,22 +290,23 @@ class TrocadorExchangeProvider extends ExchangeProvider { } } - Future _getUri(String createTradePath, Map queryParams) async { + Future _getUri(String path, Map queryParams) async { if (!supportsOnionAddress) { - return Uri.https(clearNetAuthority, tradePath, queryParams); + return Uri.https(clearNetAuthority, path, queryParams); } + final uri = Uri.http(onionApiAuthority, path, queryParams); + if (useTorOnly) { - return Uri.http(onionApiAuthority, tradePath, queryParams); + return uri; } try { - final uri = Uri.http(onionApiAuthority, tradePath); await get(uri); - return Uri.http(onionApiAuthority, tradePath, queryParams); + return uri; } catch (e) { - return Uri.https(clearNetAuthority, tradePath, queryParams); + return Uri.https(clearNetAuthority, path, queryParams); } } } From 2a48d645aec2a6ab229134097e335dc09b5141e4 Mon Sep 17 00:00:00 2001 From: Justin Ehrenhofer Date: Thu, 2 Mar 2023 17:47:10 -0600 Subject: [PATCH 185/190] Revert part of the Haven change --- lib/reactions/on_current_wallet_change.dart | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/reactions/on_current_wallet_change.dart b/lib/reactions/on_current_wallet_change.dart index 89b096d86..e44973c5f 100644 --- a/lib/reactions/on_current_wallet_change.dart +++ b/lib/reactions/on_current_wallet_change.dart @@ -66,6 +66,10 @@ void startCurrentWalletChangeReaction(AppStore appStore, PreferencesKey.currentWalletType, serializeToInt(wallet.type)); await wallet.connectToNode(node: node); + if (wallet.type == WalletType.haven) { + await updateHavenRate(fiatConversionStore); + } + if (wallet.walletInfo.address?.isEmpty ?? true) { wallet.walletInfo.address = wallet.walletAddresses.address; From f7e7024ffeeeb6723f28e71b74ece32b9713e9d4 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Fri, 3 Mar 2023 01:52:46 +0200 Subject: [PATCH 186/190] Update app versions --- scripts/android/app_env.sh | 8 ++++---- scripts/ios/app_env.sh | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/scripts/android/app_env.sh b/scripts/android/app_env.sh index d2bee1773..634df327a 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.7" -MONERO_COM_BUILD_NUMBER=38 +MONERO_COM_VERSION="1.2.8" +MONERO_COM_BUILD_NUMBER=39 MONERO_COM_BUNDLE_ID="com.monero.app" MONERO_COM_PACKAGE="com.monero.app" CAKEWALLET_NAME="Cake Wallet" -CAKEWALLET_VERSION="4.5.8" -CAKEWALLET_BUILD_NUMBER=144 +CAKEWALLET_VERSION="4.5.9" +CAKEWALLET_BUILD_NUMBER=145 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 f0dea9b4c..d94c92849 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.7" -MONERO_COM_BUILD_NUMBER=35 +MONERO_COM_VERSION="1.2.8" +MONERO_COM_BUILD_NUMBER=36 MONERO_COM_BUNDLE_ID="com.cakewallet.monero" CAKEWALLET_NAME="Cake Wallet" -CAKEWALLET_VERSION="4.5.8" -CAKEWALLET_BUILD_NUMBER=140 +CAKEWALLET_VERSION="4.5.9" +CAKEWALLET_BUILD_NUMBER=141 CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet" HAVEN_NAME="Haven" From f8745570372137fddeb71fb75810f036a7d2a17e Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Fri, 3 Mar 2023 02:05:33 +0200 Subject: [PATCH 187/190] Update build version for monero ios --- scripts/ios/app_env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ios/app_env.sh b/scripts/ios/app_env.sh index d94c92849..a696d81a3 100644 --- a/scripts/ios/app_env.sh +++ b/scripts/ios/app_env.sh @@ -14,7 +14,7 @@ APP_IOS_TYPE=$1 MONERO_COM_NAME="Monero.com" MONERO_COM_VERSION="1.2.8" -MONERO_COM_BUILD_NUMBER=36 +MONERO_COM_BUILD_NUMBER=37 MONERO_COM_BUNDLE_ID="com.cakewallet.monero" CAKEWALLET_NAME="Cake Wallet" From 44a9ad7487277776888766349d9eb2b0c8612609 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Mon, 6 Mar 2023 18:42:15 +0200 Subject: [PATCH 188/190] Update MobX Fix auth state not triggering onAuthState changed due to same value --- lib/store/authentication_store.dart | 12 +++++++++--- pubspec_base.yaml | 6 +++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/lib/store/authentication_store.dart b/lib/store/authentication_store.dart index b734d7acb..815b1ed60 100644 --- a/lib/store/authentication_store.dart +++ b/lib/store/authentication_store.dart @@ -4,7 +4,7 @@ part 'authentication_store.g.dart'; class AuthenticationStore = AuthenticationStoreBase with _$AuthenticationStore; -enum AuthenticationState { uninitialized, installed, allowed } +enum AuthenticationState { uninitialized, installed, allowed, _reset } abstract class AuthenticationStoreBase with Store { AuthenticationStoreBase() : state = AuthenticationState.uninitialized; @@ -13,8 +13,14 @@ abstract class AuthenticationStoreBase with Store { AuthenticationState state; @action - void installed() => state = AuthenticationState.installed; + void installed() { + state = AuthenticationState._reset; + state = AuthenticationState.installed; + } @action - void allowed() => state = AuthenticationState.allowed; + void allowed() { + state = AuthenticationState._reset; + state = AuthenticationState.allowed; + } } diff --git a/pubspec_base.yaml b/pubspec_base.yaml index 9eccf4560..61282761c 100644 --- a/pubspec_base.yaml +++ b/pubspec_base.yaml @@ -22,8 +22,8 @@ dependencies: barcode_scan2: ^4.2.1 http: ^0.13.4 path_provider: ^2.0.11 - mobx: 2.0.7+4 - flutter_mobx: ^2.0.6+1 + mobx: ^2.1.4 + flutter_mobx: ^2.0.6+5 flutter_slidable: ^2.0.0 share_plus: ^4.0.10 # date_range_picker: ^1.0.6 @@ -73,7 +73,7 @@ dev_dependencies: flutter_test: sdk: flutter build_runner: ^2.1.11 - mobx_codegen: ^2.0.7 + mobx_codegen: ^2.1.1 build_resolvers: ^2.0.9 hive_generator: ^1.1.3 flutter_launcher_icons: ^0.9.3 From 0517efc7116e726d7b1412b624d44f1426e14957 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Mon, 6 Mar 2023 19:21:04 +0200 Subject: [PATCH 189/190] Update build versions --- scripts/android/app_env.sh | 4 ++-- scripts/ios/app_env.sh | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/android/app_env.sh b/scripts/android/app_env.sh index 634df327a..2a5858ab6 100644 --- a/scripts/android/app_env.sh +++ b/scripts/android/app_env.sh @@ -15,13 +15,13 @@ APP_ANDROID_TYPE=$1 MONERO_COM_NAME="Monero.com" MONERO_COM_VERSION="1.2.8" -MONERO_COM_BUILD_NUMBER=39 +MONERO_COM_BUILD_NUMBER=40 MONERO_COM_BUNDLE_ID="com.monero.app" MONERO_COM_PACKAGE="com.monero.app" CAKEWALLET_NAME="Cake Wallet" CAKEWALLET_VERSION="4.5.9" -CAKEWALLET_BUILD_NUMBER=145 +CAKEWALLET_BUILD_NUMBER=146 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 a696d81a3..fbdfa33fa 100644 --- a/scripts/ios/app_env.sh +++ b/scripts/ios/app_env.sh @@ -14,12 +14,12 @@ APP_IOS_TYPE=$1 MONERO_COM_NAME="Monero.com" MONERO_COM_VERSION="1.2.8" -MONERO_COM_BUILD_NUMBER=37 +MONERO_COM_BUILD_NUMBER=38 MONERO_COM_BUNDLE_ID="com.cakewallet.monero" CAKEWALLET_NAME="Cake Wallet" CAKEWALLET_VERSION="4.5.9" -CAKEWALLET_BUILD_NUMBER=141 +CAKEWALLET_BUILD_NUMBER=142 CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet" HAVEN_NAME="Haven" From c986fce5623fd84b80888f916deddb919c797f35 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Mon, 6 Mar 2023 20:09:17 +0200 Subject: [PATCH 190/190] Update app versions --- scripts/android/app_env.sh | 4 ++-- scripts/ios/app_env.sh | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/android/app_env.sh b/scripts/android/app_env.sh index 2a5858ab6..ab6051d96 100644 --- a/scripts/android/app_env.sh +++ b/scripts/android/app_env.sh @@ -14,13 +14,13 @@ TYPES=($MONERO_COM $CAKEWALLET $HAVEN) APP_ANDROID_TYPE=$1 MONERO_COM_NAME="Monero.com" -MONERO_COM_VERSION="1.2.8" +MONERO_COM_VERSION="1.3.0" MONERO_COM_BUILD_NUMBER=40 MONERO_COM_BUNDLE_ID="com.monero.app" MONERO_COM_PACKAGE="com.monero.app" CAKEWALLET_NAME="Cake Wallet" -CAKEWALLET_VERSION="4.5.9" +CAKEWALLET_VERSION="4.6.0" CAKEWALLET_BUILD_NUMBER=146 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 fbdfa33fa..bc5f60355 100644 --- a/scripts/ios/app_env.sh +++ b/scripts/ios/app_env.sh @@ -13,12 +13,12 @@ TYPES=($MONERO_COM $CAKEWALLET $HAVEN) APP_IOS_TYPE=$1 MONERO_COM_NAME="Monero.com" -MONERO_COM_VERSION="1.2.8" +MONERO_COM_VERSION="1.3.0" MONERO_COM_BUILD_NUMBER=38 MONERO_COM_BUNDLE_ID="com.cakewallet.monero" CAKEWALLET_NAME="Cake Wallet" -CAKEWALLET_VERSION="4.5.9" +CAKEWALLET_VERSION="4.6.0" CAKEWALLET_BUILD_NUMBER=142 CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet"