diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index e3909a15d..d4dc0c8c9 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -387,7 +387,8 @@ "$(inherited)", "$(PROJECT_DIR)/Flutter", ); - PRODUCT_BUNDLE_IDENTIFIER = com.cakewallet.cakewallet; + MARKETING_VERSION = 3.1.28; + PRODUCT_BUNDLE_IDENTIFIER = com.fotolockr.cakewallet; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -522,7 +523,8 @@ "$(inherited)", "$(PROJECT_DIR)/Flutter", ); - PRODUCT_BUNDLE_IDENTIFIER = com.cakewallet.cakewallet; + MARKETING_VERSION = 3.1.28; + PRODUCT_BUNDLE_IDENTIFIER = com.fotolockr.cakewallet; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -552,7 +554,8 @@ "$(inherited)", "$(PROJECT_DIR)/Flutter", ); - PRODUCT_BUNDLE_IDENTIFIER = com.cakewallet.cakewallet; + MARKETING_VERSION = 3.1.28; + PRODUCT_BUNDLE_IDENTIFIER = com.fotolockr.cakewallet; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index 31d748e9a..40f292e53 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - $(FLUTTER_BUILD_NAME) + $(MARKETING_VERSION) CFBundleSignature ???? CFBundleVersion diff --git a/lib/src/domain/common/fs_migration.dart b/lib/src/domain/common/fs_migration.dart new file mode 100644 index 000000000..db17cd134 --- /dev/null +++ b/lib/src/domain/common/fs_migration.dart @@ -0,0 +1,132 @@ +import 'dart:io'; +import 'dart:convert'; +import 'package:cake_wallet/src/domain/common/contact.dart'; +import 'package:cake_wallet/src/domain/common/crypto_currency.dart'; +import 'package:cake_wallet/src/domain/common/wallet_info.dart'; +import 'package:cake_wallet/src/domain/common/wallet_type.dart'; +import 'package:cake_wallet/src/domain/exchange/trade.dart'; +import 'package:flutter/foundation.dart'; +import 'package:hive/hive.dart'; +import 'package:path_provider/path_provider.dart'; + +const reservedNames = ["flutter_assets", "wallets", "db"]; + +Future migrate_android_v1() async { + final appDocDir = await getApplicationDocumentsDirectory(); + + await migrate_hives(appDocDir: appDocDir); + await migrate_wallets(appDocDir: appDocDir); +} + +Future migrate_ios_v1() async { + final appDocDir = await getApplicationDocumentsDirectory(); +} + +Future migrate_hives({Directory appDocDir}) async { + final dbDir = Directory('${appDocDir.path}/db'); + final files = List(); + + appDocDir.listSync().forEach((FileSystemEntity item) { + final ext = item.path.split('.').last; + + if (item is File && (ext == "hive" || ext == "lock")) { + files.add(item); + } + }); + + if (!dbDir.existsSync()) { + dbDir.createSync(); + } + + files.forEach((File hive) { + final name = hive.path.split('/').last; + hive.copySync('${dbDir.path}/$name'); + hive.deleteSync(); + }); +} + +Future migrate_wallets({Directory appDocDir}) async { + final walletsDir = Directory('${appDocDir.path}/wallets'); + final moneroWalletsDir = Directory('${walletsDir.path}/monero'); + final dirs = List(); + + appDocDir.listSync().forEach((FileSystemEntity item) { + final name = item.path.split('/').last; + + if (item is Directory && !reservedNames.contains(name)) { + dirs.add(item); + } + }); + + if (!moneroWalletsDir.existsSync()) { + await moneroWalletsDir.create(recursive: true); + } + + dirs.forEach((Directory dir) { + final name = dir.path.split('/').last; + final newDir = Directory('${moneroWalletsDir.path}/$name'); + newDir.createSync(); + + dir.listSync().forEach((file) { + if (file is File) { + final fileName = file.path.split('/').last; + file.copySync('${newDir.path}/$fileName'); + file.deleteSync(); + } + }); + + dir.deleteSync(); + }); +} + +Future migrate_ios_wallet_info( + {@required Directory appDocDir, + @required Box walletsInfo}) async { + final walletsDir = Directory('${appDocDir.path}/wallets'); + final moneroWalletsDir = Directory('${walletsDir.path}/monero'); + + moneroWalletsDir.listSync().forEach((item) async { + try { + if (item is Directory) { + final name = item.path.split('/').last; + final configFile = File('${item.path}/$name.json'); + final config = + json.decode(configFile.readAsStringSync()) as Map; + final isRecovery = config["isRecovery"] as bool ?? false; + final id = + walletTypeToString(WalletType.monero).toLowerCase() + '_' + name; + final walletInfo = + WalletInfo(id: id, name: name, isRecovery: isRecovery); + + await walletsInfo.add(walletInfo); + } + } catch (e) { + print(e.toString()); + } + }); +} + +Future migrate_ios_trades_list( + {@required Directory appDocDir, @required Box trades}) async { + final adderessBookJSON = File('${appDocDir.path}/trades_list.json'); + final List trades = + json.decode(adderessBookJSON.readAsStringSync()) as List; +} + +Future migrate_ios_address_book( + {@required Directory appDocDir, @required Box contacts}) async { + final adderessBookJSON = File('${appDocDir.path}/address_book.json'); + final List addresses = + json.decode(adderessBookJSON.readAsStringSync()) as List; + + addresses.forEach((dynamic item) async { + final _item = item as Map; + final type = _item["type"] as String; + final address = _item["address"] as String; + final name = _item["name"] as String; + final contact = Contact( + address: address, name: name, type: CryptoCurrency.fromString(type)); + + await contacts.add(contact); + }); +}