/***** DISABLE *****/ public static void Disable(AddonInfoFromYaml addon_info) { UserConfig info = Configuration.getConfigAsYAML(); if (info.installed.ContainsKey(addon_info.folder_name) && info.installed[addon_info.folder_name] != null) { if (info.disabled.ContainsKey(addon_info.folder_name) && !info.disabled[addon_info.folder_name]) { if (addon_info.install_mode != "arc") { Directory.Move( Path.Combine(Path.Combine(info.game_path, "addons"), addon_info.folder_name), Path.Combine("Disabled Plugins", addon_info.folder_name) ); } else { //probably broken if (!Directory.Exists(Path.Combine("Disabled Plugins", addon_info.folder_name))) { Directory.CreateDirectory(Path.Combine("Disabled Plugins", addon_info.folder_name)); } if (addon_info.addon_name == "BuildPad (Installed)") { File.Move( Path.Combine(Path.Combine(Path.Combine(info.game_path, "addons"), "arcdps"), Configuration.getConfigAsYAML().version["buildPad"]), Path.Combine(Path.Combine("Disabled Plugins", addon_info.folder_name), Configuration.getConfigAsYAML().version["buildPad"]) ); } else { File.Move( Path.Combine(Path.Combine(Path.Combine(info.game_path, "addons"), "arcdps"), addon_info.plugin_name), Path.Combine(Path.Combine("Disabled Plugins", addon_info.folder_name), addon_info.plugin_name) ); } } info.disabled[addon_info.folder_name] = true; Configuration.setConfigAsYAML(info); } } }
/// <summary> /// Attempts to read the game folder and determine whether the game is running on a 64 or 32-bit system. /// Based on that, sets the 'bin_folder' property in the configuration file. /// </summary> public static void DetermineSystemType() { UserConfig config = getConfigAsYAML(); if (fileSys.Directory.Exists(config.game_path.ToString())) { if (fileSys.Directory.Exists(config.game_path.ToString() + "\\bin64")) { config.bin_folder = "bin64"; config.exe_name = "Gw2-64.exe"; } else if (fileSys.Directory.Exists(config.game_path.ToString() + "\\bin")) { config.bin_folder = "bin"; config.exe_name = "Gw2.exe"; } setConfigAsYAML(config); } }
/// <summary> /// /// </summary> /// <returns>A list of AddonInfo objects representing all approved add-ons.</returns> public static ObservableCollection <AddonInfo> GenerateAddonList() { ObservableCollection <AddonInfo> Addons = new ObservableCollection <AddonInfo>(); //List of AddonInfo objects string[] AddonDirectories = Directory.GetDirectories("resources\\addons"); //Names of addon subdirectories in /resources/addons UserConfig userConfig = Configuration.getConfigAsYAML(); foreach (string addonFolderName in AddonDirectories) { if (addonFolderName != "resources\\addons\\d3d9_wrapper") { AddonInfo temp = AddonYamlReader.getAddonInInfo(addonFolderName.Replace("resources\\addons\\", "")); temp.folder_name = addonFolderName.Replace("resources\\addons\\", ""); if (userConfig.default_configuration.ContainsKey(temp.folder_name) && userConfig.default_configuration[temp.folder_name]) { temp.IsSelected = true; } Addons.Add(temp); //retrieving info from each addon subdirectory's update.yaml file and adding it to the list } } return(Addons); }
/// <summary> /// Checks if there is a new version of the application available. /// </summary> public static void CheckSelfUpdates() { UserConfig currentConfig = getConfigAsYAML(); UserConfig templateConfig = getTemplateConfig(); if (currentConfig.application_version != templateConfig.application_version) { currentConfig.application_version = templateConfig.application_version; setConfigAsYAML(currentConfig); } string thisVersion = getConfigAsYAML().application_version; string latestVersion; dynamic release_info = UpdateHelpers.GitReleaseInfo(applicationRepoUrl); latestVersion = release_info.tag_name; if (latestVersion != thisVersion) { OpeningViewModel.GetInstance.UpdateAvailable = latestVersion + " available!"; OpeningViewModel.GetInstance.UpdateLinkVisibility = Visibility.Visible; } }
/***** DELETE *****/ public static void delete(AddonInfoFromYaml addon_info) { UserConfig info = Configuration.getConfigAsYAML(); if (info.installed.ContainsKey(addon_info.folder_name) && info.installed[addon_info.folder_name] != null) { if (info.disabled.ContainsKey(addon_info.folder_name) && info.disabled[addon_info.folder_name]) { FileSystem.DeleteDirectory(Path.Combine("Disabled Plugins", addon_info.folder_name), UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin); info.disabled.Remove(addon_info.folder_name); info.installed.Remove(addon_info.folder_name); info.version.Remove(addon_info.folder_name); Configuration.setConfigAsYAML(info); } else { if (addon_info.install_mode != "arc") { FileSystem.DeleteDirectory(Path.Combine(Path.Combine(info.game_path, "addons"), addon_info.folder_name), UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin); if (info.disabled.ContainsKey(addon_info.folder_name)) { info.disabled.Remove(addon_info.folder_name); } info.installed.Remove(addon_info.folder_name); info.version.Remove(addon_info.folder_name); //deleting arcdps will delete other addons as well if (addon_info.folder_name == "arcdps") { foreach (AddonInfoFromYaml adj_info in ApprovedList.GenerateAddonList()) { if (adj_info.install_mode == "arc") { //if arc-dependent plugin is disabled, it won't get deleted since it's not in the /addons/arcdps folder if (info.disabled.ContainsKey(adj_info.folder_name) && !info.disabled[adj_info.folder_name]) { info.disabled.Remove(adj_info.folder_name); info.installed.Remove(adj_info.folder_name); info.version.Remove(adj_info.folder_name); } } } } } else { //buildpad check if (!addon_info.addon_name.Contains("BuildPad")) { FileSystem.DeleteFile(Path.Combine(Path.Combine(Path.Combine(info.game_path, "addons"), "arcdps"), addon_info.plugin_name), UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin); } else { string buildPadFileName = ""; string[] arcFiles = Directory.GetFiles(Path.Combine(Path.Combine(info.game_path, "addons"), "arcdps")); //search for plugin name in arc folder //TODO: Should break out of operation and give message if the plugin is not found. foreach (string arcFileName in arcFiles) { if (arcFileName.Contains("buildpad")) { buildPadFileName = Path.GetFileName(arcFileName); } } FileSystem.DeleteFile(Path.Combine(Path.Combine(Path.Combine(info.game_path, "addons"), "arcdps"), buildPadFileName), UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin); } if (info.disabled.ContainsKey(addon_info.folder_name)) { info.disabled.Remove(addon_info.folder_name); } info.installed.Remove(addon_info.folder_name); info.version.Remove(addon_info.folder_name); } Configuration.setConfigAsYAML(info); } } }
/***** DISABLE *****/ //TODO: Note to self May 1 2020: consider making some vanity methods to clean up all the Path.Combine()s in here; the code's a bit of a chore to read. public static void Disable(AddonInfoFromYaml addon_info) { UserConfig info = Configuration.getConfigAsYAML(); if (info.installed.ContainsKey(addon_info.folder_name) && info.installed[addon_info.folder_name] != null) { if (!Directory.Exists("Disabled Plugins")) { Directory.CreateDirectory("Disabled Plugins"); } if (info.disabled.ContainsKey(addon_info.folder_name) && !info.disabled[addon_info.folder_name]) { if (addon_info.install_mode != "arc") { Directory.Move( Path.Combine(Path.Combine(info.game_path, "addons"), addon_info.folder_name), Path.Combine("Disabled Plugins", addon_info.folder_name) ); } else { //probably broken if (!Directory.Exists(Path.Combine("Disabled Plugins", addon_info.folder_name))) { Directory.CreateDirectory(Path.Combine("Disabled Plugins", addon_info.folder_name)); } if (addon_info.addon_name.Contains("BuildPad")) { string buildPadFileName = ""; string[] arcFiles = Directory.GetFiles(Path.Combine(Path.Combine(info.game_path, "addons"), "arcdps")); //search for plugin name in arc folder //TODO: Should break out of operation and give message if the plugin is not found. foreach (string arcFileName in arcFiles) { if (arcFileName.Contains("buildpad")) { buildPadFileName = Path.GetFileName(arcFileName); } } File.Move( Path.Combine(Path.Combine(Path.Combine(info.game_path, "addons"), "arcdps"), buildPadFileName), Path.Combine(Path.Combine("Disabled Plugins", addon_info.folder_name), buildPadFileName) ); } else { File.Move( Path.Combine(Path.Combine(Path.Combine(info.game_path, "addons"), "arcdps"), addon_info.plugin_name), Path.Combine(Path.Combine("Disabled Plugins", addon_info.folder_name), addon_info.plugin_name) ); } } info.disabled[addon_info.folder_name] = true; Configuration.setConfigAsYAML(info); } } }
/// <summary> /// Writes the config-template.yaml file in the /resources folder (not in use, will keep for possible use in future) /// </summary> /// <param name="info"></param> public static void setTemplateYAML(UserConfig info) { fileSys.File.WriteAllText(config_template_path, new Serializer().Serialize(info)); }
/// <summary> /// Write the config.yaml file in the application folder /// </summary> /// <param name="info"></param> public static void setConfigAsYAML(UserConfig info) { String config_file_path = "config.yaml"; fileSys.File.WriteAllText(config_file_path, new Serializer().Serialize(info)); }