This commit is contained in:
Alessandro Autiero
2025-03-23 23:17:20 +01:00
parent 5d8f6bf0fa
commit dc2d4c4377
2 changed files with 34 additions and 8 deletions

View File

@@ -514,23 +514,38 @@ Future<bool> downloadDependency(InjectableDll dll, String outputPath) async {
} }
} }
Future<void> downloadRebootDll(File file, String url, bool aboveS20) async { Future<bool> downloadRebootDll(File file, String url, bool aboveS20) async {
Directory? outputDir; Directory? outputDir;
try { try {
var response = await http.get(Uri.parse(url)); var response = await http.get(Uri.parse(url));
if(response.statusCode != 200) { if(response.statusCode != 200) {
response = await http.get(Uri.parse(aboveS20 ? _kRebootAboveS20FallbackDownloadUrl : _kRebootBelowS20FallbackDownloadUrl)); response = await http.get(Uri.parse(aboveS20 ? _kRebootAboveS20FallbackDownloadUrl : _kRebootBelowS20FallbackDownloadUrl));
if(response.statusCode != 200) { if(response.statusCode != 200) {
throw Exception("status code ${response.statusCode}"); throw "status code ${response.statusCode}";
} }
} }
outputDir = await installationDirectory.createTemp("reboot_out"); outputDir = await installationDirectory.createTemp("reboot_out");
final tempZip = File("${outputDir.path}\\reboot.zip"); final tempZip = File("${outputDir.path}\\reboot.zip");
await tempZip.writeAsBytes(response.bodyBytes, flush: true);
try {
await tempZip.writeAsBytes(response.bodyBytes, flush: true); // Write reboot.zip to disk
await tempZip.readAsBytes(); // Check implicitly if antivirus doesn't like reboot
await extractFileToDisk(tempZip.path, outputDir.path); await extractFileToDisk(tempZip.path, outputDir.path);
final rebootDll = File(outputDir.listSync().firstWhere((element) => path.extension(element.path) == ".dll").path);
await file.writeAsBytes(await rebootDll.readAsBytes(), flush: true); final rebootDll = outputDir.listSync()
.firstWhere((element) => path.extension(element.path) == ".dll") as File;
final rebootDllSource = await rebootDll.readAsBytes();
await file.writeAsBytes(rebootDllSource, flush: true);
await file.readAsBytes(); // Check implicitly if antivirus doesn't like reboot
return true;
} catch(_) {
return false; // Anti virus probably flagged reboot
}
} finally{ } finally{
if(outputDir != null) { if(outputDir != null) {
delete(outputDir); delete(outputDir);

View File

@@ -105,14 +105,25 @@ class DllController extends GetxController {
duration: null duration: null
); );
} }
await Future.wait( final result = await Future.wait(
[ [
downloadRebootDll(rebootBeforeS20DllFile, beforeS20Mirror.text, false), downloadRebootDll(rebootBeforeS20DllFile, beforeS20Mirror.text, false),
downloadRebootDll(rebootAboveS20DllFile, aboveS20Mirror.text, true), downloadRebootDll(rebootAboveS20DllFile, aboveS20Mirror.text, true),
Future.delayed(const Duration(seconds: 1)) Future.delayed(const Duration(seconds: 1))
.then((_) => true)
], ],
eagerError: false eagerError: false
).then((values) => values.reduce((first, second) => first && second));
if(!result) {
status.value = UpdateStatus.error;
showRebootInfoBar(
translations.downloadDllAntivirus(antiVirusName ?? defaultAntiVirusName, "reboot"),
duration: infoBarLongDuration,
severity: InfoBarSeverity.error
); );
infoBarEntry?.close();
return false;
}
timestamp.value = DateTime.now().millisecondsSinceEpoch; timestamp.value = DateTime.now().millisecondsSinceEpoch;
status.value = UpdateStatus.success; status.value = UpdateStatus.success;
infoBarEntry?.close(); infoBarEntry?.close();