CakeWallet/tool/download_moneroc_prebuilds.dart
cyan 102ab8dbe6
CW-875 BackupServiceV3 (#2064)
* implement v3 backup system

- Add new BackupServiceV3 with chunked backup support and checksums
- Implement json-based metadata in backup system
- Instead of binary file export a .zip file that user can open and
see that it is a cake backup
(should also prevent 3rd party software from corrupting binary
data inside of the file, in case it doesn't checksum will fail,
and user will know for sure that backup got corrupted)
- Update flutter to 3.27.4 to use archive ^4.x.x (it offers in memory
archive operations)

* fix wallets not getting restored properly

* prevent out of memory errors on files that are way too big during restore

* Update lib/view_model/backup_view_model.dart [skip ci]

* Update lib/core/backup_service.dart [skip ci]

* Update lib/core/backup_service.dart

---------

Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>
2025-03-22 03:16:54 +02:00

64 lines
No EOL
2.6 KiB
Dart

import 'dart:io';
import 'package:cw_core/utils/print_verbose.dart';
import 'package:dio/dio.dart';
import 'package:archive/archive_io.dart';
final _dio = Dio();
final List<String> triplets = [
"x86_64-linux-gnu", // linux desktop - majority of users onlinux
// "i686-linux-gnu", // not supported by cake
// "i686-meego-linux-gnu", // sailfishos (emulator)- not supported by cake
// "aarch64-linux-gnu", // not (yet) supported by cake - (mostly) mobile linux
// "aarch64-meego-linux-gnu", // sailfishos - not supported by cake
"x86_64-linux-android",
// "i686-linux-android", // not supported by monero_c - mostly old android emulators
"aarch64-linux-android",
"armv7a-linux-androideabi",
// "i686-w64-mingw32", // 32bit windows - not supported by monero_c
"x86_64-w64-mingw32",
// "x86_64-apple-darwin11", // Intel macbooks (contrib) - not used by cake
// "aarch64-apple-darwin11", // apple silicon macbooks (contrib) - not used by cake
// "host-apple-darwin", // not available on CI (yet)
// "x86_64-host-apple-darwin", // not available on CI (yet)
"aarch64-host-apple-darwin", // apple silicon macbooks (local builds)
"aarch64-apple-ios",
"aarch64-apple-iossimulator",
];
Future<void> main() async {
final resp = await _dio.get("https://api.github.com/repos/mrcyjanek/monero_c/releases");
final data = resp.data[0];
final tagName = data['tag_name'];
printV("Downloading artifacts for: ${tagName}");
final assets = data['assets'] as List<dynamic>;
for (var i = 0; i < assets.length; i++) {
for (var triplet in triplets) {
final asset = assets[i];
final filename = asset["name"] as String;
if (!filename.contains(triplet)) continue;
final coin = filename.split("_")[0];
String localFilename = filename.replaceAll("${coin}_${triplet}_", "");
localFilename = "scripts/monero_c/release/${coin}/${triplet}_${localFilename}";
final url = asset["browser_download_url"] as String;
printV("- downloading $localFilename");
await _dio.download(url, localFilename);
if (localFilename.endsWith(".xz")) {
printV(" extracting $localFilename");
final inputStream = InputFileStream(localFilename);
final archive = XZDecoder().decodeBytes(inputStream.toUint8List());
final outputStream = OutputFileStream(localFilename.replaceAll(".xz", ""));
outputStream.writeBytes(archive);
}
}
}
if (Platform.isMacOS) {
printV("Generating ios framework");
final result = Process.runSync("bash", [
"-c",
"cd scripts/ios && ./gen_framework.sh && cd ../.."
]);
printV((result.stdout+result.stderr).toString().trim());
}
}