CW-686-polyseed-language-issues ()

* feat: Fix space for japanese seed

* feat: Fix space for japanese seed

* feat: Upgrade Polyseed version with improved jp support

* feat: Fix monero legacy seed language falling back to english
This commit is contained in:
Konstantin Ullrich 2025-03-21 04:32:40 +01:00 committed by GitHub
parent 626e532fce
commit 597a716f9d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 37 additions and 21 deletions

View file

@ -61,9 +61,7 @@ String getSeed() {
return legacy;
}
String getSeedLegacy(String? language) {
final cakepassphrase = getPassphrase();
var legacy = monero.Wallet_seed(wptr!, seedOffset: cakepassphrase);
String? getSeedLanguage(String? language) {
switch (language) {
case "Chinese (Traditional)": language = "Chinese (simplified)"; break;
case "Chinese (Simplified)": language = "Chinese (simplified)"; break;
@ -71,8 +69,25 @@ String getSeedLegacy(String? language) {
case "Czech": language = "English"; break;
case "Japanese": language = "English"; break;
}
return language;
}
String getSeedLegacy(String? language) {
final cakepassphrase = getPassphrase();
var legacy = monero.Wallet_seed(wptr!, seedOffset: cakepassphrase);
language = getSeedLanguage(language);
if (monero.Wallet_status(wptr!) != 0) {
monero.Wallet_setSeedLanguage(wptr!, language: language ?? "English");
if (language != null) {
monero.Wallet_setSeedLanguage(wptr!, language: language);
final status = monero.Wallet_status(wptr!);
if (status != 0) {
final err = monero.Wallet_errorString(wptr!);
if (legacy.isNotEmpty) {
return "$err\n\n$legacy";
}
return err;
}
}
legacy = monero.Wallet_seed(wptr!, seedOffset: cakepassphrase);
}
if (monero.Wallet_status(wptr!) != 0) {

View file

@ -73,6 +73,7 @@ void createWalletSync(
required String passphrase,
int nettype = 0}) {
txhistory = null;
language = getSeedLanguage(language)!;
final newWptr = monero.WalletManager_createWallet(wmPtr,
path: path, password: password, language: language, networkType: 0);
@ -366,6 +367,9 @@ Future<void> loadWallet(
}
if (deviceType == 1) {
if (gLedger == null) {
throw Exception("Tried to open a ledger wallet with no ledger connected");
}
final dummyWPtr = wptr ??
monero.WalletManager_openWallet(wmPtr, path: '', password: '');
enableLedgerExchange(dummyWPtr, gLedger!);
@ -533,4 +537,4 @@ Future<void> restoreFromSpendKey(
bool isWalletExist({required String path}) => _isWalletExist(path);
bool isViewOnlyBySpendKey() => int.tryParse(monero.Wallet_secretSpendKey(wptr!)) == 0;
bool isViewOnlyBySpendKey() => int.tryParse(monero.Wallet_secretSpendKey(wptr!)) == 0;

View file

@ -11,8 +11,6 @@ import 'package:cw_core/wallet_credentials.dart';
import 'package:cw_core/wallet_info.dart';
import 'package:cw_core/wallet_service.dart';
import 'package:cw_core/wallet_type.dart';
import 'package:cw_monero/api/exceptions/wallet_opening_exception.dart';
import 'package:cw_core/get_height_by_date.dart';
import 'package:cw_monero/api/account_list.dart';
import 'package:cw_monero/api/wallet_manager.dart' as monero_wallet_manager;
import 'package:cw_monero/api/wallet_manager.dart';
@ -292,16 +290,14 @@ class MoneroWalletService extends WalletService<
Future<MoneroWallet> restoreFromSeed(
MoneroRestoreWalletFromSeedCredentials credentials,
{bool? isTestnet}) async {
if (credentials.mnemonic.split(" ").length == 16) {
// Restore from Polyseed
try {
if (Polyseed.isValidSeed(credentials.mnemonic)) {
return restoreFromPolyseed(credentials);
}
} catch (e) {
printV("Polyseed restore failed: $e");
rethrow;
// Restore from Polyseed
try {
if (Polyseed.isValidSeed(credentials.mnemonic)) {
return restoreFromPolyseed(credentials);
}
} catch (e) {
printV("Polyseed restore failed: $e");
rethrow;
}
try {

View file

@ -19,7 +19,7 @@ dependencies:
flutter_mobx: ^2.0.6+1
intl: ^0.19.0
encrypt: ^5.0.1
polyseed: ^0.0.6
polyseed: ^0.0.7
cw_core:
path: ../cw_core
monero:

View file

@ -19,7 +19,7 @@ dependencies:
flutter_mobx: ^2.0.6+1
intl: ^0.19.0
encrypt: ^5.0.1
polyseed: ^0.0.6
polyseed: ^0.0.7
cw_core:
path: ../cw_core
monero:

View file

@ -92,7 +92,8 @@ class ValidatableAnnotatedEditableTextState extends EditableTextState {
List<Annotation> getRanges() {
final result = <Annotation>[];
final text = textEditingValue.text;
// Replace Ideographic Space (U+3000) with a normal space
final text = textEditingValue.text.replaceAll("\u3000", " ");
final source = text
.split(' ')
.map((word) {

View file

@ -60,7 +60,7 @@ abstract class WalletCreationVMBase with Store {
final SeedSettingsViewModel seedSettingsViewModel;
bool isPolyseed(String seed) =>
(type == WalletType.monero || type == WalletType.wownero) &&
[WalletType.monero, WalletType.wownero].contains(type) &&
(Polyseed.isValidSeed(seed) || (seed.split(" ").length == 14));
bool nameExists(String name) => walletCreationService.exists(name);

View file

@ -104,7 +104,7 @@ dependencies:
# ref: main
socks5_proxy: ^1.0.4
flutter_svg: ^2.0.9
polyseed: ^0.0.6
polyseed: ^0.0.7
nostr_tools: ^1.0.9
ledger_flutter_plus:
git: