/// <summary> /// NOTE: filePath is relative to the base puzzle directory. /// </summary> public static void Save(PuzzleConfigClass config, string filePath) { try { string fullPath = Path.GetFullPath(Path.Combine(StandardPaths.ConfigDir, filePath)); Directory.CreateDirectory(Path.GetDirectoryName(fullPath)); DataContractHelper.SaveToXml(config, fullPath); } catch (System.Exception e) { string message = string.Format("Failed to save puzzle config class.\n{0}", e.Message); Log.Error(message); } }
/// <summary> /// Loads all the puzzles (recursively) from the puzzles dir. /// </summary> public static void LoadAllPuzzles(out IEnumerable <PuzzleConfigClass> standard, out IEnumerable <PuzzleConfigClass> user) { List <PuzzleConfigClass> resultStandard = new List <PuzzleConfigClass>(); List <PuzzleConfigClass> resultUser = new List <PuzzleConfigClass>(); List <string> files = new List <string>(); string[] userFiles = { }; string existingCurrentDirectory = System.Environment.CurrentDirectory; try { // We reset the current directory, because we want the paths relative to the puzzle dir. System.Environment.CurrentDirectory = StandardPaths.ConfigDir; files.AddRange(Directory.GetFiles("puzzles", "*.xml", SearchOption.AllDirectories)); userFiles = Directory.GetFiles("user", "*.xml", SearchOption.AllDirectories); } catch { } finally { System.Environment.CurrentDirectory = existingCurrentDirectory; } foreach (string file in files) { PuzzleConfigClass configClass = PuzzleConfigClass.Load(file); resultStandard.Add(configClass); } foreach (string file in userFiles) { PuzzleConfigClass configClass = PuzzleConfigClass.Load(file); resultUser.Add(configClass); } standard = resultStandard; user = resultUser; }