public bool SaveConfig(Guid presentationUID, GoogleIO2012Config config)
        {
            // Json erstellen
            string sCfg = "var SLIDE_CONFIG = ";

            var serializer = new DataContractJsonSerializer(typeof(GoogleIO2012Config));
            using (var stream = new MemoryStream())
            {
                serializer.WriteObject(stream, config);
                sCfg += System.Text.Encoding.Default.GetString(stream.ToArray());
            }

            sCfg += ";";

            // Format korrigieren
            sCfg = sCfg.Replace("\"__type\":\"GoogleIO2012ConfigPresenters:#De.Dhoffmann.Mono.FullscreenPresentation.Buslog\",", "");
            sCfg = sCfg.Replace("\\/", "/");

            // Dateinamen zusammenbauen
            string settingsFileName = Path.Combine(presentationsHelper.PresentationsFolder, presentationUID.ToString());
            settingsFileName = Path.Combine(settingsFileName, "slide_config.js");

            // Datei schreiben
            try
            {
                TextWriter txtWriter = new StreamWriter(settingsFileName, false);
                txtWriter.Write(sCfg);
                txtWriter.Flush();
                txtWriter.Close();

                return true;
            }
            catch (Exception ex)
            {
                Logging.Log(this, Logging.LoggingTypeError, "can't save presentation settings", ex);
            }

            return false;
        }
        public GoogleIO2012Config LoadConfig(Guid presentationUID)
        {
            GoogleIO2012Config ret = new GoogleIO2012Config();

            // Dateinamen zusammenbauen
            string contentFileName = Path.Combine(presentationsHelper.PresentationsFolder, presentationUID.ToString());
            contentFileName = Path.Combine(contentFileName, "slide_config.js");

            if (!File.Exists(contentFileName))
                return ret;

            // Datei auslesen
            TextReader txtReader = new StreamReader(contentFileName);
            string sCfg = txtReader.ReadToEnd();
            txtReader.Close();

            // Den JavaScript Overhead entfernen
            sCfg = sCfg.Remove(0, sCfg.IndexOf('{'));
            sCfg = sCfg.Remove(sCfg.LastIndexOf('}') + 1, (sCfg.Length - (sCfg.LastIndexOf('}') + 1)));

            // Javascript Kommentare entfernen
            sCfg = Regex.Replace(sCfg, "[^:](//.*?)\n", "\n", RegexOptions.Multiline);
            sCfg = Regex.Replace(sCfg, @"/\*(.*?)\*/", "", RegexOptions.Singleline);

            // Json parsen
            JsonValue jsonCfg = JsonObject.Parse(sCfg);

            if (jsonCfg != null && jsonCfg.Count >= 0)
            {
                if (jsonCfg.ContainsKey("settings"))
                {
                    ret.settings = new GoogleIO2012ConfigSettings();

                    JsonValue settings = jsonCfg["settings"];

                    if (settings.ContainsKey("title"))
                        ret.settings.title = settings["title"];

                    if (settings.ContainsKey("subtitle"))
                        ret.settings.subtitle = settings["subtitle"];

                    if (settings.ContainsKey("useBuilds"))
                        ret.settings.useBuilds = settings["useBuilds"];

                    if (settings.ContainsKey("usePrettify"))
                        ret.settings.usePrettify = settings["usePrettify"];

                    if (settings.ContainsKey("enableSlideAreas"))
                        ret.settings.enableSlideAreas = settings["enableSlideAreas"];

                    if (settings.ContainsKey("enableTouch"))
                        ret.settings.enableTouch = settings["enableTouch"];

                    if (settings.ContainsKey("analytics"))
                        ret.settings.analytics = settings["analytics"];

                    if (settings.ContainsKey("favIcon"))
                        ret.settings.favIcon = settings["favIcon"];

                    if (settings.ContainsKey("fonts"))
                    {
                        ret.settings.fonts = new List<string>();

                        foreach(JsonValue font in settings["fonts"] as JsonArray)
                            ret.settings.fonts.Add(font.ToString().Substring(1, font.ToString().Length - 2));
                    }

                    if (settings.ContainsKey("theme"))
                        ret.settings.theme = settings["theme"];
                }

                if (jsonCfg.ContainsKey("presenters"))
                {
                    ret.presenters = new List<GoogleIO2012ConfigPresenters>();
                    JsonValue presenters = jsonCfg["presenters"];

                    foreach(JsonValue presenter in presenters as JsonArray)
                    {
                        GoogleIO2012ConfigPresenters pres = new GoogleIO2012ConfigPresenters();

                        if (presenter.ContainsKey("name"))
                            pres.name = presenter["name"];

                        if (presenter.ContainsKey("company"))
                            pres.company = presenter["company"];

                        if (presenter.ContainsKey("gplus"))
                            pres.gplus = presenter["gplus"];

                        if (presenter.ContainsKey("twitter"))
                            pres.twitter = presenter["twitter"];

                        if (presenter.ContainsKey("www"))
                            pres.www = presenter["www"];

                        if (presenter.ContainsKey("github"))
                            pres.github = presenter["github"];

                        ret.presenters.Add(pres);
                    }
                }
            }

            return ret;
        }