BinaryModule support

This commit is contained in:
xkeyC 2024-02-22 20:26:13 +08:00
parent eafd249847
commit 02101db99d
4 changed files with 48 additions and 0 deletions

BIN
assets/binary/aria2c.zip Normal file

Binary file not shown.

View File

@ -0,0 +1,45 @@
import 'dart:io';
import 'package:archive/archive.dart';
import 'package:flutter/services.dart';
import 'package:starcitizen_doctor/common/conf/app_conf.dart';
import 'package:starcitizen_doctor/common/utils/base_utils.dart';
class BinaryModuleConf {
static const _modules = {
"aria2c": "0",
};
static Future extractModel() async {
final workingDir = "${AppConf.applicationSupportDir}\\modules";
for (var m in _modules.entries) {
final name = m.key;
final version = m.value;
final dir = "$workingDir\\$name";
final versionFile = File("$dir\\version");
if (await versionFile.exists() &&
(await versionFile.readAsString()).trim() == version) {
dPrint(
"BinaryModuleConf.extractModule skip $name version == $version");
continue;
}
// write model file
final zipBuffer = await rootBundle.load("assets/binary/$name.zip");
final decoder = ZipDecoder().decodeBytes(zipBuffer.buffer.asUint8List());
for (var value in decoder.files) {
final filename = value.name;
if (value.isFile) {
final data = value.content as List<int>;
final file = File('$dir\\$filename');
await file.create(recursive: true);
await file.writeAsBytes(data);
} else {
await Directory('$dir\\$filename').create(recursive: true);
}
}
// write version file
await versionFile.writeAsString(version);
dPrint("BinaryModuleConf.extractModule $name $dir");
}
}
}

View File

@ -1,5 +1,6 @@
import 'package:starcitizen_doctor/api/analytics.dart';
import 'package:starcitizen_doctor/base/ui_model.dart';
import 'package:starcitizen_doctor/common/conf/binary_conf.dart';
import 'package:starcitizen_doctor/common/conf/url_conf.dart';
import 'package:starcitizen_doctor/ui/index_ui.dart';
import 'package:starcitizen_doctor/ui/index_ui_model.dart';
@ -27,6 +28,7 @@ class SplashUIModel extends BaseUIModel {
await AppConf.checkUpdate();
step = 2;
notifyListeners();
await handleError(() => BinaryModuleConf.extractModel());
Future.delayed(const Duration(milliseconds: 300));
Navigator.pushAndRemoveUntil(
context!,

View File

@ -102,6 +102,7 @@ flutter:
uses-material-design: true
assets:
- assets/
- assets/binary/
- assets/countdown/
# To add assets to your application, add an assets section, like this: