public static void DeleteAllModels() { foreach (string modelFolder in GetAllModelFolders()) { string size = FormatUtils.Bytes(IoUtils.GetDirSize(modelFolder, true)); if (IoUtils.TryDeleteIfExists(modelFolder)) { Logger.Log($"Deleted cached model '{Path.GetFileName(modelFolder.GetParentDir())}/{Path.GetFileName(modelFolder)}' ({size})"); } } }
static async Task DownloadTo(string url, string saveDirOrPath, bool log = true, int retries = 3) { canceled = false; string savePath = saveDirOrPath; if (IoUtils.IsPathDirectory(saveDirOrPath)) { savePath = Path.Combine(saveDirOrPath, Path.GetFileName(url)); } IoUtils.TryDeleteIfExists(savePath); Directory.CreateDirectory(Path.GetDirectoryName(savePath)); Logger.Log($"Downloading '{url}' to '{savePath}'", true); Stopwatch sw = new Stopwatch(); sw.Restart(); bool completed = false; int lastProgPercentage = -1; var client = new WebClient(); client.DownloadProgressChanged += (sender, args) => { if (sw.ElapsedMilliseconds > 200 && args.ProgressPercentage != lastProgPercentage) { sw.Restart(); lastProgPercentage = args.ProgressPercentage; Logger.Log($"Downloading model file '{Path.GetFileName(url)}'... {args.ProgressPercentage}%", !log, true); } }; client.DownloadFileCompleted += (sender, args) => { if (args.Error != null) { Logger.Log("Download failed: " + args.Error.Message, !log); } completed = true; }; client.DownloadFileTaskAsync(url, savePath).ConfigureAwait(false); while (!completed) { if (canceled || Interpolate.canceled) { client.CancelAsync(); client.Dispose(); return; } if (sw.ElapsedMilliseconds > 6000) { client.CancelAsync(); if (retries > 0) { await DownloadTo(url, saveDirOrPath, log, retries --); } else { Interpolate.Cancel("Model download failed."); return; } } await Task.Delay(500); } Logger.Log($"Downloaded '{Path.GetFileName(url)}' ({IoUtils.GetFilesize(savePath) / 1024} KB)", true); }