public static SlideShow.Settings Load() { string settingsPath = Path.Combine(s_configPath, c_settingsFilename); // If the configuration file doesn't exist, copy in default (if it exists) if (!File.Exists(settingsPath)) { string defaultSettingsPath = Path.Combine( Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]), c_defaultSettingsFilename); if (File.Exists(defaultSettingsPath)) { File.Copy(defaultSettingsPath, settingsPath); } } // Create the result var list = new List <KeyValuePair <string, object> >(); var settings = new SlideShow.Settings(); try { XElement doc = null; using (var stream = new FileStream(settingsPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { using (var jsonReader = System.Runtime.Serialization.Json.JsonReaderWriterFactory.CreateJsonReader(stream, Encoding.UTF8, new System.Xml.XmlDictionaryReaderQuotas(), null)) { doc = XElement.Load(jsonReader); } } foreach (var ele in doc.Elements()) { switch (ele.Name.LocalName) { case c_keyRootPath: settings.RootPath = ele.Value; break; case c_keyPaths: foreach (var item in ele.Elements("item")) { settings.Paths.Add(item.Value); } break; case c_keyAdvanceTime: { int intValue; if (int.TryParse(ele.Value, out intValue)) { settings.AdvanceTime = intValue; } } break; case c_keyFadeTime: { int intValue; if (int.TryParse(ele.Value, out intValue)) { settings.FadeTime = intValue; } } break; case c_keyShowMetadata: { int intValue; if (ele.Value.Equals(c_true, StringComparison.OrdinalIgnoreCase)) { settings.ShowMetadata = true; } else if (ele.Value.Equals(c_false, StringComparison.OrdinalIgnoreCase)) { settings.ShowMetadata = false; } else if (int.TryParse(ele.Value, out intValue)) { settings.ShowMetadata = (intValue != 0); } } break; } } } catch (Exception err) { // Suppress any exception and just return blank configuration. // The only common form is FileNotFound. System.Diagnostics.Debug.Assert(err is FileNotFoundException); } return(settings); }
public static void Save(SlideShow.Settings settings) { // Merge existing settings { var existing = Load(); if (string.IsNullOrEmpty(settings.RootPath)) { settings.RootPath = existing.RootPath; } if (settings.Paths.Count == 0) { foreach (var p in existing.Paths) { settings.Paths.Add(p); } } if (!settings.AdvanceTime.HasValue) { settings.AdvanceTime = existing.AdvanceTime; } if (!settings.FadeTime.HasValue) { settings.FadeTime = existing.FadeTime; } if (!settings.ShowMetadata.HasValue) { settings.ShowMetadata = existing.ShowMetadata; } } string path = Path.Combine(s_configPath, c_settingsFilename); using (var writer = new StreamWriter(path, false, s_utf8)) { writer.WriteLine("{"); bool first = true; if (!string.IsNullOrEmpty(settings.RootPath)) { first = false; writer.Write($" \"{c_keyRootPath}\": \"{JsonEncode(settings.RootPath)}\""); } if (settings.Paths.Count > 0) { if (!first) { writer.WriteLine(","); } first = false; writer.WriteLine($" \"{c_keyPaths}\": ["); bool first2 = true; foreach (var val in settings.Paths) { if (!first2) { writer.WriteLine(","); } first2 = false; writer.Write($" \"{JsonEncode(val)}\""); } writer.WriteLine(); writer.Write(" ]"); } if (settings.AdvanceTime.HasValue) { if (!first) { writer.WriteLine(","); } first = false; writer.Write($" \"{c_keyAdvanceTime}\": \"{JsonEncode(settings.AdvanceTime.ToString())}\""); } if (settings.FadeTime.HasValue) { if (!first) { writer.WriteLine(","); } first = false; writer.Write($" \"{c_keyFadeTime}\": \"{JsonEncode(settings.FadeTime.ToString())}\""); } if (settings.ShowMetadata.HasValue) { if (!first) { writer.WriteLine(","); } first = false; writer.Write($" \"{c_keyShowMetadata}\": \"{JsonEncode(settings.ShowMetadata.Value ? c_true : c_false)}\""); } writer.WriteLine(); writer.WriteLine("}"); } }