This commit is contained in:
Matthew Fosse 2024-07-22 10:08:19 -07:00
parent a51e902e88
commit 8e6901118a
43 changed files with 308 additions and 50 deletions

BIN
assets/images/mweb_logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

View file

@ -52,6 +52,7 @@ abstract class LitecoinWalletBase extends ElectrumWallet with Store {
Map<String, int>? initialRegularAddressIndex,
Map<String, int>? initialChangeAddressIndex,
int? initialMwebHeight,
bool? alwaysScan,
}) : mwebHd =
bitcoin.HDWallet.fromSeed(seedBytes, network: litecoinNetwork).derivePath("m/1000'"),
super(
@ -65,6 +66,7 @@ abstract class LitecoinWalletBase extends ElectrumWallet with Store {
seedBytes: seedBytes,
currency: CryptoCurrency.ltc,
) {
mwebEnabled = alwaysScan ?? false;
walletAddresses = LitecoinWalletAddresses(
walletInfo,
initialAddresses: initialAddresses,
@ -89,7 +91,7 @@ abstract class LitecoinWalletBase extends ElectrumWallet with Store {
StreamSubscription<Utxo>? _utxoStream;
int mwebUtxosHeight = 0;
late RpcClient _stub;
late bool mwebEnabled = true;
late bool mwebEnabled;
static Future<LitecoinWallet> create(
{required String mnemonic,
@ -135,6 +137,7 @@ abstract class LitecoinWalletBase extends ElectrumWallet with Store {
required WalletInfo walletInfo,
required Box<UnspentCoinsInfo> unspentCoinsInfo,
required String password,
required bool alwaysScan,
}) async {
final snp =
await ElectrumWalletSnapshot.load(name, walletInfo.type, password, LitecoinNetwork.mainnet);
@ -149,6 +152,7 @@ abstract class LitecoinWalletBase extends ElectrumWallet with Store {
initialRegularAddressIndex: snp.regularAddressIndex,
initialChangeAddressIndex: snp.changeAddressIndex,
addressPageType: snp.addressPageType,
alwaysScan: alwaysScan,
);
}
@ -757,5 +761,4 @@ abstract class LitecoinWalletBase extends ElectrumWallet with Store {
mwebEnabled = enabled;
}
bool get isMwebEnabled => mwebEnabled;
}

View file

@ -19,10 +19,11 @@ class LitecoinWalletService extends WalletService<
BitcoinRestoreWalletFromSeedCredentials,
BitcoinRestoreWalletFromWIFCredentials,
BitcoinNewWalletCredentials> {
LitecoinWalletService(this.walletInfoSource, this.unspentCoinsInfoSource);
LitecoinWalletService(this.walletInfoSource, this.unspentCoinsInfoSource, this.alwaysScan);
final Box<WalletInfo> walletInfoSource;
final Box<UnspentCoinsInfo> unspentCoinsInfoSource;
final bool alwaysScan;
@override
WalletType getType() => WalletType.litecoin;
@ -30,11 +31,12 @@ class LitecoinWalletService extends WalletService<
@override
Future<LitecoinWallet> create(BitcoinNewWalletCredentials credentials, {bool? isTestnet}) async {
final wallet = await LitecoinWalletBase.create(
mnemonic: await generateElectrumMnemonic(),
password: credentials.password!,
passphrase: credentials.passphrase,
walletInfo: credentials.walletInfo!,
unspentCoinsInfo: unspentCoinsInfoSource);
mnemonic: await generateElectrumMnemonic(),
password: credentials.password!,
passphrase: credentials.passphrase,
walletInfo: credentials.walletInfo!,
unspentCoinsInfo: unspentCoinsInfoSource,
);
await wallet.save();
await wallet.init();
@ -52,20 +54,24 @@ class LitecoinWalletService extends WalletService<
try {
final wallet = await LitecoinWalletBase.open(
password: password,
name: name,
walletInfo: walletInfo,
unspentCoinsInfo: unspentCoinsInfoSource);
password: password,
name: name,
walletInfo: walletInfo,
unspentCoinsInfo: unspentCoinsInfoSource,
alwaysScan: alwaysScan,
);
await wallet.init();
saveBackup(name);
return wallet;
} catch (_) {
await restoreWalletFilesFromBackup(name);
final wallet = await LitecoinWalletBase.open(
password: password,
name: name,
walletInfo: walletInfo,
unspentCoinsInfo: unspentCoinsInfoSource);
password: password,
name: name,
walletInfo: walletInfo,
unspentCoinsInfo: unspentCoinsInfoSource,
alwaysScan: alwaysScan,
);
await wallet.init();
return wallet;
}
@ -93,10 +99,12 @@ class LitecoinWalletService extends WalletService<
final currentWalletInfo = walletInfoSource.values
.firstWhereOrNull((info) => info.id == WalletBase.idFor(currentName, getType()))!;
final currentWallet = await LitecoinWalletBase.open(
password: password,
name: currentName,
walletInfo: currentWalletInfo,
unspentCoinsInfo: unspentCoinsInfoSource);
password: password,
name: currentName,
walletInfo: currentWalletInfo,
unspentCoinsInfo: unspentCoinsInfoSource,
alwaysScan: alwaysScan,
);
await currentWallet.renameWalletFiles(newName);
await saveBackup(newName);

View file

@ -208,8 +208,8 @@ class CWBitcoin extends Bitcoin {
}
WalletService createLitecoinWalletService(
Box<WalletInfo> walletInfoSource, Box<UnspentCoinsInfo> unspentCoinSource) {
return LitecoinWalletService(walletInfoSource, unspentCoinSource);
Box<WalletInfo> walletInfoSource, Box<UnspentCoinsInfo> unspentCoinSource, bool alwaysScan) {
return LitecoinWalletService(walletInfoSource, unspentCoinSource, alwaysScan);
}
@override
@ -592,6 +592,6 @@ class CWBitcoin extends Bitcoin {
@override
bool getMwebEnabled(Object wallet) {
final litecoinWallet = wallet as LitecoinWallet;
return litecoinWallet.isMwebEnabled;
return litecoinWallet.mwebEnabled;
}
}

View file

@ -93,6 +93,7 @@ import 'package:cake_wallet/src/screens/settings/desktop_settings/desktop_settin
import 'package:cake_wallet/src/screens/settings/display_settings_page.dart';
import 'package:cake_wallet/src/screens/settings/domain_lookups_page.dart';
import 'package:cake_wallet/src/screens/settings/manage_nodes_page.dart';
import 'package:cake_wallet/src/screens/settings/mweb_settings.dart';
import 'package:cake_wallet/src/screens/settings/other_settings_page.dart';
import 'package:cake_wallet/src/screens/settings/privacy_page.dart';
import 'package:cake_wallet/src/screens/settings/security_backup_page.dart';
@ -139,6 +140,7 @@ import 'package:cake_wallet/view_model/seed_type_view_model.dart';
import 'package:cake_wallet/view_model/set_up_2fa_viewmodel.dart';
import 'package:cake_wallet/view_model/restore/restore_from_qr_vm.dart';
import 'package:cake_wallet/view_model/settings/display_settings_view_model.dart';
import 'package:cake_wallet/view_model/settings/mweb_settings_view_model.dart';
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';
@ -559,7 +561,8 @@ Future<void> setup({
getIt.registerFactory<Modify2FAPage>(
() => Modify2FAPage(setup2FAViewModel: getIt.get<Setup2FAViewModel>()));
getIt.registerFactory<DesktopSettingsPage>(() => DesktopSettingsPage(getIt.get<DashboardViewModel>()));
getIt.registerFactory<DesktopSettingsPage>(
() => DesktopSettingsPage(getIt.get<DashboardViewModel>()));
getIt.registerFactoryParam<ReceiveOptionViewModel, ReceivePageOption?, void>(
(pageOption, _) => ReceiveOptionViewModel(getIt.get<AppStore>().wallet!, pageOption));
@ -678,7 +681,9 @@ Future<void> setup({
getIt.registerFactory<MoneroAccountListViewModel>(() {
final wallet = getIt.get<AppStore>().wallet!;
if (wallet.type == WalletType.monero || wallet.type == WalletType.wownero || wallet.type == WalletType.haven) {
if (wallet.type == WalletType.monero ||
wallet.type == WalletType.wownero ||
wallet.type == WalletType.haven) {
return MoneroAccountListViewModel(wallet);
}
throw Exception(
@ -738,6 +743,9 @@ Future<void> setup({
getIt.registerFactory(() =>
SilentPaymentsSettingsViewModel(getIt.get<SettingsStore>(), getIt.get<AppStore>().wallet!));
getIt.registerFactory(
() => MwebSettingsViewModel(getIt.get<SettingsStore>(), getIt.get<AppStore>().wallet!));
getIt.registerFactory(() {
return PrivacySettingsViewModel(getIt.get<SettingsStore>(), getIt.get<AppStore>().wallet!);
});
@ -802,6 +810,8 @@ Future<void> setup({
getIt.registerFactory(
() => SilentPaymentsSettingsPage(getIt.get<SilentPaymentsSettingsViewModel>()));
getIt.registerFactory(() => MwebSettingsPage(getIt.get<MwebSettingsViewModel>()));
getIt.registerFactory(() => OtherSettingsPage(getIt.get<OtherSettingsViewModel>()));
getIt.registerFactory(() => NanoChangeRepPage(
@ -895,7 +905,11 @@ Future<void> setup({
getIt.get<SettingsStore>().silentPaymentsAlwaysScan,
);
case WalletType.litecoin:
return bitcoin!.createLitecoinWalletService(_walletInfoSource, _unspentCoinsInfoSource);
return bitcoin!.createLitecoinWalletService(
_walletInfoSource,
_unspentCoinsInfoSource,
getIt.get<SettingsStore>().mwebAlwaysScan,
);
case WalletType.ethereum:
return ethereum!.createEthereumWalletService(_walletInfoSource);
case WalletType.bitcoinCash:
@ -1089,7 +1103,8 @@ Future<void> setup({
getIt.registerFactory<CakePayService>(
() => CakePayService(getIt.get<SecureStorage>(), getIt.get<CakePayApi>()));
getIt.registerFactory(() => CakePayCardsListViewModel(cakePayService: getIt.get<CakePayService>()));
getIt.registerFactory(
() => CakePayCardsListViewModel(cakePayService: getIt.get<CakePayService>()));
getIt.registerFactory(() => CakePayAuthViewModel(cakePayService: getIt.get<CakePayService>()));
@ -1121,12 +1136,12 @@ Future<void> setup({
getIt.registerFactoryParam<CakePayBuyCardPage, List<dynamic>, void>((List<dynamic> args, _) {
final vendor = args.first as CakePayVendor;
return CakePayBuyCardPage(getIt.get<CakePayBuyCardViewModel>(param1: vendor),
getIt.get<CakePayService>());
return CakePayBuyCardPage(
getIt.get<CakePayBuyCardViewModel>(param1: vendor), getIt.get<CakePayService>());
});
getIt.registerFactoryParam<CakePayBuyCardDetailPage, List<dynamic>, void>(
(List<dynamic> args, _) {
getIt
.registerFactoryParam<CakePayBuyCardDetailPage, List<dynamic>, void>((List<dynamic> args, _) {
final paymentCredential = args.first as PaymentCredential;
final card = args[1] as CakePayCard;
return CakePayBuyCardDetailPage(

View file

@ -50,6 +50,7 @@ class PreferencesKey {
static const silentPaymentsAlwaysScan = 'silentPaymentsAlwaysScan';
static const mwebCardDisplay = 'mwebCardDisplay';
static const mwebEnabled = 'mwebEnabled';
static const mwebAlwaysScan = 'mwebAlwaysScan';
static const shouldShowReceiveWarning = 'should_show_receive_warning';
static const shouldShowYatPopup = 'should_show_yat_popup';
static const shouldShowRepWarning = 'should_show_rep_warning';

View file

@ -63,6 +63,7 @@ import 'package:cake_wallet/src/screens/settings/desktop_settings/desktop_settin
import 'package:cake_wallet/src/screens/settings/display_settings_page.dart';
import 'package:cake_wallet/src/screens/settings/domain_lookups_page.dart';
import 'package:cake_wallet/src/screens/settings/manage_nodes_page.dart';
import 'package:cake_wallet/src/screens/settings/mweb_settings.dart';
import 'package:cake_wallet/src/screens/settings/other_settings_page.dart';
import 'package:cake_wallet/src/screens/settings/privacy_page.dart';
import 'package:cake_wallet/src/screens/settings/security_backup_page.dart';
@ -363,6 +364,10 @@ Route<dynamic> createRoute(RouteSettings settings) {
return CupertinoPageRoute<void>(
fullscreenDialog: true, builder: (_) => getIt.get<SilentPaymentsSettingsPage>());
case Routes.mwebSettings:
return CupertinoPageRoute<void>(
fullscreenDialog: true, builder: (_) => getIt.get<MwebSettingsPage>());
case Routes.connectionSync:
return CupertinoPageRoute<void>(
fullscreenDialog: true, builder: (_) => getIt.get<ConnectionSyncPage>());

View file

@ -73,6 +73,7 @@ class Routes {
static const cakePayAccountPage = '/cake_pay_account_page';
static const webViewPage = '/web_view_page';
static const silentPaymentsSettings = '/silent_payments_settings';
static const mwebSettings = '/mweb_settings';
static const connectionSync = '/connection_sync_page';
static const securityBackupPage = '/security_and_backup_page';
static const privacyPage = '/privacy_page';

View file

@ -333,7 +333,7 @@ class CryptoBalanceWidget extends StatelessWidget {
behavior: HitTestBehavior.opaque,
onTap: () => launchUrl(
Uri.parse(
"https://guides.cakewallet.com/docs/cryptos/bitcoin/#silent-payments"),
"https://guides.cakewallet.com/docs/cryptos/litecoin/#mweb"),
mode: LaunchMode.externalApplication,
),
child: Row(
@ -373,8 +373,8 @@ class CryptoBalanceWidget extends StatelessWidget {
],
),
onTap: () => _toggleMweb(context),
icon: Icon(
Icons.lock,
icon: ImageIcon(
AssetImage('assets/images/mweb_logo.png'),
color:
Theme.of(context).extension<DashboardPageTheme>()!.pageTitleTextColor,
size: 50,
@ -422,11 +422,8 @@ class CryptoBalanceWidget extends StatelessWidget {
return dashboardViewModel.setSilentPaymentsScanning(newValue);
}
Future<void> _toggleMweb(BuildContext context) async {
final isMwebEnabled = dashboardViewModel.mwebEnabled;
final newValue = !isMwebEnabled;
return dashboardViewModel.setMwebEnabled(newValue);
return dashboardViewModel.setMwebEnabled(!dashboardViewModel.mwebEnabled);
}
}

View file

@ -188,6 +188,11 @@ class MenuWidgetState extends State<MenuWidget> {
return Container();
}
if (!widget.dashboardViewModel.hasMweb &&
item.name(context) == S.current.litecoin_mweb_settings) {
return const SizedBox();
}
final isLastTile = index == itemCount - 1;
return SettingActionButton(

View file

@ -60,6 +60,11 @@ class _DesktopSettingsPageState extends State<DesktopSettingsPage> {
return Container();
}
if (!widget.dashboardViewModel.hasMweb &&
item.name(context) == S.of(context).litecoin_mweb_settings) {
return const SizedBox();
}
final isLastTile = index == itemCount - 1;
return SettingActionButton(
isLastTile: isLastTile,

View file

@ -0,0 +1,51 @@
import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/routes.dart';
import 'package:cake_wallet/src/screens/base_page.dart';
import 'package:cake_wallet/src/screens/settings/widgets/settings_cell_with_arrow.dart';
import 'package:cake_wallet/src/screens/settings/widgets/settings_switcher_cell.dart';
import 'package:cake_wallet/view_model/settings/mweb_settings_view_model.dart';
import 'package:cake_wallet/view_model/settings/silent_payments_settings_view_model.dart';
import 'package:flutter/material.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
class MwebSettingsPage extends BasePage {
MwebSettingsPage(this._mwebSettingsViewModel);
@override
String get title => S.current.litecoin_mweb_settings;
final MwebSettingsViewModel _mwebSettingsViewModel;
@override
Widget body(BuildContext context) {
return SingleChildScrollView(
child: Observer(builder: (_) {
return Container(
padding: EdgeInsets.only(top: 10),
child: Column(
children: [
SettingsSwitcherCell(
title: S.current.litecoin_mweb_display_card,
value: _mwebSettingsViewModel.mwebCardDisplay,
onValueChange: (_, bool value) {
_mwebSettingsViewModel.setMwebCardDisplay(value);
},
),
SettingsSwitcherCell(
title: S.current.litecoin_mweb_always_scan,
value: _mwebSettingsViewModel.mwebAlwaysScan,
onValueChange: (_, bool value) {
_mwebSettingsViewModel.setMwebAlwaysScan(value);
},
),
SettingsCellWithArrow(
title: S.current.litecoin_mweb_scanning,
handler: (BuildContext context) => Navigator.of(context).pushNamed(Routes.rescan),
),
],
),
);
}),
);
}
}

View file

@ -22,7 +22,7 @@ class DashBoardRoundedCardWidget extends StatelessWidget {
final String subTitle;
final Widget? hint;
final SvgPicture? svgPicture;
final Icon? icon;
final Widget? icon;
final double? customBorder;
@override

View file

@ -18,6 +18,7 @@ class SettingActions {
walletSettingAction,
addressBookSettingAction,
silentPaymentsSettingAction,
litecoinMwebSettingAction,
securityBackupSettingAction,
privacySettingAction,
displaySettingAction,
@ -30,6 +31,7 @@ class SettingActions {
walletSettingAction,
addressBookSettingAction,
silentPaymentsSettingAction,
litecoinMwebSettingAction,
securityBackupSettingAction,
privacySettingAction,
displaySettingAction,
@ -46,6 +48,15 @@ class SettingActions {
},
);
static SettingActions litecoinMwebSettingAction = SettingActions._(
name: (context) => S.current.litecoin_mweb_settings,
image: 'assets/images/mweb_logo.png',
onTap: (BuildContext context) {
Navigator.pop(context);
Navigator.of(context).pushNamed(Routes.mwebSettings);
},
);
static SettingActions connectionSettingAction = SettingActions._(
name: (context) => S.of(context).connection_sync,
image: 'assets/images/nodes_menu.png',

View file

@ -110,6 +110,7 @@ abstract class SettingsStoreBase with Store {
required this.customBitcoinFeeRate,
required this.silentPaymentsCardDisplay,
required this.silentPaymentsAlwaysScan,
required this.mwebAlwaysScan,
required this.mwebCardDisplay,
required this.mwebEnabled,
TransactionPriority? initialBitcoinTransactionPriority,
@ -538,6 +539,11 @@ abstract class SettingsStoreBase with Store {
(bool silentPaymentsAlwaysScan) => _sharedPreferences.setBool(
PreferencesKey.silentPaymentsAlwaysScan, silentPaymentsAlwaysScan));
reaction(
(_) => mwebAlwaysScan,
(bool mwebAlwaysScan) =>
_sharedPreferences.setBool(PreferencesKey.mwebAlwaysScan, mwebAlwaysScan));
reaction(
(_) => mwebCardDisplay,
(bool mwebCardDisplay) =>
@ -747,6 +753,9 @@ abstract class SettingsStoreBase with Store {
@observable
bool silentPaymentsAlwaysScan;
@observable
bool mwebAlwaysScan;
@observable
bool mwebCardDisplay;
@ -909,6 +918,8 @@ abstract class SettingsStoreBase with Store {
sharedPreferences.getBool(PreferencesKey.silentPaymentsCardDisplay) ?? true;
final silentPaymentsAlwaysScan =
sharedPreferences.getBool(PreferencesKey.silentPaymentsAlwaysScan) ?? false;
final mwebAlwaysScan =
sharedPreferences.getBool(PreferencesKey.mwebAlwaysScan) ?? false;
final mwebCardDisplay = sharedPreferences.getBool(PreferencesKey.mwebCardDisplay) ?? true;
final mwebEnabled = sharedPreferences.getBool(PreferencesKey.mwebEnabled) ?? false;
@ -1163,6 +1174,7 @@ abstract class SettingsStoreBase with Store {
customBitcoinFeeRate: customBitcoinFeeRate,
silentPaymentsCardDisplay: silentPaymentsCardDisplay,
silentPaymentsAlwaysScan: silentPaymentsAlwaysScan,
mwebAlwaysScan: mwebAlwaysScan,
mwebCardDisplay: mwebCardDisplay,
mwebEnabled: mwebEnabled,
initialMoneroTransactionPriority: moneroTransactionPriority,
@ -1315,6 +1327,7 @@ abstract class SettingsStoreBase with Store {
sharedPreferences.getBool(PreferencesKey.silentPaymentsCardDisplay) ?? true;
silentPaymentsAlwaysScan =
sharedPreferences.getBool(PreferencesKey.silentPaymentsAlwaysScan) ?? false;
mwebAlwaysScan = sharedPreferences.getBool(PreferencesKey.mwebAlwaysScan) ?? false;
mwebCardDisplay = sharedPreferences.getBool(PreferencesKey.mwebCardDisplay) ?? true;
mwebEnabled = sharedPreferences.getBool(PreferencesKey.mwebEnabled) ?? false;
final nodeId = sharedPreferences.getInt(PreferencesKey.currentNodeIdKey);

View file

@ -181,7 +181,8 @@ abstract class DashboardViewModelBase with Store {
final _accountTransactions = _wallet.transactionHistory.transactions.values
.where((tx) =>
wow.wownero!.getTransactionInfoAccountId(tx) == wow.wownero!.getCurrentAccount(wallet).id)
wow.wownero!.getTransactionInfoAccountId(tx) ==
wow.wownero!.getCurrentAccount(wallet).id)
.toList();
final sortedTransactions = [..._accountTransactions];
@ -239,6 +240,10 @@ abstract class DashboardViewModelBase with Store {
silentPaymentsScanningActive = bitcoin!.getScanningActive(wallet);
});
}
if (hasMweb) {
mwebScanningActive = bitcoin!.getMwebEnabled(wallet);
}
}
@observable
@ -364,15 +369,15 @@ abstract class DashboardViewModelBase with Store {
bool get showMwebCard => hasMweb && settingsStore.mwebCardDisplay;
@observable
bool mwebEnabled = false;
bool mwebScanningActive = false;
@action
void setMwebEnabled(bool active) {
mwebEnabled = active;
if (hasMweb) {
bitcoin!.setMwebEnabled(wallet, active);
if (!hasMweb) {
return;
}
bitcoin!.setMwebEnabled(wallet, active);
}
BalanceViewModel balanceViewModel;
@ -552,7 +557,8 @@ abstract class DashboardViewModelBase with Store {
}
if (wallet.type == WalletType.wownero) {
return wow.wownero!.getTransactionInfoAccountId(tx) == wow.wownero!.getCurrentAccount(wallet).id;
return wow.wownero!.getTransactionInfoAccountId(tx) ==
wow.wownero!.getCurrentAccount(wallet).id;
}
return true;
@ -577,8 +583,8 @@ abstract class DashboardViewModelBase with Store {
.getTransactionHistory(wallet)
.transactions
.values
.where(
(tx) => monero!.getTransactionInfoAccountId(tx) == monero!.getCurrentAccount(wallet).id)
.where((tx) =>
monero!.getTransactionInfoAccountId(tx) == monero!.getCurrentAccount(wallet).id)
.toList();
transactions.addAll(_accountTransactions.map((transaction) => TransactionListItem(
@ -590,8 +596,9 @@ abstract class DashboardViewModelBase with Store {
.getTransactionHistory(wallet)
.transactions
.values
.where(
(tx) => wow.wownero!.getTransactionInfoAccountId(tx) == wow.wownero!.getCurrentAccount(wallet).id)
.where((tx) =>
wow.wownero!.getTransactionInfoAccountId(tx) ==
wow.wownero!.getCurrentAccount(wallet).id)
.toList();
transactions.addAll(_accountTransactions.map((transaction) => TransactionListItem(

View file

@ -0,0 +1,32 @@
import 'package:cake_wallet/bitcoin/bitcoin.dart';
import 'package:cake_wallet/store/settings_store.dart';
import 'package:cw_core/wallet_base.dart';
import 'package:mobx/mobx.dart';
part 'mweb_settings_view_model.g.dart';
class MwebSettingsViewModel = MwebSettingsViewModelBase with _$MwebSettingsViewModel;
abstract class MwebSettingsViewModelBase with Store {
MwebSettingsViewModelBase(this._settingsStore, this._wallet);
final SettingsStore _settingsStore;
final WalletBase _wallet;
@computed
bool get mwebCardDisplay => _settingsStore.mwebCardDisplay;
@computed
bool get mwebAlwaysScan => _settingsStore.mwebAlwaysScan;
@action
void setMwebCardDisplay(bool value) {
_settingsStore.mwebCardDisplay = value;
}
@action
void setMwebAlwaysScan(bool value) {
_settingsStore.mwebAlwaysScan = value;
bitcoin!.setMwebEnabled(_wallet, value);
}
}

View file

@ -350,6 +350,10 @@
"light_theme": "فاتح",
"litecoin_enable_mweb_sync": "تمكين MWEB المزامنة",
"litecoin_mweb": "Litecoin mweb",
"litecoin_mweb_always_scan": "اضبط MWEB دائمًا على المسح الضوئي",
"litecoin_mweb_display_card": "عرض بطاقة mweb",
"litecoin_mweb_scanning": "MWEB المسح الضوئي",
"litecoin_mweb_settings": "إعدادات Litecoin MWEB",
"litecoin_what_is_mweb": "ما هو MWEB؟",
"load_more": "تحميل المزيد",
"loading_your_wallet": "يتم تحميل محفظتك",

View file

@ -350,6 +350,10 @@
"light_theme": "Светло",
"litecoin_enable_mweb_sync": "Активиране на MWEB Sync",
"litecoin_mweb": "Litecoin MWeb",
"litecoin_mweb_always_scan": "Задайте MWeb винаги сканиране",
"litecoin_mweb_display_card": "Показване на MWEB карта",
"litecoin_mweb_scanning": "Сканиране на MWEB",
"litecoin_mweb_settings": "Настройки на Litecoin MWeb",
"litecoin_what_is_mweb": "Какво е MWEB?",
"load_more": "Зареди още",
"loading_your_wallet": "Зареждане на портфейл",

View file

@ -350,6 +350,10 @@
"light_theme": "Světlý",
"litecoin_enable_mweb_sync": "Povolit synchronizaci MWeb",
"litecoin_mweb": "Litecoin mweb",
"litecoin_mweb_always_scan": "Nastavit MWeb vždy skenování",
"litecoin_mweb_display_card": "Zobrazit kartu MWeb",
"litecoin_mweb_scanning": "Skenování mWeb",
"litecoin_mweb_settings": "Nastavení litecoin mWeb",
"litecoin_what_is_mweb": "Co je Mweb?",
"load_more": "Načíst další",
"loading_your_wallet": "Načítám peněženku",

View file

@ -350,6 +350,10 @@
"light_theme": "Hell",
"litecoin_enable_mweb_sync": "Aktivieren Sie die MWEB -Synchronisierung",
"litecoin_mweb": "Litecoin MWeb",
"litecoin_mweb_always_scan": "Setzen Sie MWeb immer scannen",
"litecoin_mweb_display_card": "MWEB -Karte anzeigen",
"litecoin_mweb_scanning": "MWEB Scanning",
"litecoin_mweb_settings": "Litecoin MWeb -Einstellungen",
"litecoin_what_is_mweb": "Was ist MWeb?",
"load_more": "Mehr laden",
"loading_your_wallet": "Wallet wird geladen",

View file

@ -350,6 +350,10 @@
"light_theme": "Light",
"litecoin_enable_mweb_sync": "Enable MWEB sync",
"litecoin_mweb": "Litecoin MWEB",
"litecoin_mweb_always_scan": "Set MWEB always scanning",
"litecoin_mweb_display_card": "Show MWEB card",
"litecoin_mweb_scanning": "MWEB Scanning",
"litecoin_mweb_settings": "MWEB settings",
"litecoin_what_is_mweb": "What is MWEB?",
"load_more": "Load more",
"loading_your_wallet": "Loading your wallet",

View file

@ -350,6 +350,10 @@
"light_theme": "Ligera",
"litecoin_enable_mweb_sync": "Habilitar MWEB Sync",
"litecoin_mweb": "Litecoin mweb",
"litecoin_mweb_always_scan": "Establecer mweb siempre escaneo",
"litecoin_mweb_display_card": "Mostrar tarjeta MWEB",
"litecoin_mweb_scanning": "Escaneo mweb",
"litecoin_mweb_settings": "Configuración de litecoin mweb",
"litecoin_what_is_mweb": "¿Qué es mweb?",
"load_more": "Carga más",
"loading_your_wallet": "Cargando tu billetera",

View file

@ -350,6 +350,10 @@
"light_theme": "Clair",
"litecoin_enable_mweb_sync": "Activer la synchronisation MWEB",
"litecoin_mweb": "Litecoin mweb",
"litecoin_mweb_always_scan": "Définir MWEB Score Scanning",
"litecoin_mweb_display_card": "Afficher la carte MWeb",
"litecoin_mweb_scanning": "Scann mweb",
"litecoin_mweb_settings": "Paramètres litecoin mweb",
"litecoin_what_is_mweb": "Qu'est-ce que MWEB?",
"load_more": "Charger plus",
"loading_your_wallet": "Chargement de votre portefeuille (wallet)",

View file

@ -350,6 +350,10 @@
"light_theme": "Haske",
"litecoin_enable_mweb_sync": "Kunna Mweb Sync",
"litecoin_mweb": "Litcoin Mweb",
"litecoin_mweb_always_scan": "Saita Mweb koyaushe",
"litecoin_mweb_display_card": "Nuna katin Mweb",
"litecoin_mweb_scanning": "Mweb scanning",
"litecoin_mweb_settings": "Saitunan Litcoin Mweb",
"litecoin_what_is_mweb": "Menene Mweb?",
"load_more": "Like more",
"loading_your_wallet": "Ana loda walat ɗin ku",

View file

@ -350,6 +350,10 @@
"light_theme": "रोशनी",
"litecoin_enable_mweb_sync": "MWEB सिंक सक्षम करें",
"litecoin_mweb": "लिटकोइन मेवेब",
"litecoin_mweb_always_scan": "MWEB हमेशा स्कैनिंग सेट करें",
"litecoin_mweb_display_card": "MWEB कार्ड दिखाएं",
"litecoin_mweb_scanning": "MWEB स्कैनिंग",
"litecoin_mweb_settings": "Litecoin MWEB सेटिंग्स",
"litecoin_what_is_mweb": "MWEB क्या है?",
"load_more": "और लोड करें",
"loading_your_wallet": "अपना बटुआ लोड कर रहा है",

View file

@ -350,6 +350,10 @@
"light_theme": "Svijetla",
"litecoin_enable_mweb_sync": "Omogući MWEB sinkronizaciju",
"litecoin_mweb": "Litecoin MWeb",
"litecoin_mweb_always_scan": "Postavite MWeb uvijek skeniranje",
"litecoin_mweb_display_card": "Prikaži MWeb karticu",
"litecoin_mweb_scanning": "MWEB skeniranje",
"litecoin_mweb_settings": "Litecoin MWeb postavke",
"litecoin_what_is_mweb": "Što je MWEB?",
"load_more": "Učitaj više",
"loading_your_wallet": "Novčanik se učitava",

View file

@ -350,6 +350,10 @@
"light_theme": "Terang",
"litecoin_enable_mweb_sync": "Aktifkan Sinkronisasi MWEB",
"litecoin_mweb": "Litecoin mweb",
"litecoin_mweb_always_scan": "Atur mWeb selalu memindai",
"litecoin_mweb_display_card": "Tunjukkan kartu mWeb",
"litecoin_mweb_scanning": "Pemindaian MWEB",
"litecoin_mweb_settings": "Pengaturan Litecoin MWEB",
"litecoin_what_is_mweb": "Apa itu MWEB?",
"load_more": "Muat lebih banyak",
"loading_your_wallet": "Memuat dompet Anda",

View file

@ -351,6 +351,10 @@
"light_theme": "Bianco",
"litecoin_enable_mweb_sync": "Abilita MWeb Sync",
"litecoin_mweb": "Litecoin MWeb",
"litecoin_mweb_always_scan": "Imposta MWeb per scansionare sempre",
"litecoin_mweb_display_card": "Mostra la scheda MWeb",
"litecoin_mweb_scanning": "Scansione MWeb",
"litecoin_mweb_settings": "Impostazioni MWeb Litecoin",
"litecoin_what_is_mweb": "Cos'è MWeb?",
"load_more": "Carica di più",
"loading_your_wallet": "Caricamento portafoglio",

View file

@ -351,6 +351,10 @@
"light_theme": "光",
"litecoin_enable_mweb_sync": "MWEB同期を有効にします",
"litecoin_mweb": "litecoin mweb",
"litecoin_mweb_always_scan": "MWEBを常にスキャンします",
"litecoin_mweb_display_card": "MWEBカードを表示します",
"litecoin_mweb_scanning": "MWEBスキャン",
"litecoin_mweb_settings": "Litecoin MWEB設定",
"litecoin_what_is_mweb": "MWEBとは何ですか",
"load_more": "もっと読み込む",
"loading_your_wallet": "ウォレットをロードしています",

View file

@ -350,6 +350,10 @@
"light_theme": "빛",
"litecoin_enable_mweb_sync": "mweb 동기화를 활성화합니다",
"litecoin_mweb": "Litecoin mweb",
"litecoin_mweb_always_scan": "mweb는 항상 스캔을 설정합니다",
"litecoin_mweb_display_card": "mweb 카드를 보여주십시오",
"litecoin_mweb_scanning": "mweb 스캔",
"litecoin_mweb_settings": "Litecoin mweb 설정",
"litecoin_what_is_mweb": "MWEB 란 무엇입니까?",
"load_more": "더로드하십시오",
"loading_your_wallet": "지갑 넣기",

View file

@ -350,6 +350,10 @@
"light_theme": "အလင်း",
"litecoin_enable_mweb_sync": "mweb စည်းညှိမှုကို enable",
"litecoin_mweb": "Litecoin Mweb",
"litecoin_mweb_always_scan": "Mweb အမြဲစကင်ဖတ်စစ်ဆေးပါ",
"litecoin_mweb_display_card": "MweB ကဒ်ကိုပြပါ",
"litecoin_mweb_scanning": "mweb scanning",
"litecoin_mweb_settings": "Litecoin Mweb ချိန်ညှိချက်များ",
"litecoin_what_is_mweb": "MweB ဆိုတာဘာလဲ။",
"load_more": "ပိုပြီး load",
"loading_your_wallet": "သင့်ပိုက်ဆံအိတ်ကို ဖွင့်နေသည်။",

View file

@ -350,6 +350,10 @@
"light_theme": "Licht",
"litecoin_enable_mweb_sync": "MWEB SYNC inschakelen",
"litecoin_mweb": "Litecoin mweb",
"litecoin_mweb_always_scan": "Stel mweb altijd op scannen",
"litecoin_mweb_display_card": "Toon MWEB -kaart",
"litecoin_mweb_scanning": "MWEB -scanning",
"litecoin_mweb_settings": "Litecoin mweb -instellingen",
"litecoin_what_is_mweb": "Wat is Mweb?",
"load_more": "Meer laden",
"loading_your_wallet": "Uw portemonnee laden",

View file

@ -350,6 +350,10 @@
"light_theme": "Jasny",
"litecoin_enable_mweb_sync": "Włącz synchronizację MWEB",
"litecoin_mweb": "Litecoin MWEB",
"litecoin_mweb_always_scan": "Ustaw MWEB zawsze skanowanie",
"litecoin_mweb_display_card": "Pokaż kartę MWEB",
"litecoin_mweb_scanning": "Skanowanie MWEB",
"litecoin_mweb_settings": "Ustawienia MWEB Litecoin",
"litecoin_what_is_mweb": "Co to jest MWEB?",
"load_more": "Załaduj więcej",
"loading_your_wallet": "Ładowanie portfela",

View file

@ -350,6 +350,10 @@
"light_theme": "Luz",
"litecoin_enable_mweb_sync": "Habilite MWEB Sync",
"litecoin_mweb": "Litecoin Mweb",
"litecoin_mweb_always_scan": "Definir mweb sempre digitalizando",
"litecoin_mweb_display_card": "Mostre o cartão MWEB",
"litecoin_mweb_scanning": "MWEB Scanning",
"litecoin_mweb_settings": "Configurações do Litecoin MWEB",
"litecoin_what_is_mweb": "O que é MWeb?",
"load_more": "Carregue mais",
"loading_your_wallet": "Abrindo sua carteira",

View file

@ -350,6 +350,10 @@
"light_theme": "Светлая",
"litecoin_enable_mweb_sync": "Включить MWEB Sync",
"litecoin_mweb": "Litecoin mweb",
"litecoin_mweb_always_scan": "Установить MWEB всегда сканирование",
"litecoin_mweb_display_card": "Показать карту MWEB",
"litecoin_mweb_scanning": "MWEB сканирование",
"litecoin_mweb_settings": "Litecoin MWEB Settings",
"litecoin_what_is_mweb": "Что такое MWEB?",
"load_more": "Загрузи больше",
"loading_your_wallet": "Загрузка кошелька",

View file

@ -350,6 +350,10 @@
"light_theme": "สว่าง",
"litecoin_enable_mweb_sync": "เปิดใช้งานการซิงค์ MWEB",
"litecoin_mweb": "Litecoin mweb",
"litecoin_mweb_always_scan": "ตั้งค่าการสแกน MWEB เสมอ",
"litecoin_mweb_display_card": "แสดงการ์ด mweb",
"litecoin_mweb_scanning": "การสแกน MWEB",
"litecoin_mweb_settings": "การตั้งค่า Litecoin Mweb",
"litecoin_what_is_mweb": "MWEB คืออะไร?",
"load_more": "โหลดมากขึ้น",
"loading_your_wallet": "กำลังโหลดกระเป๋าของคุณ",

View file

@ -350,6 +350,10 @@
"light_theme": "Ilaw",
"litecoin_enable_mweb_sync": "Paganahin ang MWEB Sync",
"litecoin_mweb": "Litecoin Mweb",
"litecoin_mweb_always_scan": "Itakda ang MWeb na laging nag -scan",
"litecoin_mweb_display_card": "Ipakita ang MWEB Card",
"litecoin_mweb_scanning": "Pag -scan ng Mweb",
"litecoin_mweb_settings": "Mga Setting ng Litecoin MWeb",
"litecoin_what_is_mweb": "Ano ang MWEB?",
"load_more": "Mag -load pa",
"loading_your_wallet": "Naglo -load ng iyong pitaka",

View file

@ -350,6 +350,10 @@
"light_theme": "Aydınlık",
"litecoin_enable_mweb_sync": "MWEB senkronizasyonunu etkinleştir",
"litecoin_mweb": "Litecoin mweb",
"litecoin_mweb_always_scan": "MWEB'i her zaman taramayı ayarlayın",
"litecoin_mweb_display_card": "MWEB kartını göster",
"litecoin_mweb_scanning": "MWEB taraması",
"litecoin_mweb_settings": "Litecoin mweb ayarları",
"litecoin_what_is_mweb": "MWEB nedir?",
"load_more": "Daha fazla yükle",
"loading_your_wallet": "Cüzdanın yükleniyor",

View file

@ -350,6 +350,10 @@
"light_theme": "Світла",
"litecoin_enable_mweb_sync": "Увімкнути MWEB SYNC",
"litecoin_mweb": "Litecoin mweb",
"litecoin_mweb_always_scan": "Встановити mweb завжди сканувати",
"litecoin_mweb_display_card": "Показати карту MWeb",
"litecoin_mweb_scanning": "Сканування Mweb",
"litecoin_mweb_settings": "Налаштування Litecoin MWEB",
"litecoin_what_is_mweb": "Що таке mweb?",
"load_more": "Завантажити ще",
"loading_your_wallet": "Завантаження гаманця",

View file

@ -350,6 +350,10 @@
"light_theme": "روشنی",
"litecoin_enable_mweb_sync": "MWEB مطابقت پذیری کو فعال کریں",
"litecoin_mweb": "litcoin mweb",
"litecoin_mweb_always_scan": "MWEB ہمیشہ اسکیننگ سیٹ کریں",
"litecoin_mweb_display_card": "MWEB کارڈ دکھائیں",
"litecoin_mweb_scanning": "MWEB اسکیننگ",
"litecoin_mweb_settings": "litcoin mweb کی ترتیبات",
"litecoin_what_is_mweb": "MWEB کیا ہے؟",
"load_more": "مزید لوڈ کریں",
"loading_your_wallet": "آپ کا بٹوہ لوڈ ہو رہا ہے۔",

View file

@ -351,6 +351,10 @@
"light_theme": "Funfun bí eérú",
"litecoin_enable_mweb_sync": "Mu ṣiṣẹmu MweB",
"litecoin_mweb": "Livecoin mweb",
"litecoin_mweb_always_scan": "Ṣeto mweb nigbagbogbo n ṣayẹwo",
"litecoin_mweb_display_card": "Fihan kaadi Mweb",
"litecoin_mweb_scanning": "Mweb scanning",
"litecoin_mweb_settings": "Awọn eto idile Mwein mweb",
"litecoin_what_is_mweb": "Kini mweb?",
"load_more": "Ẹru diẹ sii",
"loading_your_wallet": "A ń ṣí àpamọ́wọ́ yín",

View file

@ -350,6 +350,10 @@
"light_theme": "艳丽",
"litecoin_enable_mweb_sync": "启用MWEB同步",
"litecoin_mweb": "Litecoin Mweb",
"litecoin_mweb_always_scan": "设置MWEB总是扫描",
"litecoin_mweb_display_card": "显示MWEB卡",
"litecoin_mweb_scanning": "MWEB扫描",
"litecoin_mweb_settings": "Litecoin MWEB设置",
"litecoin_what_is_mweb": "什么是MWEB",
"load_more": "装载更多",
"loading_your_wallet": "加载您的钱包",