download method
Download from sync IP
Implementation
void download() async {
// Get path for distro filesystem
String? syncIP = prefs.getString('SyncIP');
if (syncIP == null) {
Notify.message('syncipnotset-text'.i18n(), loading: false);
return;
}
Notify.message('${'shuttingdownwsl-text'.i18n()}...', loading: true);
final vhdxPath = getInstancePath(distroName).file('ext4.vhdx');
final vhdxPathTmp = getInstancePath(distroName).file('ext4.vhdx.tmp');
final vhdxPathOld = getInstancePath(distroName).file('ext4.vhdx.old');
// Shutdown WSL
await WSLApi().shutdown();
Notify.message('${'connectingtoip-text'.i18n()}: "$syncIP"...',
loading: true);
// Download using chunks
var response = ChunkedDownloader(
url: 'http://$syncIP:59132/ext4.vhdx',
saveFilePath: vhdxPath,
onProgress: (progress, total, speed) {
String rec = (progress / 1024 / 1024).toStringAsFixed(2);
String tot = (total / 1024 / 1024).toStringAsFixed(2);
Notify.message(
'${'downloading-text'.i18n()} $distroName, $rec MB / $tot MB',
loading: true);
if (progress == total) {
Notify.message('${'downloaded-text'.i18n()} $distroName');
File oldFile = File(vhdxPath);
oldFile.rename(vhdxPathOld);
File file = File(vhdxPathTmp);
file.rename(vhdxPath);
}
},
onError: (error) {
Notify.message(
'${'errordownloading-text'.i18n()} $distroName: $error',
loading: false);
});
// Await download
while (!response.done) {
await Future.delayed(const Duration(milliseconds: 500));
}
}