public static BMIObj FromMod(BMILib.Mod m) { BMIObj ret = new BMIObj(); ret.Installed = m.ModFullDirectory != null ? true : m.IsInstalled(); ret.NeedsUpdate = ret.Installed ? m.NeedsUpdate() : false; ret.Name = m.Name; ret.Author = m.Author; ret.InstalledVersion = m.Version ?? "-"; ret.LatestVersion = m.LatestRelease?.TagName ?? "-"; ret.MinBTVersion = "-"; ret.MaxBTVersion = "-"; ret.Download = "- Mb"; ret.Description = m.Website ?? "-"; ret.InstallOrUpdate = ret.Installed ? m.NeedsUpdate() ? "Update" : "Uninstall" : "Install"; return(ret); }
public static void RefreshModList(IProgress <LoadProgress> progress, BMIwFormsApp.BMI form) { form.mods.Clear(); progress.Report(new LoadProgress { Text = "Loading mods from local directory...", Percentage = 0 }); System.IO.DirectoryInfo di = new DirectoryInfo(@"."); var dirs = di.EnumerateDirectories(); var dirsCount = dirs.Count(); int curCount = 0; foreach (DirectoryInfo d in dirs) { progress.Report(new LoadProgress { Text = "Loading mods from local directory...", Percentage = 33 * (curCount / dirsCount) }); try { Mod m = Mod.LoadFromDirectory(d.FullName); if (m != null) { form.mods.Add(m); } //else // Console.WriteLine($"{d.Name} didn't load right!"); } catch (Exception ext) { throw; } finally { curCount++; } } progress.Report(new LoadProgress { Text = "Loading Mods from BMI Index...", Percentage = 33 }); BMILib.IndexClient.Initialize(); var modListCount = BMILib.IndexClient.ModList.Count(); var modListCurrentCount = 0; foreach (Mod m in BMILib.IndexClient.ModList.Values) { progress.Report(new LoadProgress { Text = "Loading Mods from BMI Index...", Percentage = 33 + (33 * (modListCurrentCount / modListCount)) }); modListCurrentCount++; if (form.mods.Where(mm => mm.Name == m.Name).Count() > 0) { continue; } form.mods.Add(m); } //bs.DataSource = typeof(BMIObj); progress.Report(new LoadProgress { Text = "Fetching Most Recent Mod Version for all mods...", Percentage = 66 }); var totalModCount = form.mods.Count(); var currentModCount = 0; foreach (Mod m in form.mods.OrderBy(m => m.Name)) { progress.Report(new LoadProgress { Text = "Fetching Most Recent Mod Version for all mods...", Percentage = 66 + (33 * (currentModCount / totalModCount)) }); currentModCount++; if (m == null) { continue; } m.fetchReleasesFromWebsite(); //bs.Add(BMIObj.FromMod(m)); } form.bs.DataSource = BMIwFormsApp.BMI.CreateDataTable <BMIObj>(form.mods.Select(m => BMIObj.FromMod(m)).ToList()); form.dataGridView1.DataSource = form.bs; form.dataGridView1.AutoGenerateColumns = false; (form.bs.DataSource as DataTable).DefaultView.RowFilter = string.Format("Name LIKE '%{0}%' OR Author LIKE '%{0}%'", form.filterTextBox.Text); }