using Flowframes.Data; using Flowframes.Forms; using Flowframes.IO; using Flowframes.Main; using System; using System.Collections.Generic; using System.Threading.Tasks; namespace Flowframes.MiscUtils { class ModelDownloadFormUtils { public static ModelDownloadForm form; static int taskCounter = 0; static int tasksToDo = 0; static bool canceled = false; public static async Task DownloadModels (bool rifeC, bool rifeN, bool dainN, bool flavrC) { canceled = false; List ais = new List(); if (rifeC) ais.Add(Networks.rifeCuda); if (rifeN) ais.Add(Networks.rifeNcnn); if (dainN) ais.Add(Networks.dainNcnn); if (flavrC) ais.Add(Networks.flavrCuda); if (ais.Count < 1) return; taskCounter = 0; tasksToDo = GetTaskCount(ais); form.SetWorking(true); await Task.Delay(10); foreach(AI ai in ais) await DownloadForAi(ai); form.SetWorking(false); form.SetStatus($"Done."); } public static async Task DownloadForAi(AI ai) { ModelCollection modelCollection = AiModels.GetModels(ai); for (int i = 0; i < modelCollection.models.Count; i++) { if (canceled) return; ModelCollection.ModelInfo modelInfo = modelCollection.models[i]; form.SetStatus($"Downloading files for {modelInfo.ai.aiName.Replace("_", "-")}..."); await ModelDownloader.DownloadModelFiles(ai, modelInfo.dir, false); taskCounter++; form.SetProgress((((float)taskCounter / tasksToDo) * 100f).RoundToInt()); } } public static void Cancel () { canceled = true; ModelDownloader.canceled = true; } public static int GetTaskCount (List ais) { int count = 0; foreach(AI ai in ais) { ModelCollection modelCollection = AiModels.GetModels(ai); count += modelCollection.models.Count; } return count; } } }