From 942aecc710b64ee16abad2cf6c8b895234482541 Mon Sep 17 00:00:00 2001 From: Hylke Bons Date: Wed, 25 May 2011 21:46:46 +0100 Subject: [PATCH] Use new XML based config scheme --- SparkleLib/SparkleConfig.cs | 39 +++++++++++++++++++++-- SparkleShare/SparkleController.cs | 53 ++++++++++++++++++++++++------- 2 files changed, 79 insertions(+), 13 deletions(-) diff --git a/SparkleLib/SparkleConfig.cs b/SparkleLib/SparkleConfig.cs index f7bad56d..479f6653 100644 --- a/SparkleLib/SparkleConfig.cs +++ b/SparkleLib/SparkleConfig.cs @@ -17,6 +17,7 @@ using System; using System.IO; +using System.Collections.Generic; using System.Xml; namespace SparkleLib { @@ -69,7 +70,19 @@ namespace SparkleLib { } - public void AddFolder (string name, SparkleBackend backend) + public string [] Folders { + get { + List folders = new List (); + + foreach (XmlNode node_folder in SelectNodes ("/sparkleshare/folder")) + folders.Add (node_folder ["name"].InnerText); + + return folders.ToArray (); + } + } + + + public void AddFolder (string name, string backend) { XmlNode node_folder = CreateNode (XmlNodeType.Element, "folder", null); @@ -77,7 +90,7 @@ namespace SparkleLib { node_name.InnerText = name; XmlNode node_backend = CreateElement ("backend"); - node_backend.InnerText = backend.Name; + node_backend.InnerText = backend; node_folder.AppendChild (node_name); node_folder.AppendChild (node_backend); @@ -100,6 +113,28 @@ namespace SparkleLib { } + public bool FolderExists (string name) + { + foreach (XmlNode node_folder in SelectNodes ("/sparkleshare/folder")) { + if (node_folder ["name"].InnerText.Equals (name)) + return true; + } + + return false; + } + + + public string GetBackendForFolder (string name) + { + foreach (XmlNode node_folder in SelectNodes ("/sparkleshare/folder")) { + if (node_folder ["name"].InnerText.Equals (name)) + return node_folder ["backend"].InnerText; + } + + return null; + } + + public void Save () { if (!File.Exists (Path)) diff --git a/SparkleShare/SparkleController.cs b/SparkleShare/SparkleController.cs index 34d4f875..90856186 100644 --- a/SparkleShare/SparkleController.cs +++ b/SparkleShare/SparkleController.cs @@ -134,6 +134,7 @@ namespace SparkleShare { // Remove the repository when a delete event occurs watcher.Deleted += delegate (object o, FileSystemEventArgs args) { RemoveRepository (args.FullPath); + SparkleConfig.DefaultConfig.RemoveFolder (Path.GetFileName (args.Name)); if (FolderListChanged != null) FolderListChanged (); @@ -186,8 +187,8 @@ namespace SparkleShare { string user_email = match.Groups [1].Value; - UserName = user_name; - UserEmail = UserEmail; + WriteDefaultConfig (user_name, user_email); + File.Delete (old_global_config_file_path); } @@ -499,18 +500,33 @@ namespace SparkleShare { if (folder_path.Equals (SparklePaths.SparkleTmpPath)) return; + string folder_name = Path.GetFileName (folder_path); + string backend = SparkleConfig.DefaultConfig.GetBackendForFolder (folder_name); + + if (backend == null) + return; + + SparkleRepoBase repo = null; - if (Directory.Exists (Path.Combine (folder_path, ".git"))) { + + if (backend.Equals ("Git")) { Console.WriteLine ("Git: " + folder_path); repo = new SparkleRepoGit (folder_path, SparkleBackend.DefaultBackend); - } else if (Directory.Exists (Path.Combine (folder_path, ".hg"))) { - SparkleBackend hg_backend = new SparkleBackend ("Hg", new string [] {"/opt/local/bin/hg", "/usr/bin/hg"}); + } else if (backend.Equals ("Hg")) { + SparkleBackend hg_backend = new SparkleBackend ("Hg", + new string [] { + "/opt/local/bin/hg", + "/usr/bin/hg" + }); + repo = new SparkleRepoHg (folder_path, hg_backend); - } else if (Directory.Exists (Path.Combine (folder_path, ".sparkleshare"))) { + + } else if (backend.Equals ("Scp")) { SparkleBackend scp_backend = new SparkleBackend ("Scp", new string [] {"/usr/bin/scp"}); repo = new SparkleRepoScp (folder_path, scp_backend); } + repo.NewChangeSet += delegate (SparkleChangeSet change_set, string repository_path) { string message = FormatMessage (change_set); @@ -566,8 +582,14 @@ namespace SparkleShare { { Repositories = new List (); - foreach (string folder_path in Directory.GetDirectories (SparklePaths.SparklePath)) - AddRepository (folder_path); + foreach (string folder_name in SparkleConfig.DefaultConfig.Folders) { + string folder_path = Path.Combine (SparklePaths.SparklePath, folder_name); + + if (Directory.Exists (folder_path)) + AddRepository (folder_path); + else + SparkleConfig.DefaultConfig.RemoveFolder (folder_name); + } if (FolderListChanged != null) FolderListChanged (); @@ -972,15 +994,22 @@ namespace SparkleShare { string canonical_name = Path.GetFileNameWithoutExtension (name); string tmp_folder = Path.Combine (SparklePaths.SparkleTmpPath, canonical_name); - SparkleFetcherBase fetcher; + SparkleFetcherBase fetcher = null; + string backend = null; + if (url.EndsWith (".hg")) { - url = url.Substring (0, (url.Length - 3)); + url = url.Substring (0, (url.Length - 3)); fetcher = new SparkleFetcherHg (url, tmp_folder); + backend = "Hg"; + } else if (url.EndsWith (".scp")) { - url = url.Substring (0, (url.Length - 4)); + url = url.Substring (0, (url.Length - 4)); fetcher = new SparkleFetcherScp (url, tmp_folder); + backend = "Scp"; + } else { fetcher = new SparkleFetcherGit (url, tmp_folder); + backend = "Git"; } bool target_folder_exists = Directory.Exists (Path.Combine (SparklePaths.SparklePath, canonical_name)); @@ -1011,6 +1040,8 @@ namespace SparkleShare { SparkleHelpers.DebugInfo ("Controller", "Error moving folder: " + e.Message); } + + SparkleConfig.DefaultConfig.AddFolder (target_folder_name, backend); AddRepository (target_folder_path); if (FolderFetched != null)