From a6d5a145b9a7edd5e112c16891232355430f7d0c Mon Sep 17 00:00:00 2001 From: Serhii Date: Mon, 24 Oct 2022 14:47:39 +0300 Subject: [PATCH 001/173] flutter update fixes --- cw_core/lib/crypto_currency.dart | 364 +++++++++---------------------- 1 file changed, 106 insertions(+), 258 deletions(-) diff --git a/cw_core/lib/crypto_currency.dart b/cw_core/lib/crypto_currency.dart index c6e0c02c2..d348ebdd6 100644 --- a/cw_core/lib/crypto_currency.dart +++ b/cw_core/lib/crypto_currency.dart @@ -137,272 +137,120 @@ class CryptoCurrency extends EnumerableItem with Serializable { static const uni = CryptoCurrency(title: 'UNI', iconPath: 'assets/images/uni_icon.png', tag: 'ETH', raw: 61); static const stx = CryptoCurrency(title: 'STX', iconPath: 'assets/images/stx_icon.png', raw: 62); + static const mapFromInt = { + 0: CryptoCurrency.xmr, + 1: CryptoCurrency.ada, + 2: CryptoCurrency.bch, + 3: CryptoCurrency.bnb, + 4: CryptoCurrency.btc, + 5: CryptoCurrency.dai, + 6: CryptoCurrency.dash, + 7: CryptoCurrency.eos, + 8: CryptoCurrency.eth, + 9: CryptoCurrency.ltc, + 10: CryptoCurrency.nano, + 11: CryptoCurrency.trx, + 12: CryptoCurrency.usdt, + 13: CryptoCurrency.usdterc20, + 14: CryptoCurrency.xlm, + 15: CryptoCurrency.xrp, + 16: CryptoCurrency.xhv, + 17: CryptoCurrency.xag, + 18: CryptoCurrency.xau, + 19: CryptoCurrency.xaud, + 20: CryptoCurrency.xbtc, + 21: CryptoCurrency.xcad, + 22: CryptoCurrency.xchf, + 23: CryptoCurrency.xcny, + 24: CryptoCurrency.xeur, + 25: CryptoCurrency.xgbp, + 26: CryptoCurrency.xjpy, + 27: CryptoCurrency.xnok, + 28: CryptoCurrency.xnzd, + 29: CryptoCurrency.xusd, + 30: CryptoCurrency.ape, + 31: CryptoCurrency.avaxc, + 32: CryptoCurrency.btt, + 33: CryptoCurrency.bttbsc, + 34: CryptoCurrency.doge, + 35: CryptoCurrency.firo, + 36: CryptoCurrency.usdttrc20, + 37: CryptoCurrency.hbar, + 38: CryptoCurrency.sc, + 39: CryptoCurrency.sol, + 40: CryptoCurrency.usdc, + 41: CryptoCurrency.usdcsol, + 42: CryptoCurrency.zaddr, + 43: CryptoCurrency.zec, + 44: CryptoCurrency.zen, + 45: CryptoCurrency.xvg + }; + static const mapFromString = { + 'xmr': CryptoCurrency.xmr, + 'ada': CryptoCurrency.ada, + 'bch': CryptoCurrency.bch, + 'bnb': CryptoCurrency.bnb, + 'btc': CryptoCurrency.btc, + 'dai': CryptoCurrency.dai, + 'dash': CryptoCurrency.dash, + 'eos': CryptoCurrency.eos, + 'eth': CryptoCurrency.eth, + 'ltc': CryptoCurrency.ltc, + 'nano': CryptoCurrency.nano, + 'trx': CryptoCurrency.trx, + 'usdt': CryptoCurrency.usdt, + 'usdterc20': CryptoCurrency.usdterc20, + 'xlm': CryptoCurrency.xlm, + 'xrp': CryptoCurrency.xrp, + 'xhv': CryptoCurrency.xhv, + 'xag': CryptoCurrency.xag, + 'xau': CryptoCurrency.xau, + 'xaud': CryptoCurrency.xaud, + 'xbtc': CryptoCurrency.xbtc, + 'xcad': CryptoCurrency.xcad, + 'xchf': CryptoCurrency.xchf, + 'xcny': CryptoCurrency.xcny, + 'xeur': CryptoCurrency.xeur, + 'xgbp': CryptoCurrency.xgbp, + 'xjpy': CryptoCurrency.xjpy, + 'xnok': CryptoCurrency.xnok, + 'xnzd': CryptoCurrency.xnzd, + 'xusd': CryptoCurrency.xusd, + 'ape': CryptoCurrency.ape, + 'avaxc': CryptoCurrency.avaxc, + 'btt': CryptoCurrency.btt, + 'bttbsc': CryptoCurrency.bttbsc, + 'doge': CryptoCurrency.doge, + 'firo': CryptoCurrency.firo, + 'usdttrc20': CryptoCurrency.usdttrc20, + 'hbar': CryptoCurrency.hbar, + 'sc': CryptoCurrency.sc, + 'sol': CryptoCurrency.sol, + 'usdc': CryptoCurrency.usdc, + 'usdcsol': CryptoCurrency.usdcsol, + 'zaddr': CryptoCurrency.zaddr, + 'zec': CryptoCurrency.zec, + 'zen': CryptoCurrency.zen, + 'xvg': CryptoCurrency.xvg + }; static CryptoCurrency deserialize({required int raw}) { - switch (raw) { - case 0: - return CryptoCurrency.xmr; - case 1: - return CryptoCurrency.ada; - case 2: - return CryptoCurrency.bch; - case 3: - return CryptoCurrency.bnb; - case 4: - return CryptoCurrency.btc; - case 5: - return CryptoCurrency.dai; - case 6: - return CryptoCurrency.dash; - case 7: - return CryptoCurrency.eos; - case 8: - return CryptoCurrency.eth; - case 9: - return CryptoCurrency.ltc; - case 10: - return CryptoCurrency.nano; - case 11: - return CryptoCurrency.trx; - case 12: - return CryptoCurrency.usdt; - case 13: - return CryptoCurrency.usdterc20; - case 14: - return CryptoCurrency.xlm; - case 15: - return CryptoCurrency.xrp; - case 16: - return CryptoCurrency.xhv; - case 17: - return CryptoCurrency.xag; - case 18: - return CryptoCurrency.xau; - case 19: - return CryptoCurrency.xaud; - case 20: - return CryptoCurrency.xbtc; - case 21: - return CryptoCurrency.xcad; - case 22: - return CryptoCurrency.xchf; - case 23: - return CryptoCurrency.xcny; - case 24: - return CryptoCurrency.xeur; - case 25: - return CryptoCurrency.xgbp; - case 26: - return CryptoCurrency.xjpy; - case 27: - return CryptoCurrency.xnok; - case 28: - return CryptoCurrency.xnzd; - case 29: - return CryptoCurrency.xusd; - case 30: - return CryptoCurrency.ape; - case 31: - return CryptoCurrency.avaxc; - case 32: - return CryptoCurrency.btt; - case 33: - return CryptoCurrency.bttbsc; - case 34: - return CryptoCurrency.doge; - case 35: - return CryptoCurrency.firo; - case 36: - return CryptoCurrency.usdttrc20; - case 37: - return CryptoCurrency.hbar; - case 38: - return CryptoCurrency.sc; - case 39: - return CryptoCurrency.sol; - case 40: - return CryptoCurrency.usdc; - case 41: - return CryptoCurrency.usdcsol; - case 42: - return CryptoCurrency.zaddr; - case 43: - return CryptoCurrency.zec; - case 44: - return CryptoCurrency.zen; - case 45: - return CryptoCurrency.xvg; - case 46: - return CryptoCurrency.usdcpoly; - case 47: - return CryptoCurrency.dcr; - case 48: - return CryptoCurrency.husd; - case 49: - return CryptoCurrency.kmd; - case 50: - return CryptoCurrency.mana; - case 51: - return CryptoCurrency.maticpoly; - case 52: - return CryptoCurrency.matic; - case 53: - return CryptoCurrency.mkr; - case 54: - return CryptoCurrency.near; - case 55: - return CryptoCurrency.oxt; - case 56: - return CryptoCurrency.paxg; - case 57: - return CryptoCurrency.pivx; - case 58: - return CryptoCurrency.rune; - case 59: - return CryptoCurrency.rvn; - case 60: - return CryptoCurrency.scrt; - case 61: - return CryptoCurrency.uni; - case 62: - return CryptoCurrency.stx; - default: - throw Exception('Unexpected token: $raw for CryptoCurrency deserialize'); + + if (CryptoCurrency.mapFromInt[raw] == null) { + final s = 'Unexpected token: $raw for CryptoCurrency deserialize'; + throw ArgumentError.value(raw, 'raw', s); } + return CryptoCurrency.mapFromInt[raw]!; } static CryptoCurrency fromString(String raw) { - switch (raw.toLowerCase()) { - case 'xmr': - return CryptoCurrency.xmr; - case 'ada': - return CryptoCurrency.ada; - case 'bch': - return CryptoCurrency.bch; - case 'bnbmainnet': - return CryptoCurrency.bnb; - case 'btc': - return CryptoCurrency.btc; - case 'dai': - return CryptoCurrency.dai; - case 'dash': - return CryptoCurrency.dash; - case 'eos': - return CryptoCurrency.eos; - case 'eth': - return CryptoCurrency.eth; - case 'ltc': - return CryptoCurrency.ltc; - case 'nano': - return CryptoCurrency.nano; - case 'trx': - return CryptoCurrency.trx; - case 'usdc': - return CryptoCurrency.usdc; - case 'usdterc20': - return CryptoCurrency.usdterc20; - case 'xlm': - return CryptoCurrency.xlm; - case 'xrp': - return CryptoCurrency.xrp; - case 'xhv': - return CryptoCurrency.xhv; - case 'xag': - return CryptoCurrency.xag; - case 'xau': - return CryptoCurrency.xau; - case 'xaud': - return CryptoCurrency.xaud; - case 'xbtc': - return CryptoCurrency.xbtc; - case 'xcad': - return CryptoCurrency.xcad; - case 'xchf': - return CryptoCurrency.xchf; - case 'xcny': - return CryptoCurrency.xcny; - case 'xeur': - return CryptoCurrency.xeur; - case 'xgbp': - return CryptoCurrency.xgbp; - case 'xjpy': - return CryptoCurrency.xjpy; - case 'xnok': - return CryptoCurrency.xnok; - case 'xnzd': - return CryptoCurrency.xnzd; - case 'xusd': - return CryptoCurrency.xusd; - case 'ape': - return CryptoCurrency.ape; - case 'avax': - return CryptoCurrency.avaxc; - case 'btt': - return CryptoCurrency.btt; - case 'bttbsc': - return CryptoCurrency.bttbsc; - case 'doge': - return CryptoCurrency.doge; - case 'firo': - return CryptoCurrency.firo; - case 'usdttrc20': - return CryptoCurrency.usdttrc20; - case 'hbar': - return CryptoCurrency.hbar; - case 'sc': - return CryptoCurrency.sc; - case 'sol': - return CryptoCurrency.sol; - case 'usdt': - return CryptoCurrency.usdt; - case 'usdcsol': - return CryptoCurrency.usdcsol; - case 'zaddr': - return CryptoCurrency.zaddr; - case 'zec': - return CryptoCurrency.zec; - case 'zen': - return CryptoCurrency.zen; - case 'xvg': - return CryptoCurrency.xvg; - case 'usdcpoly': - return CryptoCurrency.usdcpoly; - case 'dcr': - return CryptoCurrency.dcr; - case 'husd': - return CryptoCurrency.husd; - case 'kmd': - return CryptoCurrency.kmd; - case 'mana': - return CryptoCurrency.mana; - case 'maticpoly': - return CryptoCurrency.maticpoly; - case 'matic': - return CryptoCurrency.matic; - case 'mkr': - return CryptoCurrency.mkr; - case 'near': - return CryptoCurrency.near; - case 'oxt': - return CryptoCurrency.oxt; - case 'paxg': - return CryptoCurrency.paxg; - case 'pivx': - return CryptoCurrency.pivx; - case 'rune': - return CryptoCurrency.rune; - case 'rvn': - return CryptoCurrency.rvn; - case 'scrt': - return CryptoCurrency.scrt; - case 'uni': - return CryptoCurrency.uni; - case 'stx': - return CryptoCurrency.stx; - default: - throw Exception('Unexpected token: $raw for CryptoCurrency fromString'); + + if (CryptoCurrency.mapFromString[raw.toLowerCase()] == null) { + final s = 'Unexpected token: $raw for CryptoCurrency fromString'; + throw ArgumentError.value(raw, 'raw', s); } + return CryptoCurrency.mapFromString[raw.toLowerCase()]!; } @override From afa16fbe1c33a07b1b5ff5a8095ffa1f591634d0 Mon Sep 17 00:00:00 2001 From: Serhii Date: Mon, 24 Oct 2022 15:01:33 +0300 Subject: [PATCH 002/173] add new assets --- cw_core/lib/crypto_currency.dart | 38 ++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/cw_core/lib/crypto_currency.dart b/cw_core/lib/crypto_currency.dart index d348ebdd6..446c667fd 100644 --- a/cw_core/lib/crypto_currency.dart +++ b/cw_core/lib/crypto_currency.dart @@ -183,7 +183,24 @@ class CryptoCurrency extends EnumerableItem with Serializable { 42: CryptoCurrency.zaddr, 43: CryptoCurrency.zec, 44: CryptoCurrency.zen, - 45: CryptoCurrency.xvg + 45: CryptoCurrency.xvg, + 46: CryptoCurrency.usdcpoly, + 47: CryptoCurrency.dcr, + 48: CryptoCurrency.husd, + 49: CryptoCurrency.kmd, + 50: CryptoCurrency.mana, + 51: CryptoCurrency.maticpoly, + 52: CryptoCurrency.matic, + 53: CryptoCurrency.mkr, + 54: CryptoCurrency.near, + 55: CryptoCurrency.oxt, + 56: CryptoCurrency.paxg, + 57: CryptoCurrency.pivx, + 58: CryptoCurrency.rune, + 59: CryptoCurrency.rvn, + 60: CryptoCurrency.scrt, + 61: CryptoCurrency.uni, + 62: CryptoCurrency.stx }; static const mapFromString = { @@ -232,7 +249,24 @@ class CryptoCurrency extends EnumerableItem with Serializable { 'zaddr': CryptoCurrency.zaddr, 'zec': CryptoCurrency.zec, 'zen': CryptoCurrency.zen, - 'xvg': CryptoCurrency.xvg + 'xvg': CryptoCurrency.xvg, + 'usdcpoly': CryptoCurrency.usdcpoly, + 'dcr': CryptoCurrency.dcr, + 'husd': CryptoCurrency.husd, + 'kmd': CryptoCurrency.kmd, + 'mana': CryptoCurrency.mana, + 'maticpoly': CryptoCurrency.maticpoly, + 'matic': CryptoCurrency.matic, + 'mkr': CryptoCurrency.mkr, + 'near': CryptoCurrency.near, + 'oxt': CryptoCurrency.oxt, + 'paxg': CryptoCurrency.paxg, + 'pivx': CryptoCurrency.pivx, + 'rune': CryptoCurrency.rune, + 'rvn': CryptoCurrency.rvn, + 'scrt': CryptoCurrency.scrt, + 'uni': CryptoCurrency.uni, + 'stx': CryptoCurrency.stx }; static CryptoCurrency deserialize({required int raw}) { From dfb52223e02ba2c727c8f2561ea6bf388535a349 Mon Sep 17 00:00:00 2001 From: Serhii Date: Tue, 8 Nov 2022 17:49:51 +0200 Subject: [PATCH 003/173] fix increasing brightness brightness decreases after leaving "gift card barcode screen" --- lib/main.dart | 2 + .../cards/ionia_gift_card_detail_page.dart | 16 +++-- lib/utils/route_aware.dart | 65 +++++++++++++++++++ 3 files changed, 76 insertions(+), 7 deletions(-) create mode 100644 lib/utils/route_aware.dart diff --git a/lib/main.dart b/lib/main.dart index 3cd5679b3..035552eb7 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -40,6 +40,7 @@ import 'package:cake_wallet/wallet_type_utils.dart'; final navigatorKey = GlobalKey(); final rootKey = GlobalKey(); +final RouteObserver routeObserver = RouteObserver(); Future main() async { try { @@ -282,6 +283,7 @@ class AppState extends State with SingleTickerProviderStateMixin { authenticationStore: authenticationStore, navigatorKey: navigatorKey, child: MaterialApp( + navigatorObservers: [routeObserver], navigatorKey: navigatorKey, debugShowCheckedModeBanner: false, theme: settingsStore.theme, diff --git a/lib/src/screens/ionia/cards/ionia_gift_card_detail_page.dart b/lib/src/screens/ionia/cards/ionia_gift_card_detail_page.dart index 1c768fa17..d2ff358ee 100644 --- a/lib/src/screens/ionia/cards/ionia_gift_card_detail_page.dart +++ b/lib/src/screens/ionia/cards/ionia_gift_card_detail_page.dart @@ -11,6 +11,7 @@ import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart'; import 'package:cake_wallet/typography.dart'; import 'package:cake_wallet/utils/show_bar.dart'; import 'package:cake_wallet/utils/show_pop_up.dart'; +import 'package:cake_wallet/utils/route_aware.dart'; import 'package:cake_wallet/view_model/ionia/ionia_gift_card_details_view_model.dart'; import 'package:device_display_brightness/device_display_brightness.dart'; import 'package:flutter/material.dart'; @@ -47,10 +48,7 @@ class IoniaGiftCardDetailPage extends BasePage { //highlightColor: Colors.transparent, //splashColor: Colors.transparent, //padding: EdgeInsets.all(0), - onPressed: () { - onClose(context); - DeviceDisplayBrightness.setBrightness(viewModel.brightness); - }, + onPressed: ()=> onClose(context), child: _backButton), ), ), @@ -67,7 +65,6 @@ class IoniaGiftCardDetailPage extends BasePage { @override Widget body(BuildContext context) { - viewModel.increaseBrightness(); reaction((_) => viewModel.redeemState, (ExecutionState state) { if (state is FailureState) { WidgetsBinding.instance.addPostFrameCallback((_) { @@ -84,7 +81,12 @@ class IoniaGiftCardDetailPage extends BasePage { } }); - return ScrollableWithBottomSection( + return RouteAwareWidget( + pushToWidget: ()=> viewModel.increaseBrightness(), + pushToNextWidget: ()=> DeviceDisplayBrightness.setBrightness(viewModel.brightness), + popNextWidget: ()=> viewModel.increaseBrightness(), + popWidget: ()=> DeviceDisplayBrightness.setBrightness(viewModel.brightness), + child: ScrollableWithBottomSection( contentPadding: EdgeInsets.all(24), content: Column( children: [ @@ -163,7 +165,7 @@ class IoniaGiftCardDetailPage extends BasePage { }, ), ), - ); + )); } Widget buildIoniaTile(BuildContext context, {required String title, required String subTitle}) { diff --git a/lib/utils/route_aware.dart b/lib/utils/route_aware.dart new file mode 100644 index 000000000..28c72c4a4 --- /dev/null +++ b/lib/utils/route_aware.dart @@ -0,0 +1,65 @@ +import 'package:flutter/material.dart'; +import 'package:cake_wallet/main.dart'; + +class RouteAwareWidget extends StatefulWidget { + RouteAwareWidget( + {required this.child, + this.pushToWidget, + this.pushToNextWidget, + this.popWidget, + this.popNextWidget}); + + final Widget child; + final Function()? pushToWidget; + final Function()? pushToNextWidget; + final Function()? popWidget; + final Function()? popNextWidget; + + @override + State createState() => RouteAwareWidgetState(); +} + +class RouteAwareWidgetState extends State with RouteAware { + @override + void didChangeDependencies() { + super.didChangeDependencies(); + routeObserver.subscribe(this, ModalRoute.of(context) as PageRoute); + } + + @override + void dispose() { + routeObserver.unsubscribe(this); + super.dispose(); + } + + @override + void didPush() { + if (widget.pushToWidget != null) { + widget.pushToWidget!(); + } + } + + @override + void didPushNext() { + if (widget.pushToNextWidget != null) { + widget.pushToNextWidget!(); + } + } + + @override + void didPop() { + if (widget.popWidget != null) { + widget.popWidget!(); + } + } + + @override + void didPopNext() { + if (widget.popNextWidget != null) { + widget.popNextWidget!(); + } + } + + @override + Widget build(BuildContext context) => widget.child; +} From 1f08d8747159a6455a637544714bf69bf9d9eb8b Mon Sep 17 00:00:00 2001 From: Serhii Date: Thu, 10 Nov 2022 13:25:03 +0200 Subject: [PATCH 004/173] Rework filter on the transactions list screen --- .../exchange_provider_description.dart | 5 + .../dashboard/widgets/filter_tile.dart | 7 +- .../dashboard/widgets/filter_widget.dart | 231 ++++++++++-------- lib/src/widgets/rounded_checkbox.dart | 91 +++++++ lib/store/dashboard/trade_filter_store.dart | 82 ++++--- .../dashboard/transaction_filter_store.dart | 57 +++-- .../dashboard/dashboard_view_model.dart | 28 ++- lib/view_model/dashboard/filter_item.dart | 6 +- 8 files changed, 350 insertions(+), 157 deletions(-) create mode 100644 lib/src/widgets/rounded_checkbox.dart diff --git a/lib/exchange/exchange_provider_description.dart b/lib/exchange/exchange_provider_description.dart index f9e359454..2fd231085 100644 --- a/lib/exchange/exchange_provider_description.dart +++ b/lib/exchange/exchange_provider_description.dart @@ -24,6 +24,9 @@ class ExchangeProviderDescription extends EnumerableItem static const simpleSwap = ExchangeProviderDescription(title: 'SimpleSwap', raw: 4, image: 'assets/images/simpleSwap.png'); + static const all = + ExchangeProviderDescription(title: 'All trades', raw: 5, image:''); + static ExchangeProviderDescription deserialize({required int raw}) { switch (raw) { case 0: @@ -36,6 +39,8 @@ class ExchangeProviderDescription extends EnumerableItem return sideShift; case 4: return simpleSwap; + case 5: + return all; default: throw Exception('Unexpected token: $raw for ExchangeProviderDescription deserialize'); } diff --git a/lib/src/screens/dashboard/widgets/filter_tile.dart b/lib/src/screens/dashboard/widgets/filter_tile.dart index 9a5646ac9..3be96073a 100644 --- a/lib/src/screens/dashboard/widgets/filter_tile.dart +++ b/lib/src/screens/dashboard/widgets/filter_tile.dart @@ -9,12 +9,7 @@ class FilterTile extends StatelessWidget { Widget build(BuildContext context) { return Container( width: double.infinity, - padding: EdgeInsets.only( - top: 18, - bottom: 18, - left: 24, - right: 24 - ), + padding: EdgeInsets.symmetric(vertical: 8.0, horizontal: 24.0), child: child, ); } diff --git a/lib/src/screens/dashboard/widgets/filter_widget.dart b/lib/src/screens/dashboard/widgets/filter_widget.dart index 98d5add81..8719df562 100644 --- a/lib/src/screens/dashboard/widgets/filter_widget.dart +++ b/lib/src/screens/dashboard/widgets/filter_widget.dart @@ -6,20 +6,21 @@ 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'; -import 'package:cake_wallet/src/widgets/checkbox_widget.dart'; +import 'package:cake_wallet/src/widgets/rounded_checkbox.dart'; import 'package:cake_wallet/generated/i18n.dart'; +import 'package:flutter_mobx/flutter_mobx.dart'; //import 'package:date_range_picker/date_range_picker.dart' as date_rage_picker; class FilterWidget extends StatelessWidget { FilterWidget({required this.dashboardViewModel}); final DashboardViewModel dashboardViewModel; - final backVector = Image.asset('assets/images/back_vector.png', - color: Palette.darkBlueCraiola - ); + final closeIcon = + Image.asset('assets/images/close.png', color: Palette.darkBlueCraiola); @override Widget build(BuildContext context) { + const sectionDivider = SectionDivider(); return AlertBackground( child: Stack( alignment: Alignment.center, @@ -38,118 +39,150 @@ class FilterWidget extends StatelessWidget { ), ), Padding( - padding: EdgeInsets.only( - left: 24, - right: 24, - top: 24 - ), + padding: EdgeInsets.only(left: 24, right: 24, top: 24), child: ClipRRect( - borderRadius: BorderRadius.all(Radius.circular(14)), + borderRadius: BorderRadius.all(Radius.circular(24)), child: Container( - color: Theme.of(context).textTheme!.bodyText1!.decorationColor!, - child: ListView.separated( - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), - itemCount: dashboardViewModel.filterItems.length, - separatorBuilder: (context, _) => Container( - height: 1, - color: Theme.of(context).accentTextTheme!.subtitle1!.backgroundColor!, - ), - itemBuilder: (_, index1) { - final title = dashboardViewModel.filterItems.keys.elementAt(index1); - final section = dashboardViewModel.filterItems.values.elementAt(index1); - - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: EdgeInsets.only( - top: 20, - left: 24, - right: 24 - ), - child: Text( - title, - style: TextStyle( - color: Theme.of(context).accentTextTheme!.subtitle1!.color!, - fontSize: 16, - fontWeight: FontWeight.w500, - fontFamily: 'Lato', - decoration: TextDecoration.none - ), + color: Theme.of(context) + .textTheme! + .bodyText1! + .decorationColor!, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: EdgeInsets.all(24.0), + child: Text( + S.of(context).filters, + style: TextStyle( + color: Theme.of(context) + .textTheme! + .bodyText1! + .decorationColor!, + fontSize: 16, + fontFamily: 'Lato', + decoration: TextDecoration.none, ), ), - ListView.separated( - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), - itemCount: section.length, - separatorBuilder: (context, _) => Container( - height: 1, - padding: EdgeInsets.only(left: 24), - color: Theme.of(context).textTheme!.bodyText1!.decorationColor!, - child: Container( - height: 1, - color: Theme.of(context).accentTextTheme!.subtitle1!.backgroundColor!, - ), - ), - itemBuilder: (_, index2) { - - final item = section[index2]; - final content = item.onChanged != null - ? CheckboxWidget( - value: item.value(), - caption: item.caption, - onChanged: item.onChanged - ) - : GestureDetector( - onTap: () async { - //final List picked = - //await date_rage_picker.showDatePicker( - // context: context, - // initialFirstDate: DateTime.now() - // .subtract(Duration(days: 1)), - // initialLastDate: (DateTime.now()), - // firstDate: DateTime(2015), - // lastDate: DateTime.now() - // .add(Duration(days: 1))); - - //if (picked != null && picked.length == 2) { - // dashboardViewModel.transactionFilterStore - // .changeStartDate(picked.first); - // dashboardViewModel.transactionFilterStore - // .changeEndDate(picked.last); - //} - }, - child: Padding( - padding: EdgeInsets.only(left: 32), + ), + sectionDivider, + ListView.separated( + padding: EdgeInsets.zero, + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + itemCount: dashboardViewModel.filterItems.length, + separatorBuilder: (context, _) => sectionDivider, + itemBuilder: (_, index1) { + final title = dashboardViewModel.filterItems.keys + .elementAt(index1); + final section = dashboardViewModel + .filterItems.values + .elementAt(index1); + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: EdgeInsets.only( + top: 20, left: 24, right: 24), child: Text( - item.caption, + title, style: TextStyle( - color: Theme.of(context).primaryTextTheme!.headline6!.color!, - fontSize: 18, + color: Theme.of(context) + .primaryTextTheme! + .headline6! + .color!, + fontSize: 16, fontFamily: 'Lato', - fontWeight: FontWeight.w500, - decoration: TextDecoration.none - ), + fontWeight: FontWeight.bold, + decoration: TextDecoration.none), ), ), - ); + ListView.builder( + padding: + EdgeInsets.symmetric(vertical: 8.0), + shrinkWrap: true, + physics: + const NeverScrollableScrollPhysics(), + itemCount: section.length, + itemBuilder: (_, index2) { + final item = section[index2]; + final content = item.onChanged != null + ? Observer( + builder: (_) => + RoundedCheckboxWidget( + value: item.value.value, + caption: item.caption, + onChanged: item.onChanged, + currentTheme: + dashboardViewModel + .settingsStore + .currentTheme, + )) + : GestureDetector( + onTap: () async { + //final List picked = + //await date_rage_picker.showDatePicker( + // context: context, + // initialFirstDate: DateTime.now() + // .subtract(Duration(days: 1)), + // initialLastDate: (DateTime.now()), + // firstDate: DateTime(2015), + // lastDate: DateTime.now() + // .add(Duration(days: 1))); - return FilterTile(child: content); - }, - ) - ], - ); - }, - ), + //if (picked != null && picked.length == 2) { + // dashboardViewModel.transactionFilterStore + // .changeStartDate(picked.first); + // dashboardViewModel.transactionFilterStore + // .changeEndDate(picked.last); + //} + }, + child: Padding( + padding: + EdgeInsets.only(left: 32), + child: Text( + item.caption, + style: TextStyle( + color: Colors.red, + //Theme.of(context).primaryTextTheme.title.color,// + fontSize: 18, + fontFamily: 'Lato', + fontWeight: + FontWeight.w500, + decoration: + TextDecoration.none), + ), + ), + ); + + return FilterTile(child: content); + }, + ) + ], + ); + }, + ), + ]), ), ), ), ], ), - AlertCloseButton(image: backVector) + AlertCloseButton(image: closeIcon) ], ), ); } +} + +class SectionDivider extends StatelessWidget { + const SectionDivider(); + + @override + Widget build(BuildContext context) { + return Container( + height: 1, + color: Colors.red,//Fixme Theme.of(context).accentTextTheme.subhead.backgroundColor, + ); + } } \ No newline at end of file diff --git a/lib/src/widgets/rounded_checkbox.dart b/lib/src/widgets/rounded_checkbox.dart new file mode 100644 index 000000000..6e5b08f1e --- /dev/null +++ b/lib/src/widgets/rounded_checkbox.dart @@ -0,0 +1,91 @@ +import 'package:cake_wallet/palette.dart'; +import 'package:flutter/material.dart'; +import 'package:cake_wallet/themes/theme_base.dart'; + +class RoundedCheckboxWidget extends StatelessWidget { + RoundedCheckboxWidget( + {required this.value, + required this.caption, + required this.onChanged, + this.currentTheme}); + + final bool value; + final String caption; + final Function onChanged; + final ThemeBase? currentTheme; + + bool get darkTheme => currentTheme!.type == ThemeType.dark; + + @override + Widget build(BuildContext context) { + + final baseGradient = LinearGradient(colors: [ + Colors.red, //Fixme Theme.of(context).primaryTextTheme!.subtitle!.color!, + Colors.red //Fixme Theme.of(context).primaryTextTheme!.subtitle!.decorationColor!, + ], begin: Alignment.centerLeft, end: Alignment.centerRight); + + final darkThemeGradient = LinearGradient(colors: [ + Palette.blueCraiola, + Palette.blueGreyCraiola, + ], begin: Alignment.topLeft, end: Alignment.bottomRight); + + final gradient = darkTheme ? darkThemeGradient : baseGradient; + + final uncheckedColor = darkTheme + ? Colors.red //Fixme Theme.of(context).accentTextTheme.subhead.decorationColor + : Colors.white; + + final borderColor = darkTheme + ? Colors.red //Fixme Theme.of(context).accentTextTheme.subtitle.backgroundColor + : Colors.transparent; + + final checkedOuterBoxDecoration = + BoxDecoration(shape: BoxShape.circle, gradient: gradient); + final outerBoxDecoration = BoxDecoration( + shape: BoxShape.circle, + color: Theme.of(context).accentTextTheme.overline!.color!, + border: Border.all(color: borderColor)); + + final checkedInnerBoxDecoration = + BoxDecoration(shape: BoxShape.circle, color: Colors.white); + final innerBoxDecoration = + BoxDecoration(shape: BoxShape.circle, color: uncheckedColor); + + return GestureDetector( + onTap: () => onChanged(), + child: Row( + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Container( + height: 24.0, + width: 24.0, + child: DecoratedBox( + decoration: + value ? checkedOuterBoxDecoration : outerBoxDecoration, + child: Padding( + padding: EdgeInsets.all(value ? 4.0 : 1.0), + child: DecoratedBox( + decoration: + value ? checkedInnerBoxDecoration : innerBoxDecoration, + ), + ), + ), + ), + Padding( + padding: EdgeInsets.only(left: 16), + child: Text( + caption, + style: TextStyle( + color: Colors.red, //Fixme Theme.of(context).primaryTextTheme.title.color, + fontSize: 18, + fontFamily: 'Lato', + fontWeight: FontWeight.w500, + decoration: TextDecoration.none), + ), + ) + ], + ), + ); + } +} \ No newline at end of file diff --git a/lib/store/dashboard/trade_filter_store.dart b/lib/store/dashboard/trade_filter_store.dart index bee63b21e..4319c3bc7 100644 --- a/lib/store/dashboard/trade_filter_store.dart +++ b/lib/store/dashboard/trade_filter_store.dart @@ -8,39 +8,61 @@ part'trade_filter_store.g.dart'; class TradeFilterStore = TradeFilterStoreBase with _$TradeFilterStore; abstract class TradeFilterStoreBase with Store { - TradeFilterStoreBase( - {this.displayXMRTO = true, - this.displayChangeNow = true, - this.displayMorphToken = true, - this.displaySimpleSwap = true, - }); + TradeFilterStoreBase(); - @observable - bool displayXMRTO; - - @observable - bool displayChangeNow; - - @observable - bool displayMorphToken; - - @observable - bool displaySimpleSwap; + Observable displayXMRTO = Observable(true); + Observable displayAllTrades = Observable(true); + Observable displayChangeNow = Observable(true); + Observable displaySideShift = Observable(true); + Observable displayMorphToken = Observable(true); + Observable displaySimpleSwap = Observable(true); @action void toggleDisplayExchange(ExchangeProviderDescription provider) { switch (provider) { case ExchangeProviderDescription.changeNow: - displayChangeNow = !displayChangeNow; + displayAllTrades.value = false; + displayChangeNow.value = !displayChangeNow.value; + if (displayChangeNow.value && displaySideShift.value && displaySimpleSwap.value) { + displayAllTrades.value = true; + } break; - case ExchangeProviderDescription.xmrto: - displayXMRTO = !displayXMRTO; - break; - case ExchangeProviderDescription.morphToken: - displayMorphToken = !displayMorphToken; + case ExchangeProviderDescription.sideShift: + displayAllTrades.value = false; + displaySideShift.value = !displaySideShift.value; + if (displayChangeNow.value && displaySideShift.value && displaySimpleSwap.value) { + displayAllTrades.value = true; + } break; case ExchangeProviderDescription.simpleSwap: - displaySimpleSwap = !displaySimpleSwap; + displayAllTrades.value = false; + displaySimpleSwap.value = !displaySimpleSwap.value; + if (displayChangeNow.value && displaySideShift.value && displaySimpleSwap.value) { + displayAllTrades.value = true; + } + break; + case ExchangeProviderDescription.xmrto: + displayXMRTO.value = !displayXMRTO.value; + break; + case ExchangeProviderDescription.morphToken: + displayMorphToken.value = !displayMorphToken.value; + break; + case ExchangeProviderDescription.all: + displayAllTrades.value = !displayAllTrades.value; + if (displayAllTrades.value) { + displayChangeNow.value = true; + displaySideShift.value = true; + displayXMRTO.value = true; + displayMorphToken.value = true; + displaySimpleSwap.value = true; + } + if (!displayAllTrades.value) { + displayChangeNow.value = false; + displaySideShift.value = false; + displayXMRTO.value = false; + displayMorphToken.value = false; + displaySimpleSwap.value = false; + } break; } } @@ -48,20 +70,22 @@ abstract class TradeFilterStoreBase with Store { List filtered({required List trades, required WalletBase wallet}) { final _trades = trades.where((item) => item.trade.walletId == wallet.id).toList(); - final needToFilter = !displayChangeNow || !displayXMRTO || !displayMorphToken || !displaySimpleSwap; + final needToFilter = !displayChangeNow.value || !displaySideShift.value + || !displayXMRTO.value || !displayMorphToken.value + || !displaySimpleSwap.value; return needToFilter ? _trades .where((item) => - (displayXMRTO && + (displayXMRTO.value && item.trade.provider == ExchangeProviderDescription.xmrto) || - (displayChangeNow && + (displayChangeNow.value && item.trade.provider == ExchangeProviderDescription.changeNow) || - (displayMorphToken && + (displayMorphToken.value && item.trade.provider == ExchangeProviderDescription.morphToken) - ||(displaySimpleSwap && + ||(displaySimpleSwap.value && item.trade.provider == ExchangeProviderDescription.simpleSwap)) .toList() diff --git a/lib/store/dashboard/transaction_filter_store.dart b/lib/store/dashboard/transaction_filter_store.dart index 4444075b7..4198f7d8c 100644 --- a/lib/store/dashboard/transaction_filter_store.dart +++ b/lib/store/dashboard/transaction_filter_store.dart @@ -1,6 +1,8 @@ import 'package:mobx/mobx.dart'; import 'package:cw_core/transaction_direction.dart'; import 'package:cake_wallet/view_model/dashboard/transaction_list_item.dart'; +import 'package:cake_wallet/view_model/dashboard/filter_item.dart'; +import 'package:cake_wallet/generated/i18n.dart'; part 'transaction_filter_store.g.dart'; @@ -8,14 +10,11 @@ class TransactionFilterStore = TransactionFilterStoreBase with _$TransactionFilterStore; abstract class TransactionFilterStoreBase with Store { - TransactionFilterStoreBase( - {this.displayIncoming = true, this.displayOutgoing = true}); + TransactionFilterStoreBase(); - @observable - bool displayIncoming; - - @observable - bool displayOutgoing; + Observable displayAll = Observable(true); + Observable displayIncoming = Observable(true); + Observable displayOutgoing = Observable(true); @observable DateTime? startDate; @@ -24,10 +23,40 @@ abstract class TransactionFilterStoreBase with Store { DateTime? endDate; @action - void toggleIncoming() => displayIncoming = !displayIncoming; + void toggleIAll() { + displayAll.value = (!displayAll.value); + if (displayAll.value) { + displayOutgoing.value = true; + displayIncoming.value = true; + } + if (!displayAll.value) { + displayOutgoing.value = false; + displayIncoming.value = false; + } + } @action - void toggleOutgoing() => displayOutgoing = !displayOutgoing; + void toggleIncoming() { + displayIncoming.value = (!displayIncoming.value); + if (displayIncoming.value && displayOutgoing.value) { + displayAll.value = true; + } + if (!displayIncoming.value || !displayOutgoing.value) { + displayAll.value = false; + } + } + + + @action + void toggleOutgoing() { + displayOutgoing.value = (!displayOutgoing.value); + if (displayIncoming.value && displayOutgoing.value) { + displayAll.value = true; + } + if (!displayIncoming.value || !displayOutgoing.value) { + displayAll.value = false; + } + } @action void changeStartDate(DateTime date) => startDate = date; @@ -37,8 +66,8 @@ abstract class TransactionFilterStoreBase with Store { List filtered({required List transactions}) { var _transactions = []; - final needToFilter = !displayOutgoing || - !displayIncoming || + final needToFilter = !displayOutgoing.value || + !displayIncoming.value || (startDate != null && endDate != null); if (needToFilter) { @@ -50,11 +79,11 @@ abstract class TransactionFilterStoreBase with Store { && (endDate?.isAfter(item.transaction.date) ?? false); } - if (allowed && (!displayOutgoing || !displayIncoming)) { - allowed = (displayOutgoing && + if (allowed && (!displayOutgoing.value || !displayIncoming.value)) { + allowed = (displayOutgoing.value && item.transaction.direction == TransactionDirection.outgoing) || - (displayIncoming && + (displayIncoming.value && item.transaction.direction == TransactionDirection.incoming); } diff --git a/lib/view_model/dashboard/dashboard_view_model.dart b/lib/view_model/dashboard/dashboard_view_model.dart index 49dd2437a..d736769e2 100644 --- a/lib/view_model/dashboard/dashboard_view_model.dart +++ b/lib/view_model/dashboard/dashboard_view_model.dart @@ -60,13 +60,17 @@ abstract class DashboardViewModelBase with Store { filterItems = { S.current.transactions: [ FilterItem( - value: () => transactionFilterStore.displayIncoming, - caption: S.current.incoming, - onChanged: (value) => transactionFilterStore.toggleIncoming()), + value: transactionFilterStore.displayAll, + caption: 'S.current.all_transactions',//Fixme + onChanged: () => transactionFilterStore.toggleIAll()), FilterItem( - value: () => transactionFilterStore.displayOutgoing, + value: transactionFilterStore.displayIncoming, + caption: S.current.incoming, + onChanged: () => transactionFilterStore.toggleIncoming()), + FilterItem( + value: transactionFilterStore.displayOutgoing, caption: S.current.outgoing, - onChanged: (value) => transactionFilterStore.toggleOutgoing()), + onChanged: () => transactionFilterStore.toggleOutgoing()), // FilterItem( // value: () => false, // caption: S.current.transactions_by_date, @@ -74,10 +78,20 @@ abstract class DashboardViewModelBase with Store { ], S.current.trades: [ FilterItem( - value: () => tradeFilterStore.displayChangeNow, + value: tradeFilterStore.displayAllTrades, + caption: 'S.current.all_trades',//Fixme + onChanged: () => tradeFilterStore + .toggleDisplayExchange(ExchangeProviderDescription.all)), + FilterItem( + value: tradeFilterStore.displayChangeNow, caption: 'Change.NOW', - onChanged: (value) => tradeFilterStore + onChanged: () => tradeFilterStore .toggleDisplayExchange(ExchangeProviderDescription.changeNow)), + FilterItem( + value: tradeFilterStore.displaySideShift, + caption: 'SideShift', + onChanged: () => tradeFilterStore + .toggleDisplayExchange(ExchangeProviderDescription.sideShift)), ] }, subname = '', diff --git a/lib/view_model/dashboard/filter_item.dart b/lib/view_model/dashboard/filter_item.dart index 0230899b4..8bc0f0bf1 100644 --- a/lib/view_model/dashboard/filter_item.dart +++ b/lib/view_model/dashboard/filter_item.dart @@ -1,10 +1,12 @@ +import 'package:mobx/mobx.dart'; + class FilterItem { FilterItem({ required this.value, required this.caption, required this.onChanged}); - bool Function() value; + Observable value; String caption; - Function(bool) onChanged; + Function onChanged; } \ No newline at end of file From 4269f18d013162b7fec61e5b0f37dc77fee00a86 Mon Sep 17 00:00:00 2001 From: Serhii Date: Thu, 10 Nov 2022 16:43:01 +0200 Subject: [PATCH 005/173] fix colors --- .../dashboard/widgets/filter_widget.dart | 18 +++--------------- lib/src/widgets/rounded_checkbox.dart | 10 +++++----- 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/lib/src/screens/dashboard/widgets/filter_widget.dart b/lib/src/screens/dashboard/widgets/filter_widget.dart index 8719df562..10bda6798 100644 --- a/lib/src/screens/dashboard/widgets/filter_widget.dart +++ b/lib/src/screens/dashboard/widgets/filter_widget.dart @@ -28,16 +28,6 @@ class FilterWidget extends StatelessWidget { Column( mainAxisSize: MainAxisSize.min, children: [ - Text( - S.of(context).filters, - style: TextStyle( - color: Colors.white, - fontSize: 18, - fontWeight: FontWeight.bold, - fontFamily: 'Lato', - decoration: TextDecoration.none, - ), - ), Padding( padding: EdgeInsets.only(left: 24, right: 24, top: 24), child: ClipRRect( @@ -55,10 +45,8 @@ class FilterWidget extends StatelessWidget { child: Text( S.of(context).filters, style: TextStyle( - color: Theme.of(context) - .textTheme! - .bodyText1! - .decorationColor!, + color: Theme.of(context).primaryTextTheme + .overline!.color!, fontSize: 16, fontFamily: 'Lato', decoration: TextDecoration.none, @@ -182,7 +170,7 @@ class SectionDivider extends StatelessWidget { Widget build(BuildContext context) { return Container( height: 1, - color: Colors.red,//Fixme Theme.of(context).accentTextTheme.subhead.backgroundColor, + color: Theme.of(context).dividerColor, ); } } \ No newline at end of file diff --git a/lib/src/widgets/rounded_checkbox.dart b/lib/src/widgets/rounded_checkbox.dart index 6e5b08f1e..1bdfb267d 100644 --- a/lib/src/widgets/rounded_checkbox.dart +++ b/lib/src/widgets/rounded_checkbox.dart @@ -20,8 +20,8 @@ class RoundedCheckboxWidget extends StatelessWidget { Widget build(BuildContext context) { final baseGradient = LinearGradient(colors: [ - Colors.red, //Fixme Theme.of(context).primaryTextTheme!.subtitle!.color!, - Colors.red //Fixme Theme.of(context).primaryTextTheme!.subtitle!.decorationColor!, + Theme.of(context).primaryTextTheme.subtitle1!.color!, + Theme.of(context).primaryTextTheme.subtitle1!.decorationColor!, ], begin: Alignment.centerLeft, end: Alignment.centerRight); final darkThemeGradient = LinearGradient(colors: [ @@ -32,11 +32,11 @@ class RoundedCheckboxWidget extends StatelessWidget { final gradient = darkTheme ? darkThemeGradient : baseGradient; final uncheckedColor = darkTheme - ? Colors.red //Fixme Theme.of(context).accentTextTheme.subhead.decorationColor + ? Theme.of(context).primaryTextTheme.subtitle1!.decorationColor! : Colors.white; final borderColor = darkTheme - ? Colors.red //Fixme Theme.of(context).accentTextTheme.subtitle.backgroundColor + ? Theme.of(context).accentTextTheme.subtitle2!.backgroundColor! : Colors.transparent; final checkedOuterBoxDecoration = @@ -77,7 +77,7 @@ class RoundedCheckboxWidget extends StatelessWidget { child: Text( caption, style: TextStyle( - color: Colors.red, //Fixme Theme.of(context).primaryTextTheme.title.color, + color: Theme.of(context).primaryTextTheme.headline6!.color!, fontSize: 18, fontFamily: 'Lato', fontWeight: FontWeight.w500, From bf86fd6ed08890ef62a7b320d4d7b3595eb1ea68 Mon Sep 17 00:00:00 2001 From: Serhii Date: Thu, 10 Nov 2022 17:38:23 +0200 Subject: [PATCH 006/173] update localization --- lib/view_model/dashboard/dashboard_view_model.dart | 4 ++-- res/values/strings_de.arb | 6 ++++-- res/values/strings_en.arb | 6 ++++-- res/values/strings_es.arb | 6 ++++-- res/values/strings_fr.arb | 6 ++++-- res/values/strings_hi.arb | 6 ++++-- res/values/strings_hr.arb | 6 ++++-- res/values/strings_it.arb | 6 ++++-- res/values/strings_ja.arb | 6 ++++-- res/values/strings_ko.arb | 6 ++++-- res/values/strings_nl.arb | 6 ++++-- res/values/strings_pl.arb | 6 ++++-- res/values/strings_pt.arb | 6 ++++-- res/values/strings_ru.arb | 6 ++++-- res/values/strings_uk.arb | 6 ++++-- res/values/strings_zh.arb | 4 +++- 16 files changed, 61 insertions(+), 31 deletions(-) diff --git a/lib/view_model/dashboard/dashboard_view_model.dart b/lib/view_model/dashboard/dashboard_view_model.dart index d736769e2..c1d57e241 100644 --- a/lib/view_model/dashboard/dashboard_view_model.dart +++ b/lib/view_model/dashboard/dashboard_view_model.dart @@ -61,7 +61,7 @@ abstract class DashboardViewModelBase with Store { S.current.transactions: [ FilterItem( value: transactionFilterStore.displayAll, - caption: 'S.current.all_transactions',//Fixme + caption: S.current.all_transactions, onChanged: () => transactionFilterStore.toggleIAll()), FilterItem( value: transactionFilterStore.displayIncoming, @@ -79,7 +79,7 @@ abstract class DashboardViewModelBase with Store { S.current.trades: [ FilterItem( value: tradeFilterStore.displayAllTrades, - caption: 'S.current.all_trades',//Fixme + caption: S.current.all_trades, onChanged: () => tradeFilterStore .toggleDisplayExchange(ExchangeProviderDescription.all)), FilterItem( diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index 685d817d5..36f3b5172 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -48,7 +48,7 @@ "outgoing" : "Ausgehend", "transactions_by_date" : "Transaktionen nach Datum", "trades" : "Börsen", - "filters" : "Filter", + "filters" : "Filtern nach", "today" : "Heute", "yesterday" : "Gestern", "received" : "Empfangen", @@ -651,5 +651,7 @@ "ignor": "Ignorieren", "use_suggested": "Vorgeschlagen verwenden", "do_not_share_warning_text" : "Teilen Sie diese nicht mit anderen, einschließlich des Supports.\n\nSie werden Ihr Geld stehlen!", - "help": "hilfe" + "help": "hilfe", + "all_transactions": "Alle Transaktionen", + "all_trades": "Alle Gewerke" } diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index 877d09231..694de99c3 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -48,7 +48,7 @@ "outgoing" : "Outgoing", "transactions_by_date" : "Transactions by date", "trades" : "Trades", - "filters" : "Filter", + "filters" : "Filter by", "today" : "Today", "yesterday" : "Yesterday", "received" : "Received", @@ -651,5 +651,7 @@ "ignor": "Ignore", "use_suggested": "Use Suggested", "do_not_share_warning_text" : "Do not share these with anyone else, including support.\n\nThey will steal your money!", - "help": "help" + "help": "help", + "all_transactions": "All transactions", + "all_trades": "All trades" } diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb index 505f3ffa8..b3af2a5c7 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -48,7 +48,7 @@ "outgoing" : "Saliente", "transactions_by_date" : "Transacciones por fecha", "trades" : "Cambios", - "filters" : "Filtrar", + "filters" : "Filtrado por", "today" : "Hoy", "yesterday" : "Ayer", "received" : "Recibido", @@ -651,5 +651,7 @@ "ignor": "Pasar por alto", "use_suggested": "Usar sugerido", "do_not_share_warning_text" : "No comparta estos con nadie más, incluido el soporte.\n\n¡Te robarán tu dinero!", - "help": "ayuda" + "help": "ayuda", + "all_transactions": "Todas las transacciones", + "all_trades": "Todos los oficios" } diff --git a/res/values/strings_fr.arb b/res/values/strings_fr.arb index 941016c0b..aa50a4859 100644 --- a/res/values/strings_fr.arb +++ b/res/values/strings_fr.arb @@ -46,7 +46,7 @@ "outgoing" : "Sortantes", "transactions_by_date" : "Transactions par date", "trades" : "Échanges", - "filters" : "Filtre", + "filters" : "Filtrer par", "today" : "Aujourd'hui", "yesterday" : "Hier", "received" : "Reçus", @@ -649,5 +649,7 @@ "ignor": "Ignorer", "use_suggested": "Utilisation suggérée", "do_not_share_warning_text" : "Ne les partagez avec personne d'autre, y compris avec l'assistance.\n\nIls vont voler votre argent!", - "help": "aider" + "help": "aider", + "all_transactions": "Toutes transactions", + "all_trades": "Tous métiers" } diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb index 7faa06f7f..f64e1c42c 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -48,7 +48,7 @@ "outgoing" : "निवर्तमान", "transactions_by_date" : "तारीख से लेन-देन", "trades" : "ट्रेडों", - "filters" : "फ़िल्टर", + "filters" : "के द्वारा छनित", "today" : "आज", "yesterday" : "बिता कल", "received" : "प्राप्त किया", @@ -651,5 +651,7 @@ "ignor": "नज़रअंदाज़ करना", "use_suggested": "सुझाए गए का प्रयोग करें", "do_not_share_warning_text" : "इन्हें समर्थन सहित किसी और के साथ साझा न करें।\n\nवे आपका पैसा चुरा लेंगे!", - "help": "मदद करना" + "help": "मदद करना", + "all_transactions": "सभी लेन - देन", + "all_trades": "सभी व्यापार" } diff --git a/res/values/strings_hr.arb b/res/values/strings_hr.arb index 4fa77948a..94668ff47 100644 --- a/res/values/strings_hr.arb +++ b/res/values/strings_hr.arb @@ -48,7 +48,7 @@ "outgoing" : "Odlazno", "transactions_by_date" : "Transakcije prema datumu", "trades" : "Razmjene", - "filters" : "Filter", + "filters" : "Filtrirati po", "today" : "Danas", "yesterday" : "Jučer", "received" : "Primljeno", @@ -651,5 +651,7 @@ "ignor": "Zanemariti", "use_suggested": "Koristite predloženo", "do_not_share_warning_text" : "Nemojte ih dijeliti ni s kim, uključujući podršku.\n\nUkrast će vam novac!", - "help": "pomozite" + "help": "pomozite", + "all_transactions": "Sve transakcije", + "all_trades": "Svi obrti" } diff --git a/res/values/strings_it.arb b/res/values/strings_it.arb index 9a42a588b..c8016f481 100644 --- a/res/values/strings_it.arb +++ b/res/values/strings_it.arb @@ -48,7 +48,7 @@ "outgoing" : "In uscita", "transactions_by_date" : "Transazioni per data", "trades" : "Scambi", - "filters" : "Filtri", + "filters" : "Filtrirati po", "today" : "Oggi", "yesterday" : "Ieri", "received" : "Ricevuto", @@ -651,5 +651,7 @@ "ignor": "Ignorare", "use_suggested": "Usa suggerito", "do_not_share_warning_text" : "Non condividerli con nessun altro, incluso il supporto.\n\nTi ruberanno i soldi!", - "help": "aiuto" + "help": "aiuto", + "all_transactions": "Sve transakcije", + "all_trades": "Svi obrti" } diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb index c1d0de4e3..220e4f5df 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -48,7 +48,7 @@ "outgoing" : "発信", "transactions_by_date" : "日付ごとの取引", "trades" : "取引", - "filters" : "フィルタ", + "filters" : "でフィルタリング", "today" : "今日", "yesterday" : "昨日", "received" : "受け取った", @@ -651,5 +651,7 @@ "ignor": "無視", "use_suggested": "推奨を使用", "do_not_share_warning_text" : "サポートを含め、これらを他の誰とも共有しないでください。\n\n彼らはあなたのお金を盗みます!", - "help": "ヘルプ" + "help": "ヘルプ", + "all_transactions": "全取引", + "all_trades": "すべての取引" } diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb index 127aa949e..1bef56dbc 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -48,7 +48,7 @@ "outgoing" : "나가는", "transactions_by_date" : "날짜 별 거래", "trades" : "거래", - "filters" : "필터", + "filters" : "필터링 기준", "today" : "오늘", "yesterday" : "어제", "received" : "받았습니다", @@ -651,5 +651,7 @@ "ignor": "무시하다", "use_suggested": "추천 사용", "do_not_share_warning_text" : "지원을 포함하여 다른 사람과 이러한 정보를 공유하지 마십시오.\n\n그들은 당신의 돈을 훔칠 것입니다!", - "help": "돕다" + "help": "돕다", + "all_transactions": "모든 거래 창구", + "all_trades": "A모든 거래" } diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index fa748b552..3db8ad2f7 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -48,7 +48,7 @@ "outgoing" : "Uitgaande", "transactions_by_date" : "Transacties op datum", "trades" : "Trades", - "filters" : "Filter", + "filters" : "Filteren op", "today" : "Vandaag", "yesterday" : "Gisteren", "received" : "Ontvangen", @@ -651,5 +651,7 @@ "ignor": "Negeren", "use_suggested": "Gebruik aanbevolen", "do_not_share_warning_text" : "Deel deze met niemand anders, ook niet met support.\n\nZe zullen je geld stelen!", - "help": "helpen" + "help": "helpen", + "all_transactions": "Alle transacties", + "all_trades": "Alle transacties" } diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index 454fe9717..83ec99d99 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -48,7 +48,7 @@ "outgoing" : "Towarzyski", "transactions_by_date" : "Transakcje według daty", "trades" : "Transakcje", - "filters" : "Filtr", + "filters" : "Filtruj według", "today" : "Dzisiaj", "yesterday" : "Wczoraj", "received" : "Odebrane", @@ -651,5 +651,7 @@ "ignor": "Ignorować", "use_suggested": "Użyj sugerowane", "do_not_share_warning_text" : "Nie udostępniaj ich nikomu innemu, w tym wsparcia.\n\nUkradną twoje pieniądze!", - "help": "pomoc" + "help": "pomoc", + "all_transactions": "Wszystkie transakcje", + "all_trades": "Wszystkie operacje" } diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb index 04a0a3ff2..866dcd26c 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -48,7 +48,7 @@ "outgoing" : "Enviadas", "transactions_by_date" : "Transações por data", "trades" : "Trocas", - "filters" : "Filtro", + "filters" : "Filtrar por", "today" : "Hoje", "yesterday" : "Ontem", "received" : "Recebida", @@ -651,5 +651,7 @@ "ignor": "Ignorar", "use_suggested": "Uso sugerido", "do_not_share_warning_text" : "Não os compartilhe com mais ninguém, incluindo suporte.\n\nEles vão roubar seu dinheiro!", - "help": "ajuda" + "help": "ajuda", + "all_transactions": "Todas as transacções", + "all_trades": "Todas as negociações" } diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb index 632b0990c..b34d4df15 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -48,7 +48,7 @@ "outgoing" : "Исходящие", "transactions_by_date" : "Сортировать по дате", "trades" : "Сделки", - "filters" : "Фильтр", + "filters" : "Фильтровать по", "today" : "Сегодня", "yesterday" : "Вчера", "received" : "Полученные", @@ -651,5 +651,7 @@ "ignor": "Игнорировать", "use_suggested": "Использовать предложенный", "do_not_share_warning_text" : "Не делитесь ими с кем-либо еще, в том числе со службой поддержки.\n\nОни украдут ваши деньги!", - "help": "помощь" + "help": "помощь", + "all_transactions": "Все транзакции", + "all_trades": "Все сделки" } diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb index 5e0f0d18a..285a67fa5 100644 --- a/res/values/strings_uk.arb +++ b/res/values/strings_uk.arb @@ -48,7 +48,7 @@ "outgoing" : "Вихідні", "transactions_by_date" : "Сортувати по даті", "trades" : "Торгові операції", - "filters" : "Фільтр", + "filters" : "Фільтрувати по", "today" : "Сьогодні", "yesterday" : "Вчора", "received" : "Отримані", @@ -650,5 +650,7 @@ "ignor": "Ігнорувати", "use_suggested": "Використати запропоноване", "do_not_share_warning_text" : "Не повідомляйте їх нікому, включно зі службою підтримки.\n\nВони вкрадуть ваші гроші!", - "help": "допомога" + "help": "допомога", + "all_transactions": "Всі транзакції", + "all_trades": "Всі операції" } diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb index c46d07d59..8212d83b6 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -649,5 +649,7 @@ "ignor": "忽视", "use_suggested": "使用建议", "do_not_share_warning_text" : "不要與其他任何人分享這些內容,包括支持。\n\n他們會偷你的錢!", - "help": "帮助" + "help": "帮助", + "all_transactions": "所有交易", + "all_trades": "所有的变化" } From 74cbb6f0018c2b27d7f2fb42ed9b371f795af290 Mon Sep 17 00:00:00 2001 From: Serhii Date: Sun, 13 Nov 2022 21:18:01 +0200 Subject: [PATCH 007/173] fix UI with new design CW-138 --- lib/view_model/trade_details_view_model.dart | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/lib/view_model/trade_details_view_model.dart b/lib/view_model/trade_details_view_model.dart index f2985463c..5a1f78774 100644 --- a/lib/view_model/trade_details_view_model.dart +++ b/lib/view_model/trade_details_view_model.dart @@ -142,17 +142,5 @@ abstract class TradeDetailsViewModelBase with Store { items.add(TrackTradeListItem( title: 'Track', value: buildURL, onTap: () => launch(buildURL))); } - - if (trade.createdAt != null) { - items.add(StandartListItem( - title: S.current.trade_details_created_at, - value: trade.createdAt != null ? dateFormat.format(trade.createdAt!).toString() : '')); - } - - if (trade.from != null && trade.to != null) { - items.add(StandartListItem( - title: S.current.trade_details_pair, - value: '${trade.from.toString()} → ${trade.to.toString()}')); - } } } From 196187255fcd731decee29ce1d34dd321250840e Mon Sep 17 00:00:00 2001 From: Serhii Date: Mon, 21 Nov 2022 21:09:00 +0200 Subject: [PATCH 008/173] refactoring mapFromInt static variable --- cw_core/lib/crypto_currency.dart | 74 +++----------------------------- 1 file changed, 7 insertions(+), 67 deletions(-) diff --git a/cw_core/lib/crypto_currency.dart b/cw_core/lib/crypto_currency.dart index 446c667fd..b483f8aa5 100644 --- a/cw_core/lib/crypto_currency.dart +++ b/cw_core/lib/crypto_currency.dart @@ -137,71 +137,11 @@ class CryptoCurrency extends EnumerableItem with Serializable { static const uni = CryptoCurrency(title: 'UNI', iconPath: 'assets/images/uni_icon.png', tag: 'ETH', raw: 61); static const stx = CryptoCurrency(title: 'STX', iconPath: 'assets/images/stx_icon.png', raw: 62); - static const mapFromInt = { - 0: CryptoCurrency.xmr, - 1: CryptoCurrency.ada, - 2: CryptoCurrency.bch, - 3: CryptoCurrency.bnb, - 4: CryptoCurrency.btc, - 5: CryptoCurrency.dai, - 6: CryptoCurrency.dash, - 7: CryptoCurrency.eos, - 8: CryptoCurrency.eth, - 9: CryptoCurrency.ltc, - 10: CryptoCurrency.nano, - 11: CryptoCurrency.trx, - 12: CryptoCurrency.usdt, - 13: CryptoCurrency.usdterc20, - 14: CryptoCurrency.xlm, - 15: CryptoCurrency.xrp, - 16: CryptoCurrency.xhv, - 17: CryptoCurrency.xag, - 18: CryptoCurrency.xau, - 19: CryptoCurrency.xaud, - 20: CryptoCurrency.xbtc, - 21: CryptoCurrency.xcad, - 22: CryptoCurrency.xchf, - 23: CryptoCurrency.xcny, - 24: CryptoCurrency.xeur, - 25: CryptoCurrency.xgbp, - 26: CryptoCurrency.xjpy, - 27: CryptoCurrency.xnok, - 28: CryptoCurrency.xnzd, - 29: CryptoCurrency.xusd, - 30: CryptoCurrency.ape, - 31: CryptoCurrency.avaxc, - 32: CryptoCurrency.btt, - 33: CryptoCurrency.bttbsc, - 34: CryptoCurrency.doge, - 35: CryptoCurrency.firo, - 36: CryptoCurrency.usdttrc20, - 37: CryptoCurrency.hbar, - 38: CryptoCurrency.sc, - 39: CryptoCurrency.sol, - 40: CryptoCurrency.usdc, - 41: CryptoCurrency.usdcsol, - 42: CryptoCurrency.zaddr, - 43: CryptoCurrency.zec, - 44: CryptoCurrency.zen, - 45: CryptoCurrency.xvg, - 46: CryptoCurrency.usdcpoly, - 47: CryptoCurrency.dcr, - 48: CryptoCurrency.husd, - 49: CryptoCurrency.kmd, - 50: CryptoCurrency.mana, - 51: CryptoCurrency.maticpoly, - 52: CryptoCurrency.matic, - 53: CryptoCurrency.mkr, - 54: CryptoCurrency.near, - 55: CryptoCurrency.oxt, - 56: CryptoCurrency.paxg, - 57: CryptoCurrency.pivx, - 58: CryptoCurrency.rune, - 59: CryptoCurrency.rvn, - 60: CryptoCurrency.scrt, - 61: CryptoCurrency.uni, - 62: CryptoCurrency.stx - }; + static Map rawCurrencyMap = + all.fold>({}, (acc, item) { + acc.addAll({item.raw: item}); + return acc; + }); static const mapFromString = { 'xmr': CryptoCurrency.xmr, @@ -271,11 +211,11 @@ class CryptoCurrency extends EnumerableItem with Serializable { static CryptoCurrency deserialize({required int raw}) { - if (CryptoCurrency.mapFromInt[raw] == null) { + if (CryptoCurrency.rawCurrencyMap[raw] == null) { final s = 'Unexpected token: $raw for CryptoCurrency deserialize'; throw ArgumentError.value(raw, 'raw', s); } - return CryptoCurrency.mapFromInt[raw]!; + return CryptoCurrency.rawCurrencyMap[raw]!; } static CryptoCurrency fromString(String raw) { From d7d3b78905849c9a0ba554940e349ddec7654e5f Mon Sep 17 00:00:00 2001 From: Serhii Date: Wed, 23 Nov 2022 13:47:02 +0200 Subject: [PATCH 009/173] refactoring mapFomString method --- cw_core/lib/crypto_currency.dart | 218 +++++++----------- .../exchange/widgets/currency_picker.dart | 2 +- ...let_address_edit_or_create_view_model.dart | 2 +- 3 files changed, 82 insertions(+), 140 deletions(-) diff --git a/cw_core/lib/crypto_currency.dart b/cw_core/lib/crypto_currency.dart index b483f8aa5..bcefe89f6 100644 --- a/cw_core/lib/crypto_currency.dart +++ b/cw_core/lib/crypto_currency.dart @@ -9,12 +9,14 @@ class CryptoCurrency extends EnumerableItem with Serializable { String title = '', int raw = -1, this.name, + this.fullName, this.iconPath, - this.tag,}) + this.tag}) : super(title: title, raw: raw); - final String? tag; final String? name; + final String? tag; + final String? fullName; final String? iconPath; static const all = [ @@ -70,161 +72,101 @@ class CryptoCurrency extends EnumerableItem with Serializable { CryptoCurrency.stx, ]; - static const xmr = CryptoCurrency(title: 'XMR', iconPath: 'assets/images/monero_icon.png', name: 'Monero', raw: 0); - static const ada = CryptoCurrency(title: 'ADA', iconPath: 'assets/images/ada_icon.png', name: 'Cardano', raw: 1); - static const bch = CryptoCurrency(title: 'BCH', iconPath: 'assets/images/bch_icon.png',name: 'Bitcoin Cash', raw: 2); - static const bnb = CryptoCurrency(title: 'BNB', iconPath: 'assets/images/bnb_icon.png', tag: 'BSC', name: 'Binance Coin', raw: 3); - static const btc = CryptoCurrency(title: 'BTC', iconPath: 'assets/images/btc.png', name: 'Bitcoin', raw: 4); - static const dai = CryptoCurrency(title: 'DAI', iconPath: 'assets/images/dai_icon.png', tag: 'ETH', name: 'Dai', raw: 5); - static const dash = CryptoCurrency(title: 'DASH', iconPath: 'assets/images/dash_icon.png', name: 'Dash', raw: 6); - static const eos = CryptoCurrency(title: 'EOS', iconPath: 'assets/images/eos_icon.png', name: 'EOS', raw: 7); - static const eth = CryptoCurrency(title: 'ETH', iconPath: 'assets/images/eth_icon.png', name: 'Ethereum', raw: 8); - static const ltc = CryptoCurrency(title: 'LTC', iconPath: 'assets/images/litecoin-ltc_icon.png', name: 'Litecoin', raw: 9); - static const nano = CryptoCurrency(title: 'NANO', raw: 10); - static const trx = CryptoCurrency(title: 'TRX', iconPath: 'assets/images/trx_icon.png', name: 'TRON', raw: 11); - static const usdt = CryptoCurrency(title: 'USDT', iconPath: 'assets/images/usdt_icon.png', tag: 'OMNI', name: 'USDT', raw: 12); - static const usdterc20 = CryptoCurrency(title: 'USDT', iconPath: 'assets/images/usdterc20_icon.png', tag: 'ETH', name: 'USDT', raw: 13); - static const xlm = CryptoCurrency(title: 'XLM', iconPath: 'assets/images/xlm_icon.png', name: 'Stellar', raw: 14); - static const xrp = CryptoCurrency(title: 'XRP', iconPath: 'assets/images/xrp_icon.png', name: 'Ripple', raw: 15); - static const xhv = CryptoCurrency(title: 'XHV', iconPath: 'assets/images/xhv_logo.png', name: 'Haven Protocol', raw: 16); + 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'); + 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 xag = CryptoCurrency(title: 'XAG', tag: 'XHV', raw: 17); - static const xau = CryptoCurrency(title: 'XAU', tag: 'XHV', raw: 18); - static const xaud = CryptoCurrency(title: 'XAUD', tag: 'XHV', raw: 19); - static const xbtc = CryptoCurrency(title: 'XBTC', tag: 'XHV', raw: 20); - static const xcad = CryptoCurrency(title: 'XCAD', tag: 'XHV', raw: 21); - static const xchf = CryptoCurrency(title: 'XCHF', tag: 'XHV', raw: 22); - static const xcny = CryptoCurrency(title: 'XCNY', tag: 'XHV', raw: 23); - static const xeur = CryptoCurrency(title: 'XEUR', tag: 'XHV', raw: 24); - static const xgbp = CryptoCurrency(title: 'XGBP', tag: 'XHV', raw: 25); - static const xjpy = CryptoCurrency(title: 'XJPY', tag: 'XHV', raw: 26); - static const xnok = CryptoCurrency(title: 'XNOK', tag: 'XHV', raw: 27); - static const xnzd = CryptoCurrency(title: 'XNZD', tag: 'XHV', raw: 28); - static const xusd = CryptoCurrency(title: 'XUSD', tag: 'XHV', raw: 29); + static const xag = CryptoCurrency(title: 'XAG', tag: 'XHV', raw: 17, name: 'xag'); + static const xau = CryptoCurrency(title: 'XAU', tag: 'XHV', raw: 18, name: 'xau'); + static const xaud = CryptoCurrency(title: 'XAUD', tag: 'XHV', raw: 19, name: 'xaud'); + static const xbtc = CryptoCurrency(title: 'XBTC', tag: 'XHV', raw: 20, name: 'xbtc'); + static const xcad = CryptoCurrency(title: 'XCAD', tag: 'XHV', raw: 21, name: 'xcad'); + static const xchf = CryptoCurrency(title: 'XCHF', tag: 'XHV', raw: 22, name: 'xchf'); + static const xcny = CryptoCurrency(title: 'XCNY', tag: 'XHV', raw: 23, name: 'xcny'); + static const xeur = CryptoCurrency(title: 'XEUR', tag: 'XHV', raw: 24, name: 'xeur'); + static const xgbp = CryptoCurrency(title: 'XGBP', tag: 'XHV', raw: 25, name: 'xgbp'); + static const xjpy = CryptoCurrency(title: 'XJPY', tag: 'XHV', raw: 26, name: 'xjpy'); + static const xnok = CryptoCurrency(title: 'XNOK', tag: 'XHV', raw: 27, name: 'xnok'); + 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); - static const avaxc = CryptoCurrency(title: 'AVAX', iconPath: 'assets/images/avaxc_icon.png', tag: 'C-CHAIN', raw: 31); - static const btt = CryptoCurrency(title: 'BTT', iconPath: 'assets/images/btt_icon.png', raw: 32); - static const bttbsc = CryptoCurrency(title: 'BTT', iconPath: 'assets/images/bttbsc_icon.png', tag: 'BSC', raw: 33); - static const doge = CryptoCurrency(title: 'DOGE', iconPath: 'assets/images/doge_icon.png', raw: 34); - static const firo = CryptoCurrency(title: 'FIRO', iconPath: 'assets/images/firo_icon.png', raw: 35); - static const usdttrc20 = CryptoCurrency(title: 'USDT', iconPath: 'assets/images/usdttrc20_icon.png', tag: 'TRX', raw: 36); - static const hbar = CryptoCurrency(title: 'HBAR', iconPath: 'assets/images/hbar_icon.png', raw: 37); - static const sc = CryptoCurrency(title: 'SC', iconPath: 'assets/images/sc_icon.png', raw: 38); - static const sol = CryptoCurrency(title: 'SOL', iconPath: 'assets/images/sol_icon.png', raw: 39); - static const usdc = CryptoCurrency(title: 'USDC', iconPath: 'assets/images/usdc_icon.png', tag: 'ETH', raw: 40); - static const usdcsol = CryptoCurrency(title: 'USDC', iconPath: 'assets/images/usdcsol_icon.png', tag: 'SOL', raw: 41); - static const zaddr = CryptoCurrency(title: 'ZZEC', tag: 'ZEC', name: 'Shielded Zcash', iconPath: 'assets/images/zaddr_icon.png', raw: 42); - static const zec = CryptoCurrency(title: 'TZEC', tag: 'ZEC', name: 'Transparent Zcash', iconPath: 'assets/images/zec_icon.png', raw: 43); - static const zen = CryptoCurrency(title: 'ZEN', iconPath: 'assets/images/zen_icon.png', raw: 44); - static const xvg = CryptoCurrency(title: 'XVG', name: 'Verge', iconPath: 'assets/images/xvg_icon.png', raw: 45); + 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 bttbsc = CryptoCurrency(title: 'BTT', iconPath: 'assets/images/bttbsc_icon.png', tag: 'BSC', raw: 33, name: 'bttbsc'); + 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 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 usdcpoly = CryptoCurrency(title: 'USDC', iconPath: 'assets/images/usdc_icon.png', tag: 'POLY', raw: 46); - static const dcr = CryptoCurrency(title: 'DCR', iconPath: 'assets/images/dcr_icon.png', raw: 47); - static const husd = CryptoCurrency(title: 'HUSD', iconPath: 'assets/images/husd_icon.png', tag: 'ETH', raw: 48); - static const kmd = CryptoCurrency(title: 'KMD', iconPath: 'assets/images/kmd_icon.png', raw: 49); - static const mana = CryptoCurrency(title: 'MANA', iconPath: 'assets/images/mana_icon.png', tag: 'ETH', raw: 50); - static const maticpoly = CryptoCurrency(title: 'MATIC', iconPath: 'assets/images/matic_icon.png', tag: 'POLY', raw: 51); - static const matic = CryptoCurrency(title: 'MATIC', iconPath: 'assets/images/matic_icon.png', tag: 'ETH', raw: 52); - static const mkr = CryptoCurrency(title: 'MKR', iconPath: 'assets/images/mkr_icon.png', tag: 'ETH', raw: 53); - static const near = CryptoCurrency(title: 'NEAR', iconPath: 'assets/images/near_icon.png', raw: 54); - static const oxt = CryptoCurrency(title: 'OXT', iconPath: 'assets/images/oxt_icon.png', tag: 'ETH', raw: 55); - static const paxg = CryptoCurrency(title: 'PAXG', iconPath: 'assets/images/paxg_icon.png', tag: 'ETH', raw: 56); - static const pivx = CryptoCurrency(title: 'PIVX', iconPath: 'assets/images/pivx_icon.png', raw: 57); - static const rune = CryptoCurrency(title: 'RUNE', iconPath: 'assets/images/rune_icon.png', raw: 58); - static const rvn = CryptoCurrency(title: 'RVN', iconPath: 'assets/images/rvn_icon.png', raw: 59); - static const scrt = CryptoCurrency(title: 'SCRT', iconPath: 'assets/images/scrt_icon.png', raw: 60); - static const uni = CryptoCurrency(title: 'UNI', iconPath: 'assets/images/uni_icon.png', tag: 'ETH', raw: 61); - static const stx = CryptoCurrency(title: 'STX', iconPath: 'assets/images/stx_icon.png', raw: 62); + 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 husd = CryptoCurrency(title: 'HUSD', iconPath: 'assets/images/husd_icon.png', tag: 'ETH', raw: 48, name: 'husd'); + static const kmd = CryptoCurrency(title: 'KMD', iconPath: 'assets/images/kmd_icon.png', raw: 49, name: 'kmd'); + static const mana = CryptoCurrency(title: 'MANA', iconPath: 'assets/images/mana_icon.png', tag: 'ETH', raw: 50, name: 'mana'); + static const maticpoly = CryptoCurrency(title: 'MATIC', iconPath: 'assets/images/matic_icon.png', tag: 'POLY', raw: 51, name: 'maticpoly'); + static const matic = CryptoCurrency(title: 'MATIC', iconPath: 'assets/images/matic_icon.png', tag: 'ETH', raw: 52, name: 'matic'); + static const mkr = CryptoCurrency(title: 'MKR', iconPath: 'assets/images/mkr_icon.png', tag: 'ETH', raw: 53, name: 'mkr'); + static const near = CryptoCurrency(title: 'NEAR', iconPath: 'assets/images/near_icon.png', raw: 54, name: 'near'); + static const oxt = CryptoCurrency(title: 'OXT', iconPath: 'assets/images/oxt_icon.png', tag: 'ETH', raw: 55, name: 'oxt'); + static const paxg = CryptoCurrency(title: 'PAXG', iconPath: 'assets/images/paxg_icon.png', tag: 'ETH', raw: 56, name: 'paxg'); + static const pivx = CryptoCurrency(title: 'PIVX', iconPath: 'assets/images/pivx_icon.png', raw: 57, name: 'pivx'); + static const rune = CryptoCurrency(title: 'RUNE', iconPath: 'assets/images/rune_icon.png', raw: 58, name: 'rune'); + static const rvn = CryptoCurrency(title: 'RVN', iconPath: 'assets/images/rvn_icon.png', raw: 59, name: 'rvn'); + static const scrt = CryptoCurrency(title: 'SCRT', iconPath: 'assets/images/scrt_icon.png', raw: 60, name: 'scrt'); + static const uni = CryptoCurrency(title: 'UNI', iconPath: 'assets/images/uni_icon.png', tag: 'ETH', raw: 61, name: 'uni'); + static const stx = CryptoCurrency(title: 'STX', iconPath: 'assets/images/stx_icon.png', raw: 62, name: 'stx'); - static Map rawCurrencyMap = + static final Map _rawCurrencyMap = all.fold>({}, (acc, item) { acc.addAll({item.raw: item}); return acc; }); - static const mapFromString = { - 'xmr': CryptoCurrency.xmr, - 'ada': CryptoCurrency.ada, - 'bch': CryptoCurrency.bch, - 'bnb': CryptoCurrency.bnb, - 'btc': CryptoCurrency.btc, - 'dai': CryptoCurrency.dai, - 'dash': CryptoCurrency.dash, - 'eos': CryptoCurrency.eos, - 'eth': CryptoCurrency.eth, - 'ltc': CryptoCurrency.ltc, - 'nano': CryptoCurrency.nano, - 'trx': CryptoCurrency.trx, - 'usdt': CryptoCurrency.usdt, - 'usdterc20': CryptoCurrency.usdterc20, - 'xlm': CryptoCurrency.xlm, - 'xrp': CryptoCurrency.xrp, - 'xhv': CryptoCurrency.xhv, - 'xag': CryptoCurrency.xag, - 'xau': CryptoCurrency.xau, - 'xaud': CryptoCurrency.xaud, - 'xbtc': CryptoCurrency.xbtc, - 'xcad': CryptoCurrency.xcad, - 'xchf': CryptoCurrency.xchf, - 'xcny': CryptoCurrency.xcny, - 'xeur': CryptoCurrency.xeur, - 'xgbp': CryptoCurrency.xgbp, - 'xjpy': CryptoCurrency.xjpy, - 'xnok': CryptoCurrency.xnok, - 'xnzd': CryptoCurrency.xnzd, - 'xusd': CryptoCurrency.xusd, - 'ape': CryptoCurrency.ape, - 'avaxc': CryptoCurrency.avaxc, - 'btt': CryptoCurrency.btt, - 'bttbsc': CryptoCurrency.bttbsc, - 'doge': CryptoCurrency.doge, - 'firo': CryptoCurrency.firo, - 'usdttrc20': CryptoCurrency.usdttrc20, - 'hbar': CryptoCurrency.hbar, - 'sc': CryptoCurrency.sc, - 'sol': CryptoCurrency.sol, - 'usdc': CryptoCurrency.usdc, - 'usdcsol': CryptoCurrency.usdcsol, - 'zaddr': CryptoCurrency.zaddr, - 'zec': CryptoCurrency.zec, - 'zen': CryptoCurrency.zen, - 'xvg': CryptoCurrency.xvg, - 'usdcpoly': CryptoCurrency.usdcpoly, - 'dcr': CryptoCurrency.dcr, - 'husd': CryptoCurrency.husd, - 'kmd': CryptoCurrency.kmd, - 'mana': CryptoCurrency.mana, - 'maticpoly': CryptoCurrency.maticpoly, - 'matic': CryptoCurrency.matic, - 'mkr': CryptoCurrency.mkr, - 'near': CryptoCurrency.near, - 'oxt': CryptoCurrency.oxt, - 'paxg': CryptoCurrency.paxg, - 'pivx': CryptoCurrency.pivx, - 'rune': CryptoCurrency.rune, - 'rvn': CryptoCurrency.rvn, - 'scrt': CryptoCurrency.scrt, - 'uni': CryptoCurrency.uni, - 'stx': CryptoCurrency.stx - }; + static final Map _nameCurrencyMap = + all.fold>({}, (acc, item) { + acc.addAll({item.name: item}); + return acc; + }); static CryptoCurrency deserialize({required int raw}) { - if (CryptoCurrency.rawCurrencyMap[raw] == null) { + if (CryptoCurrency._rawCurrencyMap[raw] == null) { final s = 'Unexpected token: $raw for CryptoCurrency deserialize'; throw ArgumentError.value(raw, 'raw', s); } - return CryptoCurrency.rawCurrencyMap[raw]!; + return CryptoCurrency._rawCurrencyMap[raw]!; } - static CryptoCurrency fromString(String raw) { + static CryptoCurrency fromString(String name) { - if (CryptoCurrency.mapFromString[raw.toLowerCase()] == null) { - final s = 'Unexpected token: $raw for CryptoCurrency fromString'; - throw ArgumentError.value(raw, 'raw', s); + if (CryptoCurrency._nameCurrencyMap[name.toLowerCase()] == null) { + final s = 'Unexpected token: $name for CryptoCurrency fromString'; + throw ArgumentError.value(name, 'name', s); } - return CryptoCurrency.mapFromString[raw.toLowerCase()]!; + return CryptoCurrency._nameCurrencyMap[name.toLowerCase()]!; } @override diff --git a/lib/src/screens/exchange/widgets/currency_picker.dart b/lib/src/screens/exchange/widgets/currency_picker.dart index 9f8b9e493..b785378c5 100644 --- a/lib/src/screens/exchange/widgets/currency_picker.dart +++ b/lib/src/screens/exchange/widgets/currency_picker.dart @@ -56,7 +56,7 @@ class CurrencyPickerState extends State { .where((element) => (element.title != null ? element.title.toLowerCase().contains(subString.toLowerCase()) : false) || (element.tag != null ? element.tag!.toLowerCase().contains(subString.toLowerCase()) : false) || - (element.name != null ? element.name!.toLowerCase().contains(subString.toLowerCase()) : false)) + (element.fullName != null ? element.fullName!.toLowerCase().contains(subString.toLowerCase()) : false)) .toList(); return; } 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..43db6099f 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?.name as String? ?? '', + label = item?.fullName as String? ?? '', _item = item, _wallet = wallet; From 38da6e73d4d6a1ca5a7c13698c58475f70f22919 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Wed, 23 Nov 2022 18:06:09 +0200 Subject: [PATCH 010/173] 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 011/173] 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 012/173] 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 013/173] 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 014/173] 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 015/173] 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 0fda0531507073286afa7a21c64163aefab87cb8 Mon Sep 17 00:00:00 2001 From: Serhii Date: Tue, 29 Nov 2022 21:53:07 +0200 Subject: [PATCH 016/173] remove Hive from CryptoCurrency --- cw_core/lib/crypto_currency.dart | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/cw_core/lib/crypto_currency.dart b/cw_core/lib/crypto_currency.dart index bcefe89f6..686064f09 100644 --- a/cw_core/lib/crypto_currency.dart +++ b/cw_core/lib/crypto_currency.dart @@ -1,20 +1,16 @@ import 'package:cw_core/enumerable_item.dart'; -import 'package:hive/hive.dart'; -part 'crypto_currency.g.dart'; - -@HiveType(typeId: 0) class CryptoCurrency extends EnumerableItem with Serializable { const CryptoCurrency({ String title = '', int raw = -1, - this.name, + required this.name, this.fullName, this.iconPath, this.tag}) : super(title: title, raw: raw); - final String? name; + final String name; final String? tag; final String? fullName; final String? iconPath; From 292c4c396cc2a313d3b3a352c10bb8caebbe39d1 Mon Sep 17 00:00:00 2001 From: Serhii Date: Wed, 30 Nov 2022 21:18:12 +0200 Subject: [PATCH 017/173] remove HUSD and rename BTTBSC --- assets/images/husd_icon.png | Bin 69161 -> 0 bytes cw_core/lib/crypto_currency.dart | 34 +++++++++--------- lib/core/address_validator.dart | 4 +-- .../sideshift_exchange_provider.dart | 2 +- 4 files changed, 18 insertions(+), 22 deletions(-) delete mode 100644 assets/images/husd_icon.png diff --git a/assets/images/husd_icon.png b/assets/images/husd_icon.png deleted file mode 100644 index 07102709970f5fc88213eec72059a81f5220634b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69161 zcmZTw2RPOL_rJ&}v*n7Uw96_pyFx={RI(`{WMuDqOHxTvvUim1vPWo0*<@s1Dz1?& z+r9tu`CM0hfB)zCexKj-IG^`flg)(zYnFc=K$nbS&|7z|?r@-Gtu z{3Sx_lNH3mYp3ldE>7 zLbmqikz=yl7|c%08KvWwTswYuug@|w*Xf;nRs5};>9&}M@rR7tJ86$QCo=Cobjeu1 zRHJAqX1d3wL{nNWz{jLGpgZZJN^^Y2L59w29M_H*%N#w+m5;x#q9Vqvyh-U9#|fq< ziaU1=mCltAXGU&c^T&QaA4R@5jw!L!=eu?lKRn#FDb< zy0KVx0Si*x5+QVUcsZ!9pUmH{=3G_lPiIv6P4Oe5uwq4a%gLx2WUJ$^=a1k)u)@@hKbG&&CHnrDeat>Nqu8D@~0sB zxlWn!A=1Lru@S$=0&g;h^*ye~%i>s=Eicq82Pu`z&6STwTwM>|VvVfKKWiJ9aMtc#KGqu~5G=Gyk9rY#{HjC~Y9e=;-E< zJAw$R7DIDda~?P6JK*NU&5|)7zv*f}Dgib&6K#S_rP+Ei9oxAorwkmZdJOEYyS@ezoNDS1ak5u?5{fg{NzkyW8lZtEJmq?YDoPvY6Fd z3{>Ls7W*(^&9PFsw`aQtR~EHC8=!_Gig^+;j`esQ2&Ry} z{u%9$C&h(OF>ad5%}*N-{q^UERe}vpV0d{XI?$2q=~KZg!chIEPfwVXNM@FIS{gX* zpE*W8$3tr0w&0U&lG~|l6E#vI6kZtxw~eZ)L=$)pl2?M-HtV_4q%EiRLWH%; zEQ=P9RaLuVzpioB?YpP;ysg%4bA%H%y$O6mfVwv>Oje7vmVJ=qjHI-36n*ShxkkWJFm1Zn6~ z-^GV6-db)|eu9yhmqXbtopLLOdoQ}B**>C*Vj=xjfU#FQbhxwXrzhQWszrWw+vynQ zXAUnrCeFI-?yuKjp|SJq;3*p4Th`{a5>E1{p73}?{kZA0#1#pZ?kKEN%u?w7>XDKg zeRSmy6Rz?y?)6Fiy=S$zLaeiUD^gesH zxX)=fqvi$s%xjFsAM_o5{ZtuP4CH(8woVd9WxHjCSkXF~uhK%gM0RwmlGIDXh#15s z^>~fzEeiaJ9WLAd(msXm4pqBv4YN}X$sNr6xgPxesxRvN1k^CSJDC4;mEAU--xt!y zqmwel#K=VDzAygLj!xXb$V9f$yT`nk$K>4cgX80+T0sM`zwp#3Ym&MoEGs@-vRl*J zg{aHSj?oT!)tot6*2Y#wWGkCHyK0@pjWb5pH>eT#gQJBgm=RGv7wbb^>(EK0`#$=&tu6~wKovJ@a z=-f*^t|4~7T&cy7<8|SIVNbV2&+k8IF#GDnRc)VHFuZwj(;l$w8;GG7+=4n{2eAVO`EsN%n6cTSIUiN? zyJKl0vZ5^YY*fDI&t>;(tQ^+$%d|}IGjZKZb@mT^*3_Ok%d8eCO+MW`%E;fJ$umZWN$s6Yj%0T> z4~*6j^z@+%Up20UHMhK}VXm-$v;G#R(k2WahU<3QJEKnA^_qznCJg;7j1p9ks{Y)Y z3QKlq!LeCX<#RXFVRo0CQ}|vemQr#U%46g43#-aFUSqAg=iwOwLC5-w2LFcqd*=AD z_T$t{Jkx7^&|KLvPpN8rr0d#uHq5!WOlM*g;UQFVnW}w^iq!iIk{0$WM-%zQLzSwS z?+s(hw^+!8Dz}V14j#hf}GPCaLH+e0NKx8P`=i zVPe~(zT;=y!PU=xHr#Z()Lb~_Hh{q#UMU=My8><0I!1LWmn5@+*e-TEKc6mXVQx!0 zOj^p}-MJpu^4wnfyj}%7UHP)NP2vDCp)OV|hXKPCZ|dH?>{&BFJeIZU^i5~AB#D32 zBwH5vSYOd#RC=6(rb?4LLY0G^*s`e@C+I}bVYFYa#(qog zt&!_PpWIazlQ&h5jeKcZ-W{#%V}!w6XtoEZE@7v<*B$lcE? zrN68~sT(u4s6R~?{dp&l-z=BRG_zb&zu;WH8d{FOTWZ~cBK$owj$tsHclYZ_FTJR$ zcj{dw&y-s$xH?~QyVATc&Z13&3A4MR0v_8Ida8(NH8JQ~s$cLga`Q?YU|(v}<4&Z7 z+{@&J_0qF1K2}OL2$1M&kDu46a(B zQZu?fFnG>|ja!TsQ@-b2kDRch5j*7n-XFUuOuCI^st*Q59B*C_X5j>-4|%5Gem2KN z^_`%IxrenAMkmtc$4;cTH2fIMx&Dho`Lnih5f(B1t7S8B$O_WGMc;?hwR|d&30Y|{ zc#_SNsU!{Y%#m@HRos;FbECF7#f%uW+)!k~V7khz5-eR{JPYv;rrfkI6=s6nnHJ=f z<2x}JI~JP}qw$ys2ZJ;US*(=Rs8Ad1YAG}s;f%rbt`nTibm8;fatRErziPz5yimW{ zObfMzLnq}i7-RZn100bn_?v$DDvt$ZQ!4*Aku8O5$Zd`<|ol zc%cD3vVNBZ>jVaazZ^PsV(yRP+#hA38x*qc3it`R-RB^#rX0+|wJX#m<-7g``&-Y@ zE1IhEK+VfNTMyz|jS+g^t0tJ-x_R}gbcF0zS@h%y%kI^5&}d#ry>|^ITe3|8abE(2`$&Cq^$RE9_7_*r!*2oujYFz!|&1JNbUHby$bH9m+>{Se* z3ach{@u*$|M^T9;S1Gb$Fk!S;PCa+2h>IFHaRB`yG08dP;^He|O;QdGjO!v!nj}p? z;rD?^eGW?Yc$u5tUqiC+FIp*y-v&Si#gz55V`TtiYx^Pd*Y=uxT1&C*w&trL< zN(;Vm-vL`}53S}G)aTM@Exbp4w_ciS6msE+)Jo1GWLSDSh$$O9Hv6hNU=-n3SJi*Ui z)HwuA5m_=o{MOS|Mh{cEySp1NIA~BhW8G1KIuJ{sX%&(p87$Gs!>13jQ2Cdl*G7r; z&%YU5rw~Jm`^=;CqUhkFL`rr&Z|x#jr(ip=4)D#(bS^ulS-d|lMAX2Ma^P`p-?#Ob zdrWVEj~EA0f?h1THrQ{*f4aHrMgelH&wr+HN(6hAVl!NKwEuL`!kw#|;Qr?Mx5`Bn zhl^&d+Qvx)6*z}h_~oAa6(2waNE{l;s93S9?UuW7VuJ}NMG;P7lx(9|hb z7a(iLD=$_S7ZdXf@f7Bbg5prI?oZGSotB_|M8wA98G(_ zc_>t+MYfaP0HvoJ=&{S~f;jrhAc2tIRFH&SkP6LQjNYsJE@kRIr0Srl<8zYTVb&%-|`hO))>o?b8S&f0t zC2BN8J~|I^b%(;>aoO>94yT^R!k%(ySMigrJsbzg#y5rb7fw*LGfA}+zAsIVreTKT zn+GliMcno;LwUPTXgb(5FW_$@8@bJ6CxfOOSZGm7(>o97JQ7PXpRsBHEo_s2w7-d- zThx0zO6K;iTd>f`Er$BcdI6zpx_XUUBnFRiPH zyD1_`*^=p=T~Lk=-1Z1)e-%>3=|N61P(>rqpx#P<=SuDD$x>)gDDMYwbN&-lpm zp`MbMn_($DC^Q^DAnin)&Cqls8kbGOxz>FaK@qAf`+;V>$4hE>K$eb$;vR3I z#U`IEkmfszfQ1igRjOLLW_9eFBHBVE_6rH>e>W)26vZRdTkh!|4nLc$x~ru>vZCiN zxZdiC>Ri};k`d@!BlV}qu9p_*8F*1E@wWXak(Gs-;PT#3XQ$#hPQ6y_EHa=FstS?Il3su&zNQ0`-y?aL*n7fcusBa3X!bRu^qcZPD`N1=9{ za}GY=o#bZZ;%39j0UsErgbeyEwH3XZ(x%&loNsc>FN|t7cuFj)27@6>V38J^z~-?B zFwc}LAtH)-)#hXl3RT96>;x)iY@iBOgcf$_TpIB>FF2dOf8~^6qnQXo?Fywka&d?C z6AHCUQ*=_g%w+J-~zfZFVE84${K?o5kaWd7WEVuZ(VgDV3D)7SU+RGI-A1tbn zYtDX7SJcIq)j$;DTSh+XYiANzZ^0}zcY{zO_B zH5#ZZ^go5{j(PONia(cNVTU$cy3t^Xpea(_)lhrnVzJoMwn7hJ?lpcwp~qJhjnV2V zS4kG%N5nSirJ~h_LLzAN`dEIkBPrY;$$=vGNc?7z=G+sgl`o{#_9v2TE!!5@Lah_#J zE8hm8H)Np1`%sps5(NC7{d5s$!Rh%%);oZI!e1(EG7JEHg@hZu~iuw4a`nqm8vBZ z^*RwL)D9LYmPTC$8x;Dlu>jFdxb4%;rL%PC$%q+-elfLZgs1G_;coUhwHLO+?BeR^ zxie{&My&?R@}ry3bItObU#~d(pdlU+JWw@sDn{DKaR`z$MoNhB+Nt*I4Jgl_`rV}| z#k~f^r$~afOUQJxwRx1{7JVCSx&rhZ`mc6ZjPb4zoeFyqXBPO$FIRRLe4ix_Id8E& z!rG|GU?9Ue9$~G0uojzO=oxSvZEyoDUq=mRBOL`sYxK;_$LJM^kZU5SOfQGpV zg3~rcUM{CvzEenu=pqMmHYHVDIb~_%xB$HfhKt82ps3w43l+DzrPbanv4r3Y0}#ge zChvV-(`U!gu`v2{_NXdu0VzQY?r&m!~(28l*3UUGz;Xlp)}|5hlaB(+$!w)ivx{<-B% za;GeXh6ze&OIoA{?df-e2vS%7MntS(&LKYk@P++6Pf(DuQWnO>-p*{rsvw+S8zd08 zow8fv5YA0AAyu!t`)|am@&gTXN`E_q@_S@$lsIIW=Vk_hBIJuumJgG;E_-LtM4+T( zz?CiZI6@e!^n_%rq+=e2?5Zt}A|q=sfk?{)v~rCzwR{ykRVFO0aBRP z(;*f?q{;846I*;F5gmVCZYjwqZuV@iczh;HsNdcw!R8?!AAG0nWaQtxjHii0M zR#K89%z0{%tGLsL^_^^7ZhfTfev0Hkt@iljDIq#(gl0tm?{GQe7U<6%Lgf4n)T}(U z7y09X;3c=C5fO4N_LYffmbTKfGCQimD2L(N*j90KX_Jo(ay}J$3jTij(4zwNg0QN= z80P>C$Dl6*eDCjvFDy)Xf<=q`zjzpY&Qi=bhH{GEh)Y@;S2@Hk*?{1bb2Mq7Yiw%r z3|2&-;mvjU!1&zq#Y?r>tg}GfBWUZCom*_zHP+POio+6q76>7`vCBA_XEZxJ0m%(4e13ySOU_xlJ518WrZ z)NAr7%M3nefVD;Nlp7J4qJOtqC>(?uc0nQ;5vjE(MK(bu5%)!zUZ8=78IU$UZ@~Fl zwzXUnfYwdTBicR=&U89PQ|(ZW7>bL2lvSf2%cYMD!KnrXi>lY2D->izob_ku944YM?=HxNa60k zckz_TOW6)%x2gcWiT|B7-=@F||V2n_66 z??%qxYaq|PJY4C z4r65AFKU~TtyigH7Gee4mA?`C&VxYt`ASvc(&BE0MEF9}NC*46`{!Fs2oZyr9{<`f zaoqoSyRqRR5O2sD9>z77ys_)D6d6(B6KqI3VVq~Z0Md(jA)C;|j zlOK60z+492-!8Vu%4m|(sxg3ZFA{47b0b}mJTIz*MNY%6q3KsBr%^ZW9b1Qu7-mNd z0%R`@JXqg6qK;A#l;68F_VIxY%2VOJ#&u$U<8+Fylo_&M28kg@Y<7_LS zASUJ-BZLj-5GZi0HV*mVC*kqi*D}4N2R`!PCn$dVvy{l%2*L$`u!UzTXKB1l7wH+D zJP3*Ekj0XLygx8x!g=m8vnl3cy3zA&e?Ud_0^@D5N@aV8XZ2W-7aKA8%e5m#KEIDM zx&uTQ1YWIj&%^;nmTL%gvBm9FVifO>_q4p2EJ(=O@Ao&dpXw$R+(x#0Dmib3z-jt; zK|u^e2>!A@fd9_)-2zH|1u;FAwaCWkjIc)F(K1>p;|Jfd1l~EbumI7J#PvR51KT00 zm2)qiPMor%(}TcFH-NX!BA+3GRFn_BG{*Qn8%Bgyep}1(F@}85OLqk}R*sBKBipO4 zri*jZQqCJ>I*>gRm$%dDBODA5mL)r6f0S}v+>Xl5bv$3WyR>TO6*!-oC2LEvPV{Wp zwH^Ex1CEOidOmd`(aisL1}LUw=N9AQ>{qYMXb0&EJ^k7E0U9C3$nk1@oi;u(-Xa7R z#I3l>low0C>$OHsgH47$!HTN*%LMft^X zgLqcXLFfj4W6IabJ|Mku^>Rymp9$ALerMf(t2=&b1EUp!90L5lFV8hbGK!XK}Q7Py`&u@tpA;ti~X1wf;$GuwikEz`;IM5l!@*{ zjvHLA%^Qmg;|)WU!$2x8-(o4_z)%6OJWQS{8)x(LXZwnHGs=4M*`Ob+p?J7JuJeDU zN@O^sx34koDm+cVYP4?Kfeuh_TC|w%IjGvryr{VeqCNn^r>V{8{3_9X`KqE-jI%@v6PeiHL`&7ScT$)L|=mAMob(8?Ilw z3G;s6uD?cpo)ct$6!}pHchWsvb>q}_By^G3ZT$hWjYdD8L^48r(C^mMsN<+kk2nxW zgcsLOcvbSP93~74>rkRY2vRgrEJTi~&PZ<42bj{850<@AcycTZ1p!YlQ_f_8>%hQr z(Ly}6Q&Q&coql+b0FnG9KbUS9WwPYUerG9%F8(h6G|v|@i2OZU zR&BwW?HS_Eh~y%-dU)VXX`mNqr@qDA9Ar~3>*M&#GG3FE9(I_A^%DrP!_&?C4c#8Z zp%8aAZp!7m58mo?3yCtz`Fz$9&+_<*E3 zQrKc!Avtd^Y@H)!`xiQSSx{fV2sGSI+UxG^@*6tK`n@nq3D#fqj-=a#f{NcOJ(0P5 z4?UDIJRrz+n<5A2VEKycDKeS|wg}YY-uJPi3P8{2%28$+2h#2HawAQ%d9BJlSgzro z`X0Hv1`5U1wXdZlYK3{SRG%h(O|c>Te!|E#21bE1+e7>4kSTVvMwP97InthhS1U1I zIJfkTVGR7GBy}2Rmy9$u@OMSVkfAd(u_CU3*v}$a!p4Jq&Ok%Y0PWTTQY=d^s8%3Y zZ!Y7{=72~14-+z2J|)yJ-IqMY&hrT*m`tw9?LUUf3+-c8g6d2#;l@r_46773vlN{K z-(O>?b@c(shhZAzxD-kxm_XZzc%bnEwzLF^VY5^kSU1CfRng|i`26!#R*E;#@@n_* zZ*+hcN|s@e<;JC4;W4&@`7+5gs3U@VSmh`g-7oTbejASK{_J;~{yk=F?@z}~5oxb< z)@PeQXs#LN;9lzvVYHa5TQF@F!YDdo-^aMD3hElr(bE~5Kr&32x0 z7Gfc|V7KOyJu@v5lfwfgV{sFvetRJnfU~Njah3e$m5|f5k~&*XKTS-6DX>^(k3KPO z9mQ#Gvz>c2JN?Fl^njBA!qx*C{_eis4Su^R=b7QW!8Uk&!yrR>_yRK(caUGg$04qCo#%s1Zwt+j(G>JWrFtTT&rAACa{r*OR zSr8DK1?s1Hc=4+UHqz{92-H1r`l;AZ3v=dZ=}y>ObE-3XCLSa+fB0>{ zz9gi#kz5$r?np(M=J6?ylb5E6+VH+0HirDjG??7l$FS;V-S2it?TURQ*e~GE2*onD z@a+-J=~HatlxWsYpsSveo>K^b)XK~R^o+L|ODZHGMs5m@;KQZ{31z~N>1R2RQPOFe zne8Y=Gm!6ayqmxBT}U6A&v9S+=#gd*wViUT67HEV5MCJS7Gy1b?v^gWphXJ6O-rsw zju_7ld$PyEF;*6Le2#U=*^iTg23&Xf)&ayRHb4TgaVwo*?Uo!CmPuPZ4XGj}Q^~R} zHyKV}>d=r-u8MU&O@rnv5Lo+J{mC*3v+5TD0+0(v2C6=fMNa$is#A~xKw2FikcdcB z-P#5F!;q=WV_|EYAAQ=i(#?s5G;sNHap&!I6lK7Xf^!rsZo~JMS767nq|zmQe@&N1 z%@+s#c8e<*2LU}r&MhXk(`$2S_wm)k;Kh4F2N_NFl{K6=2`Ruv&rN@>cFvuVV+~!6 zR?l5#>?=I}@K~aia{QPeyzHK2MB^21Dc3IGhZMog207pz3=7_|9~scj0ZGGB@9N$y ztZ)Uh&Tfb0j``~aWk%LDzHjss$WN91px4fmt^Z0xx28>0=-@&C=Z>d)q9>+Gyxisj zoO=3bQC~rVE=?SMDsDCj+Dzto^&RY%Y>wQ12;cIJD*_A)Qf1kz#lr^CA%^}wB#{pI zmHAxl3?J_Sj9M(Da_|cg4b>SdlRVifekEkQ&A9oy^nv%6<9~19U(xw3@JbsVXkhEP zFv`Zh>WFc4o1rT#7Es!A#=W86ZOMdmu7Hy6-%zCA zdiGty7A1EpTi!USt@MZQ>jpn$x^uLi=7=%vuc&uD&t=EE*R!#F{VIRVBlcaJZY*Ki zlSK3O<*#a8Jw-;#p;Uk*dZDH!t!{F8beF%CEC=QXQjD1fF=a>j z=h-oMJR%FNbosgrrjr)TS1W32Qr-!~jJ;%syI`%6K<7BIZ&88iu$h@wzpMQ3d+hg- zh7j&_Oxs9g7Jxs$3;1;9oAHdvM=Pg&Z3glANN=O4#5j0O$>=~iAhXbVVAh84<#Trp4HZqHs*iSW z0y#{~%=+8kTM!!r#%^t1m8XHmed1!koNv$@BGXYbGl}`?rl=E2qS=1ljOvt$DC6_YeDW}Wo>6YDFGaci2MV%`QChIzpm@%SLJZx$%>PS0eya5S<` zxXX17&rPleYOLgpdI8NbTa5_bxASz8dK3_rdDf}(D{MGvp&DOVQ&Ut7)<4gQq6&d= zppV#9zsVhR^{^UXgk3`alciHE6rXCvHj2K7BQHzc(y@8A0*AZxX>5@U1)i;b%_M%K z(XM4s^rh_q>u;s;%b(6~rE*Qi^L)HB<4E(RrbfbAN0v~#1w|GxNUnR;<!ozilR-Y7DbZ!o!eVQ%pURv3o!8CGcnBQ? z(w86UHZhbSyFaMt+r3TY+w6xY;o;{?%$Cb+A}AE5LB&5?W3l%D>I7H$VYBt9e*vvo zg_C{b{hFHJud8*-+DbLj9JAM<_63Kxye=R%6}my$%xtz(@ND);PTb(WzXuzft{$*H z$Q2&mp4lTGNbVhAqRQSpe{qa_04O?4?ZXPzge|QF$5y3Jp!@T9a3PlYl$n{6p~=m* zCl!ocTPTJDylCX)xl}4+_wR&sbxXCWX12ChQ&NfIGLW(e1+pwjwRiW3W*4RFl+>T+ zpaR+Z)iwd^?+XO!bd3_B>qm;#)6ydCB%mc*F)X6_d;bAoc~z$)!>g~Xww9f8kcQXT zr_9g$%8f+cyL&~ms~BhIGi^MnP-1wV;f~!EJE?zEG<7&)Qe9GJO_0aD`$Qn~9E~9g zvmw#PNJX>Z&E%7cQ0DVyW|wtC26BYQ+6unXP$Ws9JJ%5ai0zhwll$T-v%9)5lSsb? zdP`_TyoIk088NbK1Dcn>!d~YtnaeDq^P3etIcjPbOuvKlIsUC zj+KV~a<7g{dM$6Nx1g0)yrTam<2|IcuOVA23m<^Ew9;Tnra?Sj2y(FAtr8AXGp(26 z)7X6BUK1N*yz65;8|XwUy)({#5MvPPCs3;U+5U zMn0-{XoejX<(V;E@arxB&1rbS&DJ?8DqlAmzNC)=!hx5!F4I3Md zD>4G)>l`=o#u2srg03mtuBy4oAt`CyS*lJLFr&XuWEunu!#}h|cs3F1So^ZW+k<0v zT>?%W5tI6ohZGf0DKbKirs3sipm)Su%x#MY7EfBgu-iG%u5(=H2;d`rX8_qfbXl1G zuxR%2@23}|XO$P^CHE=H{^xY5SJldU5trZXAD)Nnl(h*6*_-@_ha%&ki&DKX+pb!U z%$l0TT!9@w?ydV*#`|m{BDM*_Te5)qrf;&l1N-B-jmrOkMfbC@;l}8$>kz=iki_s^ z{sjBY|8otO)D>TPi;y@|GYJDL&dTBiD8XwsGt9up_zx-u$oCtTTxmEe8u{3Cvfo-z zlJ8$E-ubeLWR>~uIJuh?pJi&+S`FddiS4rLa{V96F!Zn@QEnF={>O6nq?jbnzg)aN z^TvtUCd3LM8m^Py`pCTaJvi8!Qe&cHn52NgSk4mQ@h0e6nN#eXox}g$w71ng zasohk&iX376WgrUr4EMw*Uzdl3ie;OkfDJrcrmmhusHl*;K1204O|>EUvF$?7CAHP z_9jp*pY9(Sgc9g39g53bU;6{cbk)r4S^J%w%S*KG&v@4FjM*LMgJ*-VWg3Kd>hIzl zNP4yYnweR2#x{lF0UD;kRX;7xzk|forPghCAl~*@|KQ6Nj_~DS+!?pZV60~YZP9%; zb)D3c*{(h!Q2!c{pkf|S>k^|{h6CaPV&)LpV=(_-Urw%~nOWZZ{Q7D3qN`NMc7ix? zPqVUj3PLRv|8ckjTh$dn%TbR;6~KZ%@LIB1uPe9z@oSjWpiV2j^5geV>?_{pnEeNb}mbT*^bUY8CVz$Y*NyPTEh* z)?1os#fm>PF<6G8gSrL+Cxp2+IdZV#)}4s(7L#dRVHU{hKcGKF?S^P0%`aWf@W{`M zbnR+w&7o4U7hdm+yOjC<#S;ot!19j8{I*=ECBxoDa&<26A$hIA3D?E#w(5KuuCv$0 zxZ}w6NgAvNHN&jxA)O=3@+$hSglKBdTh~&5*?*w|6`m~zFD;yi48Lsku|j^-zmps5 z_8$h&7V|awOETM-X$7DGoyVi!^&dTz7{7nYZ?N5<6S2Dl`q(ys3yxR+M@D1IhnsyR zMGwz$r^|I;E)LWC5s4Cil%~myl6#5UEkW8Oew}~GR&2AF( zpVt3GvzqN!p&opzv8%4;?Cj8N&dH@8e;lxO|1oC+P0>v^t_w2j?V;-A*Vj8tLR4f;eHE6OChk&|^1Q-N@$oVqg zo(&%tVopSdvwm-SG^;$UiM2#op~Vd;Vl*$0B^c#pT!xxd_o~xmfEMKfKDFvrim{KF zoXsS5#@eXKMTI_7ajR60nh_aBnP}jddi1A{B46OD0aBsK{P9j*s%IJ~zuRH(4rW{`&Byc+W zuB_-t<*Uv>yNw_P&JFSmT0Id1;AtH0J~21@whVT=xb$QC39|?iV*lJjH+yhy>n_#$ zO*1t&r3vy1o%CEB4J%2INB*M0(A<6}Cj9&rSwgCHF0=5?xFywMByU2$flAGi+yW^> z<-2HhkIk8gZExp|go^O4W5U0Yb^~$;;0|T9H$%5AucpR*es&?*Ul46nR@DVgdygEN z2-mTdkhJEBSU8H+Rg|5>Iw2hZlzKGQ5BLi7@V(86ZZJ3NHsVxsiKj=p11jR+VAnUU zIL6o46oIPC6{F1O#`u|$boUSFU$2A)gHkwO`mABF#F5j-O}W9#?C?7p{I ztFLPeIhXnHze0jdl3Krz&(4cxzqUT!k>Yi{uv>YnqU?X*ep=@1eTD06ClekjT7G?K zQ5-EKOu46rN5x^Z_lf^vrXG~vpcmiR zags?a`#jU&La4!Mnstuw6rp3zb5`%J z0I8;8^S=^9$UH1McHQE!$PF`I&!Try@0B;B&D~!IvMlp8T#g3%X4|pv&~H3Cr7s3G z{68`joccI8KfUgRXk_o`^t=vM6@%0vs{b_7SpLYSjSo-9eVi1Bt%d#p8t+;Kf&auq zQo5B%g_Z9KQIFxb^VZn27~9zYn6B1S7`l1^vFu8(A~~`u_SFB}FubtOU49Q&M7s&9 zXV0%6Ogm%#!{NL_zqgfkuo<(T8Rv;?sn5O}5k*%_xc|Cwv)-goUqjlM%mKLglAek=aT4Xu1u>{0;+{O2zf z&sM&;#dgz{TFY!$1xzvudH!vN&`8WOyyCal;$_ASEq}HA%Bxtpzs(d{bi*d*8vJ~f zvr}N?ZI^E!w`-(Z&BCjR3%_3Br?-ptle|q_wJ9ZLx9<4!Qricl_5)asTN=rR#$u_% z_r6`&<$qXzklKErfvUt9_oBW)VLRIe8Rh`9mgUjuZ1`fWyF^3TSX2I>Sj6SA(P_{6 zCl!OVe_JW2*#PA;&AS4)2fa76UK8Z&%LaZh{O#3{nvRM5rTM-w?GVqwSqBZezcU9- zcdoJ`qw$7&{`pLSW~PLvVxre4{e&zrBR~1r5aFoF8P8@qxtL|!p^q0k{O48Y&-={W zurK;|bioVV__RQqsG}2_bZnQuOF`J*b`Tv~6eYLJ-Hp#l;;_)F%dZc#-}n!TNPOaL zN_`Et3o1oCw?1hR`J`gW;L~4}AUl(HtZQf?oWSj@Ip4YAsaevZr^lP`^eoh(jRY4I zA@_}q{uOsX3TLGCxaI4Q{c8%;+B3fdXZ$|G_AX59a0U3|ZXtbYH;F_SB;AH@_emSC zHr;G!c^C>Zt?X1{9E$gc?ysT)aO=>SM_3G)^ z4I{cb&6=}94T1hD=fDTM(pTyh5>Lv!3_a_V|KIuP{09H}_0P?G=7wh9o#1RMIQ<_M zuyb-`m?_xDQrX57Vn+987M^>VxBN#>c&6E%K*TbKnE6Z(&9)Vb{A&#G7e&5+ElcY| z&3q;oX2%N-{11CYBM5v`CX0Kn7OnN-Q*`=I{$mMPYH{TB>@$w|V}833 zWYC2!lk0wdL#9F7L`@oBnb!_KgZuws0Q(5M*p!d&x$L2yJ7TF`v^~H1*NJQ-i=eFn zm;)>YYlPy?59%E!8pI;&#D88DlE?JO{~c4o)C`k?GxPa(UbZ{J(hYWU-SEjjV+_)^ z+%NNuA@JP$*81UPd(QH#+pQ>O_J7BExP@g(Z?NLchnG6z1bMtI>7mVQus3z){{f#+=O<_+pthPW3(mMO z$C&j1>wg9wNWCS#HmxlLd0aj-^MCvzjxKmHzk#sVGvd4xbCcHJgQ#mOIbv+%BilR3 zn=9z){|AJsOpWb=_z3H%SDoLYkhSj-=raDsKeSDUzKrY5(OZgk2ItrR)DYtTn`Y6l zQh%*hSay*~e0ug6RixEcsG%m*7ZSrxONrO`9fYAD)QJX6$u`z}QV7dTb@SB*i+ZmJ7I|;@cg#v| z(Hq1a4vt8l12Ce6Hc_vg2)j~R?*Ii9%$I9NEYiAR7O2OGEs}!15Up9|wkz+~$9zN4 zPp*E|_4CC0=HG2RXCrgf9!BbKr>fqYKP%OW@PX=*yB-E)Nb)*)r%qUx2UIoo-A>F#!N#Ewlu=; z1*%f7Sna)$xP%8hl!>}K527YNp zR@TZZ>r=Gy>+_9ze^DJD|3J`aXw_SIVF7$8U7qKwQM3HS6`4tB|Io3@_?nCGTp9!F zQG)4gFwT5PY3ZLHB_121Zdi8A#}Yl_Y=sAnpl(c7Ge3ps;Ifo z{XWk-&}*g66FYxeTyUnsI#@$28()as{3WApg0bs*%ra31cA-! z@X3(8&ARCku;-HbN|iXyK~;EaRpMHh=6$tNdtgtpt9sn&Dcx#SQ6%>K(V5di9G7NT zs7x3-(_YIK-Q9IA_G{?gOZzX_P#rofYDHlH`2>e2TmrUm>$ ziLv*J5Y{lA);1RFArroa@3)&S$>!pyu=4@Aqm5}@@PU!t(KS(D7L#|)T|qx^JvT{D z(^^%GY!Dgk`;-_~lN|p1+)8A(5gPfuSG4@htXy`rRxNfC&7~etku$cGcS%~JIMlKV zryBNJx@UEh^Qh0<)%{1P1~^yy+UQRS>JXT~>C;^2JDJ~VWdP36B~)vRIQhknlTgRQ zs4WW4%rU*yih-xL4#u(Q3;I-hhZW^}H&0WdQTAXQ;a$d=i0412M;DG?(4`_g_&7AG z*NuX3%pnE!u-vEXW?Yjtb5f(I$fVOZrVYi;ST19ene{}QKu_;=dWzOA1~hTSA##H| zpmBzNPc3L`CiaGP1KlG11+7&v+O}efMv5hiD#4|o>vgAH#M0~Xbg>4Gx5}$C?}y0@ z*=ZGxY`}Co)tQdHL91-mj?|Cu)3Hps5^=V%m7-CJtC@;)l@mWEGi=mlLg_#0>NqT| zCnSXB1fi?iyoDlkw?YkVgO@ES%L7Ie$V4~GtFm^=8D!SGQV&El^sUb!Dx>V4;wnP+h;8}CU8d7Nss4|xK>%q8FcT6jNk8^ zCIjX2ATZ@Ew%KyaDds|n z6?nnUV=s@4zKc2SVKncv{A(9rWh zNmNj5$h9DOdU(Hi#*P{Ug7;T!?fr z1oVjU2_5~-1G$C=es_qy^V*^C1HM|d8fiZNaJMb0TAUBk6SujS#pjqV;q}H6*I1EU ziDd-@)Z-KxcWn4*VRgIBy;vn`{Q6%$ZnbAtZ$lP?FLi8jWLd+0_yEaSAP%Yhn%GMt z`5!TW5vaynpxc|fqtwgr_voI#-xSYC&*`Hl27e3AT(gaDbN@5DU>SI;2o&oIy0Fjlsd(XNZC@P)&c~xq3&%ACZL0XWS$$lM{MAXU*tDO0jZ>*L_H)jUjdRA7>y}{* zs<@NoR0_RKyiV8XFSO%C9L9dW>-pGw)Tj+^ih(ZBK8B0jj7|^Y>-|JSb>FG^)Ig7y zlqpx_`u`SRtMeIdsibe+8k|#l?m9#TQZo3S z=v~|On2-tby_z-Yb_8d{pnmtbDtSW3GlFp`uJ?5K18BKEt}Q4_@4` z{{aE14 zUV>2yeu#s7gs~fP8f&L;i0^F6)k^IkcKUm5@1n9O*R_?ckmErm+BeC$XhlyE1o;dA4peDhdritaA4YTe8aT1IiItP|HWbvIp1?I!^!{E+YG zCHo3D@SN|=CyP|_Hmpg!sBiatNfOo0(O3X^(JlII^{MQZ2%X~xqXbIvbnlp+58J`( zz>dyhc(z9y8cdDghhRJDT$d=`Ys}BL!d`zDgiD}nxUITw@ThH1ia`hNek$*mwX2l! z6a-#+gcb*)kCx>sX@+ga>1naH!jGLf)^v}SnvtEmg}VIrWC5W~3Drvrvxj*24MiifceK9237U>`7wNN3qI4Z?2MtfvEy*StAfzgn|c(DHou)DY)!1r zgWV||7u9RR(wH;s6)0Lg*gC#3Q5D+7H3T?c zR!=X?^6=(BDn&i2{8CB(r8y_m#ly@Gc#JiFkG<|rgORbo6G&#`AX#!|$1MPhR=y_CG8 zt3IFbdndecQ1Ec?yN`25KH12NiM=JPCQGP(4-GcOE;CgF)7KVT|BU@XWt?cvZ}?eF zKXQ9%WqR3%4e8ZU+sB1E%j|n;lxA19c1c;@ME0p}%Pm`} zh(sybWyvzOQCEtKHZ5dK3o2WZ$TpR5OPG+I$<~a-gkc!l?|EJ?`hI?Y@;a|`p3CF8 zoacF-*WgPjerBjzO$F-_TRcwBdN0E0qc0Lp?wbU;gTYcbLcCf**JMxO-{T-plwX^K z{8-8j#%2q+ynps+7s;NV6#DAQsz2ISX_J$#H>qmpVg;G+`JRuMic6XVMyHs=TZA_+ z7?N7j>3q%994~Gtrkmeuxx1}5mVV${vY;7G*>x$>UECBaOCn}h@fFP_dxp`jtb|B` zp@J28@`-xLRNBxS&U7=IDiyuxSE(>3APGjz`!Lo$sba;{K4k+4_gBEHw#5nlDxDn< z9N@~L93Fd>NGloSKpIyI)mBJIS0rS1MEojU#OdB8yzURdi%n;5F%My!FRt!hv%bia z&){@F0rnKQf`r~XZd4EHbE&-xlROq^==A^RS7?U%8`uB3rT@<~Tm5!zPnBVh>0{U- zW@au&J%~$3zxx5EJF;|D_nzHBJOSS3F+b>Qw- z?Y}qrn^M`GtQLH!1eadnWo`9&83pv+!V3TsDNKs{QeVvtGz7WA0c32H>f*NgoJG#* z<6*xK$X#4mkGOXF{StM9mmf5szYPo{Z(Xh#4w`O@WFu$Zew>kmPeNRR?AUjaA`&;EbB11&dltPLkAH! zj*jd59HC?tRpmljiD;VmcWT1pvVVTl)>yxbkm%!4=J?3NCua+tA28um0z&UL_Tu+N zQ^}rlX2OySN-^K58enGZZ}|Oz1j0IbX;rtjAln1f%b1Om{y!_OF6sRTWnDV_*tpN1 zQ8}u#Xnb;f+Fp3|AAz4&4f8bS8ugxpVdx;#r8jJIu)picX-gP14+Qf|*>=+PstUvU z;pjia&2Tza`nw}$Fj32Mt}>Xud(na@8r~-wJxq(V3{1uK=gl`0j&@P+(h41ig@oZq z1BaHmBGR+4B`FI>jSD!gamjaS(?Fesu=pS9w6kqs;S&LG@aYa=F5|mJsDQz2^LxPs zkI?Y-bhJaE|6ArVOqbhwXp4S7cRTkBPOV&J5B|}C?O zYP%I5w9iM^{TdH@cR-f75N8N+Eq(vphZ-akDj1;CL+8oJVFZ#Efm0y>;!!Y-=D+wt-t@AqbzGr_;Z2wpF+I1K@?|dn4 z9E}(@ZMqhz=L9uk48{cAT!!!{XVi|g95XxWU#|+x*RUr>|4g>!0(0Xir$fdd4pZ9F$~tl>!<+RBDf{!jP?|o|9mTm3FUnpt9)S5NDPEn31K(}nHODyZ14$VW%*&Z z%g9LIt*c_F-tcs*4#*Q&v|#P_KTl7V-uJNnF^SI<9xIiS;Ka^{$ z9x_0x-OjK3ow1%z=!Yoh{D5_if%C@U_~pz0$h8p+2OhYayl;q%2Rw5q7H_GHCySujd%BnVbrFc2@BS^DpKEI)EB!|!p*?W+==`E%)3aXcAzf2}E_wPgOHh9DatSoD zTUORWV`d~=XqlhQR&{3TzTuQX?Ex%+8CySz<(ttD`wfqACckkHD3<%aKTf%gDU{W0 zG&$n~P6^lewn4bE+&|Dnnw6yQ{!92Bn`-1WYF*2XgtzBcVB84pzeGvI-u|t}3Z0W( zuu1ZzS*G(_?K+GPE82dy#(t2>a3nNs;_tq*R-KxuB z^&LU7und+fx1KjA-#H$QI0uN0C3(A83sH z8r7P1g+hB$h>*^S6j=~CG21QhpmEsvSN$ZP2lruC=*C)da@s0BY;IaQ>_3RYxN40f zGbN|P#)k~rKff}an2@IH_de>^thYLG_gjPJ?Gv|SG`>>-IY)mw1soc+`k!O>qbmvbndY~RH?PzX+%2(UrJ&Y8>Almmd!qG(obV7US9V_G zXiL*r*GQaFCBw(oY^s#j$<0+sRSj%mL#IDDS5X)1+ZCe$9Y4bgEcNXH8kqVByf)K~ zKC%HvVqFyu<^(*zJgn%`qq=H-E*}Qk>?R*ZE?Z#t9kI>DDON1`mcy^!;vfF^yicM@ z$c26v`|J|bsA(Gdr@$5C)BdbZJdm=>{_JU=Z&Q~ygAO2XXZX|WCmg3|Ck^CP{%Cp3 zZQzWKq1XOcuO{aG5v!>mwcmUOjFwZw!N=Tkc?ub2WpD=wcU07`mw8iWU%dW1 z?`rnUXsj3kgCIb4F!AxA474dH|278@;^1%+V(Y3@?w0D?#eO3pW|VaHd?dD!%(HAM zdce=SF28jhWgcwRPHkN}*e?OmDBOj_bXjziSx+lX(Z(FcpTI!0-iZ?i=}W zL}~oNjqYdZ7N@)~L`PjoYRA|#ra$X8W<=j3CIPMkGYUc@#fstXds@6n zkCqwAGtt>%V&YZFKKkXMDz<&P*E(|f2aD<6*I{7(M~o~=l33MnXOGWx*>fGkFu&Nw zXdl^-OHme{U%a{om9j$Cl@HciO#Asoy;beCdbz2*t`D=+MQX2$ZF+<`ciVrS0Y`;f z0C6s$F|pG-<;24KmRQn%x}=q&G&z(02Rpfr-@qE_S7D7pWG+5 z;{UA#6_ss)XH23!3X-qX+XV&uF*%3}gkxMiRv%aMJGa&+JyIA$arx+X3xEr{9b{fb zrYv`P$4+LB>g!|Xu$2;-EQzk!!K?|o`6~r@*#^5XRcxg&s#l{Yz?rm56<6CzKhE89 z&d7HBH~eb_{ZRmgbQ)c6gV5>Xa@_ftTm8YbTJ8uP^WTr|Q%?3K!RPkC3LB;+cn4&Z zsB!QNd-FcUu3K=PBA-a@qeR+g0Re>d$g|chH_w_Eap8l6h}?Q{mZj!VVsif@xTmv@ zy4R~@_9A;V0bNg|raEdK)Q@Y5ZyiaOUxR^EqG`yX*b?p-0mTUvV%Q~<#H^|0#?KcF z)Nqd8lvD&|V|UmHI~$Kq`fe2D%>90e)6{I}?>FKB?EVGp$kAzE36=$x9`F=--ABz= zZGV;kHz45#>ptH8UEzkcSKyusB3Z`2WPx6v+6I4p1^KY9^%%VZ_ZWjq{c&;?e6@b^ zN=j$qXY@B=)O@e0Tm;uUK?_uc*T=^*ne61au^SjM;VsJ+9@&*%2|a2c%=sk00t3{` z7Z1-)t?b+ZS2v;jP%Xf_G$upWGpZY!Uok!8+(Uo(2qlu9k6F_N{kcQMU(2Ar4C~B3 z8(hVfoL|!S%}?Fp(hxf_=tlxPPCQ{xw->?J98vXF*gd|sp=)d~{qMV$O#!glkctof!cQk@~emnK2U(cDq6flTrUvNPEi;$$0^JT?mER@gA3(H>bC>>3ahe}^7>v0!yzy@ z3E#fUZMO5vH?+T~yVgwlE~9IL~+&*b@eC*|QJ5`6GWok~;h82BU^QkH{zf17{;-DXto&r|w!N?sfdPd*r4KNF@L0fnfK9a=mwPA9iuVjyjAbfB|7@=?rW0ER7s=gi4nn^L zNu{j<^Dn#pI``+9B7JnVfE3XDM4lhxh;D19dNAjkIU8>JAscl}6*bnMJLZz-eDlnXvRdR|i-?sI@7JL#xD%%Vat$tY`8@v&R_Y_1WL#dZbQH zL^!#A|>rnl0O6XY@&fZRaL)G%evf@bG z+FU5aY~!I?PpZ**ln{e8vrRax(7uv@Xe1irvw_sL>wA i+(ZGhrYBPZw8~94mZae_=sZY!cAl8* z`VJRBSP|=9mN(!BZ8^{Txpz;#A8tKr6Z(yeCFJ4ZbieEV5aVDjxYDAC^wn-qNQUK!`vWiF>M@|-Dm9-0)+VoZ zVM&pIz@Q@SlX^i%5JU;k0Lz1zEo&F8+^(vPXR=gzCcF*tet zZTR&y%PnkG+&Sp+&16|WB-))Tz*#F{S;e27^C_m`jPF>)(WDg)Pp1zvg_dE^YDkp2 zm(o0Xjtw9C24?J+U9E`ywu~jrj9a@6lbtyVCfzfNq&S@X#IF=?M)%lYfBMy>_zdYS z%Pfk0Ui+`bB=l0L|L}1UR(y^STqOr08gh;FlaXso#^1LM5iarGvs!>u+F*{0m&9$> zP?{YX_!K0H@jqd~NOvUCs))Ga_y6vlmMD5#1ODk*Q2+%}{qUVB349@0;kfi-e3Pai z%V+}*A;3)ZtR4zHajARqS+nC#laqMq3wauv4s zK&R$o@I}GhB8}xjjI3Ok z;FY&dIoRnX?78`GHZ|^75Ye;tg7g*~gd!@X8_WG71DKc~i0UazLc~~^@dKi(Fbq3M ziW$atCp{_QV!EP|Eeq^yBFGeloyNG4J<#W#jWRPk*cpbeu)QAEZyTvvATTlZxKixg zk*N2Bo#8MdV7d7U)v+Cvu+5!L*Kjmw6ba&$V~H#0RdGx|gX&xW_& zf(^h#_g`#qRzS2v5oAp>KEwImbX78u`uOI^0&$hfy@#KOlI{#`tuFHLS zzf&Y4?H-&RIMWIK3aF-U3T?P2&Z>t6kfCoa?Dw(w<$q$N6ub>U;i^$Mh0U(grc15e zfJymXp=$@jr`UfBW-XdooKtLM&emmEHY?mrf8ibVw}nM9Btg(7fM|qJn|-(SY#T+G zGtLPWfR7Kre_5?ju@X$PzjLaNbUwlfv07PD98@bns#2bF3Bcq@NX&QJ7j->9r8(qZ zeP-raX#bP%V7h68x~-+o#%mAyMz~ zy!KdSgQ5l6li9`%*Ff$Co<7_loZ``MLQFn0PwuzlDrp6-`=d5y9YTD8PoTGBA!p2) z1dQ2)wtUBOYd#m(AJY;SIvzSCFHw54b|?f=HPd7Py4YRLc1ql}B=`ydMtK-Q%K@>c z6Fjk_!M>+rGb00y1Tfl6M6Sz`E`|j0$dCBYK2AU+W3y^n0iZAKRB{i4me|wb;4R|8 zt${DlqnH#dJQHHDm=#|uEsbfB7_xtC$}zRz`?y4<=^?LoA7vHR-s>@WQe4G{rRP)I zra0@UOh0^&BJ8w1`d&)FInyY+S(WlUv8M&U$0gD_?>lh9Qg-#eDy{(Ox<1w;YD|2| zxA>*8zFe{P;Bc44h;&%U+1QT#*<-x2rq(WV8XKidzZI>$UAZ8Q^BIpowC0wXpOhc?FKvD05z92Ex4SAsFQhcP2FKdQj(ie9$mD-W zG>5gt2ui-|(AE{Ii1sh63-ORg7Wa`2ef#XzN5NM!JET7fJ%C<$HlxIus2U2Mn=ZS$2-x_lKXJ#zhCujP z>7$x@Uvp>XWGqkRz+?z&U!iL88H71i@s;$&*UCtO+V=U>ifcLZ5uVv4X>UmiwTKPb z@-(1YjYfms55h4;$f*ZwmT=Bog>NOUpg#rqRwGLxM4|(D4Eib|hagM~bTc zMte26lt6T_nK&ACn0;vYZEm?Q7!=tfRAA=e&_m)}&KZO#O=hP{*=hp$$8dYJl1hO= zxnj*h^=BRIDKux|VpfwcQ;?S}0*AWck9GP;mIa{vhw{nyx(i&7PM1IH^$$ZfBPzhN z?O4Lfg>kjvkJpX~$bfs%%!e4@5xA+6PuvHxDQPUE=P4F>MFgEbV~%iGZK>)DpQ9sp z-!D-s@7L}Nm{M;<&HltkJKBQvjnw@9hxWozEW1(%aiFpLB<%i2vcYQJj}4(=yX9oF zJA8>o&!#>0A_-kH{9nxy*w{q5w`NF0p1SK$v^PTx;eSJjaL6}3EjhZ)HU({b&ZH-3 z56#l#M#wrSG6TxG8ke9cSMrl)S&pS)r#l&Fv%U3kl9)K4*FHp5<*-*{b?NQppkK`( zV%T|_i7@Alegih@MW3?!Eq(&glJPg~XQzaMv}-lWk2D|MZ7+PQ+#ZLo=`y}2@d<(O zQmM~7%5}(WINZ}p52fPOPya`%=PNNtb|xaJeCyC~i-Mn3yPL5s4UkqI6qkP$MaYD% zrCiRO)~F~aIAuL}GV^1Wovs>?WRj%o7zP#A{3w9*k}0Yk#zZr1nN>&>Wh=U~wtbFDW37F%DOxwjNPKt;Dv%{B%;bviE=JV z8EBkz1=$kD|XvkTg(^0_} z()=P{28nwgH1VZ^|mcgoT^y@Anj1<-;C%HQUeMTgw6H#%o zxsuR8M-Xaw86!Y)?fdHr{6%GTdS#$bf6cg`KMK&G^8K+@ic%v+z8j& zmlMD7^U_n+s|VN;QP~QcEvY9fM+x{Fa~pmoVfWB!5U%wSjwwH`9B3>mEtyu?i_JDW z%yF|=1>~QC$_OXX8@VIIJL}2a<3(A^SUUp6@PTjSC_R1gTATO?)Ro2$C_U9rZskEk zngBggoYjA2fS+X3XK@uRAyepjHRd3J;3SbN`E+8+)4CENqr@Qm^kn5&_C*E*)sO7= zGI-Bj+hMYszMUI({yOTq7Ku$;k#5)GS)$xtzZ;*6X9O3O!T7G#%tWvs!yb`fQ2Jpe zeISWg8!3YX=*BX6;(ez|3pUl%l{3@%I(~*<3NZ$TV1rB_Gld$*nXMqAmpP2;yy3+V zPJU{er3JKoZG?+C%ZdKSDl(R_-1}{WFxrbImM6x-djI{{ekiB%Q==A)d3X1zMbk3Y zWUv5|Sd8dQDF%usL1&y%p5KTx{LZm7oI)#_)ux9z;j8(}DkJDl;fR96sG%pe8Ez6%gj@9pM)Z6|cc3cRd%G9b*+!Gw_5_%;V0U3;fr$4}b1 z8USY&-Eu9anO406dg$}Z z)xW~ijut!L$wLcCG>_yBPg~@~qmR(MyK7)rn+i1*&D;abrxWQLGeba3R4SlgM@;nY z6et?DAX(X0)s&W_x}1|=oWbpGfZom(Xs)j}njal=>2EGq!v-0S?MS>%Aeal*J5Fvv zB~XdF-xJYCot-92u0l&0!A7gVpz`59EpecG@lfJ}vuQUQcZ2fGx9+Vfia#_MXohN& zP4p_gLNT=3mUqJN%o=!yZZPKyACn>w_IZzP)OjQ4 zu|p76h@c;x40zsfqNNE@M4f6Xs6Fi@4uX&BZ52N1X7Giy7>Q{G-N<%Z-c!{zsGRA` zIH|1{foAfV>~OB8nY)^xsj6k^c9X%+8}636Ve5s=U3`J9r#bxQ95%v44*YS-x3I4s z_<$>|KKf(D)q4qqt&e-MptT)Dd0l|FJBe>b4P%V*;I~E^gly`y&wUbhCG-SDOo9fL z*_CqC#_%&n@`c&iM8F|I;v1AppxjirSkQNhMlea+5w|VgT3JyVk<4lLywJ7_Jk?{; zP`LzKrxT4LBq&oYW0f;!dnEAH^hP4J;Fn3M|2fu}4gWY&dL5m;nMlwp?;Zks!!%;R zt=Kq{kS^mc3yu*!E~`=QdcaBndVGjJ2h;o@A2Sl=2O3FCVQz~WS}zfz{&&BDjqp#W z%jDUl8gl5P-N>7>r$_VMBw;_SRB`%3h#;&K1NpFFwg%M>7mpqik72Fjdf?3#d>x}E zZ$CfSq!4$ehCFL0gaA^a{X;r2f@z! z5f&E%4#&1_bIX3<=eN<19W}63Y&?V(BJ$1D)cvI0cfnBM-?qGV_{#?9RwY<5$NQDu zNV}9E>4bnYjHr%(PKOFp!(t`@F&W!387}b6W)& zwzNM;)uC4P@8QNLnGaCRFg2(T#On zSnrk}>p)yNN^vP`8az4#;fsrxeEDa}VVW=4G=8De)R^5+D|X#W^Tg*k_cz$GofamG zB$|#=mK31{y;$ww>O(q!P4XsdHXfhkcIuXaEdZKlapYNV<`Pak zW;}UglpddqUoX``V!nfbXAey1FN;S7dE2faPu5!W%OmkJ;JJx%@=i}J&9MW?Lm-$x zBn3OVpXp6{;;l#OSuXC|F(QYDOd$vV$TqU7=8@=!V7`2FV%6g_U9iw$7t?w+xuZbRO z1IEjmb@8{>V-rX>P~c!iYY|8zt2$(TWliKsJ#3kW#IWO7(*PfR(zdLIEz>Fs;3*ub zmchhjZ_i(-jJ{iCPdpWvZGwrr>crE4%A7_MFa)&~a1M!c!B9ESXElN|;tIlaRRrEx z3~|=m*FVHCXT_)P=luo=(ydOhX2n7ptKkpAD}oWb9+aRv?+n4q%fZk$bj)M$#V z%}n=@>#Q2m>Ke6V{f+zHy5YjyEp<{Gq(C%EBHEp_9*sn@dPgq&?KiIvD0I7Cg&}}( zBdbmTa0G(ayLTiwbazyJjp@{##m&TUp|E{GKYaETK4OZ?c9gjSO1(GxJ2=Wc64MDW zCi|kDwY9}p%(?vhkSEr>2FXfmBdCrb3+;q- z_L&A%RZ|36y{e~yZqa9OKCC*{oHstnMgvO-qd(Rnf7+0&YKM*&!I&naEs7iS>AUrX zsgjg_b4x=%^}7c zw6CS7;Y8+VM)nm1T@~E}WbB1FJcc~}v9DK>7(^NaqjGjoOSf{_VfPh4#=ta-FAcQ? zQlo}2XN?%uygKJ&3XWq7^0SREz71UIsI*c>>OcOvPY;}}DyBK<%72n4<&ivU-sbB@ zEC+$2 z#?~oKEEuw$DEJ9+s<5am-L#MP`Uu#}(}~$6du$B|qn}F%#pvbSk5( zurW7H5}`>9OpBdjaX978XC*93Ri9yKSb#Hh27305-}GwSkF2vuxn0@ea7yFn>zEg+ zc9=+MNd*l^G*4PQ+=JZzX(3JzFdTXZ87R?bGR$Z-RK2OsBvlVXrFUQhq9u@6`{Ypi zTsNLY{rKNAgUaLFRxJPFaoN^Vh^e@|-mWCRk`BysPrCUZj4g6(Mng6vXnxx{goqi1 z7Lsl8t#$V>O()bR#vUC0n5!iQ%Q>C4rksu3n|U3nGLmnGT=&zc)E;BK*w0`~rA2KU z5v4zqb(4*I(OkK3X7{w2F`EU%^qJ2GpJXr*#90?3zv(He> z(pm{CZoQj%aJaB6BLd1uRAIiEo|L0Oo%I;?Yml%%+;iIm3OOPhaP!g%K)bJv4bT30 z!_m+Z zJ$e?~!gcdLuGNuL&CLOHoL-0?a{W$M+EJ=qXwV!cAlO1wh-~i zuYveTHYxB%j4`pv=<&##K_H5O$wUk_8>Nwi3JuZzwQ~u__v$0C1VSRDrAjB_-FE>9 zHo|5v3tjRhXQfy)%?a_YWBWw6Pg06MtP0yxH^K()g+jX`W|d9b92#Lr7d8YwA>1>X z;HlUe47^on1UStAej&vz$E=*gIlth;gh^eQpdYT`Eo`JIEm}Q{HeqK@{Vk=l+N2x2KAF z)DGtb3t~1tNOk@1V)H#@=?6ZJqk1Z#;R%=|9D&K! zs=Rp*CA)8$Az9)qBy^W(_rtccuYar-LN$Sg^d<#L4^-*4+c`gh316IPiIRY#Bz-f8ggItZ2JHcyZh2snZR{`h7$ILrW;zT6mUw;N*SLCD z$a3P%;~uT;OE}66-fl_NiCGE4>)jOZDb zMgE~1XS&kdZ@^?cimh7-di!Sf#q3{2Z^cT!} zu&>gYT-jxIue_ELi0Xre6@{oGcv*U7+dZwR`h8 z*@8tK=A5Pmj_x>gN$K#;dVI5PNQe|#*uIO=a_?^re(?(RqkoYPNCr(^x zG~qkzwrTEj&Va(9uQ{J9wn4mmK6aKi1)pOz|4*Fd@3)a^8R}*QG9bvbx%*;m)jA9z zWf<4TN>4)Hr=s5An@QLKCH-mJGB`;hG#7J|??X?wtj3QPw?zc%a1!YWV;JsIZ+)6u zy8FJ%Q9!67CH$YEck$w}~6 zO=4_u`pR0qtyJhndew(DN^FNFI`U7nH>gc28F%>t$uJd&EuEg&jeUiJUpisVql#~a z8W4>R`v?u=Mg2h!ANEWrq!fgZqRuP3HS-hHUWSgy(9#eUAC=pCRP$x&ksrT*o2y(c z0B5TNmVyn0q%I3@zG>^s$$^WVYO}SAyw?`8O z7-4#C&d}^a@@U-5`4=*Zj22`N6tnOWwIfZROyP}Xj4x3!Pxbgx}@hlFkM zmmg}dt4cJq#ME|?K{TQX!=`$+jE-nasF#WRZ}_H{PU$Z7%9WNWyZU&t%+7@FNN&nR zxr2^;LVP#0c-~dXzbQg6moTf5qAOWrzU6D)vC^-%J*oMaNC??-H+#U7PSBfW=X^=% zM0h6%sA<>l$Fh;9-ZZM;J}T>P5+$Bx;>9yrOH~SHGIeT_Z#5QlQzVQ+cAP2gkH~&m7I%kJAoy2_DzO&_X$L-XlL!D!XwR;OjIwiPsohI@` zhX=U_G4`CcP5By8^V7I8Yd}#10;luDUY}z2KeBsks)nm&yxVu}s2n}~moB(X&{Lt> z>*>xRVTkRyj}U+e#7m+swZpUGqY3pt88nUZFO!euu+I2*Q*y>uPdY3d^pKxJ~JWfFJ;DO$WCJpS)K!oZN5@-un+PRb! zH>OX`?`sng1M49Wgeu;Y`2^4YlC^B_IR|BLwAZ^NKq^ep=9}>@6Zi}2=H&4Fj`cbS zcF@mor)rM^K1#uiYS%sr24kwB4@AJRpK6%T(b!ziPgwzw6hbQx>k={hVI2&)CAL!^ z-~~g>Q1Axlom#tk7GMB4Ck60_IH_iV4|NSdh$5IXkVUt*C=Dg7CqRq^CHR`1PlnbV z=)0G}g`gP=IgZzq?|KNWkVV+%F5gBgV)BLj<>nax9oi7a1K`TU*`K#BufvIzYRacs zqj*@tbFPXOS&8v3T}vI86*m4d+#7smMf0l*l7XHZz+5Hz-yY2lvmV_mwD=kVK#Xf* zmriWKw(@0%7wvhs1nn@l=JicYtw7n$hPmVty|{bn8Dd7Ei#PqZW$T7(1>_CKqit-8 zuEoDdS>%#F6PUO7!Gj=imBWjtHoRK2Qt)KxzTMBZM$-!U&Kwa;DX?Gm>e}|BYQKuM zuUGz*#MIHwW@;}velWMX#NTn~iw>JTFg9yxUlT~N^foj^U24GH)EoVEso8VepOS31 z3gUjTfp4bBK_@))sshejRF8n&wf?LF<%ndI&P*-kTI^S#yABhL)?pBls3HYb!0+PR zmsD9L3Yk8@sP2K*RkFO{kTCZ1EabDKT6Oh~VA{pS0TFtDp7W%Lpc#iJVyv0rkkG#{ zjc(1lZgE;a#;~^yQjRup0Pu zJ_F4Hq@A=cV$j$JD(V|)QjFkC{Mx!5f4*;|L{gA*@rA-FXsjm?J~K^(D}C!{K5SUb zGQSfb57o_A=@GYWR?vGijkaKBb*KJnP`U4O_G2&r=z}sBj4x<{CC&$2SQyZxE1;g_ z71Q(;4wU9S>ZB8{(E?klUU&>b$<%X6vrYSSCle zkpItGD{n$$ewN=s3c5;9TSoUCz~E24U`n-XDy;jj2clT+chXLuFV%0Mq(LuOD&yz$qX<)Gl%%j}w)#!y-CvG8`A> zO)GyFW9^z%Tj4qA!fV*P@y+w{QS7=B+1ZrIF^c4fREaP2-n0I z)N;4^)q6JkKB>IWmW+JTvqSpS7`_ld?Ef(FsaYqQ z#8vG{vR{Hb(fy?sQ~bQ%N0~G4Ffa1XDwyZSCs+Id$xioa*sx5i6#c@}B{5$zyeu*=ir8~tAYj4Dy=^sj|+2LLNgSkp&SbjbF43{OSLoDdTJi%Dw8+m7PGo6 zV148{sH^>^A78}je?72zsH;aVAR?%_GfosUlh>b9w4?9gPDMtfA>TEOm`rJ`c2VcO z$Ay2Q`3L>Jt!-9`*?f|Aq8x-S;~E$+h_vevb_f({f`?cGBwN z&`~&n@cOgkR0L-_c%?XY+0ZF|x~^ss$9h+b*!=UlzZw3hG7aI*DgNRfCO>KOiJ9-1 z-y$j_x8?}PvzYu}Z=tdq-;z5O7))VQG=a4TC#sTAArbzv9v0=i41w3}th0y3s%L)B zPqAZ0l2;sYb_-TuRl6GizQQ0g@sjTgue%E9dIr>&@^Z6QYvAZopEPM4e*WVguWO$F zpthCjqTd#o;P7lvq|@pr$)~F>Obp}j^DE#u?#6jr<4&xNTN_E1=S@#w_#o;{kNtgl zi*KDc_CdpaN0%hCf{AP~_U|4*KJjza!G&G`;APO8x$*H9uyiOoKhX(4&3H4)7gG7! zv`4|P7xkW@As7G4-#1UmM~0Ezow1a>T(1Y##bx_YpAdo2dM3ADeTUU1^mPDuW23jL zmWM^m+z>wjGqk~xB$gJ6l$*oIi~r9ZScUCHc3d(s;#)>GJH}B zon*nodvO$aXo*$#Ef_{&x-#776$7V4Ff*arHm}# z7D)RE5Wkz@nkuP!@d(PpK{CAhwOI8L0H0CUR0MsLJ-cCMl*ZCc#nV0l{2$>EvFcyK z>F*GyPmPKdp^_?z8&k?tFnB49lfM&zPJx~dHLkYCNRN2?>pZPIs2li-1H(pGL*Y| z;j94v{W3#)IpIxQB8`qTW~%cB34y81|dkm}gOSp%87|(W8=?gM4xj z3$Dz-2b{^LLqeuDcgWDwCy%JCnCEC2ASN&6x^@v4Qt&#@bh`a0o$$f+Ekg2n13_HGCJ;@tm1cW=od;1M_p2$|JV5p5 zQ%BO+mxk^L6?8uoFr;E5hkg8@TZi~5iJ`|=vWn~Te%>luE~W|{V z*MYWV+s4O1-Y#8{D(LD0_)F>)Jflk>Q|xYz{c0F-IE5$4;3x1vAVD{3E8;6j2>ZBi zVLm+mZ{EUG_z5?}Z)mwpALv!tv@jv&EFGq21HbU}tFD{7n6IRJ51ukE4Awf6-zmllYGC}_1GCVpREl;!jfmbuBGp98 z2kSm%7*0O6>*PKjU@z%U&^ue$ZK)p8!(5-lE4v?Cyz6O+%C-JvnrwZf=~CyZCud0= zeCspyzIiT1oRd*-*r*lgGyn@AnJJ9^y9{m+5mkjbCyX8@7#KZe=u6fer^WVXxbD@R zE?OVL`*nYIdQ{!ru;U8UmF6)zVV72${CTNH-t(dg|f1M-69a_&RG(jsCE?M%b7kwJhAl-q-!0tl-?V*kkQ!*0c(B9%o-f zB{C_q~?Go;+c6l*Ol9GZ4d?CSR&*wNpH%xh<#zmBsbytJlz9E3;*%gjzHf9sf zCkmcNh}&9$M-b!;$fcINPWjg?YpTs2v z`x!GP0uLrnA2Lq-)l(<{o)QBIeMk1i+POCYd?9M??GtfTw)PmmL);JDH?m5UQ}>q2 z)ip*ILQ;mMjNr*D2B(X?${^v7YKoEkZ&Ygr>@}uY3-0O5JNr7f5 zsxt<2KLz39;DQ0Tny)1}oPhWoX$!wehE|*E3t2ztM`edr-vqctHZRS0 z+}aRf)IcieTQ@ptC(@tY+ElXm|GWk4Og*{u9l(baaOSiX#vXNmEnIE{#4>mO%8IFD_o!W%!U=NjeeW z=y5PIq>1|#Es1?xm!v_d+}tAHf9d4&G-Rh=zfsQgz41_g6ok2HXY1Qnf7`RqVCY$Qn4U{q`)lFFb zssh*>5Pp2~KL3XM_C;xyj(KZ3P-_HCRDX%K#JOl=d+nc@YmHY{m-9bqES|Jq7*hvg@hW+Cch@wx{@#|Ip?4xYP%6AI<%6-M(J3FKl1kJ2R<`$# zKVjYf)D^dAboG|Z_-`L>d#u3JS7B2kU)OJ0`FiLW*Jxo`Vo+b4s%yF9W{Vi9x4R)N zSwV-Nv#wd%Zz60XfNThIet=_JL$~%nBgcg}FN+e<88Bax$4JBI`oZ4#Av6dN>Z$DH zNcdh@dO}B?tF%$wOPNI&j68x;rmkC7y!NAwp(~fTyWLZEGOX2jtKE!idsyFoNR{FD zb7gEpU5&x668?ArltXx~`maed@8aV`)L8)QjxpjQU(XzAT(rQ#yXL;iWxcKmpC%*Q zw_={aHQZ4BHaYJj(Ytw~bO4uL3n?8D`xaE0;v&R}tx}{;+pE*-*@G)yD(6dDEU9`j`+n zFY2>no%hhj{y6BDmk-TqU!FL4fn=?nUcSg<9ZvW++KlGYOF|jz|IBvJG`TXc#Xe!{ zwYVV(UZ2MXd|*qy$71I?iGjrngnciEG;aGpakF}?D=-MbpVYCM7Uev%+jYspAnGH# z#R`KW+gtyaUcPx@s*bRB@O#`hlm&^xcLYmAKD`ohtMFYqlRXg9}HAn`R* z>?-G{bK_dT>i5;ClS$&#=HR0f9^XWu25g;Cl!G}FrN?&dGIjfdY+R8sVY`UkJKReI zoHuqArKHh&!V2D!y?;x=53MLYQDCgDCk0u1&f6w5?tCQ6XRR!@F^CT!CoY4!5{!DK z&?#T9oNDcZ&)2O32VLSY#NujaZv||6z}Q%&{uT$t)2#geEP2zEDpqpxw@0mOJKOgP zABrg!zRa2JPnXOz%Hzhy{D%;6v54OBhAeM-@d_?mAq|z>aa^wYih^4|^p6H#rFUe3 zeA`WgF!MS2>r(ibFlPE7Bu>GnVY7%Kzv_QA*QZA)b~s^ryz_op^j;oIN&XzJM~Dw4 zB%Z$hgY(Wi9u*})>g1D)uP0esy{zB%fK4PuI7$drg*XAR?>ffW)TX(w)%cnZ^rwvv z+Q^;T@&BfC46qC@>Zrfh=sMlJtiugo_LC}mnR8i5#sL8TBLhm3A{B)R?`8M$Z0oOE zuqIPHc44^w{Nr=m*@Ru?2?!YYk%QD}2B6=~-(}kwF>N@n0+)T>xAj}&CZudZ6yZwN z{ZfJFXtyXi;DJuR1bsh0gWuv^1;&9#=q$;*J8kPfU6T*(t$@uYDCXZEJ4E_JDysUkYpfgBarm zThP|2%xqyIYES6@$JKKO)ZD#)6GDp@m8M9977eAPkozV@QQAt8riS*ChPM)FX-8V3 zqNPp4tJF9^U1iCA`+Q}Oh5KxjSGx3UNGqrUWZjC91Z6|V>f+o!H0V(2w>rwZ47E!?7&C5c z5LtJ$PxrpP_$B@x;?^xlCHx}jS`-#v?anaT7^9m)=(qA2d9%XceCo3@(@F8@?(piySZO?TPah6q91d4QUH;-7x|LvL?jm|}=IIdY{(q@_}3W3tzCTF$hJVhnG3JuL+;p`@SlM&T{J{x~k8FJ;GJ zML#rtkLjP4z!`;c@n4*;cW7Aq_cxkXa}Q6xwm=Jsqi;vB)Q)zJcJ62@`NcY~Uvw9f z+l>Je>3xmhD|^94uw=Uqe?wE-Ff8Z7uA2L zi=&HvniJ|z62d=MEpo^h=V*S(Z^w>Rl7H*?W53hBRO93J{511qo~RGto5 zz`6E`;jm41+#nnMAIX#*w7A^UyAXZp-5^F7q&l8qTW2S?5quyxE2E#t)*`2LLWh-}vNHdY5Ep~1>-!TbMi67aU7DXl-U&;IH0#HV>ss~< zYY$Dci&Gw{%xK5==1*)aH{g2CTA<6Ui^S2@M&W^pEz^UX_iB_c976ytpS(I#wkL*G z-1K#Im0LMIR{JrS-2?B8KGX<1jHAx_vQn${itmS6R|T<~QbA^!ko32izVgoS0L8)z zzau4DG77f^%;hqzMtQ+#z)}Wd$OjoOuM?9nyLF^%mgVEb?hYo8yoCDPKJwKRePT1 ztJbyfo9s@`9gtP7P^hwAWKUr4m1R6kTVovUwRq3cow8z&qRO=D-gS}weZ$7FC_$&j zD)E!P7J5T&+fYNyD|ZXojqU%4mkAc%_W7k-kPCaxHY`vjN`Q;+yRpy=;gXh8-*coZqjOj>jOS!B;mpGfB*x*gz&SlY9=_KpQBX%fjauh_;d^#7nL zydWpwCP$Dpgi98P*Q7hdcINd2IN|Y8a__c(U&iNL>o;*MzmLPb@Su)Iu-~fxrm$PkuGE3f(-}_3@wXoWt z{bpw!XIFF;IEQ0BX#UMv&8Scr+b!_5FS(+4C zNqqW}qq32eGQz|ACb>C2a^_KvK`!nu&%vcn*nQo5(k@2r4J(8ew!4pzd6a7q+|Xd6 z$LvtVYU#z;-VJKCeI54tD%(Q-XW1pfs4ena4fjQ~AKQ?-pHyMSL)NBQ^_l+T?7wZN zM8)y@4pT5zGUmj)yQR&!sSW@woT(q8T1L4ooIK&BKjb@+Ee1$O!Lg!`!O8G%1zbkx z{v;ZB#ul{u|lag3v4~3J>P2f`-aIDk~)dPCSg^X%$~}} zE+y()UdC{hM@gR)PkN{}#&UM588<}Y&``?a$*OS8{CvflcTsS z(e=V@L*-E`Gf>@vtSQaX!m(NMjr*CV(`H>w$wAR(*;^px2UM>#GO^mtb3^|GghPL& z)NR&pT1=~=JuUG5}o*!FJf7EBY*+>z1_9(!wxRnHr|=hy34lpods45lU{AnZR%4SswmPz_s`&cNM{eH`|z3{6^HYOE}u=3 zz@zL-3EyOShoTr%v|imMb(>LbLi$&p&arI4Xt*I3N%Lz+bhgUGl)o6^nk`aEgBF3( z&)%9F;$`qyb1i&qR()%0o^~{Vg}qgHeWs|<&VUMwabSLq~asSIhXQvcs;X)KNRIXXZ(@Fi~q7J`Hcc6aVuZ~u+sxS7-?$ikCYwk zg|BopK5%zIkHWx*UWsupsB$J}o!S(#M7u?)OkNqpM`H*a9Gdo65J;k`k`#m#nv zuec7_5`F$lT7mj@@bc}%R=Z)dF29}_a8Va1 zf^bsQH58+CVnK}1q4~c7KVG@`MIc(CYgn1i9x%p+fgxrt8 zKG&Pr)V9ax8BmCJf?$mGv9bEEbzjfbNYN5uH`DP9Ca#>@7{%WYO)kf*P#6GZlh#e7 zT{}&b1>I;@cG5Cqa@2cUJIq;wd?nVq3%I!Zrm|I?Tu18N{`y=;3Yv3EdOs5>whaC| zr#vP@(BjCyQ9aRGQr(*%p#@em$J&JbUI_}HYJr#ol~Fx0d|QxxA=FB#(k6o=>K#k8qA{|LAA>GGp1 zK~x+lJssntNC>WE6*dtoine7Y?|<4_b7xwBmJRX6@2v|#cy14@GDVNt`{$=e=8D2a z6^(Yxvd%|UVe2TgyDi*gG{FKWD&_VZz5j}@l`i>V5Zlt_01BEDOU>;V8tlt*EYFsw zGX$0Y(ov>TNhJDR|BeYew7rMfS%~6#pp-dCH{`eNb#mlMIHm3SX?xrTBf4fJRcW1Q zIFG$=6;G($+Egw7if@W<*7|J~1LBRs^;q{@X>@jh)uvI*m;TaJ{-Ba5h#H55Rgg2n zn0>knw122hz$?^tJQuE#_2DeL@d1)y=#!t9UHD%tc5zvE{BNy} zHWR1cG{cdsGK*g8o*=$Db+7|h%noV>A1O*jQv3syH@vPYs-ng&K}#;I;hM{oZGVQe z;Lo;|7j~a%2^D(oXLcMVz*HPHKR={M|H05gt3jKV9CK1)?J=~Zk%&$>8Rq@j>@~qP zGwznq1xNs8EhxS#wCbeo|6(Y(EGIe;2gf08+aT!x(Hbxz0TV?)z;8#U-fT+eBPZp) z)hezt!L&nRA6?7;%nwViIvt*?U{qW!J!YbY*>B=;-b>k;lr9t0jsJYK{Fo-Jlp^@L zTXWAl^BtJphkn@VJ+~Jd4psJoKIgxvJDyU#?0)C23LEqSAagLD8ZpJj42hBSF;%H< zPcXRiWhSNJuqab?g%}OS)PF1kR-|J#m>S_^cm0@1b%ym0H!HTy7@~9e15|$&b9`nh zpC)`P`h!SzwjAeM{Cd#B_z(H%z6U99OLO8>?|ey5W}VNzj6>oF16qe~Z~o!6DNVT4 zhXM76fKChn_yFTzBEiJXRKcq`QZ!yZ-lPfAd(7u!s#j_2d4OhiS?ES{q=^aEDF0-R z(rskn>m51O3j||m&Y~eHOevkGu!%>Wf8)BXzizn+KaY}$n=c!kcivGFB?})H{@*nq z8C^yZf3V!(-(MjM>@$ z<-1CpjI7p_NOIW8$X3FgY13$0Ot|12ka*w+A*b9d1Jefl+6^$aLE?jv1o6^OeTJ|- zwmQd%H-$b%9u8yIrJ`l=;Q)#h3CeM`kU7Yw2#+r@E%u4AVl$oF*?@7#lY@%Z*e)(_ z^J-#&2NTYM?}GvB*t_65TM8j)_zT~xf`ufuo7r@6PV+w^qnlCiQ8tnkMt4}5xZVwK zaB>q=h|m_cGnVo=z;Zgu3_HUHK&JTe%$cUhOZAUTW2-+FeHsMT z!QSC@J5Wn3AZR=bqfdT#KUtW=Bg|!i8GcxWQt$sk@Z=>uf#oD8=FP>}cCB-69ly`% zcl%85KQjGN5G&8sQ*|DG*oF;(-C+I4ZtF!?M`o&~$mzH{%W3r6u_y`G+)&FHm{Z;2 zu_L0|u0nl=!~6oq0nq8+y)mJ<6atCEN6DygaF26AP4#AfK&>F?`1FtD`yRa74Db={ zp&LupKiKmmuw)qaw!Xc?DsVb{{ZOe!mPqpG0q5m#6PZ#iR; z*cfRU^I1XrR<33~o(lT`{Qq#_Y+TDnuI*vfc9VRww&v>pp|s)2xBU2Hs_?}iRKXZ! zml{-T`mHM@^R!}q3A%gBnO@9S5sfiKKfZ$YzIF+D=h6-kmR&R?woq6dxfBm6 z1#`>4RXD3dBVRV0KKa*{^G5&3v}8pq!;gG`0e=kO+Tk(YtRWaM!DvSLo)!&3^<=g>`AO##+XIWnAmM2E#I% zxK!TlgFZ7t1h(YuX{irX-`4D?4-__b4|3^9%HAh+OW}W!K&VLg3D>{~M@`kJzDB-P zImBt8hSeApfumTG&>Svy(kSrr)~3n~CJ!?s44k;T$GO05JeH3=V1 znHxs`T_h&cijj+%E=agmMO5#W_kWkT*(a4e@S;E6Z1R}{jesaB#lB?_B}Qb}8UZ96j9E`;T2kRww<1i|b6 zC(@Sd#?zx){xZZu)*Kt}-c{IKhP_+@oiAfa$VMwEOvQyETR)`gGE-|K#y zOqpPGTs|(J50=4p{LO;{rk_CNLr6W&o z0`M$4i8SYBY`+MbrQ*09md|lxBNiFxNJS}MV%z3f9ht3s$h8sP_}+-ZRk`q^J1LsK zxtF>62rNxeX+CD=>FeJW|E-L(siT`^jV_Lw*f_cv8EqHSz-;(;nEY^(HzB3j@XMVW zE*}8F54E9byJ+~$3B+d12}9yQ{;NT4vENiaUO4#|-w*4}%ZveKEw{>9sBSVdXSUf!v{ zQ*=lB_Ndz*3!{`R>F8FZQfP|9?9IXpl)^==PKJj+Rc_tE`Z~)u@_=zjV^DjjrTlZ+ zx5C_J_gS|X$(`9_D7XJFgTf^V6^B^qCd1GOuejmP`5s~qA%8@TBAZ^&EFB!dIh zq=B8CC+QtS&TC(sBqh?ZGzce9Z?(hG4Si=rxXzD>(>sKm?x}}8wp%&OAMZ*%}vorcBoqb64toG2j;9|m7Y_Ayq zhr%h_NqE(vf1&};+UxA3M9wPg@e}>8ASKuAmU{gn8HHigJbaS=x=dEMn>F=$pbEH$ zqn5<>pV8!4%0Affj?Olu@N%pGsgM2-TQH1Sm#7!5_Wk6sPa%_-AWqPW_h{xvObnmH3en|JA!(KVf-lNtg+8L_ES#FAmSC zJa~L7&^n~>x{g$~Yh>M$9L*mQVocF|;Um;3^$B-4t@G-*02kWB|3hN7G(2}NqEGqC z{OABbce3Du!T-k~M|0|e_yb@^F+M7AWR6DuVy#RUCgSfu<4Nx~t!os+&}5vTU!mK} z56X=Xf`*1yWPbiv5f~bl=q*BcGmpw9x|VnMDR5$nKwU^+0$rjo?QaL4_pULC%8fUf z)Mn2xBA$9vb>E_0w;;`z64cR2+XV=rjD@dU+c2pJm0Th_#UBGJy3uv~I4jalBXT}L zHv264t593s|xgkIB~Pm`$0eDjf|->EkJM?@F99NpE120rbpMdbiA#D@0ho8MD7Y?yB1!A~WL)oGi{uO55j^y73*F950|I;6o?XqcoC-iIJn+A8ctER-zk_W zh%l8gkefG$Kr$*3Cl0}cz9XL{hsRWNyq>MbZ}KXq3?_77BCvX^o$C@i%W02Y&Q34R zD24bg^3VFD_(e`k@7(lTdw?=bd#bD5xCP>F{~MBYSv^I9@xc0~0MBo08s0=5&J#2n zJv8no^%!Hz&?Dy65W?Pd+r5}Ps3QOG$?9WxR%7B%qgtAoZ_=TEXom2_(%`l0;V>Kb zU_ZS^hzMt|yoWN`KyS`-Qy@i^*NHhl-85dO!ji#bnsI)1R)+D&f2kP~IH`_rED()m z6y$0Ucf3G_?3Uujv6!J?YugsbWtAF|bl3cin-e*~QaWSZ;9wX~Lh!QB-(y%*CwBC25Tt zk6qswNYPvqj_c(}_et58z>`+nqI4^Qan_hotQ`G%3w10f&7fCw@Jq z4n)62#Z}uHvKp}bY^XKy^ zgm)zYnwGvI!FXmJCl%*h)3~hFg^(muGl!m?hKrGY`zf>s5^-xYt6t_(qX? zXWXx(MrXS0-*g`ByWEk1h0xTUsO1<%1z6v=l_pE=43}mB^#>?$E7?&>pW!M=vf>F3 zU#Q>5)6(q!1Cm=4^?t%Lto@5LIAgGIjPb%cJzjjX?{|{8w;sedI!IbgKjThzk>dF? z@n1J?vBUfR;lVRz{+&y6$lxsEav-sM&x)Ok$WDC7oc_hKey{Cdh4A-&385`Aw^>4X zq@7Ea3uej}p8N3%Nd-l~MHWOpU1x*>eDnpu@7YVf)|{H!4E_{gAhq4Mxhw4o&s+$} zSu|WUWmH{fv)4nlm*V^G^WbStK3~hD;oBf!Gg+GYG0*V#kpYET@1G|*lR9|qLMPnapSXhsJ!AkBHr$x^c|Z8xmkZz6@hUog)?f>y2bc;BWkj0L z%Y-CRJsKL;<;?nxFM*naozQDB^n`~#&%H;7^F;h?0_6C=r#x2iiFJCFs2C!$FgO^` zYPjg@$GuQEHVHU^jr}jk z&i-Ua1;DvbmmJ|6$s`^4XY%)GB46d)MQVWBwG7vB)@;l(`d;VDhHo4S0N;s{dB6r5 zbsp{u%>{$YJda?b1D||QyoIdyx3KTWTb2pWlAde@@PbHZ%oWZn^De58puuz`@2{?@ zjkNTlAxYE6#E8zSsDStli19ifB2s&|zjt(gglAR63ND23rbOzga@x$h{7c~l2!`F0 zyt8T8mkHmv`O#3_d(PPnq_3Eo7^nllTPe=!PnSa?PT{>~mE-EAihp=a-*(1|KWJOd zM!707zJ7`F7YnjCw0mx9KH*VzCl0<)xG3(tKw&QUAF2D94c(fdHN(xsm`n*&X%{=)S z{6d-G;y#+K6t@M+!kWXp?>rCQd2H8;Gz0wxHD{rcv)XqSY+t#gSh%@Pkz+s38>uq{ z)Q9YZOoo!;s{IEbx9p7L(&tQwcX*5o9HDTWwwkt zUi@CTeuPbm2hZ9j{xv#ZLI>x*i4&V6cepHJhC#uP2T#pUco6CSjhk91-IHD%-s_@# zBY?u9p^!Poj}yfo>H&AcD7d?dIaWXVb;1&;4HxYq>-^YG!Jab>WlE*2t?o{3Y^r)O znwal1PErvz2Ojpc)O{Z4TT=F8T%T@myv(UI|5SGZAkRty ztNV73A<0?6mj|z~#_R0-&U>4IIzalvA7lk~RZwe)*n zgxTF;#aimq5(OKpkEYXSlO24w<3p-TBx5JPZ^Cv1mXR@*=*@z7&Ss#eTqfXT??1DOJDUfErs5*pTs=D388?_LwJaH1=sQKjR!5yCqI?Ek9T1 zJ}?T@^{Xps+3d#BvKk!&Bp`qP`mue0%A?4e0b>SGY%MpjBU|Eg!+v~Y(%z=wfioWQ z6%3y7o**5Bzs5DS<0Ks&OdS*d8d1+6e8`Uz(?~GO@0a;~3dwgXAg(@LQ=S!u09v*yD_+V82X&lwY-}j4^nO}I!W13!ba$x6_I}JCsQ-th{yWm(o+t@Z( zN_(YPqH=JD-v-d2>MANNs>U-B}==pY+Y6ci}U zW9MY0IfAR!=>H2|aYYXQt8d#Z-KG#8Q~Q>>IU7$+8~;t^`ACsr=^MRL`T}clR@;Cw znrmS_KZUknq5k6oXwtAty>VFBgy{(|U)WxuV885VpHlE%mrl>gNL1QARbau< z$@g#Ci|K#)>Y&r2)+vuZ7u}yqAxVAL1mkuZk{B6o;=Xr+TZPrDD>)#8d|wW6_QOv-8WD^ypjs?n9ZSWV#~BN%H| zJNolUorE9pAtwViExB4p8u$?;@beJDsla#|iMX}<0r!9>Hx4?xJW=4p zmWNf?+j^y~9EuFk6v^jhEnbWi0_cdiS8Rl))4CbJiO-gAoQk};*5^o7JFc1uG=tXJ z?TMCV@Wf#(0Aypgq&)PuIaM1Mg1Lv(d^nu!aC+M&jAmeif({cj!6v@KJdsC3llCl| zF}{LlgS>XNv)UG@8$Y=ClED{;I0wABSi^{tkzmV20*;o-)_ZpT%>#CY+dBe1WWO7$Bfz!LF5W?7UPs4~=dg8QgbmVtFMvV7Fss z@<)MaZ*#=cLpV>XSJcRFk^0G2EQCXNXz6s9wovWHG#V_X{tdF@8cGzwO$JeE*5N`mKy<$M#@-F%FT#n9iAgwvjd|CY^ zElMYmD@DeenhlS*HJ}aqW`K9ck(&EYuFy3L~hmH zZP;Whj5bkUmwPMByHoab@g~H4WJ#7x*Ge0J8%Yd%AbQ~(QWTC;_5mtJ6)@bRnxAR6 z3+6Vz92xv+<6qR`#e}h~+?qj1$ib(5_6loiH?1gq_* znc~NPTnC%0t#WmhXj^$rEdbAv*(0}3Gai7-Xxdw_IDV+h)y{udki!P1XQ1h)48Hlc zFP~+u1LRMe&1Ixe{xY@+nG+&=B;KM-5{e#yNRU2nHZ&koJJ*K4)8agDa3J?#WGchz zOjc#CMbmWzt&aPZ)v~)|v^B)`6${5vSF8?_Cw<*}#^ixK)1weit4JCg53nJicQ{5i zLN6P#y(h3j@@vo{FZk4Zg(T>mr&Tbqj+6Nl;8v47aRdyYjj8tUsd)u&8#?q&835a-VK7GdYwwa zegv55bEjwPKPVMc{}hjT3gXpKedzVp73#C+lod?(?6%#|R& z6GGogyL_@hrkq7>G3pFY#7|$K#v%cz-}c!So7L0p=Mb2|;4I-&g!j)}h9(@QN??cg z!K;vk#MjiB%VBqtQ_keO++rSM2JpdSkXnU=5LG`pEHOUVZu%Ik?`@^sqs|bqRzbyv z!!2)?0!1B~aO`nEQt9eXtBE7@P;tIoeh+&#ELNU}v=G@J7DuoSb>Y~QWh*0Vw z4u(E}s?&f$8ZFe3iWJNVc25v(eOCqJR2g1~pLz^mdcDj6N)z}bTEYC1jTZ)WfWD5z zdJ=RE9>{R!5kD1Wp|zn3 z58_T%;%LMO2OB&8eWrmBt=s%Js8VryM*v4FK(e4!MCHqytOT{Yz%5V)k+`ZowI6ct zIs(!ck_M+}G!-pU8>4mpg=uNj2c4G`25?IRhG}fOU?HOhGL^~11J{5c4%V+t!&T!9 zBy6()qqft4%u=TuO?7DrI2=kn-Yd}zTfM;njLNuv(Sz&9kB0(!uxxYpy`Kl=yO*tK zT%kx#WdJ1-UAP%p`{}(kZ05>*XSldeWY73xM#PE4fC?u#(K|o>wxL#ACkJilZMvFl zWhnasBwQ7e3#}66N8R7LNmSm82)GI&R<_J`QE8m$xKO$`%4@rrp;}>12fCx~ z?<#T9lfZdYDFGOySRqkfk(&>G!;m=*!JqGv=HfD3^w5J3>;ih=SZVF8imqif-2}8Y zq-Y8?UJKNEI{^GblBJ$X-dvX5gw!W+2{E(^@-(5Iy@pzIApmD-{Q&WA)GHvb-X4~gTw6IB2n3a@4f0P?>> zkvT`B8wl&;m&`u>m=E(N{nA6#V(&GeU+62OOTv|dJj~D00!EME%h8}Jzu+DH-xU0G zTqUCNDL@tYW19PGrrPGQdp0DB634E#l5PCQ z1(@Ry@+igGm+xw+mN*4ju>o{Mxx=4GE($Hh_2*K+MnqCU$OBn!CCsQmu8@QzR;_f8 zNwk`dHKN|zQc>nW^Ej9DFhGSeK(2*Tb)><6tSx0as*+)Tj^)5J)m-KX>V=R9_^=O# z!NA-jZzTi{*Sc>Z92G|dN?Uu+p?W5Rt)8m7-u3eP@=%!TEAw3Za9G6xb4e)7WND=* z;*9!U-4H8jt9pq@ORpzJT0#fp z;>x{C?cI&qp2SUVx(rC8^1#AtXg^H42*cNRaGq}cPD_g1gD-U0kp!D`VizGJ5X2*# z7l-rf)lxeG6u>9Z0%9H?p=doFJtoV!kEn-IZf9!6uh(~96_M(F`Y;!pp{-8@e4`wP zOa2)RR{?~%CJiy5d(FvXvKm)Y4hddH(2GOXrR;|94$sbmE7xt656((vuOO#U{-8kYi-1%`RXj{f@;1}%$(gaeruPP+9hxKL z>9fKKnZPmtd0v;a6_*y@c5SL^|CExAZjrHwu)SQH}T|a)9>6RnZBiG)M zA0}F^RtBJM4UXF8Dr(ABMI$ae3cn>ECO`*g*dGwZ-}jf<$6Z@BHxRV4>*a;XX-idh z&Q9&*5M~)Pm%&=9?2!8SK7ls0A?0hGr2bkZ0!=ZB1h}li>EadZQ?gwBhRTQ;Kd+^v z7Z8;8qlrtxWiz*^kan3K{ihB;aBk?N-c~fp@n4lZ4{r6kGy#-z@+i0a$1(B=o{iX3 ztH*%gM+6vGTq6Tc0u0}z-2$JwVecN^0&M`C!5z1g>UC^7p$ODiiuL&m8*2{$sJwaQ z=28omOP)YbXH}=O=|rf~wz~A0ma1)codi zw4~u&B!az8ws2~yS@Y6KX{CkFh2Y97mvxqG?&6Vw;t=PPsQHs4!XjR=6&oPbc0C&M z=K1fZV9}7I+-8E`>*e^*ORJ2=f>8j)>CS#Yp7tCRHjoOXx0UiXk6Y-SLK~Irf21lZ zJ7@?QJ7hX9-n;7fkNcIlBBX)u+jMr_8*_V03u!l0Bv2RA3U`ki?*W*>SQl5i-3=%g z4?%(mNMDhdOY@5#>khocz~(x;QPfB26OSp+z_YNm7w<38>Zzh7&;PO==ksZs*Z~I@ zZV>oEMGFfh-WR93bcU9Q2#038&T!0)yYqBT}kh?2Q_I%sz5iZ-#f>Sba) zqpdI!EWTf>#ofcnspxCKaWuIwh?xK2{oHY82^GCF@rQa1dcYoi)3{ZpD9i8$zuCHkiV=$W%*W3Peao??8AU$R8%CDba zY3zOE`XB(QDLyI`^^qb<%Sb! z_a1X+Q>T5!J+zRks`6};4(_)~g)YpPU0Qy;)0w(}W^dItcOH02x+mC+CerwliZtA>3;x^}A&KGsH4Md=6IDr4 zv8RC3J_!7{>Sh{r_3hjvjO0^Qb6;joIF~TnAhH5cB=R3;d|&VcLFvofd)U+Ge$3pL zoIHd)5KAI&rHP6^c_*_NhW#sar&RT>tTopn3Bj+3V)Z#pqM<>AO%Kw@9uA9W?JOxq ztW;pBpA=Y|L$S&jA;%j@J}17Yp&dIku;t$8S}7Qk#ZW=EAhMTS&5bjO>expH(JkWxTL#Q7OlO*VeiV$nLwqz80-OLf~h;3 zfHud^=KzeG+SYptnv;5*^`Ac#UcmOJtZ2XV&&-MCeavWoKb}RTiFC(C2fKg2)ve8pl4T(u*>5tCO5MkRNt18> z7CbIk7jNeUFr1oj+?xIL3FZT6BF}if6!ZX&2{!86KSR*n!}VeDX1((%-Ppp7N2BWe z{Msgt3bxP+pulQyp!6;Th6mcRT*E&U5Q-%4GzhN#bzDWa0q%LJ=qQR;Llhm}SylDT zH`3Ck58>8r?9p0%tpf)gh~yz>as!Qft6R?&?1bhQAy@FtvW|##EtbGs029!Ef(l(7M?mj-W(6$xa_1Z1#)vcyYg@ zx|({8lXtI!yl@BauGPfrbb|4vQfOoE$e#bqxSX*R5`bI5x3yNeCbJSxD5GCb(y16;ZouGTTwFD59V;KI91?2u)GYbwlC7<4!rM6&~q5?-PN zZ?{;C2Y0j5EthF5+Tm$h;fzu}jlsUK{Sab22Uoon-&(zoUeAz^J~p4j6-==?jSD)} z0=h6_DDt#Iiyph7OeHOJx?u>b4iw>GN`8_nPidj`f~#I;BhLG_jctb*!t9K(ImbOV zKKT0k2hc=Of({F=+WeIMaRGYfpNE~iD0Ebq32^0~Ncv{_;SkES4szD3fw$Pn95>;k zi;)rZ212OAz}iHn+Gr!#l_xhNv38)B(HDMbq}PCjy2b@{@xz%qS_S1G2ZK}nY6Z!mBJM7ar3udj!;3mqC=H&Yx)n$P!STBP@ z(9f1yKi|R<_f5o+}=CNLW{`(^!_(&~>ef5;7rQM}vw=_~pxxsfEq%Ye-6o!;m5B0KOB4>w# z@2s{i4{V6#_k`wJZ8}t5?&eK)(eNeNlD_J>QU){RL^5s{9v4Z1J=i&)DsvgIiedXb zYimP(*%QvDZ#pu7%C0*0SjGGJI~0j&`IU+$X;ek%o&`|gxOjb8_KBEz(i6R#6tt~H zlXS!SHWE-e2#HmY#}n@eGCgk=>WNy6wd5MZ*+Rier6`VgZ z?^If%E5Pg968U7LS?))8q3p#d|6Rr&8EftDg)Nxgg~>(_6Dwa+60ODm`Tz~4{-^SKj)^wTET-F zS0aUcS5}KsNio}n5ucoOD{>nvE(f(1c_PQH$(LMo>|pM^V(c1W^E0GD1Iz~pbh8H* zL5QIS>(`mS4Z+0KjoZ@4Bm=M5SFI_bMl#1+=K# z%$92_yYDbRK;Yu+^lp~4b~AabmN;SVk@R)Y-!d!!g;`ur;qbE3lbPOm&GUnjH|kFN=;~>EKpL`ic&m&jJN7xe^|KE z)YhTfcb^WXdsdmI7iGje)gvChID%-AT%skCvu*006t)PI!vLJ7Wcod$W+xSWv*%a= zdiu7^m3R4N)onlJkt6kd`I-~4Y9Ak$=rqcfhv}TN%O15|eG~|mjPo=$PA+nNTe8Hx z8!N-zFZ#W><8XGQ^*wy=4K&)xC822l2sv1>+cnp`>b4E4$FI~JJ|Lr#4{O(3_|;Op0<2(qZqC(1dP>#Y!o7aWUuXnfa-q@zQMD&Cr8dNe__JutdxtFc zX_4;Nch4Y&!C57-z7B3416JI+f=U9dYjwZIAEtNz{D?S?t3Nw(Exzzr_gU00$$4P5 zcI=9ahxzy$YxHSy9BxuQ)@t0PVAA+$FwAZI>&O7R{nCY`Iq@G}6PuVt(GcrAi{aLA z+rQLS8J~urLC=djmuUtrB;T3PVup`)!H73>4lh%dReOb>hN1yZ7NzVZBJ3aRv>l!V zpmr1Pl>Wp>&+e-|oc1#2KTtQ z0w=^g53Q!ZTlnwlX7?!e#xXY#(u!)#8!l%rtg+S+^J6?x%&!50e=?uRXN{cUbw%#q^)V&xQZJ~~|#9~e40zNE1`8z|Ij zez_d9I{h>|x9FoB>YU;u!UnXkT zUJt2Pf;iClUSCAELv}*o6T`Xun(tT}M3Y@lLeR~jx0crqQ7Xp)`o&L-Qn8O<@yGTO z&>3!NkrV^EJj(SBuZMV9(E*n?=YzFtHK7X$nvL&hEfF8l2`hR~Q<<{e01X*nI2)F) zIP&I17Rst|;SnPXG_{*=$IdI(9KN^>BJ!}J-4W2v<`-=A3CP!ZhTZ7wvVU4N>&^QR z2ss`VagOxts~=q`1;{TduGqcogq)2L#GAcM`G#hsXQ@%zbpB`n&ONlSU3Eg{Z*nwm z7)%ep&gYS0rJ+84o?0J)Jx|`X5q4{9YA4ioMWx`wggyHuN)gD!|TsW?+Gx)?GJ$y;^v97l>aUw!dwYchr~ z0N+v~IHGgz&fHwEEpIL$sdu*MU7eu~Jo)L37!D#Qh-`;Rk%Jyne_uSIM;D8Qrtd6NJ`k?WcdR_13>MPiS$JOlL zai`x?Yn_rlP7Vk` zY%G`=O#K6Pa-mLLLcFA&5Ty=EQk!+FR`V7MiOz@%Tf96K%llF1qeQ-=2 zzR)@r{UdMU05wX&A(A|M-Mu%n@brow?+-XqKQJ-yd0ONh3S(PQF$>ljlQ!`&wIgWY z(i=%GAw1k8U^?RmJ3A00Hg6QBM2AXk@Efv?UB505xIDKk+hgzEvl;SLNg8SWYR(Fl zn=Ap?kn-mzyJFpE#%4q3e;Myy2A&)j(Z5$J;S~P9=nJL?nl|YZZUbYpZ(rVV@AwJ# zLY!+~F3Ya;$JvCFySr)VGB7-vdRJ_1)yKKcce{#SasT|o6UMdNCo35T3I*=<6~+XP z%V5duop8H3EeGm$)ukhEZ2n#Z>wavNa)Ux`HC}=re)hz(I2BDzxB}E}@93ISYh9_7 zUynnDCa~q7X5GDM?~jcvTlePkpMpDTJZz;EvRwA>Ub^N}mbmr7@r+w~SMD{U0uv7y zcpx!STygP}wA(vj>G`Iun8U@vdw$(+<@Z5XnJ9bo{FaUcs?l#@Nb=BXhQ-e~zh%!1 znXxmMURB$=A6q?Z&qW7~^Pp!aTucUsDl$m}KVNjbt*v#;kEpqiGHZ|wb5nN|NXG5- zfdMzSPsal-&M%NJyl5X$**d3jAb0*;x6EJmq(GnD_{N&_ zwF#y1h^5I7Dq)kAeMOkM;SwSx?%5}q9KF(G-06UCeB1M=#8T|6-78m=cEdlbx-^Sk z(p)MjuJjgv`Gt`1vwUSjGH;VgdhcN_3o?h)^P?{;^Da(YS&Jx@poLquq^{|iSoP9q z-^tXk%B5MD5Ik)s^Cq6ZrJu;+m~hnYQg9%O zy2?~3Uuv%AC<_m2C)Ji`{2RXrYlIl*UJ+zVavzuc4U3&48dIL!{>MG<1RdA!v)FC{@WHQaRR`zR2FY^&>FIgw(9Ma3~U4{pCLvl_q*QOL5bHh#x zAo=RBPFb{D%1$L6UgDfM-Qdt=_>_mg{gH}HEtf$2c*U(^3sl0uzn`PJB9ZO z*0ELB`x6_J_CU@!wH}^2}d2o-o zW_d`N>{1G0a!p)r`+0JncHm@zE7N@ZXAD2?_zCbo0uHY<#vgrdAIbBINXpMwja&Lu z@ibQU-lNH*R$`Uv4vB*3Oa`SwchZY^OlA}hh&udo1CA+OCLUg54Y(Q7?7@`0TsPBR zkW0SUTo-#;G(VJZiL$~qe~tJ|nXc@(8HIu69?7!XXOtUHn7^4+?Tx!Iz5-Fr=91IM zwIzAV=0H;;zF*xazQk)Yo)629AiRa# zBYvDRGe+0=^ukyA%em1tADgYeEjr#^v0iih_#-yS)=q}}b#=OYbb>d2qIDqw3p=>) z%hAIE!LP~8FD%^;Us+PTOe`CBv2zu_ZOOlgm-OB;(={JEv+u<6^GgyY&!7EsbWI)< zom`H2YMjAv)VRQ-B1PGg?M$ol&n;!Xt&zDFWo4PbJKayrIk0r2_rry8=7XXhyRMd| ztdTO$OBZIlnouY$|3{>yWVE?;%04crd2Ec!A-;pNr+u`svD-vi)J3Hzz_snp%9{yk znT6jx8Nbjy0($?+A!X2F;7h-xhs?-e{L-hxT~z|H5k;TkBbVvi-CY@+;`quoKRqvA zRnq-Zrr`Hn*Jl&0m3E}Q)XvTq^;g#x4nLXkUg?(&d;LSrw(|N|V|42!_iGH7-0yK7 zmsRSIPwQM-8@pwc=aSEeUML@N~=BfHbX39P!1O z`t4WTil0`PLjf^E5@LU04cQ(emd-(?U^k#MXQWZ)o?T*owdB}Haf;Pi+LrlH70sj; zC(WI*BIK&z?g2M)$GPdgmC@q6ziEzPtvBtpS&o7jZdkaYxwg>xl+-a9(CjL9Wi|Tq z^Q9NYN@P%q$#b+HjunUM4{?>9c2bej>N!~9V(dt09#5$z{xd)MvQIiJD!SIi+%c14 zOt|B+-RU-d)=@>J$4euMx``ggMh5FsXQWqTCs_oO2g_J{jl0~9Z9Ywx{gUo+C|Dz| zjdSVe?RTqZD$$RUBKp;uJ)RM-F*{K#R$(Sme67MvtoUAqS!7f%f9CL12SeuclvdHP z-)uARf^@n1aN&FeDMM|QT&n*ly?al~GKVqSVqyE0yoEQU$zW#3PL*JSrN6BV{XQp^Jq!|~B?uX?QM&=cCHy66dgQ#zL%G{T9 with Serializable { CryptoCurrency.ape, CryptoCurrency.avaxc, CryptoCurrency.btt, - CryptoCurrency.bttbsc, + CryptoCurrency.bttc, CryptoCurrency.doge, CryptoCurrency.firo, CryptoCurrency.usdttrc20, @@ -51,7 +51,6 @@ class CryptoCurrency extends EnumerableItem with Serializable { CryptoCurrency.xvg, CryptoCurrency.usdcpoly, CryptoCurrency.dcr, - CryptoCurrency.husd, CryptoCurrency.kmd, CryptoCurrency.mana, CryptoCurrency.maticpoly, @@ -103,7 +102,7 @@ class CryptoCurrency extends EnumerableItem with Serializable { 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 bttbsc = CryptoCurrency(title: 'BTT', iconPath: 'assets/images/bttbsc_icon.png', tag: 'BSC', raw: 33, name: 'bttbsc'); + 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'); @@ -119,21 +118,20 @@ class CryptoCurrency extends EnumerableItem with Serializable { 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 husd = CryptoCurrency(title: 'HUSD', iconPath: 'assets/images/husd_icon.png', tag: 'ETH', raw: 48, name: 'husd'); - static const kmd = CryptoCurrency(title: 'KMD', iconPath: 'assets/images/kmd_icon.png', raw: 49, name: 'kmd'); - static const mana = CryptoCurrency(title: 'MANA', iconPath: 'assets/images/mana_icon.png', tag: 'ETH', raw: 50, name: 'mana'); - static const maticpoly = CryptoCurrency(title: 'MATIC', iconPath: 'assets/images/matic_icon.png', tag: 'POLY', raw: 51, name: 'maticpoly'); - static const matic = CryptoCurrency(title: 'MATIC', iconPath: 'assets/images/matic_icon.png', tag: 'ETH', raw: 52, name: 'matic'); - static const mkr = CryptoCurrency(title: 'MKR', iconPath: 'assets/images/mkr_icon.png', tag: 'ETH', raw: 53, name: 'mkr'); - static const near = CryptoCurrency(title: 'NEAR', iconPath: 'assets/images/near_icon.png', raw: 54, name: 'near'); - static const oxt = CryptoCurrency(title: 'OXT', iconPath: 'assets/images/oxt_icon.png', tag: 'ETH', raw: 55, name: 'oxt'); - static const paxg = CryptoCurrency(title: 'PAXG', iconPath: 'assets/images/paxg_icon.png', tag: 'ETH', raw: 56, name: 'paxg'); - static const pivx = CryptoCurrency(title: 'PIVX', iconPath: 'assets/images/pivx_icon.png', raw: 57, name: 'pivx'); - static const rune = CryptoCurrency(title: 'RUNE', iconPath: 'assets/images/rune_icon.png', raw: 58, name: 'rune'); - static const rvn = CryptoCurrency(title: 'RVN', iconPath: 'assets/images/rvn_icon.png', raw: 59, name: 'rvn'); - static const scrt = CryptoCurrency(title: 'SCRT', iconPath: 'assets/images/scrt_icon.png', raw: 60, name: 'scrt'); - static const uni = CryptoCurrency(title: 'UNI', iconPath: 'assets/images/uni_icon.png', tag: 'ETH', raw: 61, name: 'uni'); - static const stx = CryptoCurrency(title: 'STX', iconPath: 'assets/images/stx_icon.png', raw: 62, name: 'stx'); + 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 final Map _rawCurrencyMap = all.fold>({}, (acc, item) { diff --git a/lib/core/address_validator.dart b/lib/core/address_validator.dart index 9d7b0e3b5..519cd92a3 100644 --- a/lib/core/address_validator.dart +++ b/lib/core/address_validator.dart @@ -24,7 +24,6 @@ class AddressValidator extends TextValidator { return '[0-9a-zA-Z_]'; case CryptoCurrency.usdc: case CryptoCurrency.usdcpoly: - case CryptoCurrency.husd: case CryptoCurrency.ape: case CryptoCurrency.avaxc: case CryptoCurrency.eth: @@ -156,7 +155,7 @@ class AddressValidator extends TextValidator { return [98, 99, 106]; case CryptoCurrency.btt: return [34]; - case CryptoCurrency.bttbsc: + case CryptoCurrency.bttc: return [34]; case CryptoCurrency.doge: return [34]; @@ -181,7 +180,6 @@ class AddressValidator extends TextValidator { case CryptoCurrency.stx: return [40, 41, 42]; case CryptoCurrency.usdcpoly: - case CryptoCurrency.husd: case CryptoCurrency.mana: case CryptoCurrency.matic: case CryptoCurrency.maticpoly: diff --git a/lib/exchange/sideshift/sideshift_exchange_provider.dart b/lib/exchange/sideshift/sideshift_exchange_provider.dart index a732f7ef2..cbe9375db 100644 --- a/lib/exchange/sideshift/sideshift_exchange_provider.dart +++ b/lib/exchange/sideshift/sideshift_exchange_provider.dart @@ -28,7 +28,6 @@ class SideShiftExchangeProvider extends ExchangeProvider { static const List _notSupported = [ CryptoCurrency.xhv, CryptoCurrency.dcr, - CryptoCurrency.husd, CryptoCurrency.kmd, CryptoCurrency.mkr, CryptoCurrency.near, @@ -39,6 +38,7 @@ class SideShiftExchangeProvider extends ExchangeProvider { CryptoCurrency.rvn, CryptoCurrency.scrt, CryptoCurrency.stx, + CryptoCurrency.bttc, ]; static List _supportedPairs() { From 7b95533cd3b8173be6576fdbd352bca0e8babdc4 Mon Sep 17 00:00:00 2001 From: Serhii Date: Sun, 4 Dec 2022 20:06:17 +0200 Subject: [PATCH 018/173] fix nullable type --- cw_core/lib/crypto_currency.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cw_core/lib/crypto_currency.dart b/cw_core/lib/crypto_currency.dart index 48ebede75..42e72d2eb 100644 --- a/cw_core/lib/crypto_currency.dart +++ b/cw_core/lib/crypto_currency.dart @@ -139,8 +139,8 @@ class CryptoCurrency extends EnumerableItem with Serializable { return acc; }); - static final Map _nameCurrencyMap = - all.fold>({}, (acc, item) { + static final Map _nameCurrencyMap = + all.fold>({}, (acc, item) { acc.addAll({item.name: item}); return acc; }); From ff28dfbb9ca071e57035089b016b48bea07d24ea Mon Sep 17 00:00:00 2001 From: Serhii Date: Sat, 10 Dec 2022 11:40:04 +0200 Subject: [PATCH 019/173] Rename Change.NOW --- lib/view_model/dashboard/dashboard_view_model.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/view_model/dashboard/dashboard_view_model.dart b/lib/view_model/dashboard/dashboard_view_model.dart index 284b1fc72..40ea2d78b 100644 --- a/lib/view_model/dashboard/dashboard_view_model.dart +++ b/lib/view_model/dashboard/dashboard_view_model.dart @@ -83,12 +83,12 @@ abstract class DashboardViewModelBase with Store { .toggleDisplayExchange(ExchangeProviderDescription.all)), FilterItem( value: tradeFilterStore.displayChangeNow, - caption: 'Change.NOW', + caption: ExchangeProviderDescription.changeNow.title, onChanged: () => tradeFilterStore .toggleDisplayExchange(ExchangeProviderDescription.changeNow)), FilterItem( value: tradeFilterStore.displaySideShift, - caption: 'SideShift', + caption: ExchangeProviderDescription.sideShift.title, onChanged: () => tradeFilterStore .toggleDisplayExchange(ExchangeProviderDescription.sideShift)), ] From c57507e530d3bff5792f4272842a6a6cf0e20721 Mon Sep 17 00:00:00 2001 From: Serhii Date: Sat, 10 Dec 2022 12:56:37 +0200 Subject: [PATCH 020/173] redesigh checkbox --- .../dashboard/widgets/filter_widget.dart | 13 ++- lib/src/widgets/rounded_checkbox.dart | 91 ------------------- lib/src/widgets/standard_checkbox.dart | 44 ++++++--- 3 files changed, 39 insertions(+), 109 deletions(-) delete mode 100644 lib/src/widgets/rounded_checkbox.dart diff --git a/lib/src/screens/dashboard/widgets/filter_widget.dart b/lib/src/screens/dashboard/widgets/filter_widget.dart index 10bda6798..a3172940f 100644 --- a/lib/src/screens/dashboard/widgets/filter_widget.dart +++ b/lib/src/screens/dashboard/widgets/filter_widget.dart @@ -1,12 +1,12 @@ import 'dart:ui'; import 'package:cake_wallet/palette.dart'; import 'package:cake_wallet/src/screens/dashboard/widgets/filter_tile.dart'; +import 'package:cake_wallet/src/widgets/standard_checkbox.dart'; import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.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'; -import 'package:cake_wallet/src/widgets/rounded_checkbox.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; //import 'package:date_range_picker/date_range_picker.dart' as date_rage_picker; @@ -97,14 +97,13 @@ class FilterWidget extends StatelessWidget { final content = item.onChanged != null ? Observer( builder: (_) => - RoundedCheckboxWidget( + StandardCheckbox( value: item.value.value, caption: item.caption, - onChanged: item.onChanged, - currentTheme: - dashboardViewModel - .settingsStore - .currentTheme, + gradientBackground: true, + borderColor: Theme.of(context).dividerColor, + iconColor: Colors.white, + onChanged: (bool val){}, )) : GestureDetector( onTap: () async { diff --git a/lib/src/widgets/rounded_checkbox.dart b/lib/src/widgets/rounded_checkbox.dart deleted file mode 100644 index 1bdfb267d..000000000 --- a/lib/src/widgets/rounded_checkbox.dart +++ /dev/null @@ -1,91 +0,0 @@ -import 'package:cake_wallet/palette.dart'; -import 'package:flutter/material.dart'; -import 'package:cake_wallet/themes/theme_base.dart'; - -class RoundedCheckboxWidget extends StatelessWidget { - RoundedCheckboxWidget( - {required this.value, - required this.caption, - required this.onChanged, - this.currentTheme}); - - final bool value; - final String caption; - final Function onChanged; - final ThemeBase? currentTheme; - - bool get darkTheme => currentTheme!.type == ThemeType.dark; - - @override - Widget build(BuildContext context) { - - final baseGradient = LinearGradient(colors: [ - Theme.of(context).primaryTextTheme.subtitle1!.color!, - Theme.of(context).primaryTextTheme.subtitle1!.decorationColor!, - ], begin: Alignment.centerLeft, end: Alignment.centerRight); - - final darkThemeGradient = LinearGradient(colors: [ - Palette.blueCraiola, - Palette.blueGreyCraiola, - ], begin: Alignment.topLeft, end: Alignment.bottomRight); - - final gradient = darkTheme ? darkThemeGradient : baseGradient; - - final uncheckedColor = darkTheme - ? Theme.of(context).primaryTextTheme.subtitle1!.decorationColor! - : Colors.white; - - final borderColor = darkTheme - ? Theme.of(context).accentTextTheme.subtitle2!.backgroundColor! - : Colors.transparent; - - final checkedOuterBoxDecoration = - BoxDecoration(shape: BoxShape.circle, gradient: gradient); - final outerBoxDecoration = BoxDecoration( - shape: BoxShape.circle, - color: Theme.of(context).accentTextTheme.overline!.color!, - border: Border.all(color: borderColor)); - - final checkedInnerBoxDecoration = - BoxDecoration(shape: BoxShape.circle, color: Colors.white); - final innerBoxDecoration = - BoxDecoration(shape: BoxShape.circle, color: uncheckedColor); - - return GestureDetector( - onTap: () => onChanged(), - child: Row( - mainAxisSize: MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Container( - height: 24.0, - width: 24.0, - child: DecoratedBox( - decoration: - value ? checkedOuterBoxDecoration : outerBoxDecoration, - child: Padding( - padding: EdgeInsets.all(value ? 4.0 : 1.0), - child: DecoratedBox( - decoration: - value ? checkedInnerBoxDecoration : innerBoxDecoration, - ), - ), - ), - ), - Padding( - padding: EdgeInsets.only(left: 16), - child: Text( - caption, - style: TextStyle( - color: Theme.of(context).primaryTextTheme.headline6!.color!, - fontSize: 18, - fontFamily: 'Lato', - fontWeight: FontWeight.w500, - decoration: TextDecoration.none), - ), - ) - ], - ), - ); - } -} \ No newline at end of file diff --git a/lib/src/widgets/standard_checkbox.dart b/lib/src/widgets/standard_checkbox.dart index a59364fe1..9202ea7f5 100644 --- a/lib/src/widgets/standard_checkbox.dart +++ b/lib/src/widgets/standard_checkbox.dart @@ -7,11 +7,17 @@ class StandardCheckbox extends StatefulWidget { Key? key, required this.value, this.caption = '', + this.gradientBackground = false, + this.borderColor, + this.iconColor, required this.onChanged}) : super(key: key); final bool value; final String caption; + final bool gradientBackground; + final Color? borderColor; + final Color? iconColor; final Function(bool) onChanged; @override @@ -32,6 +38,31 @@ class StandardCheckboxState extends State { @override Widget build(BuildContext context) { + + final baseGradient = LinearGradient(colors: [ + Theme.of(context).primaryTextTheme.subtitle1!.color!, + Theme.of(context).primaryTextTheme.subtitle1!.decorationColor!, + ], begin: Alignment.centerLeft, end: Alignment.centerRight); + + final boxBorder = Border.all( + color: widget.borderColor ?? Theme.of(context) + .primaryTextTheme + .caption! + .color!, + width: 1.0); + + + final checkedBoxDecoration = BoxDecoration( + gradient: widget.gradientBackground ? baseGradient : null, + border: widget.gradientBackground ? null : boxBorder, + borderRadius: BorderRadius.all( + Radius.circular(8.0))); + + final uncheckedBoxDecoration = BoxDecoration( + border: boxBorder, + borderRadius: BorderRadius.all( + Radius.circular(8.0))); + return GestureDetector( onTap: () { value = !value; @@ -45,20 +76,11 @@ class StandardCheckboxState extends State { Container( height: 24.0, width: 24.0, - decoration: BoxDecoration( - border: Border.all( - color: Theme.of(context) - .primaryTextTheme! - .caption! - .color!, - width: 1.0), - borderRadius: BorderRadius.all( - Radius.circular(8.0)), - color: Theme.of(context).backgroundColor), + decoration: value ? checkedBoxDecoration : uncheckedBoxDecoration, child: value ? Icon( Icons.check, - color: Colors.blue, + color: widget.iconColor ?? Colors.blue, size: 20.0, ) : Offstage(), From b536973077b27058126af54f930d1c3cf93f5013 Mon Sep 17 00:00:00 2001 From: Serhii Date: Mon, 12 Dec 2022 00:07:05 +0200 Subject: [PATCH 021/173] make checkbox stateless --- .../dashboard/widgets/filter_widget.dart | 2 +- lib/src/screens/exchange/exchange_page.dart | 8 ----- lib/src/widgets/standard_checkbox.dart | 34 ++++--------------- .../dashboard/dashboard_view_model.dart | 6 ++-- 4 files changed, 11 insertions(+), 39 deletions(-) diff --git a/lib/src/screens/dashboard/widgets/filter_widget.dart b/lib/src/screens/dashboard/widgets/filter_widget.dart index a3172940f..411006633 100644 --- a/lib/src/screens/dashboard/widgets/filter_widget.dart +++ b/lib/src/screens/dashboard/widgets/filter_widget.dart @@ -103,7 +103,7 @@ class FilterWidget extends StatelessWidget { gradientBackground: true, borderColor: Theme.of(context).dividerColor, iconColor: Colors.white, - onChanged: (bool val){}, + onChanged: (value) => item.onChanged(), )) : GestureDetector( onTap: () async { diff --git a/lib/src/screens/exchange/exchange_page.dart b/lib/src/screens/exchange/exchange_page.dart index 744848156..7b73a134b 100644 --- a/lib/src/screens/exchange/exchange_page.dart +++ b/lib/src/screens/exchange/exchange_page.dart @@ -40,7 +40,6 @@ class ExchangePage extends BasePage { final ExchangeViewModel exchangeViewModel; final depositKey = GlobalKey(); final receiveKey = GlobalKey(); - final checkBoxKey = GlobalKey(); final _formKey = GlobalKey(); final _depositAmountFocus = FocusNode(); final _depositAddressFocus = FocusNode(); @@ -339,7 +338,6 @@ class ExchangePage extends BasePage { mainAxisAlignment: MainAxisAlignment.start, children: [ StandardCheckbox( - key: checkBoxKey, value: exchangeViewModel.isFixedRateMode, caption: S.of(context).fixed_rate, onChanged: (value) => @@ -682,12 +680,6 @@ class ExchangePage extends BasePage { } }); - reaction((_) => exchangeViewModel.isFixedRateMode, (bool value) { - if (checkBoxKey.currentState!.value != exchangeViewModel.isFixedRateMode) { - checkBoxKey.currentState!.value = exchangeViewModel.isFixedRateMode; - } - }); - depositAddressController.addListener( () => exchangeViewModel.depositAddress = depositAddressController.text); diff --git a/lib/src/widgets/standard_checkbox.dart b/lib/src/widgets/standard_checkbox.dart index 9202ea7f5..d7b947a7e 100644 --- a/lib/src/widgets/standard_checkbox.dart +++ b/lib/src/widgets/standard_checkbox.dart @@ -2,16 +2,14 @@ import 'dart:ui'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -class StandardCheckbox extends StatefulWidget { +class StandardCheckbox extends StatelessWidget { StandardCheckbox({ - Key? key, required this.value, this.caption = '', this.gradientBackground = false, this.borderColor, this.iconColor, - required this.onChanged}) - : super(key: key); + required this.onChanged}); final bool value; final String caption; @@ -20,21 +18,7 @@ class StandardCheckbox extends StatefulWidget { final Color? iconColor; final Function(bool) onChanged; - @override - StandardCheckboxState createState() => - StandardCheckboxState(value, caption, onChanged); -} -class StandardCheckboxState extends State { - StandardCheckboxState(this.value, this.caption, this.onChanged); - - bool value; - String caption; - Function(bool) onChanged; - - void changeValue(bool newValue) { - setState(() => value = newValue); - } @override Widget build(BuildContext context) { @@ -45,7 +29,7 @@ class StandardCheckboxState extends State { ], begin: Alignment.centerLeft, end: Alignment.centerRight); final boxBorder = Border.all( - color: widget.borderColor ?? Theme.of(context) + color: borderColor ?? Theme.of(context) .primaryTextTheme .caption! .color!, @@ -53,8 +37,8 @@ class StandardCheckboxState extends State { final checkedBoxDecoration = BoxDecoration( - gradient: widget.gradientBackground ? baseGradient : null, - border: widget.gradientBackground ? null : boxBorder, + gradient: gradientBackground ? baseGradient : null, + border: gradientBackground ? null : boxBorder, borderRadius: BorderRadius.all( Radius.circular(8.0))); @@ -64,11 +48,7 @@ class StandardCheckboxState extends State { Radius.circular(8.0))); return GestureDetector( - onTap: () { - value = !value; - onChanged(value); - setState(() {}); - }, + onTap: () => onChanged(!value), child: Row( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.start, @@ -80,7 +60,7 @@ class StandardCheckboxState extends State { child: value ? Icon( Icons.check, - color: widget.iconColor ?? Colors.blue, + color: iconColor ?? Colors.blue, size: 20.0, ) : Offstage(), diff --git a/lib/view_model/dashboard/dashboard_view_model.dart b/lib/view_model/dashboard/dashboard_view_model.dart index 40ea2d78b..ac38a43cc 100644 --- a/lib/view_model/dashboard/dashboard_view_model.dart +++ b/lib/view_model/dashboard/dashboard_view_model.dart @@ -61,15 +61,15 @@ abstract class DashboardViewModelBase with Store { FilterItem( value: transactionFilterStore.displayAll, caption: S.current.all_transactions, - onChanged: () => transactionFilterStore.toggleIAll()), + onChanged: transactionFilterStore.toggleIAll), FilterItem( value: transactionFilterStore.displayIncoming, caption: S.current.incoming, - onChanged: () => transactionFilterStore.toggleIncoming()), + onChanged:transactionFilterStore.toggleIncoming), FilterItem( value: transactionFilterStore.displayOutgoing, caption: S.current.outgoing, - onChanged: () => transactionFilterStore.toggleOutgoing()), + onChanged: transactionFilterStore.toggleOutgoing), // FilterItem( // value: () => false, // caption: S.current.transactions_by_date, From 7d08bb0e76265dd28c15d5877a20724895532093 Mon Sep 17 00:00:00 2001 From: Serhii Date: Mon, 12 Dec 2022 00:37:03 +0200 Subject: [PATCH 022/173] Add SimpleSwap --- lib/view_model/dashboard/dashboard_view_model.dart | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/view_model/dashboard/dashboard_view_model.dart b/lib/view_model/dashboard/dashboard_view_model.dart index ac38a43cc..ba0f9f8ff 100644 --- a/lib/view_model/dashboard/dashboard_view_model.dart +++ b/lib/view_model/dashboard/dashboard_view_model.dart @@ -91,6 +91,11 @@ abstract class DashboardViewModelBase with Store { caption: ExchangeProviderDescription.sideShift.title, onChanged: () => tradeFilterStore .toggleDisplayExchange(ExchangeProviderDescription.sideShift)), + FilterItem( + value: tradeFilterStore.displaySimpleSwap, + caption: ExchangeProviderDescription.simpleSwap.title, + onChanged: () => tradeFilterStore + .toggleDisplayExchange(ExchangeProviderDescription.simpleSwap)), ] }, subname = '', From b1120cf2f83a49a75b4d8ac9e8eb0a467ef3b94f Mon Sep 17 00:00:00 2001 From: Serhii Date: Mon, 12 Dec 2022 14:01:37 +0200 Subject: [PATCH 023/173] fix filter for SideShift --- lib/store/dashboard/trade_filter_store.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/store/dashboard/trade_filter_store.dart b/lib/store/dashboard/trade_filter_store.dart index 4319c3bc7..9c1dc9a9a 100644 --- a/lib/store/dashboard/trade_filter_store.dart +++ b/lib/store/dashboard/trade_filter_store.dart @@ -79,6 +79,8 @@ abstract class TradeFilterStoreBase with Store { .where((item) => (displayXMRTO.value && item.trade.provider == ExchangeProviderDescription.xmrto) || + (displaySideShift.value && + item.trade.provider == ExchangeProviderDescription.sideShift) || (displayChangeNow.value && item.trade.provider == ExchangeProviderDescription.changeNow) || From 2da50776d16629d044211ced3a80456ca9f18c14 Mon Sep 17 00:00:00 2001 From: Serhii Date: Mon, 12 Dec 2022 14:28:53 +0200 Subject: [PATCH 024/173] code formatting --- .../dashboard/widgets/filter_widget.dart | 198 ++++++++---------- .../exchange_trade/exchange_trade_page.dart | 4 +- .../order_details/order_details_page.dart | 6 +- .../widgets/settings_switcher_cell.dart | 4 +- .../trade_details/trade_details_page.dart | 14 +- .../transaction_details_page.dart | 6 +- .../unspent_coins_details_page.dart | 4 +- .../widgets/unspent_coins_switch_row.dart | 4 +- .../screens/wallet_keys/wallet_keys_page.dart | 4 +- lib/src/widgets/standard_checkbox.dart | 67 +++--- lib/src/widgets/standard_list.dart | 6 +- ...list_card.dart => standard_list_card.dart} | 4 +- ...t_list_row.dart => standard_list_row.dart} | 4 +- ...row.dart => standard_list_status_row.dart} | 4 +- ...ndart_switch.dart => standard_switch.dart} | 8 +- 15 files changed, 151 insertions(+), 186 deletions(-) rename lib/src/widgets/{standart_list_card.dart => standard_list_card.dart} (96%) rename lib/src/widgets/{standart_list_row.dart => standard_list_row.dart} (96%) rename lib/src/widgets/{standart_list_status_row.dart => standard_list_status_row.dart} (95%) rename lib/src/widgets/{standart_switch.dart => standard_switch.dart} (81%) diff --git a/lib/src/screens/dashboard/widgets/filter_widget.dart b/lib/src/screens/dashboard/widgets/filter_widget.dart index 411006633..6831819e4 100644 --- a/lib/src/screens/dashboard/widgets/filter_widget.dart +++ b/lib/src/screens/dashboard/widgets/filter_widget.dart @@ -15,8 +15,7 @@ class FilterWidget extends StatelessWidget { FilterWidget({required this.dashboardViewModel}); final DashboardViewModel dashboardViewModel; - final closeIcon = - Image.asset('assets/images/close.png', color: Palette.darkBlueCraiola); + final closeIcon = Image.asset('assets/images/close.png', color: Palette.darkBlueCraiola); @override Widget build(BuildContext context) { @@ -33,71 +32,55 @@ class FilterWidget extends StatelessWidget { child: ClipRRect( borderRadius: BorderRadius.all(Radius.circular(24)), child: Container( - color: Theme.of(context) - .textTheme! - .bodyText1! - .decorationColor!, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: EdgeInsets.all(24.0), - child: Text( - S.of(context).filters, - style: TextStyle( - color: Theme.of(context).primaryTextTheme - .overline!.color!, - fontSize: 16, - fontFamily: 'Lato', - decoration: TextDecoration.none, - ), - ), + color: Theme.of(context).textTheme!.bodyText1!.decorationColor!, + child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ + Padding( + padding: EdgeInsets.all(24.0), + child: Text( + S.of(context).filters, + style: TextStyle( + color: Theme.of(context).primaryTextTheme.overline!.color!, + fontSize: 16, + fontFamily: 'Lato', + decoration: TextDecoration.none, ), - sectionDivider, - ListView.separated( - padding: EdgeInsets.zero, - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), - itemCount: dashboardViewModel.filterItems.length, - separatorBuilder: (context, _) => sectionDivider, - itemBuilder: (_, index1) { - final title = dashboardViewModel.filterItems.keys - .elementAt(index1); - final section = dashboardViewModel - .filterItems.values - .elementAt(index1); - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: EdgeInsets.only( - top: 20, left: 24, right: 24), - child: Text( - title, - style: TextStyle( - color: Theme.of(context) - .primaryTextTheme! - .headline6! - .color!, - fontSize: 16, - fontFamily: 'Lato', - fontWeight: FontWeight.bold, - decoration: TextDecoration.none), - ), - ), - ListView.builder( - padding: - EdgeInsets.symmetric(vertical: 8.0), - shrinkWrap: true, - physics: - const NeverScrollableScrollPhysics(), - itemCount: section.length, - itemBuilder: (_, index2) { - final item = section[index2]; - final content = item.onChanged != null - ? Observer( - builder: (_) => - StandardCheckbox( + ), + ), + sectionDivider, + ListView.separated( + padding: EdgeInsets.zero, + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + itemCount: dashboardViewModel.filterItems.length, + separatorBuilder: (context, _) => sectionDivider, + itemBuilder: (_, index1) { + final title = dashboardViewModel.filterItems.keys.elementAt(index1); + final section = dashboardViewModel.filterItems.values.elementAt(index1); + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: EdgeInsets.only(top: 20, left: 24, right: 24), + child: Text( + title, + style: TextStyle( + color: Theme.of(context).primaryTextTheme!.headline6!.color!, + fontSize: 16, + fontFamily: 'Lato', + fontWeight: FontWeight.bold, + decoration: TextDecoration.none), + ), + ), + ListView.builder( + padding: EdgeInsets.symmetric(vertical: 8.0), + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + itemCount: section.length, + itemBuilder: (_, index2) { + final item = section[index2]; + final content = item.onChanged != null + ? Observer( + builder: (_) => StandardCheckbox( value: item.value.value, caption: item.caption, gradientBackground: true, @@ -105,51 +88,48 @@ class FilterWidget extends StatelessWidget { iconColor: Colors.white, onChanged: (value) => item.onChanged(), )) - : GestureDetector( - onTap: () async { - //final List picked = - //await date_rage_picker.showDatePicker( - // context: context, - // initialFirstDate: DateTime.now() - // .subtract(Duration(days: 1)), - // initialLastDate: (DateTime.now()), - // firstDate: DateTime(2015), - // lastDate: DateTime.now() - // .add(Duration(days: 1))); + : GestureDetector( + onTap: () async { + //final List picked = + //await date_rage_picker.showDatePicker( + // context: context, + // initialFirstDate: DateTime.now() + // .subtract(Duration(days: 1)), + // initialLastDate: (DateTime.now()), + // firstDate: DateTime(2015), + // lastDate: DateTime.now() + // .add(Duration(days: 1))); - //if (picked != null && picked.length == 2) { - // dashboardViewModel.transactionFilterStore - // .changeStartDate(picked.first); - // dashboardViewModel.transactionFilterStore - // .changeEndDate(picked.last); - //} - }, - child: Padding( - padding: - EdgeInsets.only(left: 32), - child: Text( - item.caption, - style: TextStyle( - color: Colors.red, - //Theme.of(context).primaryTextTheme.title.color,// - fontSize: 18, - fontFamily: 'Lato', - fontWeight: - FontWeight.w500, - decoration: - TextDecoration.none), + //if (picked != null && picked.length == 2) { + // dashboardViewModel.transactionFilterStore + // .changeStartDate(picked.first); + // dashboardViewModel.transactionFilterStore + // .changeEndDate(picked.last); + //} + }, + child: Padding( + padding: EdgeInsets.only(left: 32), + child: Text( + item.caption, + style: TextStyle( + color: Colors.red, + //Theme.of(context).primaryTextTheme.title.color,// + fontSize: 18, + fontFamily: 'Lato', + fontWeight: FontWeight.w500, + decoration: TextDecoration.none), + ), ), - ), - ); + ); - return FilterTile(child: content); - }, - ) - ], - ); - }, - ), - ]), + return FilterTile(child: content); + }, + ) + ], + ); + }, + ), + ]), ), ), ), @@ -172,4 +152,4 @@ class SectionDivider extends StatelessWidget { color: Theme.of(context).dividerColor, ); } -} \ No newline at end of file +} diff --git a/lib/src/screens/exchange_trade/exchange_trade_page.dart b/lib/src/screens/exchange_trade/exchange_trade_page.dart index 7c9fc1be7..e3eb8db96 100644 --- a/lib/src/screens/exchange_trade/exchange_trade_page.dart +++ b/lib/src/screens/exchange_trade/exchange_trade_page.dart @@ -8,7 +8,7 @@ import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/core/execution_state.dart'; import 'package:cake_wallet/src/screens/exchange_trade/information_page.dart'; import 'package:cake_wallet/src/screens/send/widgets/confirm_sending_alert.dart'; -import 'package:cake_wallet/src/widgets/standart_list_row.dart'; +import 'package:cake_wallet/src/widgets/standard_list_row.dart'; import 'package:cake_wallet/utils/show_bar.dart'; import 'package:cake_wallet/utils/show_pop_up.dart'; import 'package:cake_wallet/view_model/exchange/exchange_trade_view_model.dart'; @@ -194,7 +194,7 @@ class ExchangeTradeState extends State { final item = widget.exchangeTradeViewModel.items[index]; final value = item.data ?? fetchingLabel; - final content = StandartListRow( + final content = AnotherStandardListRow( title: item.title, value: value, valueFontSize: 14, diff --git a/lib/src/screens/order_details/order_details_page.dart b/lib/src/screens/order_details/order_details_page.dart index 2e6ece509..a7eff99b8 100644 --- a/lib/src/screens/order_details/order_details_page.dart +++ b/lib/src/screens/order_details/order_details_page.dart @@ -7,7 +7,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; -import 'package:cake_wallet/src/widgets/standart_list_row.dart'; +import 'package:cake_wallet/src/widgets/standard_list_row.dart'; import 'package:cake_wallet/src/screens/trade_details/track_trade_list_item.dart'; class OrderDetailsPage extends BasePage { @@ -57,7 +57,7 @@ class OrderDetailsPageBodyState extends State { if (item is TrackTradeListItem) { return GestureDetector( onTap: item.onTap, - child: StandartListRow( + child: AnotherStandardListRow( title: '${item.title}', value: '${item.value}')); } else { return GestureDetector( @@ -65,7 +65,7 @@ class OrderDetailsPageBodyState extends State { Clipboard.setData(ClipboardData(text: '${item.value}')); showBar(context, S.of(context).copied_to_clipboard); }, - child: StandartListRow( + child: AnotherStandardListRow( title: '${item.title}', value: '${item.value}')); } }); diff --git a/lib/src/screens/settings/widgets/settings_switcher_cell.dart b/lib/src/screens/settings/widgets/settings_switcher_cell.dart index fc99f3297..c1d7fa150 100644 --- a/lib/src/screens/settings/widgets/settings_switcher_cell.dart +++ b/lib/src/screens/settings/widgets/settings_switcher_cell.dart @@ -1,6 +1,6 @@ import 'package:flutter/cupertino.dart'; import 'package:cake_wallet/src/widgets/standard_list.dart'; -import 'package:cake_wallet/src/widgets/standart_switch.dart'; +import 'package:cake_wallet/src/widgets/standard_switch.dart'; class SettingsSwitcherCell extends StandardListRow { SettingsSwitcherCell( @@ -11,6 +11,6 @@ class SettingsSwitcherCell extends StandardListRow { final void Function(BuildContext context, bool value)? onValueChange; @override - Widget buildTrailing(BuildContext context) => StandartSwitch( + Widget buildTrailing(BuildContext context) => StandardSwitch( value: value, onTaped: () => onValueChange?.call(context, !value)); } diff --git a/lib/src/screens/trade_details/trade_details_page.dart b/lib/src/screens/trade_details/trade_details_page.dart index 500d16beb..1bb5d3ec8 100644 --- a/lib/src/screens/trade_details/trade_details_page.dart +++ b/lib/src/screens/trade_details/trade_details_page.dart @@ -1,6 +1,6 @@ import 'package:cake_wallet/src/widgets/standard_list.dart'; -import 'package:cake_wallet/src/widgets/standart_list_card.dart'; -import 'package:cake_wallet/src/widgets/standart_list_status_row.dart'; +import 'package:cake_wallet/src/widgets/standard_list_card.dart'; +import 'package:cake_wallet/src/widgets/standard_list_status_row.dart'; import 'package:cake_wallet/utils/show_bar.dart'; import 'package:cake_wallet/view_model/trade_details_view_model.dart'; import 'package:flutter/material.dart'; @@ -9,7 +9,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; -import 'package:cake_wallet/src/widgets/standart_list_row.dart'; +import 'package:cake_wallet/src/widgets/standard_list_row.dart'; import 'package:cake_wallet/src/screens/trade_details/track_trade_list_item.dart'; import 'package:cake_wallet/src/screens/trade_details/trade_details_list_card.dart'; import 'package:cake_wallet/src/screens/trade_details/trade_details_status_item.dart'; @@ -62,18 +62,18 @@ class TradeDetailsPageBodyState extends State { if (item is TrackTradeListItem) { return GestureDetector( onTap: item.onTap, - child: StandartListRow( + child: AnotherStandardListRow( title: '${item.title}', value: '${item.value}')); } if (item is DetailsListStatusItem) { - return StandartListStatusRow( + return StandardListStatusRow( title: item.title, value: item.value); } if (item is TradeDetailsListCardItem) { - return TradeDatailsStandartListCard( + return TradeDetailsStandardListCard( id: item.id, create: item.createdAt, pair: item.pair, @@ -86,7 +86,7 @@ class TradeDetailsPageBodyState extends State { Clipboard.setData(ClipboardData(text: '${item.value}')); showBar(context, S.of(context).copied_to_clipboard); }, - child: StandartListRow( + child: AnotherStandardListRow( title: '${item.title}', value: '${item.value}')); }); }); diff --git a/lib/src/screens/transaction_details/transaction_details_page.dart b/lib/src/screens/transaction_details/transaction_details_page.dart index 098d65c23..8d3ae8c9e 100644 --- a/lib/src/screens/transaction_details/transaction_details_page.dart +++ b/lib/src/screens/transaction_details/transaction_details_page.dart @@ -6,7 +6,7 @@ import 'package:cake_wallet/view_model/transaction_details_view_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:cake_wallet/generated/i18n.dart'; -import 'package:cake_wallet/src/widgets/standart_list_row.dart'; +import 'package:cake_wallet/src/widgets/standard_list_row.dart'; import 'package:cake_wallet/src/screens/transaction_details/blockexplorer_list_item.dart'; import 'package:cake_wallet/src/screens/transaction_details/standart_list_item.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; @@ -42,7 +42,7 @@ class TransactionDetailsPage extends BasePage { S.of(context).transaction_details_copied(item.title)); }, child: - StandartListRow(title: '${item.title}:', value: item.value), + AnotherStandardListRow(title: '${item.title}:', value: item.value), ); } @@ -50,7 +50,7 @@ class TransactionDetailsPage extends BasePage { return GestureDetector( onTap: item.onTap, child: - StandartListRow(title: '${item.title}:', value: item.value), + AnotherStandardListRow(title: '${item.title}:', value: item.value), ); } diff --git a/lib/src/screens/unspent_coins/unspent_coins_details_page.dart b/lib/src/screens/unspent_coins/unspent_coins_details_page.dart index b1c4ff01b..74fbcfdd9 100644 --- a/lib/src/screens/unspent_coins/unspent_coins_details_page.dart +++ b/lib/src/screens/unspent_coins/unspent_coins_details_page.dart @@ -5,7 +5,7 @@ import 'package:cake_wallet/src/widgets/standard_list.dart'; import 'package:cake_wallet/view_model/unspent_coins/unspent_coins_details_view_model.dart'; import 'package:cake_wallet/view_model/unspent_coins/unspent_coins_switch_item.dart'; import 'package:flutter/material.dart'; -import 'package:cake_wallet/src/widgets/standart_list_row.dart'; +import 'package:cake_wallet/src/widgets/standard_list_row.dart'; import 'package:cake_wallet/src/screens/transaction_details/standart_list_item.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; @@ -30,7 +30,7 @@ class UnspentCoinsDetailsPage extends BasePage { final item = unspentCoinsDetailsViewModel.items[index]; if (item is StandartListItem) { - return StandartListRow( + return AnotherStandardListRow( title: '${item.title}:', value: item.value); } diff --git a/lib/src/screens/unspent_coins/widgets/unspent_coins_switch_row.dart b/lib/src/screens/unspent_coins/widgets/unspent_coins_switch_row.dart index 6272469df..734aeb7ee 100644 --- a/lib/src/screens/unspent_coins/widgets/unspent_coins_switch_row.dart +++ b/lib/src/screens/unspent_coins/widgets/unspent_coins_switch_row.dart @@ -1,4 +1,4 @@ -import 'package:cake_wallet/src/widgets/standart_switch.dart'; +import 'package:cake_wallet/src/widgets/standard_switch.dart'; import 'package:flutter/material.dart'; class UnspentCoinsSwitchRow extends StatelessWidget { @@ -33,7 +33,7 @@ class UnspentCoinsSwitchRow extends StatelessWidget { textAlign: TextAlign.left), Padding( padding: EdgeInsets.only(top: 12), - child: StandartSwitch( + child: StandardSwitch( value: switchValue, onTaped: () => onSwitchValueChange(!switchValue)) ) diff --git a/lib/src/screens/wallet_keys/wallet_keys_page.dart b/lib/src/screens/wallet_keys/wallet_keys_page.dart index 942809ac8..f97200e1e 100644 --- a/lib/src/screens/wallet_keys/wallet_keys_page.dart +++ b/lib/src/screens/wallet_keys/wallet_keys_page.dart @@ -6,7 +6,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; -import 'package:cake_wallet/src/widgets/standart_list_row.dart'; +import 'package:cake_wallet/src/widgets/standard_list_row.dart'; import 'package:cake_wallet/view_model/wallet_keys_view_model.dart'; class WalletKeysPage extends BasePage { @@ -71,7 +71,7 @@ class WalletKeysPage extends BasePage { Clipboard.setData(ClipboardData(text: item.value)); showBar(context, S.of(context).copied_key_to_clipboard(item.title)); }, - child: StandartListRow( + child: AnotherStandardListRow( title: item.title + ':', value: item.value, ), diff --git a/lib/src/widgets/standard_checkbox.dart b/lib/src/widgets/standard_checkbox.dart index d7b947a7e..d2cd6463d 100644 --- a/lib/src/widgets/standard_checkbox.dart +++ b/lib/src/widgets/standard_checkbox.dart @@ -3,13 +3,13 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; class StandardCheckbox extends StatelessWidget { - StandardCheckbox({ - required this.value, - this.caption = '', - this.gradientBackground = false, - this.borderColor, - this.iconColor, - required this.onChanged}); + StandardCheckbox( + {required this.value, + this.caption = '', + this.gradientBackground = false, + this.borderColor, + this.iconColor, + required this.onChanged}); final bool value; final String caption; @@ -18,34 +18,23 @@ class StandardCheckbox extends StatelessWidget { final Color? iconColor; final Function(bool) onChanged; - - @override Widget build(BuildContext context) { - final baseGradient = LinearGradient(colors: [ Theme.of(context).primaryTextTheme.subtitle1!.color!, Theme.of(context).primaryTextTheme.subtitle1!.decorationColor!, ], begin: Alignment.centerLeft, end: Alignment.centerRight); final boxBorder = Border.all( - color: borderColor ?? Theme.of(context) - .primaryTextTheme - .caption! - .color!, - width: 1.0); - + color: borderColor ?? Theme.of(context).primaryTextTheme.caption!.color!, width: 1.0); final checkedBoxDecoration = BoxDecoration( gradient: gradientBackground ? baseGradient : null, border: gradientBackground ? null : boxBorder, - borderRadius: BorderRadius.all( - Radius.circular(8.0))); + borderRadius: BorderRadius.all(Radius.circular(8.0))); - final uncheckedBoxDecoration = BoxDecoration( - border: boxBorder, - borderRadius: BorderRadius.all( - Radius.circular(8.0))); + final uncheckedBoxDecoration = + BoxDecoration(border: boxBorder, borderRadius: BorderRadius.all(Radius.circular(8.0))); return GestureDetector( onTap: () => onChanged(!value), @@ -58,27 +47,23 @@ class StandardCheckbox extends StatelessWidget { width: 24.0, decoration: value ? checkedBoxDecoration : uncheckedBoxDecoration, child: value - ? Icon( - Icons.check, - color: iconColor ?? Colors.blue, - size: 20.0, - ) - : Offstage(), + ? Icon( + Icons.check, + color: iconColor ?? Colors.blue, + size: 20.0, + ) + : Offstage(), ), - if (caption.isNotEmpty) Padding( - padding: EdgeInsets.only(left: 10), - child: Text( - caption, - style: TextStyle( - fontSize: 16.0, - color: Theme.of(context) - .primaryTextTheme! - .headline6! - .color!), - ) - ) + if (caption.isNotEmpty) + Padding( + padding: EdgeInsets.only(left: 10), + child: Text( + caption, + style: TextStyle( + fontSize: 16.0, color: Theme.of(context).primaryTextTheme!.headline6!.color!), + )) ], ), ); } -} \ No newline at end of file +} diff --git a/lib/src/widgets/standard_list.dart b/lib/src/widgets/standard_list.dart index f5abdd900..680cf6edd 100644 --- a/lib/src/widgets/standard_list.dart +++ b/lib/src/widgets/standard_list.dart @@ -1,6 +1,6 @@ import 'package:cake_wallet/palette.dart'; -import 'package:cake_wallet/src/widgets/standart_list_card.dart'; -import 'package:cake_wallet/src/widgets/standart_list_status_row.dart'; +import 'package:cake_wallet/src/widgets/standard_list_card.dart'; +import 'package:cake_wallet/src/widgets/standard_list_status_row.dart'; import 'package:flutter/material.dart'; class StandardListRow extends StatelessWidget { @@ -217,7 +217,7 @@ class SectionStandardList extends StatelessWidget { return Container(); } - if (row is StandartListStatusRow || row is TradeDatailsStandartListCard) { + if (row is StandardListStatusRow || row is TradeDetailsStandardListCard) { return Container(); } diff --git a/lib/src/widgets/standart_list_card.dart b/lib/src/widgets/standard_list_card.dart similarity index 96% rename from lib/src/widgets/standart_list_card.dart rename to lib/src/widgets/standard_list_card.dart index 569a4e51f..7b2ecc2ce 100644 --- a/lib/src/widgets/standart_list_card.dart +++ b/lib/src/widgets/standard_list_card.dart @@ -2,8 +2,8 @@ import 'package:cake_wallet/palette.dart'; import 'package:flutter/material.dart'; import 'package:cake_wallet/themes/theme_base.dart'; -class TradeDatailsStandartListCard extends StatelessWidget { - TradeDatailsStandartListCard( +class TradeDetailsStandardListCard extends StatelessWidget { + TradeDetailsStandardListCard( {required this.id, required this.create, required this.pair, diff --git a/lib/src/widgets/standart_list_row.dart b/lib/src/widgets/standard_list_row.dart similarity index 96% rename from lib/src/widgets/standart_list_row.dart rename to lib/src/widgets/standard_list_row.dart index 94a4c4c76..e174acc50 100644 --- a/lib/src/widgets/standart_list_row.dart +++ b/lib/src/widgets/standard_list_row.dart @@ -1,8 +1,8 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -class StandartListRow extends StatelessWidget { - StandartListRow( +class AnotherStandardListRow extends StatelessWidget { + AnotherStandardListRow( {required this.title, required this.value, this.titleFontSize = 14, diff --git a/lib/src/widgets/standart_list_status_row.dart b/lib/src/widgets/standard_list_status_row.dart similarity index 95% rename from lib/src/widgets/standart_list_status_row.dart rename to lib/src/widgets/standard_list_status_row.dart index d97c4f688..f958e83ae 100644 --- a/lib/src/widgets/standart_list_status_row.dart +++ b/lib/src/widgets/standard_list_status_row.dart @@ -3,8 +3,8 @@ import 'package:cake_wallet/src/screens/dashboard/widgets/sync_indicator_icon.da import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -class StandartListStatusRow extends StatelessWidget { - StandartListStatusRow({required this.title, required this.value}); +class StandardListStatusRow extends StatelessWidget { + StandardListStatusRow({required this.title, required this.value}); final String title; final String value; diff --git a/lib/src/widgets/standart_switch.dart b/lib/src/widgets/standard_switch.dart similarity index 81% rename from lib/src/widgets/standart_switch.dart rename to lib/src/widgets/standard_switch.dart index 3018fb5b4..929286058 100644 --- a/lib/src/widgets/standart_switch.dart +++ b/lib/src/widgets/standard_switch.dart @@ -1,17 +1,17 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -class StandartSwitch extends StatefulWidget { - const StandartSwitch({required this.value, required this.onTaped}); +class StandardSwitch extends StatefulWidget { + const StandardSwitch({required this.value, required this.onTaped}); final bool value; final VoidCallback onTaped; @override - StandartSwitchState createState() => StandartSwitchState(); + StandardSwitchState createState() => StandardSwitchState(); } -class StandartSwitchState extends State { +class StandardSwitchState extends State { @override Widget build(BuildContext context) { return GestureDetector( From 947d1e2f7c03f02f58e8e80cdd7d5ea9d3264122 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Thu, 15 Dec 2022 22:15:03 +0200 Subject: [PATCH 025/173] Pump app versions and build numbers [skip ci] --- 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 5b704eea1..556a78a87 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.2" -MONERO_COM_BUILD_NUMBER=33 +MONERO_COM_VERSION="1.2.3" +MONERO_COM_BUILD_NUMBER=34 MONERO_COM_BUNDLE_ID="com.monero.app" MONERO_COM_PACKAGE="com.monero.app" CAKEWALLET_NAME="Cake Wallet" -CAKEWALLET_VERSION="4.5.3" -CAKEWALLET_BUILD_NUMBER=138 +CAKEWALLET_VERSION="4.5.4" +CAKEWALLET_BUILD_NUMBER=139 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 fbf8233e5..f530f718a 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.2" -MONERO_COM_BUILD_NUMBER=30 +MONERO_COM_VERSION="1.2.3" +MONERO_COM_BUILD_NUMBER=31 MONERO_COM_BUNDLE_ID="com.cakewallet.monero" CAKEWALLET_NAME="Cake Wallet" -CAKEWALLET_VERSION="4.5.3" -CAKEWALLET_BUILD_NUMBER=135 +CAKEWALLET_VERSION="4.5.4" +CAKEWALLET_BUILD_NUMBER=136 CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet" HAVEN_NAME="Haven" From afd9fe75543eda80e6131bce76d5c56b90cef788 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Fri, 16 Dec 2022 14:06:08 +0200 Subject: [PATCH 026/173] add missing default priority for btc and ltc --- lib/ionia/ionia_anypay.dart | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/ionia/ionia_anypay.dart b/lib/ionia/ionia_anypay.dart index f4053094b..2aaaf4994 100644 --- a/lib/ionia/ionia_anypay.dart +++ b/lib/ionia/ionia_anypay.dart @@ -55,7 +55,9 @@ class IoniaAnyPay { address: out.address, formattedCryptoAmount: out.amount, sendAll: false)).toList(), - feeRate: instruction.requiredFeeRate); + feeRate: instruction.requiredFeeRate, + priority: bitcoin!.getBitcoinTransactionPriorityMedium(), + ); case AnyPayChain.ltc: return bitcoin!.createBitcoinTransactionCredentialsRaw( instruction.outputs.map((out) => @@ -64,7 +66,9 @@ class IoniaAnyPay { address: out.address, formattedCryptoAmount: out.amount, sendAll: false)).toList(), - feeRate: instruction.requiredFeeRate); + feeRate: instruction.requiredFeeRate, + priority: bitcoin!.getLitecoinTransactionPriorityMedium(), + ); default: throw Exception('Incorrect transaction chain: ${payment.chain.toUpperCase()}'); } From 6148b91c8a827a65fc35b9370dc6ba9888d7739b Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Fri, 16 Dec 2022 14:33:33 +0200 Subject: [PATCH 027/173] Fix Generic Type being enforced to extend Object --- .../screens/settings/widgets/settings_picker_cell.dart | 2 +- lib/src/widgets/picker.dart | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/lib/src/screens/settings/widgets/settings_picker_cell.dart b/lib/src/screens/settings/widgets/settings_picker_cell.dart index 1da2d6fc1..8dd5c8c2c 100644 --- a/lib/src/screens/settings/widgets/settings_picker_cell.dart +++ b/lib/src/screens/settings/widgets/settings_picker_cell.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:cake_wallet/src/widgets/picker.dart'; import 'package:cake_wallet/src/widgets/standard_list.dart'; -class SettingsPickerCell extends StandardListRow { +class SettingsPickerCell extends StandardListRow { SettingsPickerCell( {required String title, required this.selectedItem, diff --git a/lib/src/widgets/picker.dart b/lib/src/widgets/picker.dart index 36aafe5aa..f26ff3ee2 100644 --- a/lib/src/widgets/picker.dart +++ b/lib/src/widgets/picker.dart @@ -4,7 +4,7 @@ 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 Picker extends StatefulWidget { +class Picker extends StatefulWidget { Picker({ required this.selectedAtIndex, required this.items, @@ -39,7 +39,7 @@ class Picker extends StatefulWidget { _PickerState createState() => _PickerState(items, images, onItemSelected); } -class _PickerState extends State { +class _PickerState extends State> { _PickerState(this.items, this.images, this.onItemSelected); final Function(Item) onItemSelected; @@ -59,7 +59,7 @@ class _PickerState extends State { images = []; for (int i=0;i extends State { child: Padding( padding: EdgeInsets.only(left: image != null ? 12 : 0), child: Text( - // What a hack (item as) ? - widget.displayItem?.call(item as Object) ?? item.toString(), + widget.displayItem?.call(item) ?? item.toString(), style: TextStyle( fontSize: 14, fontFamily: 'Lato', From 7ffb654065add7d4fe668cfd36a5ed0902152952 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Fri, 16 Dec 2022 19:21:40 +0200 Subject: [PATCH 028/173] Calculate fee amount from fee rate if available --- cw_bitcoin/lib/electrum_wallet.dart | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cw_bitcoin/lib/electrum_wallet.dart b/cw_bitcoin/lib/electrum_wallet.dart index fad546d90..f31db7bb8 100644 --- a/cw_bitcoin/lib/electrum_wallet.dart +++ b/cw_bitcoin/lib/electrum_wallet.dart @@ -191,8 +191,10 @@ abstract class ElectrumWalletBase extends WalletBase Date: Sat, 17 Dec 2022 02:24:15 +0200 Subject: [PATCH 029/173] Remove fallback default priority to calculate fee, in order to know if something is wrong from anypay --- lib/ionia/ionia_anypay.dart | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/lib/ionia/ionia_anypay.dart b/lib/ionia/ionia_anypay.dart index 2aaaf4994..f4053094b 100644 --- a/lib/ionia/ionia_anypay.dart +++ b/lib/ionia/ionia_anypay.dart @@ -55,9 +55,7 @@ class IoniaAnyPay { address: out.address, formattedCryptoAmount: out.amount, sendAll: false)).toList(), - feeRate: instruction.requiredFeeRate, - priority: bitcoin!.getBitcoinTransactionPriorityMedium(), - ); + feeRate: instruction.requiredFeeRate); case AnyPayChain.ltc: return bitcoin!.createBitcoinTransactionCredentialsRaw( instruction.outputs.map((out) => @@ -66,9 +64,7 @@ class IoniaAnyPay { address: out.address, formattedCryptoAmount: out.amount, sendAll: false)).toList(), - feeRate: instruction.requiredFeeRate, - priority: bitcoin!.getLitecoinTransactionPriorityMedium(), - ); + feeRate: instruction.requiredFeeRate); default: throw Exception('Incorrect transaction chain: ${payment.chain.toUpperCase()}'); } From ecc556e4e339ca5d22569d458d6ba37c71f204b9 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Mon, 19 Dec 2022 19:37:58 +0200 Subject: [PATCH 030/173] Cache Generated Externals to Improve the runtime of the workflow --- .github/workflows/pr_test_build.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/.github/workflows/pr_test_build.yml b/.github/workflows/pr_test_build.yml index 190b891e1..d2320d8fb 100644 --- a/.github/workflows/pr_test_build.yml +++ b/.github/workflows/pr_test_build.yml @@ -34,6 +34,24 @@ 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_haven/ios/External + /opt/android/cake_wallet/cw_shared_external/ios/External + key: externals-cache-key + + - if: ${{ steps.cache-externals.outputs.cache-hit != 'true' }} + name: Generate Externals + run: | + cd cake_wallet/scripts/android/ + source ./app_env.sh cakewallet ./build_all.sh ./copy_monero_deps.sh From bb197980f49b20d456bd49f259ba6f55ba2e0476 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Mon, 19 Dec 2022 19:41:00 +0200 Subject: [PATCH 031/173] Upload to transfer.sh lastly since its taking more time recently --- .github/workflows/pr_test_build.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/pr_test_build.yml b/.github/workflows/pr_test_build.yml index d2320d8fb..06dfa5b65 100644 --- a/.github/workflows/pr_test_build.yml +++ b/.github/workflows/pr_test_build.yml @@ -50,7 +50,7 @@ jobs: - if: ${{ steps.cache-externals.outputs.cache-hit != 'true' }} name: Generate Externals run: | - cd cake_wallet/scripts/android/ + cd /opt/android/cake_wallet/scripts/android/ source ./app_env.sh cakewallet ./build_all.sh ./copy_monero_deps.sh @@ -129,19 +129,19 @@ jobs: # --token ${{ secrets.APP_CENTER_TOKEN }} \ # --quiet - - name: Send Test APK - run: | - cd /opt/android/cake_wallet - var=$(curl --upload-file build/app/outputs/apk/release/app-release.apk https://transfer.sh/$GITHUB_HEAD_REF.apk -H "Max-Days: 10") - curl ${{ secrets.SLACK_WEB_HOOK }} -H "Content-Type: application/json" -d '{"apk_link": "'"$var"'","ticket": "'"$GITHUB_HEAD_REF"'"}' - - name: Rename apk file run: | cd /opt/android/cake_wallet/build/app/outputs/apk/release mkdir test-apk - mv app-release.apk test-apk/$GITHUB_HEAD_REF.apk + cp app-release.apk test-apk/$GITHUB_HEAD_REF.apk - name: Upload Artifact uses: kittaakos/upload-artifact-as-is@v0 with: path: /opt/android/cake_wallet/build/app/outputs/apk/release/test-apk/ + + - name: Send Test APK + run: | + cd /opt/android/cake_wallet + var=$(curl --upload-file build/app/outputs/apk/release/app-release.apk https://transfer.sh/$GITHUB_HEAD_REF.apk -H "Max-Days: 10") + curl ${{ secrets.SLACK_WEB_HOOK }} -H "Content-Type: application/json" -d '{"apk_link": "'"$var"'","ticket": "'"$GITHUB_HEAD_REF"'"}' From d204669f0869f227357400f378c1cc3627ba1d33 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Mon, 19 Dec 2022 21:50:44 +0200 Subject: [PATCH 032/173] Test Caching --- .github/workflows/pr_test_build.yml | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pr_test_build.yml b/.github/workflows/pr_test_build.yml index 06dfa5b65..67cd60aa8 100644 --- a/.github/workflows/pr_test_build.yml +++ b/.github/workflows/pr_test_build.yml @@ -43,10 +43,34 @@ jobs: /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_haven/ios/External + /opt/android/cake_wallet/cw_monero/ios/External /opt/android/cake_wallet/cw_shared_external/ios/External key: externals-cache-key + - name: Test Cache + run: | + echo steps.cache-externals.outputs.cache-hit + cd /opt/android/cake_wallet/cw_shared_external/ios + ls + echo "==================================" + echo "==================================" + cd ../../cw_haven/ios + ls + echo "==================================" + echo "==================================" + cd ../android + ls + echo "==================================" + echo "==================================" + cd ../../cw_monero/ios + ls + echo "==================================" + echo "==================================" + cd ../android + ls + echo "==================================" + echo "==================================" + - if: ${{ steps.cache-externals.outputs.cache-hit != 'true' }} name: Generate Externals run: | From 61ae5bf800508aed1e74b78fdcb7f6d9ec8f38d2 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Mon, 19 Dec 2022 23:32:20 +0200 Subject: [PATCH 033/173] Test Caching --- .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 67cd60aa8..b1988b470 100644 --- a/.github/workflows/pr_test_build.yml +++ b/.github/workflows/pr_test_build.yml @@ -49,7 +49,7 @@ jobs: - name: Test Cache run: | - echo steps.cache-externals.outputs.cache-hit + echo ${{ steps.cache-externals.outputs.cache-hit }} cd /opt/android/cake_wallet/cw_shared_external/ios ls echo "==================================" From dfa8ad2fe97fa420e87f2fa709442adc7258c1dd Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Tue, 20 Dec 2022 14:37:13 +0200 Subject: [PATCH 034/173] Remove testing steps --- .github/workflows/pr_test_build.yml | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/.github/workflows/pr_test_build.yml b/.github/workflows/pr_test_build.yml index b1988b470..96ac95e49 100644 --- a/.github/workflows/pr_test_build.yml +++ b/.github/workflows/pr_test_build.yml @@ -47,30 +47,6 @@ jobs: /opt/android/cake_wallet/cw_shared_external/ios/External key: externals-cache-key - - name: Test Cache - run: | - echo ${{ steps.cache-externals.outputs.cache-hit }} - cd /opt/android/cake_wallet/cw_shared_external/ios - ls - echo "==================================" - echo "==================================" - cd ../../cw_haven/ios - ls - echo "==================================" - echo "==================================" - cd ../android - ls - echo "==================================" - echo "==================================" - cd ../../cw_monero/ios - ls - echo "==================================" - echo "==================================" - cd ../android - ls - echo "==================================" - echo "==================================" - - if: ${{ steps.cache-externals.outputs.cache-hit != 'true' }} name: Generate Externals run: | From e005e2aed703e56e94e485f5ea771ee70734077d Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Wed, 21 Dec 2022 19:15:02 +0200 Subject: [PATCH 035/173] Add Cake Pay Web Card to marketplace --- .../screens/dashboard/widgets/market_place_page.dart | 12 +++++++++++- 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_uk.arb | 4 +++- res/values/strings_zh.arb | 4 +++- 16 files changed, 56 insertions(+), 16 deletions(-) diff --git a/lib/src/screens/dashboard/widgets/market_place_page.dart b/lib/src/screens/dashboard/widgets/market_place_page.dart index a64a132ad..9ac225634 100644 --- a/lib/src/screens/dashboard/widgets/market_place_page.dart +++ b/lib/src/screens/dashboard/widgets/market_place_page.dart @@ -6,6 +6,7 @@ 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:cake_wallet/generated/i18n.dart'; +import 'package:url_launcher/url_launcher.dart'; class MarketPlacePage extends StatelessWidget { @@ -48,6 +49,15 @@ class MarketPlacePage extends StatelessWidget { title: S.of(context).cake_pay_title, subTitle: S.of(context).cake_pay_subtitle, ), + SizedBox(height: 20), + MarketPlaceItem( + onTap: () => launchUrl( + Uri.https("buy.cakepay.com"), + mode: LaunchMode.externalApplication, + ), + title: S.of(context).cake_pay_web_cards_title, + subTitle: S.of(context).cake_pay_web_cards_subtitle, + ), ], ), ), @@ -72,7 +82,7 @@ class MarketPlacePage extends StatelessWidget { buttonAction: () => Navigator.of(context).pop()); }); break; - default: + default: Navigator.of(context).pushNamed(Routes.ioniaWelcomePage); } } diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index 2b66a1b28..56b7917df 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -539,7 +539,9 @@ "wallet_name_exists": "Wallet mit diesem Namen existiert bereits", "market_place": "Marktplatz", "cake_pay_title": "Cake Pay-Geschenkkarten", - "cake_pay_subtitle": "Geschenkkarten kaufen und sofort einlösen", + "cake_pay_subtitle": "Kaufen Sie ermäßigte Geschenkkarten (nur USA)", + "cake_pay_web_cards_title": "Cake Pay-Webkarten", + "cake_pay_web_cards_subtitle": "Kaufen Sie weltweit Prepaid-Karten und Geschenkkarten", "about_cake_pay": "Mit Cake Pay können Sie ganz einfach Geschenkkarten mit virtuellen Vermögenswerten kaufen, die Sie sofort bei über 150.000 Händlern in den Vereinigten Staaten ausgeben können.", "cake_pay_account_note": "Melden Sie sich nur mit einer E-Mail-Adresse an, um Karten anzuzeigen und zu kaufen. Einige sind sogar mit Rabatt erhältlich!", "already_have_account": "Sie haben bereits ein Konto?", diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index 92d763cc2..5f312a132 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -539,7 +539,9 @@ "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 gift cards and redeem instantly", + "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?", diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb index df23d994e..2c611a540 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -539,7 +539,9 @@ "wallet_name_exists": "Wallet con ese nombre ya ha existido", "market_place": "Mercado", "cake_pay_title": "Tarjetas de regalo Cake Pay", - "cake_pay_subtitle": "Compra tarjetas de regalo y canjéalas al instante", + "cake_pay_subtitle": "Compre tarjetas de regalo con descuento (solo EE. UU.)", + "cake_pay_web_cards_title": "Tarjetas Web Cake Pay", + "cake_pay_web_cards_subtitle": "Compre tarjetas de prepago y tarjetas de regalo en todo el mundo", "about_cake_pay": "Cake Pay le permite comprar fácilmente tarjetas de regalo con activos virtuales, gastables instantáneamente en más de 150 000 comerciantes en los Estados Unidos.", "cake_pay_account_note": "Regístrese con solo una dirección de correo electrónico para ver y comprar tarjetas. ¡Algunas incluso están disponibles con descuento!", "already_have_account": "¿Ya tienes una cuenta?", diff --git a/res/values/strings_fr.arb b/res/values/strings_fr.arb index 349bb9dfc..1c4ebf1a8 100644 --- a/res/values/strings_fr.arb +++ b/res/values/strings_fr.arb @@ -537,7 +537,9 @@ "wallet_name_exists": "Un portefeuille portant ce nom existe déjà", "market_place": "Place de marché", "cake_pay_title": "Cartes cadeaux Cake Pay", - "cake_pay_subtitle": "Achetez des cartes-cadeaux et échangez-les instantanément", + "cake_pay_subtitle": "Achetez des cartes-cadeaux à prix réduit (États-Unis uniquement)", + "cake_pay_web_cards_title": "Cartes Web Cake Pay", + "cake_pay_web_cards_subtitle": "Achetez des cartes prépayées et des cartes-cadeaux dans le monde entier", "about_cake_pay": "Cake Pay vous permet d'acheter facilement des cartes-cadeaux avec des actifs virtuels, utilisables instantanément chez plus de 150 000 marchands aux États-Unis.", "cake_pay_account_note": "Inscrivez-vous avec juste une adresse e-mail pour voir et acheter des cartes. Certaines sont même disponibles à prix réduit !", "already_have_account": "Vous avez déjà un compte ?", diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb index 66d40ddc2..c5c041061 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -539,7 +539,9 @@ "wallet_name_exists": "उस नाम वाला वॉलेट पहले से मौजूद है", "market_place": "मार्केटप्लेस", "cake_pay_title": "केक पे गिफ्ट कार्ड्स", - "cake_pay_subtitle": "उपहार कार्ड खरीदें और तुरंत रिडीम करें", + "cake_pay_subtitle": "रियायती उपहार कार्ड खरीदें (केवल यूएसए)", + "cake_pay_web_cards_title": "केक भुगतान वेब कार्ड", + "cake_pay_web_cards_subtitle": "दुनिया भर में प्रीपेड कार्ड और गिफ्ट कार्ड खरीदें", "about_cake_pay": "केक पे आपको वर्चुअल संपत्ति के साथ आसानी से उपहार कार्ड खरीदने की अनुमति देता है, जिसे संयुक्त राज्य में 150,000 से अधिक व्यापारियों पर तुरंत खर्च किया जा सकता है।", "cake_pay_account_note": "कार्ड देखने और खरीदने के लिए केवल एक ईमेल पते के साथ साइन अप करें। कुछ छूट पर भी उपलब्ध हैं!", "ready_have_account": "क्या आपके पास पहले से ही एक खाता है?", diff --git a/res/values/strings_hr.arb b/res/values/strings_hr.arb index 5eb394b01..dc9275150 100644 --- a/res/values/strings_hr.arb +++ b/res/values/strings_hr.arb @@ -539,7 +539,9 @@ "wallet_name_exists": "Novčanik s tim nazivom već postoji", "market_place": "Tržnica", "cake_pay_title": "Cake Pay poklon kartice", - "cake_pay_subtitle": "Kupite darovne kartice i odmah ih iskoristite", + "cake_pay_subtitle": "Kupite darovne kartice s popustom (samo SAD)", + "cake_pay_web_cards_title": "Cake Pay Web kartice", + "cake_pay_web_cards_subtitle": "Kupujte prepaid kartice i poklon kartice diljem svijeta", "about_cake_pay": "Cake Pay vam omogućuje jednostavnu kupnju darovnih kartica s virtualnim sredstvima, koja se trenutno mogu potrošiti kod više od 150 000 trgovaca u Sjedinjenim Državama.", "cake_pay_account_note": "Prijavite se samo s adresom e-pošte da biste vidjeli i kupili kartice. Neke su čak dostupne uz popust!", "already_have_account": "Već imate račun?", diff --git a/res/values/strings_it.arb b/res/values/strings_it.arb index 7ff01753f..e3770f760 100644 --- a/res/values/strings_it.arb +++ b/res/values/strings_it.arb @@ -539,7 +539,9 @@ "wallet_name_exists": "Il portafoglio con quel nome è già esistito", "market_place": "Mercato", "cake_pay_title": "Carte regalo Cake Pay", - "cake_pay_subtitle": "Acquista carte regalo e riscattale all'istante", + "cake_pay_subtitle": "Acquista buoni regalo scontati (solo USA)", + "cake_pay_web_cards_title": "Carte Web Cake Pay", + "cake_pay_web_cards_subtitle": "Acquista carte prepagate e carte regalo in tutto il mondo", "about_cake_pay": "Cake Pay ti consente di acquistare facilmente buoni regalo con asset virtuali, spendibili istantaneamente presso oltre 150.000 commercianti negli Stati Uniti.", "cake_pay_account_note": "Iscriviti con solo un indirizzo email per vedere e acquistare le carte. Alcune sono anche disponibili con uno sconto!", "already_have_account": "Hai già un account?", diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb index 97ccb7160..d699b070e 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -539,7 +539,9 @@ "wallet_name_exists": "その名前のウォレットはすでに存在しています", "market_place": "Marketplace", "cake_pay_title": "ケーキペイギフトカード", - "cake_pay_subtitle": "ギフトカードを購入してすぐに利用できます", + "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": "すでにアカウントをお持ちですか?", diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb index 470a1e405..3761f4f93 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -539,7 +539,9 @@ "wallet_name_exists": "해당 이름의 지갑이 이미 존재합니다.", "market_place": "마켓플레이스", "cake_pay_title": "케이크 페이 기프트 카드", - "cake_pay_subtitle": "기프트 카드를 구매하고 즉시 사용", + "cake_pay_subtitle": "할인된 기프트 카드 구매(미국만 해당)", + "cake_pay_web_cards_title": "케이크페이 웹카드", + "cake_pay_web_cards_subtitle": "전 세계 선불 카드 및 기프트 카드 구매", "about_cake_pay": "Cake Pay를 사용하면 미국 내 150,000개 이상의 가맹점에서 즉시 사용할 수 있는 가상 자산이 포함된 기프트 카드를 쉽게 구입할 수 있습니다.", "cake_pay_account_note": "이메일 주소로 가입하면 카드를 보고 구매할 수 있습니다. 일부는 할인된 가격으로 사용 가능합니다!", "already_have_account": "이미 계정이 있습니까?", diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index a198f8672..426f9530a 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -539,7 +539,9 @@ "wallet_name_exists": "Portemonnee met die naam bestaat al", "market_place": "Marktplaats", "cake_pay_title": "Cake Pay-cadeaubonnen", - "cake_pay_subtitle": "Koop cadeaubonnen en wissel ze direct in", + "cake_pay_subtitle": "Koop cadeaubonnen met korting (alleen VS)", + "cake_pay_web_cards_title": "Cake Pay-webkaarten", + "cake_pay_web_cards_subtitle": "Koop wereldwijd prepaidkaarten en cadeaubonnen", "about_cake_pay": "Met Cake Pay kunt u eenvoudig cadeaubonnen kopen met virtuele activa, die direct kunnen worden uitgegeven bij meer dan 150.000 handelaren in de Verenigde Staten.", "cake_pay_account_note": "Meld u aan met alleen een e-mailadres om kaarten te bekijken en te kopen. Sommige zijn zelfs met korting verkrijgbaar!", "already_have_account": "Heb je al een account?", diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index dc1ffbd84..2baf3cf48 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -539,7 +539,9 @@ "wallet_name_exists": "Portfel o tej nazwie już istnieje", "market_place": "Rynek", "cake_pay_title": "Karty podarunkowe Cake Pay", - "cake_pay_subtitle": "Kup karty podarunkowe i wykorzystaj je natychmiast", + "cake_pay_subtitle": "Kup karty upominkowe ze zniżką (tylko USA)", + "cake_pay_web_cards_title": "Cake Pay Web Cards", + "cake_pay_web_cards_subtitle": "Kupuj na całym świecie karty przedpłacone i karty podarunkowe", "about_cake_pay": "Cake Pay umożliwia łatwe kupowanie kart podarunkowych z wirtualnymi aktywami, które można natychmiast wydać u ponad 150 000 sprzedawców w Stanach Zjednoczonych.", "cake_pay_account_note": "Zarejestruj się, używając tylko adresu e-mail, aby przeglądać i kupować karty. Niektóre są nawet dostępne ze zniżką!", "already_have_account": "Masz już konto?", diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb index 6a128d109..9cb077f1b 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -539,7 +539,9 @@ "wallet_name_exists": "A carteira com esse nome já existe", "market_place": "Mercado", "cake_pay_title": "Cartões de presente de pagamento de bolo", - "cake_pay_subtitle": "Compre vales-presente e resgate instantaneamente", + "cake_pay_subtitle": "Compre vales-presente com desconto (somente nos EUA)", + "cake_pay_web_cards_title": "Cartões Cake Pay Web", + "cake_pay_web_cards_subtitle": "Compre cartões pré-pagos e cartões-presente em todo o mundo", "about_cake_pay": "O Cake Pay permite que você compre facilmente cartões-presente com ativos virtuais, que podem ser gastos instantaneamente em mais de 150.000 comerciantes nos Estados Unidos.", "cake_pay_account_note": "Inscreva-se com apenas um endereço de e-mail para ver e comprar cartões. Alguns estão até com desconto!", "already_have_account": "Já tem uma conta?", diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb index 04a7f0665..3772a0d2c 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -539,7 +539,9 @@ "wallet_name_exists": "Кошелек с таким именем уже существует", "market_place": "Торговая площадка", "cake_pay_title": "Подарочные карты Cake Pay", - "cake_pay_subtitle": "Купите подарочные карты и моментально погасите их", + "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": "У вас уже есть аккаунт?", diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb index 58d19e636..680633d22 100644 --- a/res/values/strings_uk.arb +++ b/res/values/strings_uk.arb @@ -538,7 +538,9 @@ "wallet_name_exists": "Гаманець з такою назвою вже існує", "market_place": "Ринок", "cake_pay_title": "Подарункові картки Cake Pay", - "cake_pay_subtitle": "Купуйте подарункові картки та використовуйте їх миттєво", + "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": "Вже є обліковий запис?", diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb index eb4571943..7d251a68e 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -537,7 +537,9 @@ "wallet_name_exists": "同名的钱包已经存在", "market_place": "市场", "cake_pay_title": "Cake Pay 礼品卡", - "cake_pay_subtitle": "购买礼品卡并立即兑换", + "cake_pay_subtitle": "购买打折礼品卡(仅限美国)", + "cake_pay_web_cards_title": "蛋糕支付网络卡", + "cake_pay_web_cards_subtitle": "购买全球预付卡和礼品卡", "about_cake_pay": "Cake Pay 让您可以轻松购买带有虚拟资产的礼品卡,可立即在美国超过 150,000 家商家消费。", "cake_pay_account_note": "只需使用電子郵件地址註冊即可查看和購買卡片。有些甚至可以打折!", "already_have_account": "已经有账号了?", From 85a70e3b1d65bcfd8c8c8e071cac27fa21c31b3f Mon Sep 17 00:00:00 2001 From: Justin Ehrenhofer Date: Wed, 21 Dec 2022 12:06:47 -0600 Subject: [PATCH 036/173] Contributing instructions for languages and fiat currencies --- README.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/README.md b/README.md index bd74ccfbc..c5f6dc1b2 100644 --- a/README.md +++ b/README.md @@ -76,3 +76,31 @@ We have 24/7 free support. Please contact support@cakewallet.com More instructions to follow For instructions on how to build for Android: please view file `howto-build-android.md` + +# Contributing + +## Improving translations + +Edit the applicable `strings_XX.arb` file in `res/values/` and open a pull request with the changes. + +## Add a new language + +1. Create a new `strings_XX.arb` file in `res/values/`, replacing XX with the language's [ISO 639-1 code](https://en.wikipedia.org/wiki/ISO_639-1). + +2. Edit the strings in this file, replacing XXX below with the translation for each string. + +`"welcome" : "Welcome to",` -> `"welcome" : "XXX",` + +3. 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. + +4. Add a relevant flag to `assets/images/flags/XXXX.png`, replacing XXXX with the 3 digit localeCountryCode. The image must be 42x36 pizxels with a 3 pixels of transparent margin on all 4 sides. + +## Add a new fiat currency + +1. Check with [Cake Wallet support](https://guides.cakewallet.com) to see if the desired new fiat currency is available through our fiat API. Not all fiat currencies are. + +2. If the currency is associated strongly with a specific issuing country, map the [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) currency code with the applicable [ISO 3166-1 alpha-3 code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3) in `lib/entities/fiat_currency.dart`. If the currency is used in a whole region or organization, then map with a reasonable interpretation of this (eg: eur countryCode for EUR symbol). + +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 pizxels with a 3 pixels of transparent margin on all 4 sides. From a3afcc19fe119b17b4a63f87cac422ced7d3e333 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Thu, 22 Dec 2022 20:00:16 +0200 Subject: [PATCH 037/173] New App Version Cake Wallet v4.5.5 - Monero v1.2.4 --- 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 556a78a87..979a60e9d 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.3" -MONERO_COM_BUILD_NUMBER=34 +MONERO_COM_VERSION="1.2.4" +MONERO_COM_BUILD_NUMBER=35 MONERO_COM_BUNDLE_ID="com.monero.app" MONERO_COM_PACKAGE="com.monero.app" CAKEWALLET_NAME="Cake Wallet" -CAKEWALLET_VERSION="4.5.4" -CAKEWALLET_BUILD_NUMBER=139 +CAKEWALLET_VERSION="4.5.5" +CAKEWALLET_BUILD_NUMBER=140 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 f530f718a..1965d1e41 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.3" -MONERO_COM_BUILD_NUMBER=31 +MONERO_COM_VERSION="1.2.4" +MONERO_COM_BUILD_NUMBER=32 MONERO_COM_BUNDLE_ID="com.cakewallet.monero" CAKEWALLET_NAME="Cake Wallet" -CAKEWALLET_VERSION="4.5.4" -CAKEWALLET_BUILD_NUMBER=136 +CAKEWALLET_VERSION="4.5.5" +CAKEWALLET_BUILD_NUMBER=137 CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet" HAVEN_NAME="Haven" From 40270e84c9c6c09ff5710a69a80e17c9f536fbec Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Thu, 22 Dec 2022 20:59:40 +0200 Subject: [PATCH 038/173] - Add Cache Dependencies workflow on main branch to be available for all sub branches - Replace static cache key with hash of dependencies pubspec.yaml --- .github/workflows/cache_dependencies.yml | 56 ++++++++++++++++++++++++ .github/workflows/pr_test_build.yml | 2 +- 2 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/cache_dependencies.yml diff --git a/.github/workflows/cache_dependencies.yml b/.github/workflows/cache_dependencies.yml new file mode 100644 index 000000000..4b7084884 --- /dev/null +++ b/.github/workflows/cache_dependencies.yml @@ -0,0 +1,56 @@ +name: Cache Dependencies + +on: + push: + branches: [ main ] + +jobs: + test: + + runs-on: ubuntu-18.04 + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-java@v1 + with: + java-version: '8.x' + + - name: Flutter action + uses: subosito/flutter-action@v1 + with: + flutter-version: '3.3.x' + channel: stable + + - name: Install package dependencies + run: sudo apt-get install -y curl unzip automake build-essential file pkg-config git python libtool libtinfo5 cmake clang + + - name: Execute Build and Setup Commands + run: | + sudo mkdir -p /opt/android + sudo chown $USER /opt/android + cd /opt/android + git clone https://github.com/cake-tech/cake_wallet.git --branch main + cd cake_wallet/scripts/android/ + ./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('/opt/android/cake_wallet/cw_haven/pubspec.yaml', '/opt/android/cake_wallet/cw_monero/pubspec.yaml', '/opt/android/cake_wallet/cw_shared_external/pubspec.yaml') }} + + - 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 diff --git a/.github/workflows/pr_test_build.yml b/.github/workflows/pr_test_build.yml index 96ac95e49..54f716cc2 100644 --- a/.github/workflows/pr_test_build.yml +++ b/.github/workflows/pr_test_build.yml @@ -45,7 +45,7 @@ jobs: /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: externals-cache-key + key: ${{ hashFiles('/opt/android/cake_wallet/cw_haven/pubspec.yaml', '/opt/android/cake_wallet/cw_monero/pubspec.yaml', '/opt/android/cake_wallet/cw_shared_external/pubspec.yaml') }} - if: ${{ steps.cache-externals.outputs.cache-hit != 'true' }} name: Generate Externals From 0baa0329ac857d7e878f0b9bfe403b79bd802d9f Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Thu, 22 Dec 2022 22:54:33 +0200 Subject: [PATCH 039/173] Change key to be of the build scripts hash --- .github/workflows/cache_dependencies.yml | 2 +- .github/workflows/pr_test_build.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cache_dependencies.yml b/.github/workflows/cache_dependencies.yml index 4b7084884..0887ed07d 100644 --- a/.github/workflows/cache_dependencies.yml +++ b/.github/workflows/cache_dependencies.yml @@ -45,7 +45,7 @@ jobs: /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('/opt/android/cake_wallet/cw_haven/pubspec.yaml', '/opt/android/cake_wallet/cw_monero/pubspec.yaml', '/opt/android/cake_wallet/cw_shared_external/pubspec.yaml') }} + key: ${{ hashFiles('/opt/android/cake_wallet/scripts/android/build_monero.sh', '/opt/android/cake_wallet/scripts/android/build_haven.sh') }} - if: ${{ steps.cache-externals.outputs.cache-hit != 'true' }} name: Generate Externals diff --git a/.github/workflows/pr_test_build.yml b/.github/workflows/pr_test_build.yml index 54f716cc2..83e430a32 100644 --- a/.github/workflows/pr_test_build.yml +++ b/.github/workflows/pr_test_build.yml @@ -45,7 +45,7 @@ jobs: /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('/opt/android/cake_wallet/cw_haven/pubspec.yaml', '/opt/android/cake_wallet/cw_monero/pubspec.yaml', '/opt/android/cake_wallet/cw_shared_external/pubspec.yaml') }} + key: ${{ hashFiles('/opt/android/cake_wallet/scripts/android/build_monero.sh', '/opt/android/cake_wallet/scripts/android/build_haven.sh') }} - if: ${{ steps.cache-externals.outputs.cache-hit != 'true' }} name: Generate Externals From 3bcaf06802af3ef6e646631d211cfa390b243f00 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Thu, 22 Dec 2022 23:35:56 +0200 Subject: [PATCH 040/173] Change key to be of the build scripts hash --- .github/workflows/cache_dependencies.yml | 2 +- .github/workflows/pr_test_build.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cache_dependencies.yml b/.github/workflows/cache_dependencies.yml index 0887ed07d..9d49ed3d8 100644 --- a/.github/workflows/cache_dependencies.yml +++ b/.github/workflows/cache_dependencies.yml @@ -45,7 +45,7 @@ jobs: /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('/opt/android/cake_wallet/scripts/android/build_monero.sh', '/opt/android/cake_wallet/scripts/android/build_haven.sh') }} + key: ${{ hashFiles('**/build_monero.sh', '**/build_haven.sh') }} - if: ${{ steps.cache-externals.outputs.cache-hit != 'true' }} name: Generate Externals diff --git a/.github/workflows/pr_test_build.yml b/.github/workflows/pr_test_build.yml index 83e430a32..00fd16199 100644 --- a/.github/workflows/pr_test_build.yml +++ b/.github/workflows/pr_test_build.yml @@ -45,7 +45,7 @@ jobs: /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('/opt/android/cake_wallet/scripts/android/build_monero.sh', '/opt/android/cake_wallet/scripts/android/build_haven.sh') }} + key: ${{ hashFiles('**/build_monero.sh', '**/build_haven.sh') }} - if: ${{ steps.cache-externals.outputs.cache-hit != 'true' }} name: Generate Externals From 89028500e7c83b66551c65914faf733f142c04e0 Mon Sep 17 00:00:00 2001 From: Serhii Date: Fri, 23 Dec 2022 23:58:39 +0200 Subject: [PATCH 041/173] extract SectionDivider widget --- .../screens/dashboard/widgets/filter_widget.dart | 13 +------------ .../monero_account_list_page.dart | 7 ++----- lib/src/screens/receive/receive_page.dart | 4 ++-- .../send/widgets/choose_yat_address_alert.dart | 6 ++---- .../screens/wallet_keys/wallet_keys_page.dart | 6 ++---- lib/src/widgets/base_alert_dialog.dart | 16 ++++------------ lib/src/widgets/section_divider.dart | 13 +++++++++++++ 7 files changed, 26 insertions(+), 39 deletions(-) create mode 100644 lib/src/widgets/section_divider.dart diff --git a/lib/src/screens/dashboard/widgets/filter_widget.dart b/lib/src/screens/dashboard/widgets/filter_widget.dart index 6831819e4..dd693777b 100644 --- a/lib/src/screens/dashboard/widgets/filter_widget.dart +++ b/lib/src/screens/dashboard/widgets/filter_widget.dart @@ -1,6 +1,7 @@ import 'dart:ui'; import 'package:cake_wallet/palette.dart'; import 'package:cake_wallet/src/screens/dashboard/widgets/filter_tile.dart'; +import 'package:cake_wallet/src/widgets/section_divider.dart'; import 'package:cake_wallet/src/widgets/standard_checkbox.dart'; import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart'; import 'package:flutter/cupertino.dart'; @@ -141,15 +142,3 @@ class FilterWidget extends StatelessWidget { ); } } - -class SectionDivider extends StatelessWidget { - const SectionDivider(); - - @override - Widget build(BuildContext context) { - return Container( - height: 1, - color: Theme.of(context).dividerColor, - ); - } -} diff --git a/lib/src/screens/monero_accounts/monero_account_list_page.dart b/lib/src/screens/monero_accounts/monero_account_list_page.dart index 99134369e..c565332a0 100644 --- a/lib/src/screens/monero_accounts/monero_account_list_page.dart +++ b/lib/src/screens/monero_accounts/monero_account_list_page.dart @@ -1,4 +1,5 @@ import 'dart:ui'; +import 'package:cake_wallet/src/widgets/section_divider.dart'; import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; @@ -83,11 +84,7 @@ class MoneroAccountListPage extends StatelessWidget { ListView.separated( padding: EdgeInsets.zero, controller: controller, - separatorBuilder: (context, index) => - Container( - height: 1, - color: Theme.of(context).dividerColor, - ), + separatorBuilder: (context, index) => SectionDivider(), itemCount: accounts.length ?? 0, itemBuilder: (context, index) { final account = accounts[index]; diff --git a/lib/src/screens/receive/receive_page.dart b/lib/src/screens/receive/receive_page.dart index 6f6b4e31c..4344139ac 100644 --- a/lib/src/screens/receive/receive_page.dart +++ b/lib/src/screens/receive/receive_page.dart @@ -1,4 +1,5 @@ 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/show_pop_up.dart'; import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart'; @@ -135,8 +136,7 @@ class ReceivePage extends BasePage { Observer( builder: (_) => ListView.separated( padding: EdgeInsets.all(0), - separatorBuilder: (context, _) => Container( - height: 1, color: Theme.of(context).dividerColor), + separatorBuilder: (context, _) => SectionDivider(), shrinkWrap: true, physics: NeverScrollableScrollPhysics(), itemCount: addressListViewModel.items.length, diff --git a/lib/src/screens/send/widgets/choose_yat_address_alert.dart b/lib/src/screens/send/widgets/choose_yat_address_alert.dart index 93785743d..dae6c5ad7 100644 --- a/lib/src/screens/send/widgets/choose_yat_address_alert.dart +++ b/lib/src/screens/send/widgets/choose_yat_address_alert.dart @@ -1,4 +1,5 @@ import 'package:cake_wallet/src/widgets/cake_scrollbar.dart'; +import 'package:cake_wallet/src/widgets/section_divider.dart'; import 'package:flutter/material.dart'; import 'package:cake_wallet/src/widgets/base_alert_dialog.dart'; @@ -70,10 +71,7 @@ class ChooseYatAddressButtonsState extends State { controller: controller, padding: EdgeInsets.all(0), itemCount: itemCount, - separatorBuilder: (_, __) => Container( - height: 1, - color: Theme.of(context).dividerColor, - ), + separatorBuilder: (_, __) => SectionDivider(), itemBuilder: (context, index) { final address = addresses[index]; diff --git a/lib/src/screens/wallet_keys/wallet_keys_page.dart b/lib/src/screens/wallet_keys/wallet_keys_page.dart index f97200e1e..b690cadda 100644 --- a/lib/src/screens/wallet_keys/wallet_keys_page.dart +++ b/lib/src/screens/wallet_keys/wallet_keys_page.dart @@ -1,4 +1,5 @@ import 'package:auto_size_text/auto_size_text.dart'; +import 'package:cake_wallet/src/widgets/section_divider.dart'; import 'package:cake_wallet/utils/show_bar.dart'; import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; @@ -57,10 +58,7 @@ class WalletKeysPage extends BasePage { height: 1, padding: EdgeInsets.only(left: 24), color: Theme.of(context).accentTextTheme!.headline6!.backgroundColor!, - child: Container( - height: 1, - color: Theme.of(context).dividerColor, - ), + child: SectionDivider(), ), itemCount: walletKeysViewModel.items.length, itemBuilder: (BuildContext context, int index) { diff --git a/lib/src/widgets/base_alert_dialog.dart b/lib/src/widgets/base_alert_dialog.dart index 70370e227..861d1ba9d 100644 --- a/lib/src/widgets/base_alert_dialog.dart +++ b/lib/src/widgets/base_alert_dialog.dart @@ -1,4 +1,5 @@ import 'dart:ui'; +import 'package:cake_wallet/src/widgets/section_divider.dart'; import 'package:flutter/material.dart'; import 'package:cake_wallet/palette.dart'; @@ -76,10 +77,7 @@ class BaseAlertDialog extends StatelessWidget { ), )), ), - Container( - width: 1, - color: Theme.of(context).dividerColor, - ), + SectionDivider(), Expanded( child: TextButton( onPressed: actionRight, @@ -140,10 +138,7 @@ class BaseAlertDialog extends StatelessWidget { isDividerExists ? Padding( padding: EdgeInsets.only(top: 16, bottom: 8), - child: Container( - height: 1, - color: Theme.of(context).dividerColor, - ), + child: SectionDivider(), ) : Offstage(), Padding( @@ -152,10 +147,7 @@ class BaseAlertDialog extends StatelessWidget { ) ], ), - Container( - height: 1, - color: Theme.of(context).dividerColor, - ), + SectionDivider(), actionButtons(context) ], ), diff --git a/lib/src/widgets/section_divider.dart b/lib/src/widgets/section_divider.dart new file mode 100644 index 000000000..bef85f975 --- /dev/null +++ b/lib/src/widgets/section_divider.dart @@ -0,0 +1,13 @@ +import 'package:flutter/material.dart'; + +class SectionDivider extends StatelessWidget { + const SectionDivider(); + + @override + Widget build(BuildContext context) { + return Container( + height: 1, + color: Theme.of(context).dividerColor, + ); + } +} \ No newline at end of file From d893562dad502b69c8dd2f3f196d34f1845f6fcc Mon Sep 17 00:00:00 2001 From: Serhii Date: Sat, 24 Dec 2022 01:09:54 +0200 Subject: [PATCH 042/173] update localization --- .../dashboard/widgets/filter_widget.dart | 25 +++++++++---------- 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_hr.arb | 2 +- res/values/strings_it.arb | 2 +- res/values/strings_ja.arb | 2 +- res/values/strings_ko.arb | 2 +- res/values/strings_nl.arb | 2 +- res/values/strings_pl.arb | 2 +- res/values/strings_pt.arb | 2 +- res/values/strings_ru.arb | 2 +- res/values/strings_uk.arb | 2 +- res/values/strings_zh.arb | 2 +- 16 files changed, 27 insertions(+), 28 deletions(-) diff --git a/lib/src/screens/dashboard/widgets/filter_widget.dart b/lib/src/screens/dashboard/widgets/filter_widget.dart index dd693777b..86682dcbc 100644 --- a/lib/src/screens/dashboard/widgets/filter_widget.dart +++ b/lib/src/screens/dashboard/widgets/filter_widget.dart @@ -108,19 +108,18 @@ class FilterWidget extends StatelessWidget { // .changeEndDate(picked.last); //} }, - child: Padding( - padding: EdgeInsets.only(left: 32), - child: Text( - item.caption, - style: TextStyle( - color: Colors.red, - //Theme.of(context).primaryTextTheme.title.color,// - fontSize: 18, - fontFamily: 'Lato', - fontWeight: FontWeight.w500, - decoration: TextDecoration.none), - ), - ), + // child: Padding( + // padding: EdgeInsets.only(left: 32), + // child: Text( + // item.caption, + // style: TextStyle( + // color: Theme.of(context).primaryTextTheme.title.color, + // fontSize: 18, + // fontFamily: 'Lato', + // fontWeight: FontWeight.w500, + // decoration: TextDecoration.none), + // ), + // ), ); return FilterTile(child: content); diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index bb01cdaba..152d3226e 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -48,7 +48,7 @@ "outgoing" : "Ausgehend", "transactions_by_date" : "Transaktionen nach Datum", "trades" : "Börsen", - "filters" : "Filtern nach", + "filter_by": "Filtern nach", "today" : "Heute", "yesterday" : "Gestern", "received" : "Empfangen", diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index 8cd6a3942..62306776f 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -48,7 +48,7 @@ "outgoing" : "Outgoing", "transactions_by_date" : "Transactions by date", "trades" : "Trades", - "filters" : "Filter by", + "filter_by": "Filter by", "today" : "Today", "yesterday" : "Yesterday", "received" : "Received", diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb index 63fca7fbf..ef3eb6e06 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -48,7 +48,7 @@ "outgoing" : "Saliente", "transactions_by_date" : "Transacciones por fecha", "trades" : "Cambios", - "filters" : "Filtrado por", + "filter_by": "Filtrado por", "today" : "Hoy", "yesterday" : "Ayer", "received" : "Recibido", diff --git a/res/values/strings_fr.arb b/res/values/strings_fr.arb index dc975ac24..2cd961cc1 100644 --- a/res/values/strings_fr.arb +++ b/res/values/strings_fr.arb @@ -46,7 +46,7 @@ "outgoing" : "Sortantes", "transactions_by_date" : "Transactions par date", "trades" : "Échanges", - "filters" : "Filtrer par", + "filter_by": "Filtrer par", "today" : "Aujourd'hui", "yesterday" : "Hier", "received" : "Reçus", diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb index 7cb5ff132..947e1574f 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -48,7 +48,7 @@ "outgoing" : "निवर्तमान", "transactions_by_date" : "तारीख से लेन-देन", "trades" : "ट्रेडों", - "filters" : "के द्वारा छनित", + "filter_by": "के द्वारा छनित", "today" : "आज", "yesterday" : "बिता कल", "received" : "प्राप्त किया", diff --git a/res/values/strings_hr.arb b/res/values/strings_hr.arb index b2696a3df..432cf8fd0 100644 --- a/res/values/strings_hr.arb +++ b/res/values/strings_hr.arb @@ -48,7 +48,7 @@ "outgoing" : "Odlazno", "transactions_by_date" : "Transakcije prema datumu", "trades" : "Razmjene", - "filters" : "Filtrirati po", + "filter_by": "Filtrirati po", "today" : "Danas", "yesterday" : "Jučer", "received" : "Primljeno", diff --git a/res/values/strings_it.arb b/res/values/strings_it.arb index cb68d9ea6..218c6e33b 100644 --- a/res/values/strings_it.arb +++ b/res/values/strings_it.arb @@ -48,7 +48,7 @@ "outgoing" : "In uscita", "transactions_by_date" : "Transazioni per data", "trades" : "Scambi", - "filters" : "Filtrirati po", + "filter_by": "Filtrirati po", "today" : "Oggi", "yesterday" : "Ieri", "received" : "Ricevuto", diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb index f0d595c6e..6770d7f0c 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -48,7 +48,7 @@ "outgoing" : "発信", "transactions_by_date" : "日付ごとの取引", "trades" : "取引", - "filters" : "でフィルタリング", + "filter_by": "でフィルタリング", "today" : "今日", "yesterday" : "昨日", "received" : "受け取った", diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb index f4d289287..bef8c3477 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -48,7 +48,7 @@ "outgoing" : "나가는", "transactions_by_date" : "날짜 별 거래", "trades" : "거래", - "filters" : "필터링 기준", + "filter_by": "필터링 기준", "today" : "오늘", "yesterday" : "어제", "received" : "받았습니다", diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index 06c075092..706986be6 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -48,7 +48,7 @@ "outgoing" : "Uitgaande", "transactions_by_date" : "Transacties op datum", "trades" : "Trades", - "filters" : "Filteren op", + "filter_by": "Filteren op", "today" : "Vandaag", "yesterday" : "Gisteren", "received" : "Ontvangen", diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index 64e5f508b..1f708df9e 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -48,7 +48,7 @@ "outgoing" : "Towarzyski", "transactions_by_date" : "Transakcje według daty", "trades" : "Transakcje", - "filters" : "Filtruj według", + "filter_by": "Filtruj według", "today" : "Dzisiaj", "yesterday" : "Wczoraj", "received" : "Odebrane", diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb index b23aa20e8..909ce87e6 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -48,7 +48,7 @@ "outgoing" : "Enviadas", "transactions_by_date" : "Transações por data", "trades" : "Trocas", - "filters" : "Filtrar por", + "filter_by": "Filtrar por", "today" : "Hoje", "yesterday" : "Ontem", "received" : "Recebida", diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb index 40f6ccdf0..f9376e6f1 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -48,7 +48,7 @@ "outgoing" : "Исходящие", "transactions_by_date" : "Сортировать по дате", "trades" : "Сделки", - "filters" : "Фильтровать по", + "filter_by": "Фильтровать по", "today" : "Сегодня", "yesterday" : "Вчера", "received" : "Полученные", diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb index 9108c700d..030573c32 100644 --- a/res/values/strings_uk.arb +++ b/res/values/strings_uk.arb @@ -48,7 +48,7 @@ "outgoing" : "Вихідні", "transactions_by_date" : "Сортувати по даті", "trades" : "Торгові операції", - "filters" : "Фільтрувати по", + "filter_by": "Фільтрувати по", "today" : "Сьогодні", "yesterday" : "Вчора", "received" : "Отримані", diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb index 4683bb068..b49880b21 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -48,7 +48,7 @@ "outgoing" : "发送", "transactions_by_date" : "按日期交易", "trades" : "交易", - "filters" : "过滤", + "filter_by": "过滤", "today" : "今天", "yesterday" : "昨天", "received" : "已收到", From ca79052914ca72253fd8e0e4b7b859f28ef96b71 Mon Sep 17 00:00:00 2001 From: Serhii Date: Mon, 26 Dec 2022 20:41:21 +0200 Subject: [PATCH 043/173] PR fixes --- .../dashboard/widgets/filter_widget.dart | 2 +- lib/store/dashboard/trade_filter_store.dart | 91 +++++++++---------- .../dashboard/transaction_filter_store.dart | 56 +++++------- .../dashboard/dashboard_view_model.dart | 16 ++-- lib/view_model/dashboard/filter_item.dart | 2 +- 5 files changed, 79 insertions(+), 88 deletions(-) diff --git a/lib/src/screens/dashboard/widgets/filter_widget.dart b/lib/src/screens/dashboard/widgets/filter_widget.dart index 86682dcbc..cf6650301 100644 --- a/lib/src/screens/dashboard/widgets/filter_widget.dart +++ b/lib/src/screens/dashboard/widgets/filter_widget.dart @@ -82,7 +82,7 @@ class FilterWidget extends StatelessWidget { final content = item.onChanged != null ? Observer( builder: (_) => StandardCheckbox( - value: item.value.value, + value: item.value(), caption: item.caption, gradientBackground: true, borderColor: Theme.of(context).dividerColor, diff --git a/lib/store/dashboard/trade_filter_store.dart b/lib/store/dashboard/trade_filter_store.dart index 9c1dc9a9a..87fa749a9 100644 --- a/lib/store/dashboard/trade_filter_store.dart +++ b/lib/store/dashboard/trade_filter_store.dart @@ -8,60 +8,61 @@ part'trade_filter_store.g.dart'; class TradeFilterStore = TradeFilterStoreBase with _$TradeFilterStore; abstract class TradeFilterStoreBase with Store { - TradeFilterStoreBase(); + TradeFilterStoreBase() : displayXMRTO = true, + displayChangeNow = true, + displaySideShift = true, + displayMorphToken = true, + displaySimpleSwap = true; - Observable displayXMRTO = Observable(true); - Observable displayAllTrades = Observable(true); - Observable displayChangeNow = Observable(true); - Observable displaySideShift = Observable(true); - Observable displayMorphToken = Observable(true); - Observable displaySimpleSwap = Observable(true); + @observable + bool displayXMRTO; + + @observable + bool displayChangeNow; + + @observable + bool displaySideShift; + + @observable + bool displayMorphToken; + + @observable + bool displaySimpleSwap; + + @computed + bool get displayAllTrades => displayChangeNow && displaySideShift && displaySimpleSwap; @action void toggleDisplayExchange(ExchangeProviderDescription provider) { switch (provider) { case ExchangeProviderDescription.changeNow: - displayAllTrades.value = false; - displayChangeNow.value = !displayChangeNow.value; - if (displayChangeNow.value && displaySideShift.value && displaySimpleSwap.value) { - displayAllTrades.value = true; - } + displayChangeNow = !displayChangeNow; break; case ExchangeProviderDescription.sideShift: - displayAllTrades.value = false; - displaySideShift.value = !displaySideShift.value; - if (displayChangeNow.value && displaySideShift.value && displaySimpleSwap.value) { - displayAllTrades.value = true; - } + displaySideShift = !displaySideShift; break; case ExchangeProviderDescription.simpleSwap: - displayAllTrades.value = false; - displaySimpleSwap.value = !displaySimpleSwap.value; - if (displayChangeNow.value && displaySideShift.value && displaySimpleSwap.value) { - displayAllTrades.value = true; - } + displaySimpleSwap = !displaySimpleSwap; break; case ExchangeProviderDescription.xmrto: - displayXMRTO.value = !displayXMRTO.value; + displayXMRTO = !displayXMRTO; break; case ExchangeProviderDescription.morphToken: - displayMorphToken.value = !displayMorphToken.value; + displayMorphToken = !displayMorphToken; break; case ExchangeProviderDescription.all: - displayAllTrades.value = !displayAllTrades.value; - if (displayAllTrades.value) { - displayChangeNow.value = true; - displaySideShift.value = true; - displayXMRTO.value = true; - displayMorphToken.value = true; - displaySimpleSwap.value = true; - } - if (!displayAllTrades.value) { - displayChangeNow.value = false; - displaySideShift.value = false; - displayXMRTO.value = false; - displayMorphToken.value = false; - displaySimpleSwap.value = false; + if (displayAllTrades) { + displayChangeNow = false; + displaySideShift = false; + displayXMRTO = false; + displayMorphToken = false; + displaySimpleSwap = false; + } else { + displayChangeNow = true; + displaySideShift = true; + displayXMRTO = true; + displayMorphToken = true; + displaySimpleSwap = true; } break; } @@ -70,24 +71,22 @@ abstract class TradeFilterStoreBase with Store { List filtered({required List trades, required WalletBase wallet}) { final _trades = trades.where((item) => item.trade.walletId == wallet.id).toList(); - final needToFilter = !displayChangeNow.value || !displaySideShift.value - || !displayXMRTO.value || !displayMorphToken.value - || !displaySimpleSwap.value; + final needToFilter = !displayAllTrades; return needToFilter ? _trades .where((item) => - (displayXMRTO.value && + (displayXMRTO && item.trade.provider == ExchangeProviderDescription.xmrto) || - (displaySideShift.value && + (displaySideShift && item.trade.provider == ExchangeProviderDescription.sideShift) || - (displayChangeNow.value && + (displayChangeNow && item.trade.provider == ExchangeProviderDescription.changeNow) || - (displayMorphToken.value && + (displayMorphToken && item.trade.provider == ExchangeProviderDescription.morphToken) - ||(displaySimpleSwap.value && + ||(displaySimpleSwap && item.trade.provider == ExchangeProviderDescription.simpleSwap)) .toList() diff --git a/lib/store/dashboard/transaction_filter_store.dart b/lib/store/dashboard/transaction_filter_store.dart index 4198f7d8c..95264a23d 100644 --- a/lib/store/dashboard/transaction_filter_store.dart +++ b/lib/store/dashboard/transaction_filter_store.dart @@ -10,11 +10,14 @@ class TransactionFilterStore = TransactionFilterStoreBase with _$TransactionFilterStore; abstract class TransactionFilterStoreBase with Store { - TransactionFilterStoreBase(); + TransactionFilterStoreBase() : displayIncoming = true, + displayOutgoing = true; - Observable displayAll = Observable(true); - Observable displayIncoming = Observable(true); - Observable displayOutgoing = Observable(true); + @observable + bool displayIncoming; + + @observable + bool displayOutgoing; @observable DateTime? startDate; @@ -22,40 +25,30 @@ abstract class TransactionFilterStoreBase with Store { @observable DateTime? endDate; + @computed + bool get displayAll => displayIncoming && displayOutgoing; + @action - void toggleIAll() { - displayAll.value = (!displayAll.value); - if (displayAll.value) { - displayOutgoing.value = true; - displayIncoming.value = true; - } - if (!displayAll.value) { - displayOutgoing.value = false; - displayIncoming.value = false; + void toggleAll() { + if (displayAll) { + displayOutgoing = false; + displayIncoming = false; + } else { + displayOutgoing = true; + displayIncoming = true; } } + @action void toggleIncoming() { - displayIncoming.value = (!displayIncoming.value); - if (displayIncoming.value && displayOutgoing.value) { - displayAll.value = true; - } - if (!displayIncoming.value || !displayOutgoing.value) { - displayAll.value = false; - } + displayIncoming = !displayIncoming; } @action void toggleOutgoing() { - displayOutgoing.value = (!displayOutgoing.value); - if (displayIncoming.value && displayOutgoing.value) { - displayAll.value = true; - } - if (!displayIncoming.value || !displayOutgoing.value) { - displayAll.value = false; - } + displayOutgoing = !displayOutgoing; } @action @@ -66,8 +59,7 @@ abstract class TransactionFilterStoreBase with Store { List filtered({required List transactions}) { var _transactions = []; - final needToFilter = !displayOutgoing.value || - !displayIncoming.value || + final needToFilter = !displayAll || (startDate != null && endDate != null); if (needToFilter) { @@ -79,11 +71,11 @@ abstract class TransactionFilterStoreBase with Store { && (endDate?.isAfter(item.transaction.date) ?? false); } - if (allowed && (!displayOutgoing.value || !displayIncoming.value)) { - allowed = (displayOutgoing.value && + if (allowed && (!displayAll)) { + allowed = (displayOutgoing && item.transaction.direction == TransactionDirection.outgoing) || - (displayIncoming.value && + (displayIncoming && item.transaction.direction == TransactionDirection.incoming); } diff --git a/lib/view_model/dashboard/dashboard_view_model.dart b/lib/view_model/dashboard/dashboard_view_model.dart index ba0f9f8ff..57720d92f 100644 --- a/lib/view_model/dashboard/dashboard_view_model.dart +++ b/lib/view_model/dashboard/dashboard_view_model.dart @@ -59,15 +59,15 @@ abstract class DashboardViewModelBase with Store { filterItems = { S.current.transactions: [ FilterItem( - value: transactionFilterStore.displayAll, + value: () => transactionFilterStore.displayAll, caption: S.current.all_transactions, - onChanged: transactionFilterStore.toggleIAll), + onChanged: transactionFilterStore.toggleAll), FilterItem( - value: transactionFilterStore.displayIncoming, + value: () => transactionFilterStore.displayIncoming, caption: S.current.incoming, onChanged:transactionFilterStore.toggleIncoming), FilterItem( - value: transactionFilterStore.displayOutgoing, + value: () => transactionFilterStore.displayOutgoing, caption: S.current.outgoing, onChanged: transactionFilterStore.toggleOutgoing), // FilterItem( @@ -77,22 +77,22 @@ abstract class DashboardViewModelBase with Store { ], S.current.trades: [ FilterItem( - value: tradeFilterStore.displayAllTrades, + value: () => tradeFilterStore.displayAllTrades, caption: S.current.all_trades, onChanged: () => tradeFilterStore .toggleDisplayExchange(ExchangeProviderDescription.all)), FilterItem( - value: tradeFilterStore.displayChangeNow, + value: () => tradeFilterStore.displayChangeNow, caption: ExchangeProviderDescription.changeNow.title, onChanged: () => tradeFilterStore .toggleDisplayExchange(ExchangeProviderDescription.changeNow)), FilterItem( - value: tradeFilterStore.displaySideShift, + value: () => tradeFilterStore.displaySideShift, caption: ExchangeProviderDescription.sideShift.title, onChanged: () => tradeFilterStore .toggleDisplayExchange(ExchangeProviderDescription.sideShift)), FilterItem( - value: tradeFilterStore.displaySimpleSwap, + value: () => tradeFilterStore.displaySimpleSwap, caption: ExchangeProviderDescription.simpleSwap.title, onChanged: () => tradeFilterStore .toggleDisplayExchange(ExchangeProviderDescription.simpleSwap)), diff --git a/lib/view_model/dashboard/filter_item.dart b/lib/view_model/dashboard/filter_item.dart index 8bc0f0bf1..0944e899c 100644 --- a/lib/view_model/dashboard/filter_item.dart +++ b/lib/view_model/dashboard/filter_item.dart @@ -6,7 +6,7 @@ class FilterItem { required this.caption, required this.onChanged}); - Observable value; + bool Function() value; String caption; Function onChanged; } \ No newline at end of file From dec818a27a3f054c6b386e56bf661b85d9ae9d9f Mon Sep 17 00:00:00 2001 From: Serhii Date: Mon, 26 Dec 2022 21:18:52 +0200 Subject: [PATCH 044/173] fix localisation key name --- lib/src/screens/dashboard/widgets/filter_widget.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/src/screens/dashboard/widgets/filter_widget.dart b/lib/src/screens/dashboard/widgets/filter_widget.dart index cf6650301..8dcc1b5c3 100644 --- a/lib/src/screens/dashboard/widgets/filter_widget.dart +++ b/lib/src/screens/dashboard/widgets/filter_widget.dart @@ -38,7 +38,7 @@ class FilterWidget extends StatelessWidget { Padding( padding: EdgeInsets.all(24.0), child: Text( - S.of(context).filters, + S.of(context).filter_by, style: TextStyle( color: Theme.of(context).primaryTextTheme.overline!.color!, fontSize: 16, From daa9fc4acc77e38f9919e9877cb78f7483a6b742 Mon Sep 17 00:00:00 2001 From: Serhii Date: Wed, 28 Dec 2022 14:00:59 +0200 Subject: [PATCH 045/173] minor fixes --- .../dashboard/widgets/filter_widget.dart | 40 ++----------------- .../exchange_trade/exchange_trade_page.dart | 4 +- .../monero_account_list_page.dart | 3 +- .../order_details/order_details_page.dart | 6 +-- lib/src/screens/receive/receive_page.dart | 2 +- .../widgets/choose_yat_address_alert.dart | 2 +- .../trade_details/trade_details_page.dart | 6 +-- .../transaction_details_page.dart | 6 +-- .../unspent_coins_details_page.dart | 4 +- .../screens/wallet_keys/wallet_keys_page.dart | 6 +-- lib/src/widgets/base_alert_dialog.dart | 6 +-- .../{standard_list_row.dart => list_row.dart} | 4 +- 12 files changed, 28 insertions(+), 61 deletions(-) rename lib/src/widgets/{standard_list_row.dart => list_row.dart} (96%) diff --git a/lib/src/screens/dashboard/widgets/filter_widget.dart b/lib/src/screens/dashboard/widgets/filter_widget.dart index 8dcc1b5c3..17df0bc5e 100644 --- a/lib/src/screens/dashboard/widgets/filter_widget.dart +++ b/lib/src/screens/dashboard/widgets/filter_widget.dart @@ -20,7 +20,7 @@ class FilterWidget extends StatelessWidget { @override Widget build(BuildContext context) { - const sectionDivider = SectionDivider(); + const sectionDivider = const SectionDivider(); return AlertBackground( child: Stack( alignment: Alignment.center, @@ -79,8 +79,7 @@ class FilterWidget extends StatelessWidget { itemCount: section.length, itemBuilder: (_, index2) { final item = section[index2]; - final content = item.onChanged != null - ? Observer( + final content = Observer( builder: (_) => StandardCheckbox( value: item.value(), caption: item.caption, @@ -88,40 +87,7 @@ class FilterWidget extends StatelessWidget { borderColor: Theme.of(context).dividerColor, iconColor: Colors.white, onChanged: (value) => item.onChanged(), - )) - : GestureDetector( - onTap: () async { - //final List picked = - //await date_rage_picker.showDatePicker( - // context: context, - // initialFirstDate: DateTime.now() - // .subtract(Duration(days: 1)), - // initialLastDate: (DateTime.now()), - // firstDate: DateTime(2015), - // lastDate: DateTime.now() - // .add(Duration(days: 1))); - - //if (picked != null && picked.length == 2) { - // dashboardViewModel.transactionFilterStore - // .changeStartDate(picked.first); - // dashboardViewModel.transactionFilterStore - // .changeEndDate(picked.last); - //} - }, - // child: Padding( - // padding: EdgeInsets.only(left: 32), - // child: Text( - // item.caption, - // style: TextStyle( - // color: Theme.of(context).primaryTextTheme.title.color, - // fontSize: 18, - // fontFamily: 'Lato', - // fontWeight: FontWeight.w500, - // decoration: TextDecoration.none), - // ), - // ), - ); - + )); return FilterTile(child: content); }, ) diff --git a/lib/src/screens/exchange_trade/exchange_trade_page.dart b/lib/src/screens/exchange_trade/exchange_trade_page.dart index e3eb8db96..5aacf3f1f 100644 --- a/lib/src/screens/exchange_trade/exchange_trade_page.dart +++ b/lib/src/screens/exchange_trade/exchange_trade_page.dart @@ -8,7 +8,7 @@ import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/core/execution_state.dart'; import 'package:cake_wallet/src/screens/exchange_trade/information_page.dart'; import 'package:cake_wallet/src/screens/send/widgets/confirm_sending_alert.dart'; -import 'package:cake_wallet/src/widgets/standard_list_row.dart'; +import 'package:cake_wallet/src/widgets/list_row.dart'; import 'package:cake_wallet/utils/show_bar.dart'; import 'package:cake_wallet/utils/show_pop_up.dart'; import 'package:cake_wallet/view_model/exchange/exchange_trade_view_model.dart'; @@ -194,7 +194,7 @@ class ExchangeTradeState extends State { final item = widget.exchangeTradeViewModel.items[index]; final value = item.data ?? fetchingLabel; - final content = AnotherStandardListRow( + final content = ListRow( title: item.title, value: value, valueFontSize: 14, diff --git a/lib/src/screens/monero_accounts/monero_account_list_page.dart b/lib/src/screens/monero_accounts/monero_account_list_page.dart index c565332a0..7fe15948f 100644 --- a/lib/src/screens/monero_accounts/monero_account_list_page.dart +++ b/lib/src/screens/monero_accounts/monero_account_list_page.dart @@ -84,7 +84,8 @@ class MoneroAccountListPage extends StatelessWidget { ListView.separated( padding: EdgeInsets.zero, controller: controller, - separatorBuilder: (context, index) => SectionDivider(), + separatorBuilder: (context, index) => + const SectionDivider(), itemCount: accounts.length ?? 0, itemBuilder: (context, index) { final account = accounts[index]; diff --git a/lib/src/screens/order_details/order_details_page.dart b/lib/src/screens/order_details/order_details_page.dart index a7eff99b8..0784c7008 100644 --- a/lib/src/screens/order_details/order_details_page.dart +++ b/lib/src/screens/order_details/order_details_page.dart @@ -7,7 +7,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; -import 'package:cake_wallet/src/widgets/standard_list_row.dart'; +import 'package:cake_wallet/src/widgets/list_row.dart'; import 'package:cake_wallet/src/screens/trade_details/track_trade_list_item.dart'; class OrderDetailsPage extends BasePage { @@ -57,7 +57,7 @@ class OrderDetailsPageBodyState extends State { if (item is TrackTradeListItem) { return GestureDetector( onTap: item.onTap, - child: AnotherStandardListRow( + child: ListRow( title: '${item.title}', value: '${item.value}')); } else { return GestureDetector( @@ -65,7 +65,7 @@ class OrderDetailsPageBodyState extends State { Clipboard.setData(ClipboardData(text: '${item.value}')); showBar(context, S.of(context).copied_to_clipboard); }, - child: AnotherStandardListRow( + child: ListRow( title: '${item.title}', value: '${item.value}')); } }); diff --git a/lib/src/screens/receive/receive_page.dart b/lib/src/screens/receive/receive_page.dart index 4344139ac..71ee578a0 100644 --- a/lib/src/screens/receive/receive_page.dart +++ b/lib/src/screens/receive/receive_page.dart @@ -136,7 +136,7 @@ class ReceivePage extends BasePage { Observer( builder: (_) => ListView.separated( padding: EdgeInsets.all(0), - separatorBuilder: (context, _) => SectionDivider(), + separatorBuilder: (context, _) => const SectionDivider(), shrinkWrap: true, physics: NeverScrollableScrollPhysics(), itemCount: addressListViewModel.items.length, diff --git a/lib/src/screens/send/widgets/choose_yat_address_alert.dart b/lib/src/screens/send/widgets/choose_yat_address_alert.dart index dae6c5ad7..5d937a571 100644 --- a/lib/src/screens/send/widgets/choose_yat_address_alert.dart +++ b/lib/src/screens/send/widgets/choose_yat_address_alert.dart @@ -71,7 +71,7 @@ class ChooseYatAddressButtonsState extends State { controller: controller, padding: EdgeInsets.all(0), itemCount: itemCount, - separatorBuilder: (_, __) => SectionDivider(), + separatorBuilder: (_, __) => const SectionDivider(), itemBuilder: (context, index) { final address = addresses[index]; diff --git a/lib/src/screens/trade_details/trade_details_page.dart b/lib/src/screens/trade_details/trade_details_page.dart index 1bb5d3ec8..1958a7d58 100644 --- a/lib/src/screens/trade_details/trade_details_page.dart +++ b/lib/src/screens/trade_details/trade_details_page.dart @@ -9,7 +9,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; -import 'package:cake_wallet/src/widgets/standard_list_row.dart'; +import 'package:cake_wallet/src/widgets/list_row.dart'; import 'package:cake_wallet/src/screens/trade_details/track_trade_list_item.dart'; import 'package:cake_wallet/src/screens/trade_details/trade_details_list_card.dart'; import 'package:cake_wallet/src/screens/trade_details/trade_details_status_item.dart'; @@ -62,7 +62,7 @@ class TradeDetailsPageBodyState extends State { if (item is TrackTradeListItem) { return GestureDetector( onTap: item.onTap, - child: AnotherStandardListRow( + child: ListRow( title: '${item.title}', value: '${item.value}')); } @@ -86,7 +86,7 @@ class TradeDetailsPageBodyState extends State { Clipboard.setData(ClipboardData(text: '${item.value}')); showBar(context, S.of(context).copied_to_clipboard); }, - child: AnotherStandardListRow( + child: ListRow( title: '${item.title}', value: '${item.value}')); }); }); diff --git a/lib/src/screens/transaction_details/transaction_details_page.dart b/lib/src/screens/transaction_details/transaction_details_page.dart index 8d3ae8c9e..1b79ceeb0 100644 --- a/lib/src/screens/transaction_details/transaction_details_page.dart +++ b/lib/src/screens/transaction_details/transaction_details_page.dart @@ -6,7 +6,7 @@ import 'package:cake_wallet/view_model/transaction_details_view_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:cake_wallet/generated/i18n.dart'; -import 'package:cake_wallet/src/widgets/standard_list_row.dart'; +import 'package:cake_wallet/src/widgets/list_row.dart'; import 'package:cake_wallet/src/screens/transaction_details/blockexplorer_list_item.dart'; import 'package:cake_wallet/src/screens/transaction_details/standart_list_item.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; @@ -42,7 +42,7 @@ class TransactionDetailsPage extends BasePage { S.of(context).transaction_details_copied(item.title)); }, child: - AnotherStandardListRow(title: '${item.title}:', value: item.value), + ListRow(title: '${item.title}:', value: item.value), ); } @@ -50,7 +50,7 @@ class TransactionDetailsPage extends BasePage { return GestureDetector( onTap: item.onTap, child: - AnotherStandardListRow(title: '${item.title}:', value: item.value), + ListRow(title: '${item.title}:', value: item.value), ); } diff --git a/lib/src/screens/unspent_coins/unspent_coins_details_page.dart b/lib/src/screens/unspent_coins/unspent_coins_details_page.dart index 74fbcfdd9..d8ce24d88 100644 --- a/lib/src/screens/unspent_coins/unspent_coins_details_page.dart +++ b/lib/src/screens/unspent_coins/unspent_coins_details_page.dart @@ -5,7 +5,7 @@ import 'package:cake_wallet/src/widgets/standard_list.dart'; import 'package:cake_wallet/view_model/unspent_coins/unspent_coins_details_view_model.dart'; import 'package:cake_wallet/view_model/unspent_coins/unspent_coins_switch_item.dart'; import 'package:flutter/material.dart'; -import 'package:cake_wallet/src/widgets/standard_list_row.dart'; +import 'package:cake_wallet/src/widgets/list_row.dart'; import 'package:cake_wallet/src/screens/transaction_details/standart_list_item.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; @@ -30,7 +30,7 @@ class UnspentCoinsDetailsPage extends BasePage { final item = unspentCoinsDetailsViewModel.items[index]; if (item is StandartListItem) { - return AnotherStandardListRow( + return ListRow( title: '${item.title}:', value: item.value); } diff --git a/lib/src/screens/wallet_keys/wallet_keys_page.dart b/lib/src/screens/wallet_keys/wallet_keys_page.dart index b690cadda..e81ec7d2a 100644 --- a/lib/src/screens/wallet_keys/wallet_keys_page.dart +++ b/lib/src/screens/wallet_keys/wallet_keys_page.dart @@ -7,7 +7,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; -import 'package:cake_wallet/src/widgets/standard_list_row.dart'; +import 'package:cake_wallet/src/widgets/list_row.dart'; import 'package:cake_wallet/view_model/wallet_keys_view_model.dart'; class WalletKeysPage extends BasePage { @@ -58,7 +58,7 @@ class WalletKeysPage extends BasePage { height: 1, padding: EdgeInsets.only(left: 24), color: Theme.of(context).accentTextTheme!.headline6!.backgroundColor!, - child: SectionDivider(), + child: const SectionDivider(), ), itemCount: walletKeysViewModel.items.length, itemBuilder: (BuildContext context, int index) { @@ -69,7 +69,7 @@ class WalletKeysPage extends BasePage { Clipboard.setData(ClipboardData(text: item.value)); showBar(context, S.of(context).copied_key_to_clipboard(item.title)); }, - child: AnotherStandardListRow( + child: ListRow( title: item.title + ':', value: item.value, ), diff --git a/lib/src/widgets/base_alert_dialog.dart b/lib/src/widgets/base_alert_dialog.dart index 861d1ba9d..effbbc562 100644 --- a/lib/src/widgets/base_alert_dialog.dart +++ b/lib/src/widgets/base_alert_dialog.dart @@ -77,7 +77,7 @@ class BaseAlertDialog extends StatelessWidget { ), )), ), - SectionDivider(), + const SectionDivider(), Expanded( child: TextButton( onPressed: actionRight, @@ -138,7 +138,7 @@ class BaseAlertDialog extends StatelessWidget { isDividerExists ? Padding( padding: EdgeInsets.only(top: 16, bottom: 8), - child: SectionDivider(), + child: const SectionDivider(), ) : Offstage(), Padding( @@ -147,7 +147,7 @@ class BaseAlertDialog extends StatelessWidget { ) ], ), - SectionDivider(), + const SectionDivider(), actionButtons(context) ], ), diff --git a/lib/src/widgets/standard_list_row.dart b/lib/src/widgets/list_row.dart similarity index 96% rename from lib/src/widgets/standard_list_row.dart rename to lib/src/widgets/list_row.dart index e174acc50..40824fe59 100644 --- a/lib/src/widgets/standard_list_row.dart +++ b/lib/src/widgets/list_row.dart @@ -1,8 +1,8 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -class AnotherStandardListRow extends StatelessWidget { - AnotherStandardListRow( +class ListRow extends StatelessWidget { + ListRow( {required this.title, required this.value, this.titleFontSize = 14, From d9ec7978b689d392fe9cd2a613be930025dfa05b Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Wed, 28 Dec 2022 22:20:37 +0200 Subject: [PATCH 046/173] Add test variables to workflow for external PR support --- .github/workflows/pr_test_build.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr_test_build.yml b/.github/workflows/pr_test_build.yml index 00fd16199..3a439c556 100644 --- a/.github/workflows/pr_test_build.yml +++ b/.github/workflows/pr_test_build.yml @@ -8,6 +8,9 @@ jobs: test: runs-on: ubuntu-18.04 + env: + STORE_PASS: test@cake_wallet + KEY_PASS: test@cake_wallet steps: - uses: actions/checkout@v2 @@ -63,12 +66,12 @@ jobs: - name: Generate KeyStore run: | cd /opt/android/cake_wallet/android/app - keytool -genkey -v -keystore key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias testKey -noprompt -dname "CN=CakeWallet, OU=CakeWallet, O=CakeWallet, L=Florida, S=America, C=USA" -storepass ${{ secrets.STORE_PASS }} -keypass ${{ secrets.KEY_PASS }} + keytool -genkey -v -keystore key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias testKey -noprompt -dname "CN=CakeWallet, OU=CakeWallet, O=CakeWallet, L=Florida, S=America, C=USA" -storepass $STORE_PASS -keypass $KEY_PASS - name: Generate key properties run: | cd /opt/android/cake_wallet - flutter packages pub run tool/generate_android_key_properties.dart keyAlias=testKey storeFile=key.jks storePassword=${{ secrets.STORE_PASS }} keyPassword=${{ secrets.KEY_PASS }} + flutter packages pub run tool/generate_android_key_properties.dart keyAlias=testKey storeFile=key.jks storePassword=$STORE_PASS keyPassword=$KEY_PASS - name: Generate localization run: | @@ -141,6 +144,7 @@ jobs: path: /opt/android/cake_wallet/build/app/outputs/apk/release/test-apk/ - name: Send Test APK + continue-on-error: true run: | cd /opt/android/cake_wallet var=$(curl --upload-file build/app/outputs/apk/release/app-release.apk https://transfer.sh/$GITHUB_HEAD_REF.apk -H "Max-Days: 10") From 033560cf3ac777f4be7afef6e63581d77398782a Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Thu, 29 Dec 2022 03:52:40 +0200 Subject: [PATCH 047/173] Test upgrading haven repo --- 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 6d22f7778..5f3c9e50a 100755 --- a/scripts/android/build_haven.sh +++ b/scripts/android/build_haven.sh @@ -1,7 +1,7 @@ #!/bin/sh . ./config.sh -HAVEN_VERSION=tags/v2.2.2 +HAVEN_VERSION=tags/v3.0.0 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 cc79d7a26..3199e3286 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/v2.2.2 +HAVEN_VERSION=tags/v3.0.0 BUILD_TYPE=release PREFIX=${EXTERNAL_IOS_DIR} DEST_LIB_DIR=${EXTERNAL_IOS_LIB_DIR}/haven From 17751f236336a6736548298cd5d86328c164200e Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Thu, 29 Dec 2022 16:02:09 +0200 Subject: [PATCH 048/173] Fix haven currencies not getting serialized --- cw_core/lib/crypto_currency.dart | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/cw_core/lib/crypto_currency.dart b/cw_core/lib/crypto_currency.dart index 42e72d2eb..3ee2b5e15 100644 --- a/cw_core/lib/crypto_currency.dart +++ b/cw_core/lib/crypto_currency.dart @@ -67,6 +67,22 @@ class CryptoCurrency extends EnumerableItem with Serializable { CryptoCurrency.stx, ]; + static const havenCurrencies = [ + xag, + xau, + xaud, + xbtc, + xcad, + xchf, + xcny, + xeur, + xgbp, + xjpy, + xnok, + xnzd, + 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'); @@ -134,16 +150,16 @@ class CryptoCurrency extends EnumerableItem with Serializable { static const stx = CryptoCurrency(title: 'STX', iconPath: 'assets/images/stx_icon.png', raw: 61, name: 'stx'); static final Map _rawCurrencyMap = - all.fold>({}, (acc, item) { - acc.addAll({item.raw: item}); - return acc; - }); + [...all, ...havenCurrencies].fold>({}, (acc, item) { + acc.addAll({item.raw: item}); + return acc; + }); static final Map _nameCurrencyMap = - all.fold>({}, (acc, item) { - acc.addAll({item.name: item}); - return acc; - }); + [...all, ...havenCurrencies].fold>({}, (acc, item) { + acc.addAll({item.name: item}); + return acc; + }); static CryptoCurrency deserialize({required int raw}) { From 286269a9e8e2c7d4f10a672211ad6972df395770 Mon Sep 17 00:00:00 2001 From: john_r365 <67366109+johnr365@users.noreply.github.com> Date: Sat, 31 Dec 2022 20:03:24 +0000 Subject: [PATCH 049/173] Changes to language file section of README.md --- README.md | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c5f6dc1b2..f485ca244 100644 --- a/README.md +++ b/README.md @@ -83,6 +83,24 @@ For instructions on how to build for Android: please view file `howto-build-andr Edit the applicable `strings_XX.arb` file in `res/values/` and open a pull request with the changes. +## Current list of language files: + +- English +- Spanish +- French +- German +- Italian +- Portugese +- Dutch +- Polish +- Croatian +- Russian +- Ukranian +- Hindi +- Japanese +- Chinese +- Korean + ## Add a new language 1. Create a new `strings_XX.arb` file in `res/values/`, replacing XX with the language's [ISO 639-1 code](https://en.wikipedia.org/wiki/ISO_639-1). @@ -91,9 +109,15 @@ Edit the applicable `strings_XX.arb` file in `res/values/` and open a pull reque `"welcome" : "Welcome to",` -> `"welcome" : "XXX",` -3. 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. +3. For strings where there is a variable, denoted by a $ symbol and braces, such as ${status}, the string in braces should not be translated. For example, when editing line 106: -4. Add a relevant flag to `assets/images/flags/XXXX.png`, replacing XXXX with the 3 digit localeCountryCode. The image must be 42x36 pizxels with a 3 pixels of transparent margin on all 4 sides. +"time" : "${minutes}m ${seconds}s" + +The only parts to be translated, if needed, are the values m and s after the variables. + +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 pizxels with a 3 pixels of transparent margin on all 4 sides. ## Add a new fiat currency @@ -103,4 +127,4 @@ Edit the applicable `strings_XX.arb` file in `res/values/` and open a pull reque 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 pizxels 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 42x36 pizxels with a 3 pixels of transparent margin on all 4 sides. \ No newline at end of file From 993e8b7ebf763450aabb8574bc7c65f4e94813c9 Mon Sep 17 00:00:00 2001 From: Serhii Date: Tue, 3 Jan 2023 23:59:08 +0200 Subject: [PATCH 050/173] fix disappearance of pending transaction --- cw_bitcoin/lib/electrum_transaction_history.dart | 6 ++---- cw_bitcoin/lib/electrum_transaction_info.dart | 4 +--- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/cw_bitcoin/lib/electrum_transaction_history.dart b/cw_bitcoin/lib/electrum_transaction_history.dart index f8662eb95..9174fb3f8 100644 --- a/cw_bitcoin/lib/electrum_transaction_history.dart +++ b/cw_bitcoin/lib/electrum_transaction_history.dart @@ -72,7 +72,7 @@ abstract class ElectrumTransactionHistoryBase txs.entries.forEach((entry) { final val = entry.value; - if (val is Map) { + if (val is Map) { final tx = ElectrumTransactionInfo.fromJson(val, walletInfo.type); _updateOrInsert(tx); } @@ -85,9 +85,6 @@ abstract class ElectrumTransactionHistoryBase } void _updateOrInsert(ElectrumTransactionInfo transaction) { - if (transaction.id == null) { - return; - } if (transactions[transaction.id] == null) { transactions[transaction.id] = transaction; @@ -98,6 +95,7 @@ abstract class ElectrumTransactionHistoryBase originalTx?.height = transaction.height; originalTx?.date ??= transaction.date; originalTx?.isPending = transaction.isPending; + originalTx?.direction = transaction.direction; } } } diff --git a/cw_bitcoin/lib/electrum_transaction_info.dart b/cw_bitcoin/lib/electrum_transaction_info.dart index 6e85a2f88..8d6ef0fea 100644 --- a/cw_bitcoin/lib/electrum_transaction_info.dart +++ b/cw_bitcoin/lib/electrum_transaction_info.dart @@ -228,9 +228,7 @@ class ElectrumTransactionInfo extends TransactionInfo { m['id'] = id; m['height'] = height; m['amount'] = amount; - // FIX-ME: Hardcoded value - // m['direction'] = direction.index; - m['direction'] = 0; + m['direction'] = direction.index; m['date'] = date.millisecondsSinceEpoch; m['isPending'] = isPending; m['confirmations'] = confirmations; From e579839596ea5f634d340c7815a9eb102ffb35e5 Mon Sep 17 00:00:00 2001 From: Serhii Date: Wed, 4 Jan 2023 13:59:59 +0200 Subject: [PATCH 051/173] 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 38b21e325410c429b7f2e754df84a225c75ea6b0 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Wed, 4 Jan 2023 20:39:36 +0200 Subject: [PATCH 052/173] new version - cake wallet: v4.5.6 - monero: v1.2.5 --- 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 979a60e9d..c74d97c0f 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.4" -MONERO_COM_BUILD_NUMBER=35 +MONERO_COM_VERSION="1.2.5" +MONERO_COM_BUILD_NUMBER=36 MONERO_COM_BUNDLE_ID="com.monero.app" MONERO_COM_PACKAGE="com.monero.app" CAKEWALLET_NAME="Cake Wallet" -CAKEWALLET_VERSION="4.5.5" -CAKEWALLET_BUILD_NUMBER=140 +CAKEWALLET_VERSION="4.5.6" +CAKEWALLET_BUILD_NUMBER=141 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 1965d1e41..8588bfcb2 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.4" -MONERO_COM_BUILD_NUMBER=32 +MONERO_COM_VERSION="1.2.5" +MONERO_COM_BUILD_NUMBER=33 MONERO_COM_BUNDLE_ID="com.cakewallet.monero" CAKEWALLET_NAME="Cake Wallet" -CAKEWALLET_VERSION="4.5.5" -CAKEWALLET_BUILD_NUMBER=137 +CAKEWALLET_VERSION="4.5.6" +CAKEWALLET_BUILD_NUMBER=138 CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet" HAVEN_NAME="Haven" From b8293ac0aeb001fa262da82f7fcd1fefbb339c19 Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Thu, 5 Jan 2023 09:40:05 +0100 Subject: [PATCH 053/173] 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 054/173] 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 055/173] 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 056/173] 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 057/173] 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 7551181b09be0fe8a9d511f5d5324ed3ac898a95 Mon Sep 17 00:00:00 2001 From: rosedaler <121954045+maddymodd@users.noreply.github.com> Date: Thu, 5 Jan 2023 11:39:08 -0500 Subject: [PATCH 058/173] Add thai language localization file --- lib/entities/language_service.dart | 6 +- res/values/strings_th.arb | 678 +++++++++++++++++++++++++++++ 2 files changed, 682 insertions(+), 2 deletions(-) create mode 100644 res/values/strings_th.arb diff --git a/lib/entities/language_service.dart b/lib/entities/language_service.dart index 7dccc59c0..3b5f68eb5 100644 --- a/lib/entities/language_service.dart +++ b/lib/entities/language_service.dart @@ -18,7 +18,8 @@ class LanguageService { 'uk': 'Українська (Ukrainian)', 'zh': '中文 (Chinese)', 'hr': 'Hrvatski (Croatian)', - 'it': 'Italiano (Italian)' + 'it': 'Italiano (Italian)', + 'th': 'ภาษาไทย (Thai)' }; static const Map localeCountryCode = { @@ -36,7 +37,8 @@ class LanguageService { 'uk': 'ukr', 'zh': 'chn', 'hr': 'hrv', - 'it': 'ita' + 'it': 'ita', + 'th': 'tha' }; static final list = {}; diff --git a/res/values/strings_th.arb b/res/values/strings_th.arb new file mode 100644 index 000000000..f39025e3d --- /dev/null +++ b/res/values/strings_th.arb @@ -0,0 +1,678 @@ +{ + "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" : "โปรดลองเชื่อมต่อกับโหนดอื่น", + "xmr_hidden" : "ซ่อน", + "xmr_available_balance" : "ยอดคงเหลือที่สามารถใช้งานได้", + "xmr_full_balance" : "ยอดคงเหลือแบบเต็ม", + "send" : "ส่ง", + "receive" : "รับ", + "transactions" : "ธุรกรรม", + "incoming" : "ขาเข้า", + "outgoing" : "ขาออก", + "transactions_by_date" : "ธุรกรรมตามวันที่", + "trades" : "การซื้อขาย", + "filter_by": "กรองตาม", + "today" : "วันนี้", + "yesterday" : "เมื่อวาน", + "received" : "รับ", + "sent" : "ส่ง", + "pending" : " (อยู่ระหว่างดำเนินการ)", + "rescan" : "สแกนใหม่", + "reconnect" : "เชื่อมต่อใหม่", + "wallets" : "กระเป๋า", + "show_seed" : "แสดงซีด", + "show_keys" : "แสดงซีด/คีย์", + "address_book_menu" : "สมุดที่อยู่", + "reconnection" : "เชื่อมต่อใหม่", + "reconnect_alert_text" : "คุณแน่ใจหรือไม่ว่าต้องการเชื่อมต่อใหม่?", + + + "exchange" : "แลกเปลี่ยน", + "clear" : "ล้าง", + "refund_address" : "ที่อยู่สำหรับส่งคืน", + "change_exchange_provider" : "เปลี่ยนผู้ให้บริการแลกเปลี่ยน", + "you_will_send" : "แปลงจาก", + "you_will_get" : "แปลงเป็น", + "amount_is_guaranteed" : "จำนวนที่จะได้รับมีการรับประกัน", + "amount_is_estimate" : "จำนวนที่จะได้รับเป็นการประมาณการ", + "powered_by" : "พัฒนาขึ้นโดย ${title}", + "error" : "ข้อผิดพลาด", + "estimated" : "ประมาณการ", + "min_value" : "ขั้นต่ำ: ${value} ${currency}", + "max_value" : "ขั้นสูง: ${value} ${currency}", + "change_currency" : "เปลี่ยนสกุลเงิน", + "overwrite_amount" : "เขียนทับจำนวน", + "qr_payment_amount" : "QR code นี้มีจำนวนการชำระเงิน คุณต้องการเขียนทับค่าปัจจุบันหรือไม่?", + + "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" : "*โปรดคัดลอกหรือเขียนรหัสของคุณด้านบน", + "confirm" : "ยืนยัน", + "confirm_sending" : "ยืนยันการส่ง", + "commit_transaction_amount_fee" : "ยืนยันธุรกรรม\nจำนวน: ${amount}\nค่าธรรมเนียม: ${fee}", + "sending" : "กำลังส่ง", + "transaction_sent" : "ธุรกรรมถูกส่ง!", + "expired" : "หมดอายุ", + "time" : "${minutes}m ${seconds}s", + "send_xmr" : "ส่ง XMR", + "exchange_new_template" : "เทมเพลทใหม่", + + "faq" : "คำถามที่พบบ่อย", + + + "enter_your_pin" : "ใส่ PIN ของคุณ", + "loading_your_wallet" : "กำลังโหลดกระเป๋าของคุณ", + + + "new_wallet" : "กระเป๋าใหม่", + "wallet_name" : "ชื่อกระเป๋า", + "continue_text" : "ดำเนินการต่อ", + "choose_wallet_currency" : "โปรดเลือกสกุลเงินของกระเป๋า:", + + + "node_new" : "โหนดใหม่", + "node_address" : "ที่อยู่โหนด", + "node_port" : "พอร์ตโหนด", + "login" : "เข้าสู่ระบบ", + "password" : "รหัสผ่าน", + "nodes" : "โหนด", + "node_reset_settings_title" : "รีเซ็ตการตั้งค่า", + "nodes_list_reset_to_default_message" : "คุณแน่ใจหรือว่าต้องการรีเซ็ตการตั้งค่าเป็นค่าเริ่มต้น?", + "change_current_node" : "คุณแน่ใจหรือว่าต้องการเปลี่ยนโหนดปัจจุบันเป็น ${node}?", + "change" : "เปลี่ยน", + "remove_node" : "ลบโหนด", + "remove_node_message" : "คุณแน่ใจหรือว่าต้องการลบโหนดที่เลือก?", + "remove" : "ลบ", + "delete" : "ลบ", + "add_new_node" : "เพิ่มโหนดใหม่", + "change_current_node_title" : "เปลี่ยนโหนดปัจจุบัน", + "node_test" : "ทดสอบ", + "node_connection_successful" : "เชื่อมต่อสำเร็จ", + "node_connection_failed" : "เชื่อมต่อล้มเหลว", + "new_node_testing" : "การทดสอบโหนดใหม่", + + + "use" : "สลับไปที่ ", + "digit_pin" : "-หลัก PIN", + + + "share_address" : "แชร์ที่อยู่", + "receive_amount" : "จำนวน", + "subaddresses" : "ที่อยู่ย่อย", + "addresses" : "ที่อยู่", + "scan_qr_code" : "สแกน QR code เพื่อรับที่อยู่", + "qr_fullscreen" : "แตะเพื่อเปิดหน้าจอ QR code แบบเต็มจอ", + "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" : "ถัดไป", + "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" : "กู้กระเป๋าของคุณจากรหัสผสมของ 25 คำหรือ 13 คำ", + "restore_title_from_keys" : "กู้จาก keys", + "restore_description_from_keys" : "กู้กระเป๋าของคุณจากการกดปุ่มที่สร้างขึ้นจาก private 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" : "โปรดป้อนวันที่หลายวันก่อนที่คุณสร้างกระเป๋านี้ หรือหากคุณรู้ความสูงของบล็อก (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" : "ID การชำระเงิน (ไม่จำเป็น)", + "all" : "ทั้งหมด", + "send_error_minimum_value" : "จำนวนขั้นต่ำของจำนวนเงินคือ 0.01", + "send_error_currency" : "สกุลเงินสามารถเป็นเลขเท่านั้น", + "send_estimated_fee" : "ค่าธรรมเนียมที่คาดการณ์:", + "send_priority" : "ในขณะนี้ค่าธรรมเนียมถูกตั้งค่าเป็นความสำคัญ ${transactionPriority} \nความสำคัญของธุรกรรมสามารถปรับได้ในการตั้งค่า", + "send_creating_transaction" : "กำลังสร้างธุรกรรม", + "send_templates" : "แม่แบบ", + "send_new" : "ใหม่", + "send_amount" : "จำนวน:", + "send_fee" : "ค่าธรรมเนียม:", + "send_name" : "ชื่อ", + "send_got_it" : "เข้าใจ", + "send_sending" : "กำลังส่ง...", + "send_success" : "คุณได้ส่ง ${crypto} เรียบร้อยแล้ว", + + + "settings_title" : "การตั้งค่า", + "settings_nodes" : "จุดเชื่อมต่อ", + "settings_current_node" : "จุดเชื่อมต่อปัจจุบัน", + "settings_wallets" : "กระเป๋าสตางค์", + "settings_display_balance" : "แสดงยอดคงเหลือ", + "settings_currency" : "สกุลเงิน", + "settings_fee_priority" : "ความสำคัญของค่าธรรมเนียม", + "settings_save_recipient_address" : "บันทึกที่อยู่ผู้รับ", + "settings_personal" : "ส่วนตัว", + "settings_change_pin" : "เปลี่ยน 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" : "ซีดของกระเป๋า/คีย์", + "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_subaddress_label_name" : "ชื่อป้ายกำกับ", + "new_subaddress_create" : "สร้าง", + + "address_label" : "ป้ายกำกับที่อยู่", + + "subaddress_title" : "รายการที่อยู่ย่อย", + + "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" : "ประวัติการซื้อขาย", + + + "transaction_details_title" : "รายละเอียดการทำรายการ", + "transaction_details_transaction_id" : "ไอดีการทำรายการ", + "transaction_details_date" : "วันที่", + "transaction_details_height" : "ความสูง", + "transaction_details_amount" : "จำนวน", + "transaction_details_fee" : "ค่าธรรมเนียม", + "transaction_details_copied" : "${title} ถูกคัดลอกไปยังคลิปบอร์ด", + "transaction_details_recipient_address" : "ที่อยู่ผู้รับ", + + + "wallet_list_title" : "กระเป๋า Monero", + "wallet_list_create_new_wallet" : "สร้างกระเป๋าใหม่", + "wallet_list_restore_wallet" : "กู้กระเป๋า", + "wallet_list_load_wallet" : "โหลดกระเป๋า", + "wallet_list_loading_wallet" : "กำลังโหลดกระเป๋า ${wallet_name}", + "wallet_list_failed_to_load" : "ไม่สามารถโหลดกระเป๋า ${wallet_name} ได้ ${error}", + "wallet_list_removing_wallet" : "กำลังลบกระเป๋า ${wallet_name}", + "wallet_list_failed_to_remove" : "ไม่สามารถลบกระเป๋า ${wallet_name} ได้ ${error}", + + + "widgets_address" : "ที่อยู่", + "widgets_restore_from_blockheight" : "กู้คืนจากระดับบล็อก", + "widgets_restore_from_date" : "กู้คืนจากวันที่", + "widgets_or" : "หรือ", + "widgets_seed" : "ซีด", + + + "router_no_route" : "ไม่มีเส้นทางที่กำหนดไว้สำหรับ ${name}", + + + "error_text_account_name" : "ชื่อบัญชีสามารถเป็นเพียงตัวอักษรหรือตัวเลขเท่านั้น\nและต้องมีความยาวระหว่าง 1 ถึง 15 ตัวอักษร", + "error_text_contact_name" : "ชื่อผู้ติดต่อไม่สามารถมีสัญลักษณ์ ` , '\" ได้\nและต้องมีความยาวระหว่าง 1 ถึง 32 ตัวอักษร", + "error_text_address" : "ที่อยู่กระเป๋าจะต้องสอดคล้องกับประเภท\nของเหรียญคริปโตเนียม", + "error_text_node_address" : "โปรดป้อนที่อยู่ iPv4", + "error_text_node_port" : "พอร์ตโหนดสามารถมีตัวเลขเท่านั้นระหว่าง 0 ถึง 65535", + "error_text_payment_id" : "Payment ID สามารถมีขนาดระหว่าง 16 ถึง 64 ตัวอักษรตามแบบ hex", + "error_text_xmr" : "มูลค่า XMR ไม่สามารถเกินยอดคงเหลือได้\nจำนวนสตริงทศนิยมต้องน้อยกว่าหรือเท่ากับ 12", + "error_text_fiat" : "มูลค่าของจำนวนเงินไม่สามารถเกินยอดคงเหลือได้\nจำนวนสตริงทศนิยมต้องน้อยกว่าหรือเท่ากับ 2", + "error_text_subaddress_name" : "ชื่อสำหรับที่อยู่ย่อยจะต้องประกอบด้วยตัวอักษร ตัวเลข และสัญลักษณ์ _ - และมีความยาวระหว่าง 1 ถึง 20 ตัวอักษร", + "error_text_amount" : "จำนวนจะต้องประกอบด้วยตัวเลขเท่านั้น", + "error_text_wallet_name" : "ชื่อกระเป๋าสตางค์จะต้องประกอบด้วยตัวอักษร ตัวเลข และสัญลักษณ์ _ - และมีความยาวระหว่าง 1 ถึง 33 ตัวอักษร", + "error_text_keys" : "คีย์ของกระเป๋าสตางค์จะต้องประกอบด้วยตัวอักษรฐาน 16 จำนวน 64 ตัว", + "error_text_crypto_currency" : "จำนวนทศนิยมจะต้องน้อยกว่าหรือเท่ากับ 12", + "error_text_minimal_limit" : "การซื้อขายกับ ${provider} ไม่สามารถดำเนินการได้ จำนวนน้อยกว่าขั้นต่ำ: ${min} ${currency}", + "error_text_maximum_limit" : "การซื้อขายกับ ${provider} ไม่สามารถดำเนินการได้ จำนวนมากกว่าขั้นสูง: ${max} ${currency}", + "error_text_limits_loading_failed" : "การซื้อขายกับ ${provider} ไม่สามารถดำเนินการได้ ไม่สามารถโหลดขอบเขตได้", + "error_text_template" : "ชื่อแม่แบบและที่อยู่ไม่สามารถมีสัญลักษณ์ ` , '\" และต้องมีความยาวระหว่าง 1 ถึง 106 ตัวอักษร", + + + "auth_store_ban_timeout" : "หมดเวลาห้าม", + "auth_store_banned_for" : "ถูกห้ามสำหรับ ", + "auth_store_banned_minutes" : " นาที", + "auth_store_incorrect_password" : "รหัสผ่านไม่ถูกต้อง", + "wallet_store_monero_wallet" : "กระเป๋า Monero", + "wallet_restoration_store_incorrect_seed_length" : "ความยาวของซีดไม่ถูกต้อง", + + + "full_balance" : "ยอดคงเหลือทั้งหมด", + "available_balance" : "ยอดคงเหลือที่ใช้งานได้", + "hidden_balance" : "ยอดคงเหลือซ่อนอยู่", + + + "sync_status_syncronizing" : "กำลังซิงโครไนซ์", + "sync_status_syncronized" : "ซิงโครไนซ์แล้ว", + "sync_status_not_connected" : "ไม่ได้เชื่อมต่อ", + "sync_status_starting_sync" : "กำลังเริ่มซิงโครไนซ์", + "sync_status_failed_connect" : "การเชื่อมต่อล้มเหลว", + "sync_status_connecting" : "กำลังเชื่อมต่อ", + "sync_status_connected" : "เชื่อมต่อแล้ว", + "sync_status_attempting_sync" : "พยายามซิงโครไนซ์", + + + "transaction_priority_slow" : "ช้า", + "transaction_priority_regular" : "ปกติ", + "transaction_priority_medium" : "ปานกลาง", + "transaction_priority_fast" : "เร็ว", + "transaction_priority_fastest" : "เร็วที่สุด", + + + "trade_for_not_created" : "การแลกเปลี่ยนสำหรับ ${title} ยังไม่ได้ถูกสร้างขึ้น", + "trade_not_created" : "การแลกเปลี่ยนยังไม่ได้ถูกสร้าง", + "trade_id_not_found" : "ไม่พบการแลกเปลี่ยน ${tradeId} ของ ${title}", + "trade_not_found" : "ไม่พบการแลกเปลี่ยน", + + + "trade_state_pending" : "รอดำเนินการ", + "trade_state_confirming" : "กำลังยืนยัน", + "trade_state_trading" : "กำลังแลกเปลี่ยน", + "trade_state_traded" : "ถูกแลกเปลี่ยน", + "trade_state_complete" : "เสร็จสมบูรณ์", + "trade_state_to_be_created" : "จะถูกสร้าง", + "trade_state_unpaid" : "ยังไม่ได้จ่าย", + "trade_state_underpaid" : "จ่ายไม่ครบ", + "trade_state_paid_unconfirmed" : "จ่ายแล้วแต่ยังไม่ได้ยืนยัน", + "trade_state_paid" : "จ่ายแล้ว", + "trade_state_btc_sent" : "ส่ง BTC แล้ว", + "trade_state_timeout" : "เวลาหมด", + "trade_state_created" : "ถูกสร้าง", + "trade_state_finished" : "เสร็จสิ้น", + + "change_language" : "เปลี่ยนภาษา", + "change_language_to" : "เปลี่ยนภาษาเป็น ${language}?", + + "paste" : "วาง", + "restore_from_seed_placeholder" : "โปรดป้อนหรือวาง seed ของคุณที่นี่", + "add_new_word" : "เพิ่มคำใหม่", + "incorrect_seed" : "ข้อความที่ป้อนไม่ถูกต้อง", + + "biometric_auth_reason" : "สแกนลายนิ้วมือของคุณเพื่อยืนยันตัวตน", + "version" : "เวอร์ชัน ${currentVersion}", + + "openalias_alert_title" : "พบที่อยู่", + "openalias_alert_content" : "คุณกำลังจะส่งเงินไปยัง\n${recipient_name}", + + "card_address" : "ที่อยู่:", + "buy" : "ซื้อ", + "sell": "ขาย", + + "placeholder_transactions" : "ธุรกรรมของคุณจะปรากฏที่นี่", + "placeholder_contacts" : "รายชื่อผู้ติดต่อของคุณจะปรากฏที่นี่", + + "template" : "แบบฟอร์ม", + "confirm_delete_template" : "การดำเนินการนี้จะลบแบบฟอร์มนี้ คุณต้องการดำเนินการต่อหรือไม่?", + "confirm_delete_wallet" : "การดำเนินการนี้จะลบกระเป๋านี้ คุณต้องการดำเนินการต่อหรือไม่?", + + "picker_description" : "ในการเลือก ChangeNOW หรือ MorphToken โปรดเปลี่ยนคู่แลกเปลี่ยนก่อน", + + "change_wallet_alert_title" : "เปลี่ยนกระเป๋าปัจจุบัน", + "change_wallet_alert_content" : "คุณต้องการเปลี่ยนกระเป๋าปัจจุบันเป็น ${wallet_name} หรือไม่?", + + "creating_new_wallet" : "กำลังสร้างกระเป๋าใหม่", + "creating_new_wallet_error" : "ข้อผิดพลาด: ${description}", + + "seed_alert_title" : "ความสนใจ", + "seed_alert_content" : "Seed เป็นเพียงวิธีเดียวที่จะกู้กระเป๋าของคุณ คุณได้เขียนมันขึ้นลงกระดาษหรือไม่?", + "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" : "รหัสธุรกรรม", + "confirmations" : "การยืนยัน", + "recipient_address" : "ที่อยู่ผู้รับ", + + "extra_id" : "ไอดีเพิ่มเติม:", + "destination_tag" : "แท็กปลายทาง:", + "memo" : "หมายเหตุ:", + + "backup" : "สำรองข้อมูล", + "change_password" : "เปลี่ยนรหัสผ่าน", + "backup_password" : "รหัสผ่านสำรองข้อมูล", + "write_down_backup_password" : "โปรดจดรหัสผ่านสำรองข้อมูลของคุณลงบนกระดาษ ซึ่งจะใช้ในการนำเข้าไฟล์สำรองข้อมูลของคุณ", + "export_backup" : "ส่งออกข้อมูลสำรอง", + "save_backup_password" : "โปรดตรวจสอบให้แน่ใจว่าคุณได้บันทึกรหัสผ่านสำรองข้อมูลแล้ว คุณจะไม่สามารถนำเข้าไฟล์สำรองข้อมูลของคุณโดยไม่ใช้รหัสผ่านนั้น", + "backup_file" : "ไฟล์สำรองข้อมูล", + + "edit_backup_password" : "แก้ไขรหัสผ่านสำรอง", + "save_backup_password_alert" : "บันทึกรหัสผ่านสำรอง", + "change_backup_password_alert" : "ไฟล์สำรองที่ผ่านมาจะไม่สามารถนำเข้าด้วยรหัสผ่านสำรองใหม่ได้ รหัสผ่านสำรองใหม่จะถูกใช้เฉพาะสำหรับไฟล์สำรองใหม่ คุณแน่ใจหรือว่าต้องการเปลี่ยนรหัสผ่านสำรอง?", + + "enter_backup_password" : "ป้อนรหัสผ่านสำรองที่นี่", + "select_backup_file" : "เลือกไฟล์สำรอง", + "import" : "นำเข้า", + "please_select_backup_file" : "โปรดเลือกไฟล์สำรองและป้อนรหัสผ่านสำรอง", + + "fixed_rate": "อัตราคงที่", + "fixed_rate_alert": "คุณจะสามารถป้อนจำนวนที่ได้รับเมื่อเลือกโหมดอัตราคงที่ คุณต้องการสลับไปที่โหมดอัตราคงที่?", + + "xlm_extra_info": "โปรดอย่าลืมระบุ Memo ID ในขณะที่ส่งธุรกรรม XLM สำหรับการแลกเปลี่ยน", + "xrp_extra_info": "โปรดอย่าลืมระบุ Destination Tag ในขณะที่ส่งธุรกรรม XRP สำหรับการแลกเปลี่ยน", + + "exchange_incorrect_current_wallet_for_xmr" : "หากคุณต้องการแลกเปลี่ยน XMR จากยอดคงเหลือ Monero ใน Cake Wallet ของคุณ กรุณาเปลี่ยนเป็นกระเป๋า 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 ใหม่และโอนทุกเงินของคุณไปยังกระเป๋าใหม่ขนาด 24 คำ และหยุดใช้กระเป๋าที่มี seed ขนาด 12 คำ กรุณาทำด่วนเพื่อรักษาเงินของคุณ", + "understand" : "ฉันเข้าใจ", + + "apk_update" : "ปรับปรุง APK", + + "buy_bitcoin" : "ซื้อ Bitcoin", + "buy_with" : "ซื้อด้วย", + "moonpay_alert_text" : "มูลค่าของจำนวนต้องมากกว่าหรือเท่ากับ ${minAmount} ${fiatCurrency}", + + "outdated_electrum_wallet_receive_warning": "หากกระเป๋านี้มีซีดีที่มี 12 คำและถูกสร้างขึ้นใน Cake อย่าโอน Bitcoin เข้ากระเป๋านี้ ทุกจำนวน BTC ที่โอนเข้ากระเป๋านี้อาจสูญหาย สร้างกระเป๋าใหม่ที่มีซีดีที่มี 24 คำ (กดที่เมนูที่มุมขวาบนแล้วเลือก Wallets และเลือก Create New Wallet จากนั้นเลือก Bitcoin) และย้าย BTC ไปที่นั้นทันที กระเป๋า BTC ที่มีซีดีที่มี 24 คำของ 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 ของคุณ - ชื่อผู้ใช้ที่สั้นมีอิโมจิ คุณสามารถจัดการ Yat ได้ทุกเวลาบนหน้าจอการตั้งค่า", + "second_intro_title" : "อิโมจิที่อยู่เดียวที่จะควบคุมพวกเขาทั้งหมด", + "second_intro_content" : "Yat ของคุณเป็นอิโมจิที่อยู่เดียวที่จะแทนที่ทุกที่อยู่และเลขฐานสิบหกของคุณสำหรับเหรียญคริปโตทุกชนิด", + "third_intro_title" : "Yat ปฏิบัติตนอย่างดีกับผู้อื่น", + "third_intro_content" : "Yat อาศัยอยู่นอก 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", + "cake_pay_subtitle": "ซื้อบัตรของขวัญราคาถูก (สำหรับสหรัฐอเมริกาเท่านั้น)", + "cake_pay_web_cards_title": "Cake Pay Web Cards", + "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": "ไม่จำเป็นต้องใช้บัตรประจำตัว ฝากเงินและใช้งานได้ทุกที่", + "how_to_use_card": "วิธีใช้บัตรนี้", + "purchase_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": "เงินจะถูกแปลงค่าเป็นดอลลาร์สหรัฐเมื่อถือไว้ในบัญชีสำรองเงิน ไม่ใช่สกุลเงินดิจิตอล", + "use_card_info_three": "ใช้บัตรดิจิตอลออนไลน์หรือผ่านวิธีการชำระเงินแบบไม่ต้องใช้บัตรกระดาษ", + "hide_details" : "ซ่อนรายละเอียด", + "show_details" : "แสดงรายละเอียด", + "upto": "สูงสุด ${value}", + "discount": "ประหยัด ${value}%", + "gift_card_amount": "จำนวนบัตรของขวัญ", + "bill_amount": "จำนวนบิล", + "you_pay": "คุณจ่าย", + "tip": "เพิ่มค่าตอบแทน:", + "custom": "กำหนดเอง", + "by_cake_pay": "โดย Cake Pay", + "expires": "หมดอายุ", + "mm": "เดือน", + "yy": "ปี", + "online": "ออนไลน์", + "offline": "ออฟไลน์", + "gift_card_number": "หมายเลขบัตรของขวัญ", + "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": "ออกจากระบบ", + "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": "ในร้าน", + "generating_gift_card": "กำลังสร้างบัตรของขวัญ", + "payment_was_received": "การชำระเงินของคุณได้รับการรับทราบแล้ว", + "proceed_after_one_minute": "หากหน้าจอไม่ดำเนินการหลังจาก 1 นาทีโปรดตรวจสอบอีเมลของคุณ", + "order_id": "เลขที่ออร์เดอร์", + "gift_card_is_generated": "บัตรของขวัญถูกสร้างขึ้น", + "open_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": "ความเป็นส่วนตัว", + "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" : "API สกุลเงินตรา", + "disabled" : "ปิดใช้งาน", + "enabled" : "เปิดใช้งาน", + "tor_only" : "Tor เท่านั้น", + "unmatched_currencies" : "สกุลเงินของกระเป๋าปัจจุบันของคุณไม่ตรงกับของ QR ที่สแกน" +} From 768320003c568d60478fd4d61cf159aef89cb81c Mon Sep 17 00:00:00 2001 From: Mathias Herberts Date: Thu, 5 Jan 2023 22:39:32 +0100 Subject: [PATCH 059/173] Fixed FR translations. Added localized strings in contact list --- .../screens/contact/contact_list_page.dart | 4 +-- res/values/strings_en.arb | 4 ++- res/values/strings_fr.arb | 28 ++++++++++--------- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/lib/src/screens/contact/contact_list_page.dart b/lib/src/screens/contact/contact_list_page.dart index 7cd7a0157..0065b9281 100644 --- a/lib/src/screens/contact/contact_list_page.dart +++ b/lib/src/screens/contact/contact_list_page.dart @@ -72,10 +72,10 @@ class ContactListPage extends BasePage { dividerThemeColor: Theme.of(context).primaryTextTheme.caption!.decorationColor!, sectionTitleBuilder: (_, int sectionIndex) { - var title = 'Contacts'; + var title = S.current.contact_list_contacts; if (sectionIndex == 0) { - title = 'My wallets'; + title = S.current.contact_list_wallets; } return Container( diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index 548ba35c0..e9a0c4d49 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -677,5 +677,7 @@ "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", + "contact_list_contacts": "Contacts", + "contact_list_wallets": "My Wallets" } diff --git a/res/values/strings_fr.arb b/res/values/strings_fr.arb index 2168e31a2..99fbcd282 100644 --- a/res/values/strings_fr.arb +++ b/res/values/strings_fr.arb @@ -534,7 +534,7 @@ "search_currency": "Rechercher une devise", "new_template" : "Nouveau Modèle", "electrum_address_disclaimer": "Nous générons de nouvelles adresses à chaque fois que vous en utilisez une, mais les adresses précédentes continuent à fonctionner", - "wallet_name_exists": "Un portefeuille portant ce nom existe déjà", + "wallet_name_exists": "Un portefeuille (wallet) portant ce nom existe déjà", "market_place": "Place de marché", "cake_pay_title": "Cartes cadeaux Cake Pay", "cake_pay_subtitle": "Achetez des cartes-cadeaux à prix réduit (États-Unis uniquement)", @@ -562,7 +562,7 @@ "cakepay_prepaid_card": "Carte de débit prépayée Cake Pay", "no_id_needed": "Aucune pièce d'identité nécessaire !", "frequently_asked_questions": "Foire aux questions", - "debit_card_terms": "Le stockage et l'utilisation de votre numéro de carte de paiement (et des informations d'identification correspondant à votre numéro de carte de paiement) dans ce portefeuille numérique sont soumis aux conditions générales de l'accord du titulaire de carte applicable avec l'émetteur de la carte de paiement, en vigueur à partir de de temps en temps.", + "debit_card_terms": "Le stockage et l'utilisation de votre numéro de carte de paiement (et des informations d'identification correspondant à votre numéro de carte de paiement) dans ce portefeuille numérique peuvent être soumis aux conditions générales de l'accord du titulaire de carte parfois en vigueur avec l'émetteur de la carte de paiement.", "please_reference_document": "Veuillez vous référer aux documents ci-dessous pour plus d'informations.", "cardholder_agreement": "Contrat de titulaire de carte", "e_sign_consent": "Consentement de signature électronique", @@ -595,7 +595,7 @@ "gift_card_amount": "Montant de la carte-cadeau", "bill_amount": "Montant de la facture", "you_pay": "Vous payez", - "tip": "Astuce :", + "tip": "Pourboire :", "custom": "personnalisé", "by_cake_pay": "par Cake Pay", "expire": "Expire", @@ -617,7 +617,7 @@ "gift_card_balance_note": "Les cartes-cadeaux avec un solde restant apparaîtront ici", "gift_card_redeemed_note": "Les cartes-cadeaux que vous avez utilisées apparaîtront ici", "logout": "Déconnexion", - "add_tip": "Ajouter une astuce", + "add_tip": "Ajouter un pourboire", "percentageOf": "sur ${amount}", "is_percentage": "est", "search_category": "Catégorie de recherche", @@ -646,16 +646,16 @@ "custom_redeem_amount": "Montant d'échange personnalisé", "add_custom_redemption": "Ajouter un remboursement personnalisé", "remaining": "restant", - "delete_wallet": "Supprimer le portefeuille", - "delete_wallet_confirm_message" : "Êtes-vous sûr de vouloir supprimer le portefeuille ${wallet_name}?", + "delete_wallet": "Supprimer le portefeuille (wallet)", + "delete_wallet_confirm_message" : "Êtes-vous sûr de vouloir supprimer le portefeuille (wallet) ${wallet_name}?", "low_fee": "Frais modiques", "low_fee_alert": "Vous utilisez actuellement une priorité de frais de réseau peu élevés. Cela pourrait entraîner de longues attentes, des taux différents ou des transactions annulées. Nous vous recommandons de fixer des frais plus élevés pour une meilleure expérience.", "ignor": "Ignorer", "use_suggested": "Utilisation suggérée", - "do_not_share_warning_text" : "Ne les partagez avec personne d'autre, y compris avec l'assistance.\n\nVos fonds peuvent et seront volés!", - "help": "aider", + "do_not_share_warning_text" : "Ne les partagez avec personne, y compris avec l'assistance.\n\nVos fonds seraient inmanquablement volés !", + "help": "aide", "all_transactions": "Toutes transactions", - "all_trades": "Tous métiers", + "all_trades": "Tous échanges", "connection_sync": "Connexion et synchronisation", "security_and_backup": "Sécurité et sauvegarde", "create_backup": "Créer une sauvegarde", @@ -663,17 +663,19 @@ "privacy": "Confidentialité", "display_settings": "Paramètres d'affichage", "other_settings": "Autres paramètres", - "require_pin_after": "NIP requis après", + "require_pin_after": "Code PIN requis après", "always": "toujours", "minutes_to_pin_code": "${minute} minutes", "disable_exchange": "Désactiver l'échange", "advanced_privacy_settings": "Paramètres de confidentialité avancés", "settings_can_be_changed_later": "Ces paramètres peuvent être modifiés ultérieurement dans les paramètres de l'application", "add_custom_node": "Ajouter un nouveau nœud personnalisé", - "disable_fiat": "Désactiver fiat", + "disable_fiat": "Désactiver les montants en fiat", "fiat_api": "Fiat API", - "disabled": "Handicapé", + "disabled": "Désactivé", "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 (wallet) actuel ne correspond pas à celle du QR code scanné", + "contact_list_contacts": "Contacts", + "contact_list_wallets": "Mes portefeuilles (wallets)" } From de4ecefd20e5e950fa9366c3bd4658de44a919ba Mon Sep 17 00:00:00 2001 From: Mathias Herberts Date: Thu, 5 Jan 2023 22:44:19 +0100 Subject: [PATCH 060/173] Added localized strings in contact list --- res/values/strings_de.arb | 4 +++- res/values/strings_es.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_uk.arb | 4 +++- res/values/strings_zh.arb | 4 +++- 13 files changed, 39 insertions(+), 13 deletions(-) diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index 3382b73f8..a5076f289 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -677,5 +677,7 @@ "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", + "contact_list_contacts": "Contacts", + "contact_list_wallets": "My Wallets" } diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb index db0a813b4..12cf47469 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -677,5 +677,7 @@ "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", + "contact_list_contacts": "Contacts", + "contact_list_wallets": "My Wallets" } diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb index 9acf7657c..53abe527a 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -677,5 +677,7 @@ "disabled": "अक्षम", "enabled": "सक्रिय", "tor_only": "Tor केवल", - "unmatched_currencies": "आपके वर्तमान वॉलेट की मुद्रा स्कैन किए गए क्यूआर से मेल नहीं खाती" + "unmatched_currencies": "आपके वर्तमान वॉलेट की मुद्रा स्कैन किए गए क्यूआर से मेल नहीं खाती" , + "contact_list_contacts": "Contacts", + "contact_list_wallets": "My Wallets" } diff --git a/res/values/strings_hr.arb b/res/values/strings_hr.arb index dacd3952b..0c4c84d2f 100644 --- a/res/values/strings_hr.arb +++ b/res/values/strings_hr.arb @@ -677,5 +677,7 @@ "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", + "contact_list_contacts": "Contacts", + "contact_list_wallets": "My Wallets" } diff --git a/res/values/strings_it.arb b/res/values/strings_it.arb index ac0ad5833..dc4375380 100644 --- a/res/values/strings_it.arb +++ b/res/values/strings_it.arb @@ -677,5 +677,7 @@ "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", + "contact_list_contacts": "Contacts", + "contact_list_wallets": "My Wallets" } diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb index fc1abc280..88f9d5bc9 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -677,5 +677,7 @@ "disabled": "無効", "enabled": "有効", "tor_only": "Torのみ", - "unmatched_currencies": "現在のウォレットの通貨がスキャンされたQRの通貨と一致しません" + "unmatched_currencies": "現在のウォレットの通貨がスキャンされたQRの通貨と一致しません", + "contact_list_contacts": "Contacts", + "contact_list_wallets": "My Wallets" } diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb index b30529038..d55f0175b 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -677,5 +677,7 @@ "disabled": "장애가 있는", "enabled": "사용", "tor_only": "Tor 뿐", - "unmatched_currencies": "현재 지갑의 통화가 스캔한 QR의 통화와 일치하지 않습니다." + "unmatched_currencies": "현재 지갑의 통화가 스캔한 QR의 통화와 일치하지 않습니다.", + "contact_list_contacts": "Contacts", + "contact_list_wallets": "My Wallets" } diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index 734347991..41bd8de75 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -677,5 +677,7 @@ "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", + "contact_list_contacts": "Contacts", + "contact_list_wallets": "My Wallets" } diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index b7806d2a4..c8e208fbd 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -677,5 +677,7 @@ "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", + "contact_list_contacts": "Contacts", + "contact_list_wallets": "My Wallets" } diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb index 80177d22c..0312ed07f 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -676,5 +676,7 @@ "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", + "contact_list_contacts": "Contacts", + "contact_list_wallets": "My Wallets" } diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb index eb63a974f..145f0418d 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -677,5 +677,7 @@ "disabled": "Отключено", "enabled": "Включено", "tor_only": "Только Tor", - "unmatched_currencies": "Валюта вашего текущего кошелька не соответствует валюте отсканированного QR-кода." + "unmatched_currencies": "Валюта вашего текущего кошелька не соответствует валюте отсканированного QR-кода.", + "contact_list_contacts": "Contacts", + "contact_list_wallets": "My Wallets" } diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb index 20cbfaf6f..dd8a83d08 100644 --- a/res/values/strings_uk.arb +++ b/res/values/strings_uk.arb @@ -676,5 +676,7 @@ "disabled": "Вимкнено", "enabled": "Увімкнено", "tor_only": "Тільки Tor", - "unmatched_currencies": "Валюта вашого гаманця не збігається з валютою сканованого QR-коду" + "unmatched_currencies": "Валюта вашого гаманця не збігається з валютою сканованого QR-коду", + "contact_list_contacts": "Contacts", + "contact_list_wallets": "My Wallets" } diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb index 248eabda1..a2021fa56 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -675,5 +675,7 @@ "disabled": "禁用", "enabled": "启用", "tor_only": "仅限 Tor", - "unmatched_currencies": "您当前钱包的货币与扫描的 QR 的货币不匹配" + "unmatched_currencies": "您当前钱包的货币与扫描的 QR 的货币不匹配", + "contact_list_contacts": "Contacts", + "contact_list_wallets": "My Wallets" } From 21dfe86da02f7fe921f4b81ee9511f90c13ea656 Mon Sep 17 00:00:00 2001 From: rosedaler <121954045+maddymodd@users.noreply.github.com> Date: Thu, 5 Jan 2023 21:21:10 -0500 Subject: [PATCH 061/173] Update strings_th.arb --- res/values/strings_th.arb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/res/values/strings_th.arb b/res/values/strings_th.arb index f39025e3d..aaff40730 100644 --- a/res/values/strings_th.arb +++ b/res/values/strings_th.arb @@ -261,7 +261,7 @@ "view_key_public" : "คีย์มุมมอง (สาธารณะ)", "spend_key_private" : "คีย์จ่าย (ส่วนตัว)", "spend_key_public" : "คีย์จ่าย (สาธารณะ)", - "copied_key_to_clipboard" : "คัดลอก ${key} ไปยัง Clipboard แล้ว" + "copied_key_to_clipboard" : "คัดลอก ${key} ไปยัง Clipboard แล้ว", "new_subaddress_title" : "ที่อยู่ใหม่", @@ -279,7 +279,7 @@ "trade_details_provider" : "ผู้ให้บริการ", "trade_details_created_at" : "สร้างเมื่อ", "trade_details_pair" : "คู่", - "trade_details_copied" : "${title} คัดลอกไปยัง Clipboard" + "trade_details_copied" : "${title} คัดลอกไปยัง Clipboard", "trade_history_title" : "ประวัติการซื้อขาย", @@ -527,7 +527,7 @@ "second_intro_title" : "อิโมจิที่อยู่เดียวที่จะควบคุมพวกเขาทั้งหมด", "second_intro_content" : "Yat ของคุณเป็นอิโมจิที่อยู่เดียวที่จะแทนที่ทุกที่อยู่และเลขฐานสิบหกของคุณสำหรับเหรียญคริปโตทุกชนิด", "third_intro_title" : "Yat ปฏิบัติตนอย่างดีกับผู้อื่น", - "third_intro_content" : "Yat อาศัยอยู่นอก Cake Wallet ด้วย ที่อยู่กระเป๋าใดๆ ทั่วโลกสามารถแทนด้วย Yat ได้อีกด้วย!" + "third_intro_content" : "Yat อาศัยอยู่นอก Cake Wallet ด้วย ที่อยู่กระเป๋าใดๆ ทั่วโลกสามารถแทนด้วย Yat ได้อีกด้วย!", "learn_more" : "ศึกษาเพิ่มเติม", "search": "ค้นหา", "search_language": "ค้นหาภาษา", @@ -580,7 +580,7 @@ "order_physical_card": "สั่งซื้อบัตรดิบิต", "add_value": "เพิ่มมูลค่า", "activate": "เปิดใช้งาน", - "get_a": "รับ " + "get_a": "รับ ", "digital_and_physical_card": "บัตรเดบิตดิจิตอลและบัตรพื้นฐาน", "get_card_note": "ที่คุณสามารถเติมเงินด้วยสกุลเงินดิจิตอล ไม่จำเป็นต้องใส่ข้อมูลเพิ่มเติม!", "signup_for_card_accept_terms": "ลงทะเบียนสำหรับบัตรและยอมรับเงื่อนไข", From 3dbf5d8b8cb49bd47c755c523fcfe251bb54f80b Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Fri, 6 Jan 2023 08:08:36 +0100 Subject: [PATCH 062/173] 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 23490b088f00711f64d4c24b03d7f743af9338c3 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Fri, 6 Jan 2023 14:40:35 +0200 Subject: [PATCH 063/173] Translate contact list for other languages --- res/values/strings_de.arb | 4 ++-- res/values/strings_es.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_uk.arb | 4 ++-- res/values/strings_zh.arb | 4 ++-- 13 files changed, 26 insertions(+), 26 deletions(-) diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index a5076f289..9ba0a7553 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -678,6 +678,6 @@ "enabled": "Ermöglicht", "tor_only": "Nur Tor", "unmatched_currencies": "Die Währung Ihres aktuellen Wallets stimmt nicht mit der des gescannten QR überein", - "contact_list_contacts": "Contacts", - "contact_list_wallets": "My Wallets" + "contact_list_contacts": "Kontakte", + "contact_list_wallets": "Meine Geldbörsen" } diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb index 12cf47469..10c866676 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -678,6 +678,6 @@ "enabled": "Activado", "tor_only": "solo Tor", "unmatched_currencies": "La moneda de su billetera actual no coincide con la del QR escaneado", - "contact_list_contacts": "Contacts", - "contact_list_wallets": "My Wallets" + "contact_list_contacts": "Contactos", + "contact_list_wallets": "Mis billeteras" } diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb index 53abe527a..a5c27ddb4 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -678,6 +678,6 @@ "enabled": "सक्रिय", "tor_only": "Tor केवल", "unmatched_currencies": "आपके वर्तमान वॉलेट की मुद्रा स्कैन किए गए क्यूआर से मेल नहीं खाती" , - "contact_list_contacts": "Contacts", - "contact_list_wallets": "My Wallets" + "contact_list_contacts": "संपर्क", + "contact_list_wallets": "मेरा बटुआ" } diff --git a/res/values/strings_hr.arb b/res/values/strings_hr.arb index 0c4c84d2f..9aa9f0b4f 100644 --- a/res/values/strings_hr.arb +++ b/res/values/strings_hr.arb @@ -678,6 +678,6 @@ "enabled": "Omogućeno", "tor_only": "Samo Tor", "unmatched_currencies": "Valuta vašeg trenutnog novčanika ne odgovara onoj na skeniranom QR-u", - "contact_list_contacts": "Contacts", - "contact_list_wallets": "My Wallets" + "contact_list_contacts": "Kontakti", + "contact_list_wallets": "Moji novčanici" } diff --git a/res/values/strings_it.arb b/res/values/strings_it.arb index dc4375380..e90fc20c2 100644 --- a/res/values/strings_it.arb +++ b/res/values/strings_it.arb @@ -678,6 +678,6 @@ "enabled": "Abilitato", "tor_only": "Solo Tor", "unmatched_currencies": "La valuta del tuo portafoglio attuale non corrisponde a quella del QR scansionato", - "contact_list_contacts": "Contacts", - "contact_list_wallets": "My Wallets" + "contact_list_contacts": "Contatti", + "contact_list_wallets": "I miei portafogli" } diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb index 88f9d5bc9..3c5a5d951 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -678,6 +678,6 @@ "enabled": "有効", "tor_only": "Torのみ", "unmatched_currencies": "現在のウォレットの通貨がスキャンされたQRの通貨と一致しません", - "contact_list_contacts": "Contacts", - "contact_list_wallets": "My Wallets" + "contact_list_contacts": "連絡先", + "contact_list_wallets": "マイウォレット" } diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb index d55f0175b..216a3a143 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -678,6 +678,6 @@ "enabled": "사용", "tor_only": "Tor 뿐", "unmatched_currencies": "현재 지갑의 통화가 스캔한 QR의 통화와 일치하지 않습니다.", - "contact_list_contacts": "Contacts", - "contact_list_wallets": "My Wallets" + "contact_list_contacts": "콘택트 렌즈", + "contact_list_wallets": "내 지갑" } diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index 41bd8de75..9ac0cd1d1 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -678,6 +678,6 @@ "enabled": "Ingeschakeld", "tor_only": "Alleen Tor", "unmatched_currencies": "De valuta van uw huidige portemonnee komt niet overeen met die van de gescande QR", - "contact_list_contacts": "Contacts", - "contact_list_wallets": "My Wallets" + "contact_list_contacts": "Contacten", + "contact_list_wallets": "Mijn portefeuilles" } diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index c8e208fbd..11bf637e5 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -678,6 +678,6 @@ "enabled": "Włączony", "tor_only": "Tylko Tor", "unmatched_currencies": "Waluta Twojego obecnego portfela nie odpowiada walucie zeskanowanego kodu QR", - "contact_list_contacts": "Contacts", - "contact_list_wallets": "My Wallets" + "contact_list_contacts": "Łączność", + "contact_list_wallets": "Moje portfele" } diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb index 0312ed07f..8529aadb8 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -677,6 +677,6 @@ "enabled": "Habilitado", "tor_only": "Tor apenas", "unmatched_currencies": "A moeda da sua carteira atual não corresponde à do QR digitalizado", - "contact_list_contacts": "Contacts", - "contact_list_wallets": "My Wallets" + "contact_list_contacts": "Contatos", + "contact_list_wallets": "minhas carteiras" } diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb index 145f0418d..1ba5fd85c 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -678,6 +678,6 @@ "enabled": "Включено", "tor_only": "Только Tor", "unmatched_currencies": "Валюта вашего текущего кошелька не соответствует валюте отсканированного QR-кода.", - "contact_list_contacts": "Contacts", - "contact_list_wallets": "My Wallets" + "contact_list_contacts": "Контакты", + "contact_list_wallets": "Мои кошельки" } diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb index dd8a83d08..4fad9a19d 100644 --- a/res/values/strings_uk.arb +++ b/res/values/strings_uk.arb @@ -677,6 +677,6 @@ "enabled": "Увімкнено", "tor_only": "Тільки Tor", "unmatched_currencies": "Валюта вашого гаманця не збігається з валютою сканованого QR-коду", - "contact_list_contacts": "Contacts", - "contact_list_wallets": "My Wallets" + "contact_list_contacts": "Контакти", + "contact_list_wallets": "Мої гаманці" } diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb index a2021fa56..7c0f4ab74 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -676,6 +676,6 @@ "enabled": "启用", "tor_only": "仅限 Tor", "unmatched_currencies": "您当前钱包的货币与扫描的 QR 的货币不匹配", - "contact_list_contacts": "Contacts", - "contact_list_wallets": "My Wallets" + "contact_list_contacts": "联系人", + "contact_list_wallets": "我的钱包" } From 0b5b74943c52be53dc0fcd0e33be4f3207dd7dd9 Mon Sep 17 00:00:00 2001 From: rosedaler <121954045+maddymodd@users.noreply.github.com> Date: Fri, 6 Jan 2023 07:57:04 -0500 Subject: [PATCH 064/173] Update strings_th.arb --- res/values/strings_th.arb | 1 + 1 file changed, 1 insertion(+) diff --git a/res/values/strings_th.arb b/res/values/strings_th.arb index aaff40730..6955a68dc 100644 --- a/res/values/strings_th.arb +++ b/res/values/strings_th.arb @@ -587,6 +587,7 @@ "add_fund_to_card": "เพิ่มเงินสำรองไว้บนบัตร (ถึง ${value})", "use_card_info_two": "เงินจะถูกแปลงค่าเป็นดอลลาร์สหรัฐเมื่อถือไว้ในบัญชีสำรองเงิน ไม่ใช่สกุลเงินดิจิตอล", "use_card_info_three": "ใช้บัตรดิจิตอลออนไลน์หรือผ่านวิธีการชำระเงินแบบไม่ต้องใช้บัตรกระดาษ", + "optionally_order_card": "เลือกเพิ่มสั่งการ์ดจริง", "hide_details" : "ซ่อนรายละเอียด", "show_details" : "แสดงรายละเอียด", "upto": "สูงสุด ${value}", From 5e96c387a23ee897abb22bd7b3dc5054a9faee63 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Fri, 6 Jan 2023 15:22:00 +0200 Subject: [PATCH 065/173] Add Thai translation for contact list [skip ci] --- res/values/strings_th.arb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/res/values/strings_th.arb b/res/values/strings_th.arb index 6955a68dc..242a8d110 100644 --- a/res/values/strings_th.arb +++ b/res/values/strings_th.arb @@ -675,5 +675,7 @@ "disabled" : "ปิดใช้งาน", "enabled" : "เปิดใช้งาน", "tor_only" : "Tor เท่านั้น", - "unmatched_currencies" : "สกุลเงินของกระเป๋าปัจจุบันของคุณไม่ตรงกับของ QR ที่สแกน" + "unmatched_currencies" : "สกุลเงินของกระเป๋าปัจจุบันของคุณไม่ตรงกับของ QR ที่สแกน", + "contact_list_contacts": "ติดต่อ", + "contact_list_wallets": "กระเป๋าเงินของฉัน" } From 15d5375eb6dfe878c1c8aae2bb7f102a3e566cd9 Mon Sep 17 00:00:00 2001 From: xd Date: Fri, 6 Jan 2023 17:14:33 +0200 Subject: [PATCH 066/173] Add Support for Arabic Language --- README.md | 5 +- assets/images/flags/sau.png | Bin 0 -> 476 bytes lib/entities/language_service.dart | 6 +- res/values/strings_ar.arb | 681 +++++++++++++++++++++++++++++ 4 files changed, 688 insertions(+), 4 deletions(-) create mode 100644 assets/images/flags/sau.png create mode 100644 res/values/strings_ar.arb diff --git a/README.md b/README.md index f485ca244..14cb5e2ee 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 +- Arabic ## Add a new language @@ -117,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 pizxels 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 42x36 pixels with a 3 pixels of transparent margin on all 4 sides. ## Add a new fiat currency @@ -127,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 pizxels with a 3 pixels of transparent margin on all 4 sides. \ No newline at end of file +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. diff --git a/assets/images/flags/sau.png b/assets/images/flags/sau.png new file mode 100644 index 0000000000000000000000000000000000000000..97951983a0a89eab9edc06ebfd093923f0f0baf2 GIT binary patch literal 476 zcmV<20VDp2P)DtwcK0E?P>o~=kdA_r#@JNJJ;@jIVSMu*nR9Bbl7f00R z`$?ZFE^5Xj+sJMg0|>{SsqLJO|EyEblt#o*ShitB}q8otqm;`yaep)e{}6Y~iGL5n+{B z`m@2IWtJn^iM!v1M|c1*G!^h}Y7hX^L^pl&V@$69WVosg_kRV$izu~iwVx^IXrjR; zERf>W=22e7CEb`8t2c0bdP1z;;Csf@5|C(iPjw*Ws(3V4uZaemM localeCountryCode = { @@ -36,7 +37,8 @@ class LanguageService { 'uk': 'ukr', 'zh': 'chn', 'hr': 'hrv', - 'it': 'ita' + 'it': 'ita', + 'ar': 'sau' }; static final list = {}; diff --git a/res/values/strings_ar.arb b/res/values/strings_ar.arb new file mode 100644 index 000000000..01708d5fd --- /dev/null +++ b/res/values/strings_ar.arb @@ -0,0 +1,681 @@ +{ + "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":"الرجاء محاولة الاتصال بعقدة أخرى", + "xmr_hidden":"مختفي", + "xmr_available_balance":"الرصيد المتوفر", + "xmr_full_balance":"الرصيد الكامل", + "send":"إرسال", + "receive":"استلام", + "transactions":"المعاملات", + "incoming":"الواردة", + "outgoing":"الصادره", + "transactions_by_date":"المعاملات حسب التاريخ", + "trades":"عمليات التداول", + "filter_by":"تصفية حسب", + "today":"اليوم", + "yesterday":"الامس", + "received":"استلام", + "sent":"تم الأرسال", + "pending":" (في الإنتظار)", + "rescan":"إعادة الفحص", + "reconnect":"أعد الاتصال", + "wallets":"المحافظ", + "show_seed":"عرض السييد", + "show_keys":"اظهار السييد / المفاتيح", + "address_book_menu":"دليل العناوين", + "reconnection":"إعادة الاتصال", + "reconnect_alert_text":"هل أنت متأكد من رغبتك في إعادة الاتصال؟", + + + "exchange":"تبادل", + "clear":"مسح", + "refund_address":"عنوان إعادة المال", + "change_exchange_provider":"تغيير مزود الصرف", + "you_will_send":"تحويل من", + "you_will_get":"حول الى", + "amount_is_guaranteed":"مبلغ الاستلام مضمون", + "amount_is_estimate":"المبلغ المستلم هو تقدير", + "powered_by":"بدعم من ${title}", + "error":"خطأ", + "estimated":"مُقدَّر", + "min_value":"الحد الأدنى: ${value} ${currency}", + "max_value":"الحد الأقصى: ${value} ${currency}", + "change_currency":"تغيير العملة", + "overwrite_amount":"تغير المبلغ", + "qr_payment_amount":"يحتوي هذا ال QR على مبلغ الدفع. هل تريد تغير المبلغ فوق القيمة الحالية؟", + + "copy_id":"نسخ معرف العملية", + "exchange_result_write_down_trade_id":"يرجى نسخ أو كتابة معرّف العملية للمتابعة.", + "trade_id":"معرف عملية التبادل:", + "copied_to_clipboard":"نسخ إلى الحافظة", + "saved_the_trade_id":"لقد تم حفظ معرف العملية", + "fetching":"جار الجلب", + "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":"* يرجى نسخ أو كتابة معرف هويتك الأعلى لحفظة.", + "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":"الأسئلة الشائعة", + + + "enter_your_pin":"أدخل كود الرقم السري", + "loading_your_wallet":"يتم تحميل محفظتك", + + + "new_wallet":"إنشاء محفظة جديدة", + "wallet_name":"اسم المحفظة", + "continue_text":"التالي", + "choose_wallet_currency":"الرجاء اختيار عملة المحفظة:", + + + "node_new":"عقدة جديدة", + "node_address":"عنوان العقدة", + "node_port":"منفذ العقدة", + "login":"تسجيل الدخول", + "password":"كلمة المرور", + "nodes":"العقد", + "node_reset_settings_title":"اعادة الضبط", + "nodes_list_reset_to_default_message":"هل أنت متأكد أنك تريد إعادة تعيين الإعدادات إلى الافتراضي؟", + "change_current_node":"هل أنت متأكد من تغيير العقدة الحالية إلى ${node}؟", + "change":"تغير", + "remove_node":"إزالة العقدة", + "remove_node_message":"هل أنت متأكد أنك تريد إزالة العقدة المحددة؟", + "remove":"إزالة", + "delete":"حذف", + "add_new_node":"أضافة عقدة جديدة", + "change_current_node_title":"تغيير العقدة الحالية", + "node_test":"تجربة", + "node_connection_successful":"تم الاتصال بنجاح", + "node_connection_failed":"فشل الاتصال", + "new_node_testing":"تجربة العقدة الجديدة", + + + "use":"التبديل إلى", + "digit_pin":"-رقم PIN", + + + "share_address":"شارك العنوان", + "receive_amount":"المقدار", + "subaddresses":"العناوين الفرعية", + "addresses":"عناوين", + "scan_qr_code":"امسح ال QR للحصول على العنوان", + "qr_fullscreen":"انقر لفتح ال QR بملء الشاشة", + "rename":"إعادة تسمية", + "choose_account":"اختر حساب", + "create_new_account":"انشاء حساب جديد", + "accounts_subaddresses":"الحسابات والعناوين الفرعية", + + + "restore_restore_wallet":"استعادة محفظة", + "restore_title_from_seed_keys":"استعادة من السييد / المفاتيح", + "restore_description_from_seed_keys":"استرجع محفظتك من السييد / المفاتيح التي قمت بحفظها في مكان آمن", + "restore_next":"التالي", + "restore_title_from_backup":"استعادة من النسخة الاحتياطية", + "restore_description_from_backup":"يمكنك استعادة تطبيق 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":"وصف استعادة المحفظة", + "restore_new_seed":"سييد جديدة", + "restore_active_seed":"السييد النشطة", + "restore_bitcoin_description_from_seed":"قم باستعادة محفظتك من كود مكون من 24 كلمة", + "restore_bitcoin_description_from_keys":"قم باستعادة محفظتك من سلسلة WIF التي تم إنشاؤها من مفاتيحك الخاصة", + "restore_bitcoin_title_from_keys":"استعادة من WIF", + "restore_from_date_or_blockheight":"الرجاء إدخال تاريخ قبل إنشاء هذه المحفظة ببضعة أيام. أو إذا كنت تعرف ارتفاع البلوك، فيرجى إدخاله بدلاً من ذلك", + + + "seed_reminder":"يرجى تدوينها في حالة فقد هاتفك أو مسحه", + "seed_title":"سييد", + "seed_share":"شارك السييد", + "copy":"نسخ", + + + "seed_language_choose":"الرجاء اختيار لغة السييد:", + "seed_choose":"اختر لغة السييد", + "seed_language_next":"التالي", + "seed_language_english":"إنجليزي", + "seed_language_chinese":"صينى", + "seed_language_dutch":"هولندي", + "seed_language_german":"ألمانية", + "seed_language_japanese":"اليابانية", + "seed_language_portuguese":"البرتغالية", + "seed_language_russian":"الروسية", + "seed_language_spanish":"الأسبانية", + "seed_language_french":"فرنسي", + "seed_language_italian":"إيطالي", + + + "send_title":"إرسال", + "send_your_wallet":"محفظتك", + "send_address":"عنوان ${cryptoCurrency}", + "send_payment_id":"معرف عملية الدفع (اختياري)", + "all":"الكل", + "send_error_minimum_value":"الحد الأدنى لقيمة المبلغ هو 0.01", + "send_error_currency":"العملة يجب أن تحتوي على أرقام فقط", + "send_estimated_fee":"الرسوم المقدرة:", + "send_priority":"حاليًا ، تم تحديد الرسوم بأولوية ${transactionPriority}.\nيمكن تعديل أولوية المعاملة في الإعدادات", + "send_creating_transaction":" يتم إنشاء المعاملة", + "send_templates":"القوالب", + "send_new":"جديد", + "send_amount":"مقدار:", + "send_fee":"الرسوم:", + "send_name":"الأسم", + "send_got_it":"فهمتك", + "send_sending":"يتم الإرسال...", + "send_success":"تم إرسال ${crypto} الخاص بك بنجاح", + + + "settings_title":"إعدادات", + "settings_nodes":"العقد", + "settings_current_node":"العقدة الحالية", + "settings_wallets":"المحافظ", + "settings_display_balance":"عرض الرصيد", + "settings_currency":"العملة", + "settings_fee_priority":"رسوم الأولوية", + "settings_save_recipient_address":"حفظ عنوان المستلم", + "settings_personal":"شخصي", + "settings_change_pin":"تغيير 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":"سييد المحفظة / المفاتيح", + "wallet_seed":"سييد المحفظة", + "private_key":"مفتاح خاص", + "public_key":"مفتاح عمومي", + "view_key_private":"مفتاح العرض (خاص)", + "view_key_public":"مفتاح العرض (عام)", + "spend_key_private":"مفتاح الإنفاق (خاص)", + "spend_key_public":"مفتاح الإنفاق (عام)", + "copied_key_to_clipboard":"تم نسخ ${key} إلى الحافظة", + + + "new_subaddress_title":"عنوان جديد", + "new_subaddress_label_name":"تسمية", + "new_subaddress_create":"إنشاء", + + "address_label":"تسمية عنوان", + + "subaddress_title":"قائمة العناوين الفرعية", + + + "trade_details_title":"تفاصيل الصفقة", + "trade_details_id":"معرف (ID)", + "trade_details_state":"الحالة", + "trade_details_fetching":"جار الجلب", + "trade_details_provider":"مزود", + "trade_details_created_at":"أنشئت في", + "trade_details_pair":"زوج", + "trade_details_copied":"تم نسخ ${title} إلى الحافظة", + + + "trade_history_title":"تاريخ الصفقه", + + + "transaction_details_title":"تفاصيل المعاملة", + "transaction_details_transaction_id":"رقم المعاملة", + "transaction_details_date":"تاريخ", + "transaction_details_height":"ارتفاع", + "transaction_details_amount":"مقدار", + "transaction_details_fee":"رسوم", + "transaction_details_copied":"تم نسخ ${title} إلى الحافظة", + "transaction_details_recipient_address":"عناوين المستلم", + + + "wallet_list_title":"محفظة Monero", + "wallet_list_create_new_wallet":"إنشاء محفظة جديدة", + "wallet_list_restore_wallet":"استعادة المحفظة", + "wallet_list_load_wallet":"تحميل المحفظة", + "wallet_list_loading_wallet":"جار تحميل محفظة ${wallet_name}", + "wallet_list_failed_to_load":"فشل تحميل محفظة ${wallet_name}. ${error}", + "wallet_list_removing_wallet":"يتم إزالة محفظة ${wallet_name}", + "wallet_list_failed_to_remove":"فشلت إزالة محفظة ${wallet_name}. ${error}", + + + "widgets_address":"عنوان", + "widgets_restore_from_blockheight":"استعادة من ارتفاع البلوك", + "widgets_restore_from_date":"استعادة من التاريخ", + "widgets_or":"أو", + "widgets_seed":"سييد", + + + "router_no_route":"لم يتم تحديد مسار لـ ${name}", + + + "error_text_account_name":"يجب أن يحتوي اسم الحساب على أحرف وأرقام فقط\nويجب أن يتراوح بين حرف واحد و 15 حرفًا", + "error_text_contact_name":"لا يمكن أن يحتوي اسم جهة الاتصال على الرموز ` , ' \"\nويجب أن يتراوح بين حرف و 32 حرفًا", + "error_text_address":"يجب أن يتوافق عنوان المحفظة مع نوع\nالعملة المشفرة", + "error_text_node_address":"الرجاء إدخال عنوان IPv4", + "error_text_node_port":"منفذ العقدة يمكن أن يحتوي فقط على أرقام بين 0 و 65535", + "error_text_payment_id":"يمكن أن يحتوي معرّف الدفع فقط من 16 إلى 64 حرفًا hex", + "error_text_xmr":"لا يمكن أن تتجاوز قيمة XMR الرصيد المتاح.\nيجب أن يكون عدد الكسور أقل من أو يساوي 12", + "error_text_fiat":"لا يمكن أن تتجاوز قيمة المبلغ الرصيد المتاح.\nيجب أن يكون عدد الكسور أقل أو يساوي 2", + "error_text_subaddress_name":"لا يمكن أن يحتوي اسم العنوان الفرعي على رموز ` , ' \"\nويجب أن يتراوح طولها بين حرف واحد و 20 حرفًا", + "error_text_amount":"يجب أن يحتوي المبلغ على أرقام فقط", + "error_text_wallet_name":"يمكن أن يحتوي اسم المحفظة على أحرف وأرقام ورموز _ - فقط\nويجب أن يتراوح طولها بين حرف واحد و 33 حرفًا", + "error_text_keys":"يمكن أن تحتوي مفاتيح المحفظة على 64 حرفًا hex", + "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":"مهلة_الحظر", + "auth_store_banned_for":"محظور ل", + "auth_store_banned_minutes":" دقيقة", + "auth_store_incorrect_password":"PIN خطأ", + "wallet_store_monero_wallet":"محفظة Monero", + "wallet_restoration_store_incorrect_seed_length":"طول السييد غير صحيح", + + + "full_balance":"الرصيد الكامل", + "available_balance":"الرصيد المتوفر", + "hidden_balance":"الميزان الخفي", + + + "sync_status_syncronizing":"يتم المزامنة", + "sync_status_syncronized":"متزامن", + "sync_status_not_connected":"غير متصل", + "sync_status_starting_sync":"بدء المزامنة", + "sync_status_failed_connect":"انقطع الاتصال", + "sync_status_connecting":"يتم التوصيل", + "sync_status_connected":"متصل", + "sync_status_attempting_sync":"جاري محاولة المزامنة", + + + "transaction_priority_slow":"بطيء", + "transaction_priority_regular":"عادي", + "transaction_priority_medium":"متوسط", + "transaction_priority_fast":"سريع", + "transaction_priority_fastest":"أسرع", + + + "trade_for_not_created":"لم يتم إنشاء التداول للعنصر ${title}.", + "trade_not_created":"التداول لم ينشأ", + "trade_id_not_found":"تداول ${tradeId} من ${title} غير موجود.", + "trade_not_found":"التداول غير موجودة.", + + + "trade_state_pending":"قيد الانتظار", + "trade_state_confirming":"جاري التأكيد", + "trade_state_trading":"يتم التداول", + "trade_state_traded":"تم التداول بنجاح", + "trade_state_complete":"اكتمل", + "trade_state_to_be_created":"ليتم انشائه", + "trade_state_unpaid":"غير مدفوعة", + "trade_state_underpaid":"أجر أقل من اللازم", + "trade_state_paid_unconfirmed":"دفع غير مؤكد", + "trade_state_paid":"مدفوع", + "trade_state_btc_sent":"تم أرسل Btc", + "trade_state_timeout":"نفذ الوقت", + "trade_state_created":"تم الأنشاء", + "trade_state_finished":"تم", + + "change_language":"تغيير اللغة", + "change_language_to":"هل تريد تغيير اللغة إلى ${language}؟", + + "paste":"لصق", + "restore_from_seed_placeholder":"الرجاء إدخال أو لصق السييد الخاصة بك هنا", + "add_new_word":"أضف كلمة جديدة", + "incorrect_seed":"النص الذي تم إدخاله غير صالح.", + + "biometric_auth_reason":"امسح بصمة إصبعك للمصادقة", + "version":"الإصدار ${currentVersion}", + + "openalias_alert_title":"تم ايجاد العنوان", + "openalias_alert_content":"سوف ترسل الأموال إلى\n${recipient_name}", + + "card_address":"العنوان:", + "buy":"اشتري", + "sell":"بيع", + + "placeholder_transactions":"سيتم عرض معاملاتك هنا", + "placeholder_contacts":"سيتم عرض جهات الاتصال الخاصة بك هنا", + + "template":"قالب", + "confirm_delete_template":"سيؤدي هذا الإجراء إلى حذف هذا القالب. هل ترغب في الاستمرار؟", + "confirm_delete_wallet":"سيؤدي هذا الإجراء إلى حذف هذه المحفظة. هل ترغب في الاستمرار؟", + + "picker_description":"لاختيار ChangeNOW أو MorphToken ، يرجى تغيير زوج التداول الخاص بك أولاً", + + "change_wallet_alert_title":"تغيير المحفظة الحالية", + "change_wallet_alert_content":"هل تريد تغيير المحفظة الحالية إلى ${wallet_name}؟", + + "creating_new_wallet":"يتم إنشاء محفظة جديدة", + "creating_new_wallet_error":"خطأ: ${description}", + + "seed_alert_title":"انتباه", + "seed_alert_content":"السييد هي الطريقة الوحيدة لاسترداد محفظتك. هل كتبتها؟", + "seed_alert_back":"العودة إلى الوراء", + "seed_alert_yes":"نعم، فعلت ذلك", + + "exchange_sync_alert_content":"يرجى الانتظار حتى تتم مزامنة محفظتك", + + "pre_seed_title":"مهم", + "pre_seed_description":"في الصفحة التالية ستشاهد سلسلة من الكلمات ${words}. هذه هي سييد الفريدة والخاصة بك وهي الطريقة الوحيدة لاسترداد محفظتك في حالة فقدها أو عطلها. تقع على عاتقك مسؤولية تدوينها وتخزينها في مكان آمن خارج تطبيق Cake Wallet.", + "pre_seed_button_text":"انا أفهم. أرني سييد الخاص بي", + + "xmr_to_error":"خطأ XMR.TO", + "xmr_to_error_description":"مبلغ غير صحيح. الحد الأقصى 8 أرقام بعد الفاصلة العشرية", + + "provider_error":"خطأ ${provider}", + + "use_ssl":"استخدم SSL", + "trusted":"موثوق به", + + "color_theme":"سمة اللون", + "light_theme":"فاتح", + "bright_theme":"مشرق", + "dark_theme":"داكن", + "enter_your_note":"أدخل ملاحظتك ...", + "note_optional":"ملاحظة (اختياري)", + "note_tap_to_change":"ملاحظة (انقر للتغيير)", + "view_in_block_explorer":"عرض في Block Explorer", + "view_transaction_on":"عرض العملية على", + "transaction_key":"مفتاح العملية", + "confirmations":"التأكيدات", + "recipient_address":"عنوان المستلم", + + "extra_id":"معرف إضافي:", + "destination_tag":"علامة الوجهة:", + "memo":"مذكرة:", + + "backup":"نسخ الاحتياطي", + "change_password":"تغيير كلمة المرور", + "backup_password":"كلمة مرور النسخ الاحتياطي", + "write_down_backup_password":"يرجى كتابة كلمة المرور الاحتياطية الخاصة بك ، والتي يتم استخدامها لاستيراد ملفات النسخ الاحتياطي الخاصة بك.", + "export_backup":"تصدير نسخة احتياطية", + "save_backup_password":"يرجى التأكد من حفظ كلمة المرور الاحتياطية. لن تتمكن من استيراد ملفات النسخ الاحتياطي بدونها.", + "backup_file":"ملف النسخ الاحتياطي", + + "edit_backup_password":"تعديل كلمة مرور النسخ الاحتياطي", + "save_backup_password_alert":"حفظ كلمة المرور الاحتياطية", + "change_backup_password_alert":"لن تكون ملفات النسخ الاحتياطي السابقة متاحة للاستيراد بكلمة مرور نسخ احتياطي جديدة. سيتم استخدام كلمة مرور النسخ الاحتياطي الجديدة لملفات النسخ الاحتياطي الجديدة فقط. هل أنت متأكد أنك تريد تغيير كلمة المرور الاحتياطية؟", + + "enter_backup_password":"أدخل كلمة المرور الاحتياطية هنا", + "select_backup_file":"حدد ملف النسخ الاحتياطي", + "import":"اختيار ملف", + "please_select_backup_file":"الرجاء تحديد ملف النسخ الاحتياطي وإدخال كلمة مرور النسخ الاحتياطي.", + + "fixed_rate":"السعر الثابت", + "fixed_rate_alert":"ستتمكن من إدخال مبلغ الاستلام عند تشغيل وضع السعر الثابت. هل تريد التبديل إلى وضع السعر الثابت؟", + + "xlm_extra_info":"من فضلك لا تنس تحديد معرّف المذكرة أثناء إرسال معاملة XLM للتبادل", + "xrp_extra_info":"من فضلك لا تنس تحديد علامة الوجهة أثناء إرسال معاملة 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 الخاصة بك.", + + "outdated_electrum_wallet_description":"محافظ Bitcoin الجديدة التي تم إنشاؤها في Cake الآن سييد مكونة من 24 كلمة. من الضروري أن تقوم بإنشاء محفظة Bitcoin جديدة وتحويل جميع أموالك إلى المحفظة الجديدة المكونة من 24 كلمة ، والتوقف عن استخدام محافظ سييد مكونة من 12 كلمة. يرجى القيام بذلك على الفور لتأمين أموالك.", + "understand":"لقد فهمت", + + "apk_update":"تحديث APK", + + "buy_bitcoin":"شراء Bitcoin", + "buy_with":"اشتر بواسطة", + "moonpay_alert_text":"يجب أن تكون قيمة المبلغ أكبر من أو تساوي ${minAmount} ${fiatCurrency}", + + "outdated_electrum_wallet_receive_warning":"إذا كانت هذه المحفظة تحتوي على سييد مكونة من 12 كلمة وتم إنشاؤها في Cake ، فلا تقم بإيداع Bitcoin في هذه المحفظة. قد يتم فقد أي BTC تم تحويله إلى هذه المحفظة. قم بإنشاء محفظة جديدة مكونة من 24 كلمة (انقر فوق القائمة في الجزء العلوي الأيمن ، وحدد محافظ ، واختر إنشاء محفظة جديدة ، ثم حدد Bitcoin) وقم على الفور بنقل BTC الخاص بك هناك. محافظ BTC الجديدة (24 كلمة) من 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. جرب يات آخر", + "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", + "cake_pay_subtitle":"شراء بطاقات هدايا مخفضة السعر (الولايات المتحدة فقط)", + "cake_pay_web_cards_title":"بطاقات Cake Pay Web", + "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":"الموافقة على التوقيع الإلكتروني", + "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 Pay", + "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":"إذا لم تستمر الشاشة بعد دقيقة واحدة ، فتحقق من مستكشف البلوك والبريد الإلكتروني.", + "agree":"موافق", + "in_store":"في المتجر", + "generating_gift_card":"يتم توليد بطاقة هدية", + "payment_was_received":"تم استلام الدفع الخاص بك.", + "proceed_after_one_minute":"إذا لم تستمر الشاشة بعد دقيقة واحدة ، فتحقق من بريدك الإلكتروني.", + "order_id":"رقم التعريف الخاص بالطلب", + "gift_card_is_generated":"تم إنشاء بطاقة الهدايا", + "open_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":"خصوصية", + "display_settings":"اعدادات العرض", + "other_settings":"اعدادات اخرى", + "require_pin_after":"طلب PIN بعد", + "always":"دائماً", + "minutes_to_pin_code":"${minutes} دقيقة", + "disable_exchange":"تعطيل التبادل", + "advanced_privacy_settings":"إعدادات الخصوصية المتقدمة", + "settings_can_be_changed_later":"يمكن تغيير هذه الإعدادات لاحقًا في إعدادات التطبيق", + "add_custom_node":"إضافة عقدة مخصصة جديدة", + "disable_fiat":"تعطيل fiat", + "fiat_api":"Fiat API", + "disabled":"معطلة", + "enabled":"ممكنة", + "tor_only":"Tor فقط", + "unmatched_currencies": "عملة محفظتك الحالية لا تتطابق مع عملة QR الممسوحة ضوئيًا" +} From e904c0a7b751cee11031dd953ddf035df2d7f872 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Fri, 6 Jan 2023 19:42:37 +0200 Subject: [PATCH 067/173] 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 d227e6e97ee5913047f34287f55eac9352b101c6 Mon Sep 17 00:00:00 2001 From: Telsbat <115116835+Telsbat@users.noreply.github.com> Date: Mon, 9 Jan 2023 15:04:44 +0100 Subject: [PATCH 068/173] Update strings_pl.arb Almost everything was from some online translator. I've translated everything that was no sense. --- res/values/strings_pl.arb | 366 +++++++++++++++++++------------------- 1 file changed, 183 insertions(+), 183 deletions(-) diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index 11bf637e5..104e6eb90 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -2,7 +2,7 @@ "welcome" : "Witamy w", "cake_wallet" : "Cake Wallet", "first_wallet_text" : "Świetny portfel na Monero, Bitcoin, Litecoin, i Haven", - "please_make_selection" : "Wybierz poniżej, aby cutwórz lub odzyskaj swój portfel.", + "please_make_selection" : "Wybierz poniżej, aby utworzyć lub przywrócić swój portfel.", "create_new" : "Utwórz nowy portfel", "restore_wallet" : "Przywróć portfel", @@ -13,39 +13,39 @@ "haven_app_wallet_text": "Awesome wallet for Haven", "accounts" : "Konta", - "edit" : "Edytować", + "edit" : "Edytuj", "account" : "Konto", "add" : "Dodaj", - "address_book" : "Książka adresowa", + "address_book" : "Kontakty", "contact" : "Kontakt", "please_select" : "Proszę wybrać:", - "cancel" : "Anulować", - "ok" : "Dobrze", + "cancel" : "Anuluj", + "ok" : "Ok", "contact_name" : "Nazwa Kontaktu", - "reset" : "Nastawić", - "save" : "Zapisać", + "reset" : "Wyczyść", + "save" : "Zapisz", "address_remove_contact" : "Usuń kontakt", "address_remove_content" : "Czy na pewno chcesz usunąć wybrany kontakt?", - "authenticated" : "Zalegalizowany", - "authentication" : "Poświadczenie", + "authenticated" : "Uwierzytelniony", + "authentication" : "Uwierzytelnianie", "failed_authentication" : "Nieudane uwierzytelnienie. ${state_error}", "wallet_menu" : "Menu portfela", - "Blocks_remaining" : "${status} Bloki pozostałe", + "Blocks_remaining" : "Pozostało ${status} bloków", "please_try_to_connect_to_another_node" : "Spróbuj połączyć się z innym węzłem", "xmr_hidden" : "Ukryty", - "xmr_available_balance" : "Dostępne saldo", - "xmr_full_balance" : "Pełna równowaga", - "send" : "Wysłać", - "receive" : "Otrzymać", + "xmr_available_balance" : "Dostępne środki", + "xmr_full_balance" : "Pełne saldo", + "send" : "Wyślij", + "receive" : "Otrzymaj", "transactions" : "Transakcje", "incoming" : "Przychodzące", - "outgoing" : "Towarzyski", + "outgoing" : "Wychodzące", "transactions_by_date" : "Transakcje według daty", "trades" : "Transakcje", "filter_by": "Filtruj według", @@ -55,48 +55,48 @@ "sent" : "Wysłano", "pending" : " (w oczekiwaniu)", "rescan" : "Skanuj ponownie", - "reconnect" : "Na nowo połączyć", + "reconnect" : "Połącz ponownie", "wallets" : "Portfele", - "show_seed" : "Pokaż nasiona", - "show_keys" : "Pokaż nasiona/klucze", - "address_book_menu" : "Książka adresowa", - "reconnection" : "Ponowne połączenie", - "reconnect_alert_text" : "Czy na pewno ponownie się połączysz?", + "show_seed" : "Pokaż frazy seed", + "show_keys" : "Pokaż seed/klucze", + "address_book_menu" : "Kontakty", + "reconnection" : "Ponowne łączenie", + "reconnect_alert_text" : "Czy na pewno ponownie się ponownie połączysz?", - "exchange" : "Wymieniać się", + "exchange" : "Wymień", "clear" : "Wyczyść", - "refund_address" : "Adres zwrotu", - "change_exchange_provider" : "Zmień dostawcę programu Exchange", + "refund_address" : "Adres do zwrotu", + "change_exchange_provider" : "Zmień dostawcę wymiany", "you_will_send" : "Konwertuj z", "you_will_get" : "Konwertuj na", "amount_is_guaranteed" : "Otrzymana kwota jest gwarantowana", "amount_is_estimate" : "Otrzymana kwota jest wartością szacunkową", - "powered_by" : "Zasilany przez ${title}", + "powered_by" : "Obsługiwane przez ${title}", "error" : "Błąd", "estimated" : "Oszacowano", "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?", + "change_currency" : "Zmień walutę", + "overwrite_amount" : "Nadpisz ilość", + "qr_payment_amount" : "Ten kod QR zawiera kwotę do zapłaty. Czy chcesz nadpisać obecną wartość?", - "copy_id" : "ID kopii", - "exchange_result_write_down_trade_id" : "Skopiuj lub zanotuj identyfikator transakcji, aby kontynuować.", - "trade_id" : "Identyfikator handlu:", - "copied_to_clipboard" : "Skopiowane do schowka", + "copy_id" : "skopiuj ID", + "exchange_result_write_down_trade_id" : "Skopiuj lub zanotuj identyfikator transakcji (ID), aby kontynuować.", + "trade_id" : "ID transakcji:", + "copied_to_clipboard" : "Skopiowano do schowka", "saved_the_trade_id" : "Zapisałem ID", - "fetching" : "Ujmujący", + "fetching" : "Pobieranie", "id" : "ID: ", "amount" : "Ilość: ", - "payment_id" : "Płatności ID: ", + "payment_id" : "ID Płatności: ", "status" : "Status: ", "offer_expires_in" : "Oferta wygasa za ", - "trade_is_powered_by" : "Ten handel jest zasilany przez ${provider}", + "trade_is_powered_by" : "Ta wymiana jest obsługiwana przez ${provider}", "copy_address" : "Skopiuj adress", "exchange_result_confirm" : "Naciskając Potwierdź, wyślesz ${fetchingLabel} ${from} z twojego portfela ${walletName} na adres podany poniżej. Lub możesz wysłać z zewnętrznego portfela na poniższy adres / kod QR.\n\nNaciśnij Potwierdź, aby kontynuować lub wróć, aby zmienić kwoty.", - "exchange_result_description" : "Musisz wysłać co najmniej ${fetchingLabel} ${from} na adres podany na następnej stronie. Jeśli wyślesz kwotę niższą niż ${fetchingLabel} ${from}, może ona nie zostać przeliczona i może nie zostać zwrócona.", - "exchange_result_write_down_ID" : "*Skopiuj lub zanotuj swój identyfikator pokazany powyżej.", + "exchange_result_description" : "Musisz wysłać co najmniej ${fetchingLabel} ${from} na adres podany na następnej stronie. Jeśli wyślesz kwotę niższą niż ${fetchingLabel} ${from}, może ona nie zostać uwzględniona i może nie zostać zwrócona.", + "exchange_result_write_down_ID" : "*Skopiuj lub zanotuj identyfikator transakcji pokazany powyżej.", "confirm" : "Potwierdzać", "confirm_sending" : "Potwierdź wysłanie", "commit_transaction_amount_fee" : "Zatwierdź transakcję\nIlość: ${amount}\nOpłata: ${fee}", @@ -104,13 +104,13 @@ "transaction_sent" : "Transakcja wysłana!", "expired" : "Przedawniony", "time" : "${minutes}m ${seconds}s", - "send_xmr" : "Wysłać XMR", - "exchange_new_template" : "Nowy szablon", + "send_xmr" : "Wyślij XMR", + "exchange_new_template" : "Nowy szablon wymiany", "faq" : "FAQ", - "enter_your_pin" : "Wpisz Twój kod PIN", + "enter_your_pin" : "Wpisz kod PIN", "loading_your_wallet" : "Ładowanie portfela", @@ -123,17 +123,17 @@ "node_new" : "Nowy węzeł", "node_address" : "Adres węzła", "node_port" : "Port węzła", - "login" : "Zaloguj Się", + "login" : "Login", "password" : "Hasło", "nodes" : "Węzły", - "node_reset_settings_title" : "Resetowanie ustawień", + "node_reset_settings_title" : "Zresetuj ustawienia węzłów", "nodes_list_reset_to_default_message" : "Czy na pewno chcesz przywrócić ustawienia domyślne?", - "change_current_node" : "Czy na pewno chcesz przywrócić ustawienia domyślne? ${node}?", - "change" : "Zmiana", + "change_current_node" : "Czy na pewno chcesz wybrać ten węzeł? ${node}?", + "change" : "Zmień", "remove_node" : "Usuń węzeł", "remove_node_message" : "Czy na pewno chcesz usunąć wybrany węzeł?", - "remove" : "Usunąć", - "delete" : "Kasować", + "remove" : "Usuń", + "delete" : "Skasuj", "add_new_node" : "Dodaj nowy węzeł", "change_current_node_title" : "Zmień bieżący węzeł", "node_test" : "Test", @@ -142,8 +142,8 @@ "new_node_testing" : "Testowanie nowych węzłów", - "use" : "Używać ", - "digit_pin" : "-znak PIN", + "use" : "Użyj ", + "digit_pin" : "-znakowy PIN", "share_address" : "Udostępnij adres", @@ -152,46 +152,46 @@ "addresses" : "Adresy", "scan_qr_code" : "Zeskanuj kod QR, aby uzyskać adres", "qr_fullscreen" : "Dotknij, aby otworzyć pełnoekranowy kod QR", - "rename" : "Przemianować", + "rename" : "Zmień nazwę", "choose_account" : "Wybierz konto", "create_new_account" : "Stwórz nowe konto", "accounts_subaddresses" : "Konta i podadresy", "restore_restore_wallet" : "Przywróć portfel", - "restore_title_from_seed_keys" : "Przywróć z nasion / kluczy", - "restore_description_from_seed_keys" : "Odzyskaj swój portfel z nasion / kluczy, które zapisałeś w bezpiecznym miejscu", + "restore_title_from_seed_keys" : "Przywróć z seedów / kluczy", + "restore_description_from_seed_keys" : "Odzyskaj swój portfel z seedów / kluczy, które zapisałeś w bezpiecznym miejscu", "restore_next" : "Kolejny", "restore_title_from_backup" : "Przywróć z pliku kopii zapasowej", - "restore_description_from_backup" : "Możesz przywrócić całą aplikację Cake Wallet z plik kopii zapasowej", - "restore_seed_keys_restore" : "Przywracanie nasion / kluczy", - "restore_title_from_seed" : "Przywróć z nasion", - "restore_description_from_seed" : "Przywróć swój portfel z 25 słów lub 13-słowny kod kombinacji", + "restore_description_from_backup" : "Możesz przywrócić całą aplikację Cake Wallet z pliku kopii zapasowej", + "restore_seed_keys_restore" : "Przywracanie seedów / kluczy", + "restore_title_from_seed" : "Przywróć z seedów", + "restore_description_from_seed" : "Przywróć swój portfel z 25 lub 13-słownej frazy seed", "restore_title_from_keys" : "Przywróć z kluczy", - "restore_description_from_keys" : "Przywróć swój portfel z wygenerowanego naciśnięcia klawiszy zapisane z kluczy prywatnych", + "restore_description_from_keys" : "Przywróć swój portfel z kluczy prywatnych", "restore_wallet_name" : "Nazwa portfela", "restore_address" : "Adres", - "restore_view_key_private" : "Wyświetl klucz (prywatny)", - "restore_spend_key_private" : "Wydaj klucz (prywatny)", - "restore_recover" : "Wyzdrowieć", - "restore_wallet_restore_description" : "Opis przywracania portfela", - "restore_new_seed" : "Nowe nasienie", - "restore_active_seed" : "Aktywne nasiona", - "restore_bitcoin_description_from_seed" : "Przywróć swój portfel z kodu złożonego z 24 słów", - "restore_bitcoin_description_from_keys" : "Przywróć swój portfel z wygenerowanego ciągu WIF z kluczy prywatnych", - "restore_bitcoin_title_from_keys" : "Przywróć z WIF", - "restore_from_date_or_blockheight" : "Wprowadź datę na kilka dni przed utworzeniem tego portfela. Lub jeśli znasz wysokość bloku, wprowadź go zamiast tego", + "restore_view_key_private" : "Podaj klucz prywatny", + "restore_spend_key_private" : "Podaj prywatny klucz wglądu (view key)", + "restore_recover" : "Przywróć", + "restore_wallet_restore_description" : "Przywracanie portfela", + "restore_new_seed" : "Nowy seed", + "restore_active_seed" : "Aktywne seedy", + "restore_bitcoin_description_from_seed" : "Przywróć swój portfel z frazy seed złożonej z 24 słów", + "restore_bitcoin_description_from_keys" : "Przywróć swój portfel z klucza prywatnego", + "restore_bitcoin_title_from_keys" : "Przywróć z klucza prywatnego", + "restore_from_date_or_blockheight" : "Wprowadź datę na kilka dni przed utworzeniem tego portfela, lub jeśli znasz wysokość bloku, wprowadź go zamiast daty", - "seed_reminder" : "Zapisz je na wypadek zgubienia lub wyczyszczenia telefonu", - "seed_title" : "Ziarno", - "seed_share" : "Udostępnij ziarno", + "seed_reminder" : "Musisz zapisać tą fraze, bo bez niej możesz nie odzyskać portfela!", + "seed_title" : "Seed", + "seed_share" : "Udostępnij seed", "copy" : "Kopiuj", - "seed_language_choose" : "Proszę wybrać język początkowy:", - "seed_choose" : "Wybierz język początkowy", - "seed_language_next" : "Kolejny", + "seed_language_choose" : "Proszę wybrać język słów we frazie seed:", + "seed_choose" : "Wybierz język", + "seed_language_next" : "Następny", "seed_language_english" : "Angielski", "seed_language_chinese" : "Chiński", "seed_language_dutch" : "Holenderski", @@ -209,7 +209,7 @@ "send_address" : "Adres ${cryptoCurrency}", "send_payment_id" : "Identyfikator płatności (opcjonalny)", "all" : "WSZYSTKO", - "send_error_minimum_value" : "Minimalna wartość kwoty to 0,01", + "send_error_minimum_value" : "Minimalna wartość to 0,01", "send_error_currency" : "Waluta może zawierać tylko cyfry", "send_estimated_fee" : "Szacowana opłata:", "send_priority" : "Obecnie opłata ustalona jest na ${transactionPriority} priorytet.\nPriorytet transakcji można zmienić w ustawieniach", @@ -219,7 +219,7 @@ "send_amount" : "Ilość:", "send_fee" : "Opłata:", "send_name" : "Imię", - "send_got_it" : "Rozumiem", + "send_got_it" : "Wysłano", "send_sending" : "Wysyłanie...", "send_success" : "Twoje ${crypto} zostało pomyślnie wysłane", @@ -232,21 +232,21 @@ "settings_currency" : "Waluta", "settings_fee_priority" : "Priorytet opłaty", "settings_save_recipient_address" : "Zapisz adres odbiorcy", - "settings_personal" : "Osobisty", + "settings_personal" : "Osobiste", "settings_change_pin" : "Zmień PIN", "settings_change_language" : "Zmień język", "settings_allow_biometrical_authentication" : "Zezwalaj na uwierzytelnianie biometryczne", "settings_dark_mode" : "Tryb ciemny", "settings_transactions" : "Transakcje", "settings_trades" : "Transakcje", - "settings_display_on_dashboard_list" : "Wyświetl na liście kokpitu", - "settings_all" : "Cały", + "settings_display_on_dashboard_list" : "Wyświetl na pulpicie", + "settings_all" : "Wszystkie", "settings_only_trades" : "Tylko transakcje", "settings_only_transactions" : "Tylko transakcje", "settings_none" : "Żaden", "settings_support" : "Wsparcie", "settings_terms_and_conditions" : "Zasady i warunki", - "pin_is_incorrect" : "PPIN jest niepoprawny", + "pin_is_incorrect" : "PIN jest niepoprawny", "setup_pin" : "Ustaw PIN", @@ -254,47 +254,47 @@ "setup_successful" : "Twój kod PIN został pomyślnie skonfigurowany!", - "wallet_keys" : "Nasiono portfela/klucze", - "wallet_seed" : "Nasiono portfela", - "private_key" : "Prywatny klucz", + "wallet_keys" : "Klucze portfela", + "wallet_seed" : "Seed portfela", + "private_key" : "Klucz prywatny", "public_key" : "Klucz publiczny", - "view_key_private" : "Wyświetl klucz (prywatny)", - "view_key_public" : "Wyświetl klucz (publiczny)", - "spend_key_private" : "Wydaj klucz (prywatny)", - "spend_key_public" : "Wydaj klucz (publiczny)", - "copied_key_to_clipboard" : "Skopiowane ${key} do schowka", + "view_key_private" : "Prywatny Klucz Wglądu", + "view_key_public" : "Publiczny Klucz Wglądu", + "spend_key_private" : "Klucz prywatny", + "spend_key_public" : "Klucz publiczny", + "copied_key_to_clipboard" : "Skopiowaneo ${key} do schowka", "new_subaddress_title" : "Nowy adres", - "new_subaddress_label_name" : "Nazwa etykiety", + "new_subaddress_label_name" : "Etykieta nazwy adresu", "new_subaddress_create" : "Stwórz", - "address_label" : "Address label", + "address_label" : "Etykieta Adresu", "subaddress_title" : "Lista podadresów", - "trade_details_title" : "Szczegóły handlu", + "trade_details_title" : "Szczegóły transakcji", "trade_details_id" : "ID", - "trade_details_state" : "Stan", - "trade_details_fetching" : "Ujmujący", + "trade_details_state" : "Status", + "trade_details_fetching" : "Pobieranie", "trade_details_provider" : "Dostawca", - "trade_details_created_at" : "Utworzono w", + "trade_details_created_at" : "Utworzono ", "trade_details_pair" : "Para", "trade_details_copied" : "${title} skopiowane do schowka", - "trade_history_title" : "Historia handlu", + "trade_history_title" : "Historia wymian", "transaction_details_title" : "Szczegóły transakcji", - "transaction_details_transaction_id" : "Transakcja ID", + "transaction_details_transaction_id" : "ID Trancakcji", "transaction_details_date" : "Data", - "transaction_details_height" : "Wysokość", + "transaction_details_height" : "Wysokość Bloku", "transaction_details_amount" : "Ilość", "transaction_details_fee" : "Opłata", "transaction_details_copied" : "${title} skopiowane do schowka", - "transaction_details_recipient_address" : "Adresy odbiorców", + "transaction_details_recipient_address" : "Adres odbiorcy", "wallet_list_title" : "Portfel Monero", @@ -311,23 +311,23 @@ "widgets_restore_from_blockheight" : "Przywróć z wysokości bloku", "widgets_restore_from_date" : "Przywróć od daty", "widgets_or" : "lub", - "widgets_seed" : "Ziarno", + "widgets_seed" : "Seed", "router_no_route" : "Brak zdefiniowanej trasy dla ${name}", "error_text_account_name" : "Nazwa konta może zawierać tylko litery, cyfry\ni musi mieć od 1 do 15 znaków", - "error_text_contact_name" : "Nazwa kontaktu nie może zawierać` , ' \" symbolika\ni musi mieć od 1 do 32 znaków ", - "error_text_address" : "Wallet address must correspond to the type\nof cryptocurrency", + "error_text_contact_name" : "Nazwa kontaktu nie może zawierać symboli ` , ' \"\ni musi mieć od 1 do 32 znaków ", + "error_text_address" : "Adres musi odpowiadać typowi kryptowaluty", "error_text_node_address" : "Wpisz adres iPv4", "error_text_node_port" : "Port węzła może zawierać tylko liczby od 0 do 65535", "error_text_payment_id" : "ID może zawierać od 16 do 64 znaków w formacie szesnastkowym", "error_text_xmr" : "Wartość XMR nie może przekraczać dostępnego salda.\nLiczba cyfr ułamkowych musi być mniejsza lub równa 12", "error_text_fiat" : "Wartość kwoty nie może przekroczyć dostępnego salda.\nLiczba cyfr ułamkowych musi być mniejsza lub równa 2", - "error_text_subaddress_name" : "Nazwa podadresu nie może zawierać ` , ' \" symbolika\ni musi mieć od 1 do 20 znaków", + "error_text_subaddress_name" : "Nazwa podadresu nie może zawierać symboli ` , ' \"\ni musi mieć od 1 do 20 znaków", "error_text_amount" : "Kwota może zawierać tylko liczby", - "error_text_wallet_name" : "Nazwa portfela może zawierać tylko litery, cyfry, _ - symbole\ni musi mieć od 1 do 33 znaków", + "error_text_wallet_name" : "Nazwa portfela może zawierać tylko litery, cyfry lub symbole _ - \ni musi mieć od 1 do 33 znaków", "error_text_keys" : "Klucze portfela mogą zawierać tylko 64 znaki w systemie szesnastkowym", "error_text_crypto_currency" : "Liczba cyfr ułamkowych\nmusi być mniejsza lub równa 12", "error_text_minimal_limit" : "Wymiana dla ${provider} nie została utworzona. Kwota jest mniejsza niż minimalna: ${min} ${currency}", @@ -337,69 +337,69 @@ "auth_store_ban_timeout" : "przekroczenie limitu czasu", - "auth_store_banned_for" : "Bzbanowany za ", + "auth_store_banned_for" : "Zablokowany za ", "auth_store_banned_minutes" : " minuty", "auth_store_incorrect_password" : "Niepoprawny PIN", "wallet_store_monero_wallet" : "Portfel Monero", - "wallet_restoration_store_incorrect_seed_length" : "Nieprawidłowa długość nasion", + "wallet_restoration_store_incorrect_seed_length" : "Nieprawidłowa długość frazy seed", - "full_balance" : "Pełna równowaga", - "available_balance" : "Dostępne saldo", - "hidden_balance" : "Ukryta równowaga", + "full_balance" : "Pełne saldo", + "available_balance" : "Dostępne środki", + "hidden_balance" : "Ukryte saldo", "sync_status_syncronizing" : "SYNCHRONIZACJA", - "sync_status_syncronized" : "SYNCHRONIZOWANY", + "sync_status_syncronized" : "SYNCHRONIZOWANIE", "sync_status_not_connected" : "NIE POŁĄCZONY", "sync_status_starting_sync" : "ROZPOCZĘCIE SYNCHRONIZACJI", - "sync_status_failed_connect" : "NIEPOWIĄZANY", - "sync_status_connecting" : "ZŁĄCZONY", + "sync_status_failed_connect" : "POŁĄCZENIE NIEUDANE", + "sync_status_connecting" : "ŁĄCZENIE", "sync_status_connected" : "POŁĄCZONY", "sync_status_attempting_sync" : "PRÓBA SYNCHRONIZACJI", - "transaction_priority_slow" : "Powolny", - "transaction_priority_regular" : "Regularny", - "transaction_priority_medium" : "Średni", - "transaction_priority_fast" : "Szybki", - "transaction_priority_fastest" : "Najszybszy", + "transaction_priority_slow" : "Wolna(Zalecane)", + "transaction_priority_regular" : "Regularna", + "transaction_priority_medium" : "Średnia", + "transaction_priority_fast" : "Szybka", + "transaction_priority_fastest" : "Najszybsza", - "trade_for_not_created" : "Zamienić się za ${title} nie jest tworzony.", - "trade_not_created" : "Handel nie utworzony", - "trade_id_not_found" : "Handel ${tradeId} of ${title} nie znaleziono.", - "trade_not_found" : "Nie znaleziono handlu.", + "trade_for_not_created" : "Wymiana za ${title} nie została utworzona.", + "trade_not_created" : "Wymiana nie została utworzona", + "trade_id_not_found" : "Transakcja ${tradeId} ${title} nie znaleziona.", + "trade_not_found" : "Nie znaleziono transakcji.", - "trade_state_pending" : "W oczekiwaniu", - "trade_state_confirming" : "Potwierdzam", - "trade_state_trading" : "Handlowy", - "trade_state_traded" : "Handlowane", - "trade_state_complete" : "Kompletny", - "trade_state_to_be_created" : "Zostać stworzonym", - "trade_state_unpaid" : "Nie zapłacony", + "trade_state_pending" : "Oczekująca", + "trade_state_confirming" : "Potwierdzanie", + "trade_state_trading" : "Wymiana", + "trade_state_traded" : "Wymienione", + "trade_state_complete" : "Ukończona", + "trade_state_to_be_created" : "Została stworzona", + "trade_state_unpaid" : "Nie opłacona", "trade_state_underpaid" : "Niedopłacone", - "trade_state_paid_unconfirmed" : "Płatne niepotwierdzone", - "trade_state_paid" : "Płatny", - "trade_state_btc_sent" : "Wysłane", + "trade_state_paid_unconfirmed" : "Transakcja niepotwierdzona", + "trade_state_paid" : "Opłacona", + "trade_state_btc_sent" : "Wysłanie", "trade_state_timeout" : "Koniec czasu", - "trade_state_created" : "Stworzony", - "trade_state_finished" : "Skończone", + "trade_state_created" : "Stworzona", + "trade_state_finished" : "Zakończona", "change_language" : "Zmień język", "change_language_to" : "Zmień język na ${language}?", - "paste" : "Pasta", - "restore_from_seed_placeholder" : "Wpisz lub wklej tutaj swoją frazę kodową", + "paste" : "Wklej", + "restore_from_seed_placeholder" : "Wpisz lub wklej tutaj swoją frazę seed", "add_new_word" : "Dodaj nowe słowo", - "incorrect_seed" : "Wprowadzony tekst jest nieprawidłowy.", + "incorrect_seed" : "Wprowadzony seed jest nieprawidłowy.", - "biometric_auth_reason" : "Zeskanuj swój odcisk palca, aby go uwierzytelnić", + "biometric_auth_reason" : "Zeskanuj swój odcisk palca, aby uwierzytelnić", "version" : "Wersja ${currentVersion}", "openalias_alert_title" : "Wykryto Adres", - "openalias_alert_content" : "Będziesz wysyłać środki na\n${recipient_name}", + "openalias_alert_content" : "Wysyłasz środki na\n${recipient_name}", "card_address" : "Adres:", "buy" : "Kup", @@ -418,36 +418,36 @@ "change_wallet_alert_content" : "Czy chcesz zmienić obecny portfel na ${wallet_name}?", "creating_new_wallet" : "Tworzenie nowego portfela", - "creating_new_wallet_error" : "Pomyłka: ${description}", + "creating_new_wallet_error" : "Błąd: ${description}", "seed_alert_title" : "Uwaga", - "seed_alert_content" : "Ziarno to jedyny sposób na odzyskanie portfela. Zapisałeś to?", + "seed_alert_content" : "Fraza Seed to jedyny sposób na odzyskanie portfela. Zapisałeś ją?", "seed_alert_back" : "Wróć", "seed_alert_yes" : "Tak", "exchange_sync_alert_content" : "Poczekaj, aż portfel zostanie zsynchronizowany", "pre_seed_title" : "WAŻNY", - "pre_seed_description" : "Na następnej stronie zobaczysz serię ${words} słów. To jest Twoje unikalne i prywatne ziarno i jest to JEDYNY sposób na odzyskanie portfela w przypadku utraty lub awarii. Twoim obowiązkiem jest zapisanie go i przechowywanie w bezpiecznym miejscu poza aplikacją Cake Wallet.", - "pre_seed_button_text" : "Rozumiem. Pokaż mi moje nasienie", + "pre_seed_description" : "Na następnej stronie zobaczysz serię ${words} słów. To jest Twoje unikalna i prywatna fraza seed i jest to JEDYNY sposób na odzyskanie portfela w przypadku utraty lub awarii telefonu. Twoim obowiązkiem jest zapisanie go i przechowywanie w bezpiecznym miejscu (np. na kartce w SEJFIE).", + "pre_seed_button_text" : "Rozumiem. Pokaż mi moją fraze seed", - "xmr_to_error" : "Pomyłka XMR.TO", - "xmr_to_error_description" : "Nieprawidłowa kwota. Maksymalny limit 8 cyfr po przecinku", + "xmr_to_error" : "Błąd XMR.TO", + "xmr_to_error_description" : "Nieprawidłowa kwota. Maksymalny limit to 8 cyfr po przecinku", "provider_error" : "${provider} pomyłka", "use_ssl" : "Użyj SSL", - "trusted" : "zaufany", + "trusted" : "Zaufany", "color_theme" : "Motyw kolorystyczny", - "light_theme" : "Lekki", - "bright_theme" : "Jasny", + "light_theme" : "Jasny", + "bright_theme" : "Biały", "dark_theme" : "Ciemny", "enter_your_note" : "Wpisz notatkę…", "note_optional" : "Notatka (opcjonalnie)", "note_tap_to_change" : "Notatka (dotknij, aby zmienić)", - "view_in_block_explorer" : "View in Block Explorer", - "view_transaction_on" : "View Transaction on ", + "view_in_block_explorer" : "Zobacz w eksploratorze bloków", + "view_transaction_on" : "Zobacz transakcje na ", "transaction_key" : "Klucz transakcji", "confirmations" : "Potwierdzenia", "recipient_address" : "Adres odbiorcy", @@ -456,27 +456,27 @@ "destination_tag" : "Tag docelowy:", "memo" : "Notatka:", - "backup" : "Kopię zapasową", + "backup" : "Kopia zapasowa", "change_password" : "Zmień hasło", - "backup_password" : "Hasło zapasowe", - "write_down_backup_password" : "Zapisz swoje hasło zapasowe, które jest używane do importowania plików kopii zapasowych.", + "backup_password" : "Hasło kpoii zapasowej", + "write_down_backup_password" : "Zapisz swoje hasło kopii zapasowej, które jest używane do importowania plików kopii zapasowych.", "export_backup" : "Eksportuj kopię zapasową", - "save_backup_password" : "Upewnij się, że zapisałeś swoje zapasowe hasło. Bez tego nie będziesz mógł importować plików kopii zapasowej.", + "save_backup_password" : "Upewnij się, że zapisałeś swoje hasło kopii zapasowej. Bez tego nie będziesz mógł zaimportować pliku kopii zapasowej.", "backup_file" : "Plik kopii zapasowej", "edit_backup_password" : "Edytuj hasło kopii zapasowej", - "save_backup_password_alert" : "Zapisz hasło zapasowe", - "change_backup_password_alert" : "Twoje poprzednie pliki kopii zapasowej nie będą dostępne do zaimportowania z nowym hasłem kopii zapasowej. Nowe hasło zapasowe będzie używane tylko dla nowych plików kopii zapasowych. Czy na pewno chcesz zmienić hasło zapasowe?", + "save_backup_password_alert" : "Zapisz hasło kopii zapasowej", + "change_backup_password_alert" : "Twoje poprzednie pliki kopii zapasowej nie będą dostępne do zaimportowania z nowym hasłem kopii zapasowej. Nowe hasło kopii zapasowej będzie używane tylko dla nowych plików kopii zapasowych. Czy na pewno chcesz zmienić hasło zapasowe?", - "enter_backup_password" : "Wprowadź tutaj hasło zapasowe", + "enter_backup_password" : "Wprowadź tutaj hasło kopii zapasowej", "select_backup_file" : "Wybierz plik kopii zapasowej", - "import" : "Import", - "please_select_backup_file" : "Wybierz plik kopii zapasowej i wprowadź hasło zapasowe.", + "import" : "Zaimportuj", + "please_select_backup_file" : "Wybierz plik kopii zapasowej i wprowadź hasło.", "fixed_rate" : "Stała stawka", - "fixed_rate_alert" : "Będziesz mógł wprowadzić kwotę otrzymaną, gdy zaznaczony jest tryb stałej stawki. Czy chcesz przejść do trybu stałej stawki?", + "fixed_rate_alert" : "Będziesz mógł wprowadzić kwotę do otrzymania, gdy wybrany bedzie tryb stałego przeliczenia. Czy chcesz przejść do trybu stałej stawki?", - "xlm_extra_info" : "Nie zapomnij podać identyfikatora notatki podczas wysyłania transakcji XLM do wymiany", + "xlm_extra_info" : "Nie zapomnij podać dodatkowego identyfikatora (memo) podczas wysyłania transakcji XLM do wymiany", "xrp_extra_info" : "Nie zapomnij podać tagu docelowego podczas wysyłania transakcji XRP do wymiany", "exchange_incorrect_current_wallet_for_xmr" : "Jeśli chcesz wymienić XMR z salda Cake Wallet Monero, najpierw przełącz się na portfel Monero.", @@ -484,12 +484,12 @@ "unconfirmed" : "Niepotwierdzony", "displayable" : "Wyświetlane", - "submit_request" : "złożyć wniosek", + "submit_request" : "Złóż wniosek", - "buy_alert_content" : "Obecnie obsługujemy tylko zakup Bitcoin i Litecoin. Aby kupić Bitcoin lub Litecoin, utwórz lub przełącz się na swój portfel Bitcoin lub Litecoin.", + "buy_alert_content" : "Obecnie obsługujemy tylko zakup Bitcoina i Litecoina. Aby kupić Bitcoin lub Litecoin, utwórz lub przełącz się na swój portfel Bitcoin lub Litecoin.", "sell_alert_content": "Obecnie obsługujemy tylko sprzedaż Bitcoina. Aby sprzedać Bitcoin, utwórz lub przełącz się na swój portfel Bitcoin.", - "outdated_electrum_wallet_description" : "Nowe portfele Bitcoin utworzone w Cake mają teraz ziarno składające się z 24 słów. Konieczne jest utworzenie nowego portfela Bitcoin i przeniesienie wszystkich środków do nowego portfela na 24 słowa oraz zaprzestanie korzystania z portfeli z zalążkiem na 12 słów. Zrób to natychmiast, aby zabezpieczyć swoje fundusze.", + "outdated_electrum_wallet_description" : "Nowe portfele Bitcoin utworzone w Cake mają teraz fraze seed składające się z 24 słów. Konieczne jest utworzenie nowego portfela Bitcoin i przeniesienie wszystkich środków do nowego portfela na 24 słowa oraz zaprzestanie korzystania z portfeli z frazą seed na 12 słów. Zrób to natychmiast, aby zabezpieczyć swoje fundusze.", "understand" : "Rozumiem", "apk_update" : "Aktualizacja APK", @@ -498,19 +498,19 @@ "buy_with" : "Kup za pomocą", "moonpay_alert_text" : "Wartość kwoty musi być większa lub równa ${minAmount} ${fiatCurrency}", - "outdated_electrum_wallet_receive_warning": "Jeśli ten portfel ma 12-wyrazowy seed i został utworzony w Cake, NIE Wpłacaj Bitcoina do tego portfela. Wszelkie BTC przeniesione do tego portfela mogą zostać utracone. Utwórz nowy portfel z 24 słowami (dotknij menu w prawym górnym rogu, wybierz Portfele, wybierz Utwórz nowy portfel, a następnie Bitcoin) i NATYCHMIAST przenieś tam swoje BTC. Nowe (24 słowa) portfele BTC firmy Cake są bezpieczne", + "outdated_electrum_wallet_receive_warning": "Jeśli ten portfel ma 12-wyrazowy seed i został utworzony w Cake, NIE Wpłacaj Bitcoina do tego portfela. Wszelkie BTC przeniesione do tego portfela mogą zostać utracone. Utwórz nowy portfel z 24 słowami (dotknij menu w prawym górnym rogu, wybierz Portfele, wybierz Utwórz nowy portfel, a następnie Bitcoin) i NATYCHMIAST przenieś tam swoje BTC. Nowe (24 słowa) portfele BTC Cake Wallet są bezpieczne", "do_not_show_me": "Nie pokazuj mi tego ponownie", "unspent_coins_title" : "Niewydane monety", "unspent_coins_details_title" : "Szczegóły niewydanych monet", - "freeze" : "Zamrażać", - "frozen" : "Mrożony", + "freeze" : "Zamróź", + "frozen" : "Zamrożone", "coin_control" : "Kontrola monet (opcjonalnie)", "address_detected" : "Wykryto adres", - "address_from_domain" : "Ten adres jest od ${domain} na Unstoppable Domains", + "address_from_domain" : "Ten adres to ${domain} na Unstoppable Domains", - "add_receiver" : "Dodaj kolejny odbiornik (opcjonalnie)", + "add_receiver" : "Dodaj kolejnego odbiorcę (opcjonalnie)", "manage_yats" : "Zarządzaj Yats", "yat_alert_title" : "Łatwiejsze wysyłanie i odbieranie kryptowalut dzięki Yat", @@ -521,21 +521,21 @@ "yat" : "Yat", "connect_yats": "Połącz Yats", "address_from_yat" : "Ten adres jest od ${emoji} na Yat", - "yat_error" : "Pomyłka Yata", + "yat_error" : "Błąd Yat", "yat_error_content" : "Brak adresów powiązanych z tym Yat. Wypróbuj inny Yat", "choose_address" : "\n\nWybierz adres:", - "yat_popup_title" : "Twój adres portfela może być emojified.", + "yat_popup_title" : "Twój adres portfela może być zemotkowany.", "yat_popup_content" : "Możesz teraz wysyłać i odbierać krypto w Cake Wallet za pomocą swojego Yat – krótkiej nazwy użytkownika opartej na emotikonach. Zarządzaj Yats w dowolnym momencie na ekranie ustawień", - "second_intro_title" : "Jeden adres emoji, aby rządzić nimi wszystkimi", + "second_intro_title" : "Jeden adres emoji, aby zarzadzać wszystkimi walutami", "second_intro_content" : "Twój Yat to jeden unikalny adres emoji, który zastępuje wszystkie Twoje długie adresy szesnastkowe dla wszystkich Twoich walut.", "third_intro_title" : "Yat ładnie bawi się z innymi", "third_intro_content" : "Yats mieszkają również poza Cake Wallet. Każdy adres portfela na ziemi można zastąpić Yat!", - "learn_more" : "Ucz się więcej", + "learn_more" : "Dowiedz się więcej", "search": "Szukaj", "search_language": "Wyszukaj język", "search_currency": "Wyszukaj walutę", "new_template" : "Nowy szablon", - "electrum_address_disclaimer": "Za każdym razem, gdy korzystasz z jednego z nich, generujemy nowe adresy, ale poprzednie adresy nadal działają", + "electrum_address_disclaimer": "Za każdym razem, gdy wykorzystasz adres, dla wiekszej prywatności generujemy nowy, ale poprzednie adresy nadal działają, i moga odbierać środki", "wallet_name_exists": "Portfel o tej nazwie już istnieje", "market_place": "Rynek", "cake_pay_title": "Karty podarunkowe Cake Pay", @@ -553,16 +553,16 @@ "reset_password": "Zresetuj hasło", "gift_cards": "Karty podarunkowe", "setup_your_debit_card": "Skonfiguruj swoją kartę debetową", - "no_id_required": "Nie wymagamy ID. Doładuj i wydawaj gdziekolwiek", - "how_to_use_card": "Jak korzystać z tej karty", + "no_id_required": "Nie wymagamy Dowodu. Doładuj i wydawaj gdziekolwiek", + "how_to_use_card": "Jak korzystać z tej karty?", "purchase_gift_card": "Kup kartę podarunkową", "verification": "Weryfikacja", - "fill_code": "Proszę wpisać kod weryfikacyjny podany w wiadomości e-mail", - "dont_get_code": "Nie odbierasz kodu?", + "fill_code": "Proszę wpisać kod weryfikacyjny który otrzymałeś w wiadomości e-mail", + "dont_get_code": "Nie dostałeś kodu?", "resend_code": "Wyślij go ponownie", "debit_card": "Karta debetowa", "cakepay_prepaid_card": "Przedpłacona karta debetowa CakePay", - "no_id_needed": "Nie potrzeba ID!", + "no_id_needed": "Nie potrzeba Dowodu!", "frequently_asked_questions": "Często zadawane pytania", "debit_card_terms": "Przechowywanie i używanie numeru karty płatniczej (oraz danych uwierzytelniających odpowiadających numerowi karty płatniczej) w tym portfelu cyfrowym podlega Warunkom odpowiedniej umowy posiadacza karty z wydawcą karty płatniczej, zgodnie z obowiązującym od od czasu do czasu.", "please_reference_document": "Proszę odwołać się do poniższych dokumentów, aby uzyskać więcej informacji.", @@ -626,7 +626,7 @@ "mark_as_redeemed": "Oznacz jako wykorzystany", "more_options": "Więcej opcji", "awaiting_payment_confirmation": "Oczekiwanie na potwierdzenie płatności", - "transaction_sent_notice": "Jeśli ekran nie pojawi się po 1 minucie, sprawdź eksplorator bloków i swój e-mail.", + "transaction_sent_notice": "Jeśli ekran nie zmieni się po 1 minucie, sprawdź eksplorator bloków i swój e-mail.", "agree": "Zgadzam się", "in_store": "W Sklepie", "generating_gift_card": "Generowanie karty podarunkowej", @@ -637,7 +637,7 @@ "open_gift_card": "Otwórz kartę podarunkową", "contact_support": "Skontaktuj się z pomocą techniczną", "gift_cards_unavailable": "Karty podarunkowe można obecnie kupić tylko za pośrednictwem Monero, Bitcoin i Litecoin", - "introducing_cake_pay": "Przedstawiamy Ciasto Pay!", + "introducing_cake_pay": "Przedstawiamy Cake Pay!", "cake_pay_learn_more": "Kupuj i wykorzystuj karty podarunkowe od razu w aplikacji!\nPrzesuń od lewej do prawej, aby dowiedzieć się więcej.", "automatic": "Automatyczny", "fixed_pair_not_supported": "Ta stała para nie jest obsługiwana na wybranych giełdach", @@ -654,7 +654,7 @@ "low_fee_alert": "Obecnie korzystasz z niskiego priorytetu opłaty sieciowej. Może to spowodować długie oczekiwanie, różne stawki lub anulowane transakcje. Zalecamy ustawienie wyższej opłaty, aby zapewnić lepsze wrażenia.", "ignor": "Ignorować", "use_suggested": "Użyj sugerowane", - "do_not_share_warning_text" : "Nie udostępniaj ich nikomu innemu, w tym pomocy.\n\nTwoje środki mogą i zostaną skradzione!", + "do_not_share_warning_text" : "NIE udostępniaj ich nikomu innemu, w tym pomocy technicznej.\n\nTwoje środki wtedy prawdopodobnie zostaną skradzione!", "help": "pomoc", "all_transactions": "Wszystkie transakcje", "all_trades": "Wszystkie operacje", @@ -672,12 +672,12 @@ "advanced_privacy_settings": "Zaawansowane ustawienia prywatności", "settings_can_be_changed_later": "Te ustawienia można później zmienić w ustawieniach aplikacji", "add_custom_node": "Dodaj nowy węzeł niestandardowy", - "disable_fiat": "Wyłącz fiat", - "fiat_api": "API Fiata", + "disable_fiat": "Wyłącz waluty FIAT", + "fiat_api": "API Walut FIAT", "disabled": "Wyłączone", - "enabled": "Włączony", - "tor_only": "Tylko Tor", - "unmatched_currencies": "Waluta Twojego obecnego portfela nie odpowiada walucie zeskanowanego kodu QR", + "enabled": "Włączone", + "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" } From f1688703f243e850bd2d98e09f0a6458dfeaefa4 Mon Sep 17 00:00:00 2001 From: Telsbat <115116835+Telsbat@users.noreply.github.com> Date: Mon, 9 Jan 2023 17:08:17 +0100 Subject: [PATCH 069/173] Update strings_pl.arb --- res/values/strings_pl.arb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index 104e6eb90..dd200cc25 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -428,7 +428,7 @@ "exchange_sync_alert_content" : "Poczekaj, aż portfel zostanie zsynchronizowany", "pre_seed_title" : "WAŻNY", - "pre_seed_description" : "Na następnej stronie zobaczysz serię ${words} słów. To jest Twoje unikalna i prywatna fraza seed i jest to JEDYNY sposób na odzyskanie portfela w przypadku utraty lub awarii telefonu. Twoim obowiązkiem jest zapisanie go i przechowywanie w bezpiecznym miejscu (np. na kartce w SEJFIE).", + "pre_seed_description" : "Na następnej stronie zobaczysz serię ${words} słów. To jest Twoja unikalna i prywatna fraza seed i jest to JEDYNY sposób na odzyskanie portfela w przypadku utraty lub awarii telefonu. Twoim obowiązkiem jest zapisanie go i przechowywanie w bezpiecznym miejscu (np. na kartce w SEJFIE).", "pre_seed_button_text" : "Rozumiem. Pokaż mi moją fraze seed", "xmr_to_error" : "Błąd XMR.TO", From a373253fd294320847bd3ef9805564ebd44e92bc Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Mon, 9 Jan 2023 18:16:50 +0200 Subject: [PATCH 070/173] 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 42948a6d122e093072ee137f63860383a136abc5 Mon Sep 17 00:00:00 2001 From: Justin Ehrenhofer Date: Mon, 9 Jan 2023 10:47:14 -0600 Subject: [PATCH 071/173] Minor: license change --- LICENSE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE.md b/LICENSE.md index 4f80e683b..4268b9710 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2022 Cake Labs LLC +Copyright (c) 2018-2023 Cake Labs LLC Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From 8d68ccfc7b0a3a7491d3665da798c9b41c21e4a9 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Mon, 9 Jan 2023 20:03:26 +0200 Subject: [PATCH 072/173] 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 073/173] 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 074/173] 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 075/173] 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 076/173] 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 077/173] 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 078/173] 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 079/173] 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 080/173] 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 081/173] 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 082/173] 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 083/173] 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 084/173] 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 085/173] 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 086/173] 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 087/173] 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 088/173] 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 089/173] 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 090/173] 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 091/173] 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 092/173] [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 093/173] 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 094/173] 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 095/173] 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 096/173] 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 097/173] 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 098/173] 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 099/173] 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 100/173] 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 101/173] [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 102/173] 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 103/173] 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 104/173] [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 105/173] 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 106/173] 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 107/173] 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 108/173] 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 109/173] [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 110/173] 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 111/173] 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 112/173] 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 113/173] 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 114/173] 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 115/173] 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 116/173] [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 117/173] [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 118/173] 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 119/173] 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 120/173] 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 121/173] 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 122/173] 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 123/173] 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 124/173] 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 125/173] 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 126/173] [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 127/173] 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 128/173] 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 129/173] 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 4353e778bb7b949c5ae23e825dd558b30de2c682 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Sat, 28 Jan 2023 15:47:44 +0200 Subject: [PATCH 130/173] 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 131/173] 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 132/173] - 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 133/173] 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 134/173] 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 135/173] 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 136/173] 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 137/173] 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 138/173] 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 139/173] 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 7425beb1ed85a13206119aa000c9d41f09f38b87 Mon Sep 17 00:00:00 2001 From: Serhii Date: Thu, 2 Feb 2023 13:00:44 +0200 Subject: [PATCH 140/173] 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 141/173] 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 142/173] 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 143/173] 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 144/173] - 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 c45a98848149c51ea423b083636d626c4a0f4a5f Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Mon, 6 Feb 2023 18:33:12 +0200 Subject: [PATCH 145/173] - 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 146/173] - 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 147/173] 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 148/173] 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 149/173] 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 a8025ffbec13f05009c5f688464544a72223fdb5 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Tue, 7 Feb 2023 16:53:57 +0200 Subject: [PATCH 150/173] 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 bf407bedecc11736865d3b0ea3cc69a07ddd38d3 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Tue, 7 Feb 2023 18:03:31 +0200 Subject: [PATCH 151/173] 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 74b571fc77561c74d592084905db54930cda9e5a Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Tue, 7 Feb 2023 22:11:25 +0200 Subject: [PATCH 152/173] 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 153/173] - 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 154/173] 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 155/173] 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 156/173] 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 157/173] 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 158/173] 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 159/173] 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 160/173] 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 161/173] 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 162/173] - 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 163/173] 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 164/173] 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 165/173] 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 166/173] 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 25228eb633485acac3179f66463c87c899009f9b Mon Sep 17 00:00:00 2001 From: Serhii Date: Fri, 10 Feb 2023 00:01:58 +0200 Subject: [PATCH 167/173] 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 168/173] 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 169/173] 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 a3f332342f6fcc2ab266e08bbfd08f3273997e9e Mon Sep 17 00:00:00 2001 From: Serhii Date: Mon, 13 Feb 2023 18:46:53 +0200 Subject: [PATCH 170/173] 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 7235d8c9c23872de7706cacd3d39bb9215edbc34 Mon Sep 17 00:00:00 2001 From: Serhii Date: Tue, 14 Feb 2023 00:23:57 +0200 Subject: [PATCH 171/173] 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 172/173] 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 5abbc8f4ddaab9a58ed79327441aecb710f3c538 Mon Sep 17 00:00:00 2001 From: OmarHatem Date: Wed, 15 Feb 2023 23:16:21 +0200 Subject: [PATCH 173/173] 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();