mirror of
https://mirror.ghproxy.com/https://github.com/StarCitizenToolBox/app.git
synced 2024-12-23 00:33:42 +08:00
update: Unp4kCModel
This commit is contained in:
parent
097b9d9bce
commit
a8e91d6332
Binary file not shown.
@ -56,9 +56,9 @@ class Unp4kCModel extends _$Unp4kCModel {
|
||||
executable: exec, arguments: [], workingDirectory: execDir);
|
||||
|
||||
stream.listen((event) async {
|
||||
_rsPid = event.rsPid;
|
||||
switch (event.dataType) {
|
||||
case RsProcessStreamDataType.output:
|
||||
_rsPid = event.rsPid;
|
||||
try {
|
||||
final eventJson = await compute(json.decode, event.data);
|
||||
_handleMessage(eventJson, event.rsPid);
|
||||
@ -76,6 +76,7 @@ class Unp4kCModel extends _$Unp4kCModel {
|
||||
});
|
||||
|
||||
ref.onDispose(() {
|
||||
state = state.copyWith(fs: null);
|
||||
if (_rsPid != null) {
|
||||
Process.killPid(_rsPid!);
|
||||
dPrint("[unp4kc] kill ...");
|
||||
@ -83,6 +84,8 @@ class Unp4kCModel extends _$Unp4kCModel {
|
||||
});
|
||||
}
|
||||
|
||||
DateTime? _loadStartTime;
|
||||
|
||||
void _handleMessage(Map<String, dynamic> eventJson, int rsPid) async {
|
||||
final action = eventJson["action"];
|
||||
final data = eventJson["data"];
|
||||
@ -91,13 +94,20 @@ class Unp4kCModel extends _$Unp4kCModel {
|
||||
switch (action.toString().trim()) {
|
||||
case "info: startup":
|
||||
rs_process.write(rsPid: rsPid, data: "$gameP4kPath\n");
|
||||
break;
|
||||
case "info: Reading_p4k_file":
|
||||
_loadStartTime = DateTime.now();
|
||||
state = state.copyWith(endMessage: "正在读取P4K 文件 ...");
|
||||
break;
|
||||
case "info: All Ready":
|
||||
state = state.copyWith(endMessage: "正在处理文件 ...");
|
||||
break;
|
||||
case "data: P4K_Files":
|
||||
final p4kFiles = (data as List<dynamic>);
|
||||
final files = <String, AppUnp4kP4kItemData>{};
|
||||
final fs = MemoryFileSystem(style: FileSystemStyle.posix);
|
||||
state = state.copyWith(endMessage: "正在处理文件 ...");
|
||||
|
||||
var nextAwait = 0;
|
||||
for (var i = 0; i < p4kFiles.length; i++) {
|
||||
final item = AppUnp4kP4kItemData.fromJson(p4kFiles[i]);
|
||||
item.name = "${item.name}";
|
||||
@ -105,9 +115,20 @@ class Unp4kCModel extends _$Unp4kCModel {
|
||||
await fs
|
||||
.file(item.name?.replaceAll("\\", "/") ?? "")
|
||||
.create(recursive: true);
|
||||
}
|
||||
if (i == nextAwait) {
|
||||
state = state.copyWith(
|
||||
files: files, fs: fs, endMessage: "加载完毕:${files.length} 个文件");
|
||||
endMessage: "正在处理文件 ($i/${p4kFiles.length}) ...");
|
||||
await Future.delayed(const Duration(microseconds: 0));
|
||||
nextAwait += 20000;
|
||||
}
|
||||
}
|
||||
final endTime = DateTime.now();
|
||||
state = state.copyWith(
|
||||
files: files,
|
||||
fs: fs,
|
||||
endMessage:
|
||||
"加载完毕:${files.length} 个文件,用时:${endTime.difference(_loadStartTime!).inMilliseconds} ms");
|
||||
_loadStartTime = null;
|
||||
break;
|
||||
case "info: Extracted_Open":
|
||||
final filePath = data.toString();
|
||||
@ -195,7 +216,7 @@ class Unp4kCModel extends _$Unp4kCModel {
|
||||
dPrint("extractFile .... $filePath");
|
||||
if (_rsPid != null) {
|
||||
rs_process.write(
|
||||
rsPid: _rsPid!, data: "$mode<:,:>$filePath<:,:>$outputPath");
|
||||
rsPid: _rsPid!, data: "$mode<:,:>$filePath<:,:>$outputPath\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user