From: jp Date: Fri, 18 Mar 2016 11:30:14 +0000 (+0100) Subject: Configuration class X-Git-Tag: v0.4~75 X-Git-Url: https://git.osiis.dedyn.io/?a=commitdiff_plain;h=e5069093ba483ef8644c5cac685d76f2600606f0;p=jp%2Fcrow.git Configuration class --- diff --git a/Crow.csproj b/Crow.csproj index f0d0aa63..7dbe2fa7 100644 --- a/Crow.csproj +++ b/Crow.csproj @@ -22,6 +22,7 @@ v4.5 AnyCPU 0.4 + Crow project description true @@ -147,6 +148,9 @@ + + + diff --git a/src/Configuration.cs b/src/Configuration.cs new file mode 100644 index 00000000..c3e20201 --- /dev/null +++ b/src/Configuration.cs @@ -0,0 +1,108 @@ +// +// Configuration.cs +// +// Author: +// Jean-Philippe Bruyère +// +// Copyright (c) 2016 jp +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +using System; +using System.Reflection; +using System.IO; +using System.Collections.Generic; + +namespace Crow +{ + public static class Configuration + { + static string configPath, configFileName = "app.config"; + static Dictionary items; + + static Configuration () + { + items = new Dictionary (); + string configRoot = + Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), + ".config"); + + Assembly a = Assembly.GetEntryAssembly (); + string appName = a.GetName().Name; + + OperatingSystem os = Environment.OSVersion; + switch (os.Platform) { + case PlatformID.Win32S: + case PlatformID.Win32Windows: + case PlatformID.Win32NT: + case PlatformID.WinCE: + break; + case PlatformID.Unix: + configPath = Path.Combine (configRoot, appName); + break; + case PlatformID.Xbox: + break; + case PlatformID.MacOSX: + break; + } + if (!Directory.Exists(configPath)) + Directory.CreateDirectory (configPath); + load (); + } + public static T Get(string key) + { + if (!items.ContainsKey (key)) + return default(T); + Type type = typeof(T); + MethodInfo miParse = type.GetMethod ("Parse", BindingFlags.Static); + if (miParse == null) + return (T)Convert.ChangeType (items [key], typeof(T)); + + return (T)Convert.ChangeType (miParse.Invoke (null, new object[]{ items [key] }), type); + } + public static void Set(string key, T value) + { + items [key] = value.ToString(); + save (); + } + static void save(){ + using (Stream s = new FileStream(Path.Combine(configPath, configFileName),FileMode.Create)){ + using (StreamWriter sw = new StreamWriter (s)) { + foreach (string key in items.Keys) { + sw.WriteLine(key + "=" + items[key]); + } + } + } + } + static void load(){ + string path = Path.Combine(configPath, configFileName); + if (!File.Exists (path)) + return; + using (Stream s = new FileStream(path, FileMode.Open)){ + using (StreamReader sr = new StreamReader (s)) { + while (!sr.EndOfStream) { + string l = sr.ReadLine(); + if (string.IsNullOrEmpty (l.Trim ())) + continue; + string[] tmp = l.Trim ().Split ('='); + if (tmp.Length != 2) + continue; + items[tmp [0].Trim ()] = tmp [1].Trim (); + } + } + } + } + } +} +