private void tsmiAddonSetAsUpdated_Click(object sender, EventArgs e) { var tsmi = sender as ToolStripMenuItem; var addon = tsmi.Tag as Addon; UpdateStatusList.Set(addon.Name, addon.LocalVersion); UpdateStatusList.Save(); addon.LocalVersionUpdated(); }
protected override void OnLoad(EventArgs e) { base.OnLoad(e); // Setup Addon Display dgvAddons.AutoGenerateColumns = false; dgvColAddonName.DataPropertyName = "Name"; dgvColAddonLastUpdated.DataPropertyName = "LastUpdated"; dgvColAddonLocalVersion.DataPropertyName = "LocalVersion"; dgvColAddonPreferredMapping.DataPropertyName = "PreferredMapping"; dgvColAddonPreferredMapping.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; // Setup WorkerThread Status Display dgvThreadActivity.AutoGenerateColumns = false; dgvColThreadID.DataPropertyName = "ThreadID"; dgvColThreadState.DataPropertyName = "ThreadStatus"; dgvColThreadInfo.DataPropertyName = "InfoText"; dgvColThreadInfo.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; // Setup Log Display dgvLog.AutoGenerateColumns = false; dgvLog.ColumnHeadersVisible = false; dgvColLogTime.DataPropertyName = "Date"; dgvColLogType.DataPropertyName = "Type"; dgvColLogMessage.DataPropertyName = "Message"; dgvColLogMessage.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; // Setup Mappings Display dgvMappings.AutoGenerateColumns = false; dgvColMappingSite.DataPropertyName = "AddonSiteId"; dgvColMappingVersion.DataPropertyName = "RemoteVersion"; dgvColMappingVersion.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; dgvColMappingLastUpdated.DataPropertyName = "LastUpdated"; // Initialize Relation Display lvRelations.Layout += lvRelations_Layout; // Initialize Logger SetLogLevel(Config.Instance.LogLevel); Logger.Instance.LogEntry += Logger_LogEntry; // Initialize the Thread Manager ThreadManager.Initialize(); // Init Local Status List UpdateStatusList.Load(); // Associate DataSources dgvThreadActivity.DataSource = ThreadManager.Instance.WorkerThreadList; // Fire OnLoaded after everything is Done Application.Idle += OnLoaded; }
public override void DoWork(WorkerThread workerThread) { var addon = _addon; var mapping = _mapping; if (_addon == null) { addon = mapping.Addon; } // Get Remote Version Logger.Instance.AddLog(LogType.Information, "Thread #{0}: Version Check for {1}", workerThread.ThreadId, addon.Name); if (mapping != null) { // Only one Mapping workerThread.InfoText = string.Format("Get Version for \"{0}\" from {1}", addon.Name, mapping.AddonSiteId); mapping.CheckRemote(); } else { // All (or no) Mappings workerThread.InfoText = string.Format("Get Versions for \"{0}\"", addon.Name); foreach (var map in addon.Mappings) { map.CheckRemote(); } } // Check if the Addon needs updating and which Mapping is the Best var stats = UpdateStatusList.Get(addon.Name); foreach (var addonMapping in addon.Mappings) { if (stats != null) { if (stats.LastUpdated > addonMapping.LastUpdated) { // Skip if the Local Date is bigger than the Remote Date continue; } } // If no Mapping defined yet, define it now if (addon.PreferredMapping == null) { addon.PreferredMapping = addonMapping; continue; } // Assign by Preferred AddonSiteId preferred; if (Config.Instance.GetPreferredMapping(addon, out preferred)) { if (addonMapping.AddonSiteId == preferred) { addon.PreferredMapping = addonMapping; } // If a Preferred Mapping is set, skip all others continue; } // Assign by NoLib Setting if (Config.Instance.PreferNoLib) { if (addonMapping.AddonSiteId == AddonSiteId.wowace || addonMapping.AddonSiteId == AddonSiteId.curseforge) { addon.PreferredMapping = addonMapping; continue; } } // Check if the Mapping has a newer Date if (addonMapping.LastUpdated > addon.PreferredMapping.LastUpdated) { addon.PreferredMapping = addonMapping; continue; } // Assign by Priority var indexOld = Config.Instance.AddonSites.IndexOf(addon.PreferredMapping.AddonSiteId); var indexNew = Config.Instance.AddonSites.IndexOf(addonMapping.AddonSiteId); if (indexNew >= 0 && indexNew < indexOld) { addon.PreferredMapping = addonMapping; } } }
public override void DoWork(WorkerThread workerThread) { workerThread.InfoText = _addon.Name; var mapping = _mapping; if (_addon.Mappings.Count <= 0) { // Addon has no Mappings, skip Logger.Instance.AddLog(LogType.Warning, "Thread #{0}: Addon {1} has no Mapping", workerThread.ThreadId, _addon.Name); return; } // Define the Mapping to use if (mapping == null) { // If no specific Mapping given, use Preferred Mapping mapping = _addon.PreferredMapping; } // If the Mapping still is undefined (like no Update Check was made) if (mapping == null) { Logger.Instance.AddLog(LogType.Warning, "Thread #{0}: Addon {1} has no Mapping to Update", workerThread.ThreadId, _addon.Name); return; } // Get the File Path / Url Logger.Instance.AddLog(LogType.Information, "Thread #{0}: Updating {1} from {2}", workerThread.ThreadId, _addon.Name, mapping.AddonSiteId); var fileUrl = mapping.GetFilePath(); if (fileUrl == string.Empty) { Logger.Instance.AddLog(LogType.Warning, "Thread #{0}: File for {1} incorrect", workerThread.ThreadId, _addon.Name); return; } string archiveFilePath; if (fileUrl.ToLower().StartsWith("http:") || fileUrl.ToLower().StartsWith("https:")) { // Download workerThread.InfoText = string.Format("DL from {0}: {1}", mapping.AddonSiteId, _addon.Name); archiveFilePath = WebHelper.DownloadFileToTemp(fileUrl, workerThread); // Check if the Download was correct if (archiveFilePath == string.Empty) { Logger.Instance.AddLog(LogType.Warning, "Thread #{0}: Download for {1} failed", workerThread.ThreadId, _addon.Name); return; } Logger.Instance.AddLog(LogType.Information, "Thread #{0}: Downloaded to {1}", workerThread.ThreadId, archiveFilePath); } else { // A File was selected archiveFilePath = fileUrl; } var has7z = ArchiveHelper.Exists7z(); var archiveFolderList = new List <string>(); // Check if 7z Exists if (has7z) { // Get the Folder List (for Deletion) archiveFolderList = ArchiveHelper.GetRootFolders(archiveFilePath); // Simple Check if the Archive looks right if (!ArchiveHelper.CheckIntegrity(archiveFilePath, _addon.Name)) { // If now, warn us using (var f = new ArchiveContentForm(archiveFilePath)) { if (f.ShowDialog() != DialogResult.OK) { Logger.Instance.AddLog(LogType.Information, "Thread #{0}: cancelled by User Request", workerThread.ThreadId); return; } } } } // Delete Old if (Config.Instance.DeleteBeforeUpdate) { if (_addon.IsInstalled) { if (!has7z) { MessageBox.Show("Please install 7z to get sure that the right Folders get Deleted"); // Straight-Forward Delete DeleteType delType; foreach (var subAddon in _addon.SubAddons) { delType = subAddon.Delete(); Logger.Instance.AddLog(LogType.Information, "Thread #{0}: SubAddon {1} {2}", workerThread.ThreadId, subAddon.Name, delType.ToString()); } delType = _addon.Delete(); Logger.Instance.AddLog(LogType.Information, "Thread #{0}: Addon {1} {2}", workerThread.ThreadId, _addon.Name, delType.ToString()); } else { // Delete by Archive Content var deletedList = new List <string>(); foreach (var archiveFolder in archiveFolderList) { var delType = Addon.DeleteByName(archiveFolder); if (delType == DeleteType.Deleted || delType == DeleteType.MovedToTrash) { deletedList.Add(archiveFolder); } Logger.Instance.AddLog(LogType.Information, "Thread #{0}: Folder {1} {2}", workerThread.ThreadId, archiveFolder, delType.ToString()); } foreach (var subAddon in _addon.SubAddons) { if (!deletedList.Contains(subAddon.Name)) { Logger.Instance.AddLog(LogType.Warning, "Thread #{0}: SubAddon {1} was not in Archive", workerThread.ThreadId, subAddon.Name); } } if (!deletedList.Contains(_addon.Name)) { Logger.Instance.AddLog(LogType.Warning, "Thread #{0}: Addon {1} was not in Archive", workerThread.ThreadId, _addon.Name); } } } } Logger.Instance.AddLog(LogType.Information, "Thread #{0}: Expanding to {1}", workerThread.ThreadId, Addon.GetFolderPath()); // Expand ArchiveHelper.Expand(archiveFilePath, Addon.GetFolderPath()); // Set the Updated Date UpdateStatusList.Set(_addon.Name, mapping.RemoteVersion); UpdateStatusList.Save(); // Delete Temp File Logger.Instance.AddLog(LogType.Debug, "Thread #{0}: Deleting {1}", workerThread.ThreadId, archiveFilePath); File.Delete(archiveFilePath); // Mark as just updated _addon.LocalVersionUpdated(); }