create method
Import a WSL distro by name
Implementation
Future<dynamic> create(String distribution, String filename,
String installPath, Function(String) status,
{bool image = false}) async {
if (installPath == '') {
installPath = getInstancePath(distribution).path;
} else {
installPath = SafePath(installPath).path;
}
// Download
String downloadPath = getDistroPath().file('$filename.tar.gz');
String downloadPathTmp = getDistroPath().file('$filename.tar.gz.tmp');
bool fileExists = await File(downloadPath).exists();
if (!image && distroRootfsLinks[filename] != null && !fileExists) {
String url = distroRootfsLinks[filename]!;
// Download file
try {
var downloader = ChunkedDownloader(
url: url,
saveFilePath: downloadPathTmp,
onProgress: (int count, int total, double speed) {
status('${'downloading-text'.i18n()}'
' ${(count / total * 100).toStringAsFixed(0)}%');
})
..start();
// Await download
while (!downloader.done) {
await Future.delayed(const Duration(milliseconds: 500));
}
File file = File(downloadPathTmp);
file.rename(downloadPath);
status('${'downloaded-text'.i18n()} $filename');
} catch (error) {
status('${'errordownloading-text'.i18n()} $filename');
}
}
// Downloaded or extracted
if (!image && distroRootfsLinks[filename] == null) {
downloadPath = filename;
}
// Create from local file
ProcessResult results = await Process.run(
'wsl', ['--import', distribution, installPath, downloadPath],
stdoutEncoding: null);
String output = utf8Convert(results.stdout);
return results;
}