public static KeyBindingScheme LoadFromFile(string filePath) { var file = new XmlObjectParser <KeyBindingSchemeFile>(filePath).Parse(); var list = new List <CommandGestureScopeMapping>(); var scopes = IoC.GetAll <GestureScope>().ToList(); var service = IoC.Get <ICommandService>(); if (file.Shortcuts == null) { return(new KeyBindingScheme(file.Name, list)); } foreach (var shortcut in file.Shortcuts) { var cdb = service.GetCommandDefinitionBy("t", shortcut.Command); if (cdb == null || !(cdb is CommandDefinition cd)) { continue; } if (!Guid.TryParse(shortcut.Scope, out var scopeId)) { continue; } var scope = scopes.FirstOrDefault(x => x.Id.Equals(scopeId)); try { list.Add(new CommandGestureScopeMapping(scope, cd, (MultiKeyGesture) new MultiKeyGestureConverter().ConvertFrom(null, CultureInfo.InvariantCulture, shortcut.Value))); } catch (ArgumentException) { } } return(new KeyBindingScheme(file.Name, list)); }
internal static bool DownloadCurrentCatalog(Uri currentMetadataUri, out Catalogs currentCatalog) { currentCatalog = default; using var metadataStream = new MemoryStream(); Logger.Trace($"Downloading current metadata file from {currentMetadataUri}"); if (!Downloader.Download(currentMetadataUri, metadataStream)) { Logger.Error("Unable to get the current metadata file"); return(false); } try { var parser = new XmlObjectParser <Catalogs>(metadataStream); currentCatalog = parser.Parse(); } catch (Exception e) { Logger.Fatal(e, $"Download failed: {e.Message}"); return(false); } Logger.Info("Succeeded download."); return(true); }
private void GenerteRestoreXml() { tb_customModDir.Text = "Republic_at_War"; var fileContainer = new FileContainer { Version = tb_version.Text, Files = new List<FileContainerFile>() }; Parallel.ForEach( Directory.EnumerateFiles(Directory.GetCurrentDirectory() + @"\Data\XML", "*", SearchOption.AllDirectories), x => AddFile(fileContainer.Files, x, TargetType.Ai)); Parallel.ForEach( Directory.EnumerateFiles(Directory.GetCurrentDirectory() + @"\Data\Scripts", "*", SearchOption.AllDirectories), x => AddFile(fileContainer.Files, x, TargetType.Ai)); Parallel.ForEach( Directory.EnumerateFiles(Directory.GetCurrentDirectory() + @"\Data\CustomMaps", "*", SearchOption.AllDirectories), x => AddFile(fileContainer.Files, x, TargetType.Ai)); if (string.IsNullOrEmpty(tb_customModDir.Text)) Parallel.ForEach( Directory.EnumerateFiles(Directory.GetCurrentDirectory() + @"\Mods\Republic_at_War", "*", SearchOption.AllDirectories), x => AddFile(fileContainer.Files, x, TargetType.Mod, @"\Mods\Republic_at_War")); else Parallel.ForEach( Directory.EnumerateFiles(Directory.GetCurrentDirectory() + @"\Mods\" + tb_customModDir.Text, "*", SearchOption.AllDirectories), x => AddFile(fileContainer.Files, x, TargetType.Mod, @"\Mods\" + tb_customModDir.Text)); //Now replace dublicate files from previous versions if (File.Exists(tb_prevFile.Text)) { var xmlObjectParser = new XmlObjectParser<FileContainer>(tb_prevFile.Text); var preVersionData = xmlObjectParser.Parse(); List<FileContainerFile> newFiles = new List<FileContainerFile>(); foreach (var file in fileContainer.Files) { FileContainerFile prefFile = preVersionData.Files.Find( f => f.Name == file.Name && file.TargetPath.Contains(f.TargetPath) && f.Hash == file.Hash); if (prefFile != null) file.SourcePath = prefFile.SourcePath; else newFiles.Add(new FileContainerFile {Name = file.Name, TargetPath = file.TargetPath, TargetType = file.TargetType}); } var xmlNewString = newFiles.Serialize(); var newDoc = XDocument.Parse(xmlNewString); File.WriteAllText(tb_outDir.Text + @"\\NewFiles.xml", newDoc.ToString()); if (!Directory.Exists(tb_outDir.Text + "\\New Files\\")) Directory.CreateDirectory(tb_outDir.Text + "\\New Files\\"); if (checkBox1.Checked) foreach (var newFile in newFiles) { try { if (newFile.TargetType == TargetType.Ai) { var i = Directory.GetCurrentDirectory(); var s = i + newFile.TargetPath; s = s.TrimEnd('\\'); s = Path.GetFullPath(s); var t = tb_outDir.Text + "\\New Files\\AI" + newFile.TargetPath; t = t.TrimEnd('\\'); if (!Directory.Exists(new FileInfo(t).DirectoryName)) Directory.CreateDirectory(new FileInfo(t).DirectoryName); t = t.TrimEnd('\\'); File.Copy(s, t); } else { var s = Directory.GetCurrentDirectory() + @"\Mods\" + tb_customModDir.Text + newFile.TargetPath; s = s.TrimEnd('\\'); s = Path.GetFullPath(s); var t = tb_outDir.Text + "\\New Files" + newFile.TargetPath; t = t.TrimEnd('\\'); if (!Directory.Exists(new FileInfo(t).DirectoryName)) Directory.CreateDirectory(new FileInfo(t).DirectoryName); t = t.TrimEnd('\\'); File.Copy(s, t); } } catch (Exception e) { MessageBox.Show("File " + newFile.Name + " could not be added.\r\n" + e.Message); } } } var xmlString = fileContainer.Serialize(); var doc = XDocument.Parse(xmlString); File.WriteAllText(tb_outDir.Text + @"\\RestoreModFileContainer.xml", doc.ToString()); }