Fix configuration issues

This commit is contained in:
Hylke Bons 2011-05-26 20:46:49 +01:00
parent d9cf40153f
commit 109f75aee9
7 changed files with 119 additions and 144 deletions

View file

@ -19,6 +19,7 @@ using System;
namespace SparkleLib { namespace SparkleLib {
public class Defines { public class Defines {
public const string VERSION = "@VERSION@"; public const string VERSION = "@VERSION@";
public const string LOCALE_DIR = "@prefix@/share/locale"; public const string LOCALE_DIR = "@prefix@/share/locale";
public const string DATAROOTDIR = "@expanded_datadir@"; public const string DATAROOTDIR = "@expanded_datadir@";

View file

@ -302,7 +302,7 @@ namespace SparkleLib {
// Append a timestamp to local version // Append a timestamp to local version
string timestamp = DateTime.Now.ToString ("HH:mm MMM d"); string timestamp = DateTime.Now.ToString ("HH:mm MMM d");
string their_path = conflicting_path + " (" + UserName + ", " + timestamp + ")"; string their_path = conflicting_path + " (" + SparkleConfig.DefaultConfig.UserName + ", " + timestamp + ")";
string abs_conflicting_path = Path.Combine (LocalPath, conflicting_path); string abs_conflicting_path = Path.Combine (LocalPath, conflicting_path);
string abs_their_path = Path.Combine (LocalPath, their_path); string abs_their_path = Path.Combine (LocalPath, their_path);

View file

@ -20,26 +20,65 @@ using System.IO;
using System.Collections.Generic; using System.Collections.Generic;
using System.Xml; using System.Xml;
using Mono.Unix;
namespace SparkleLib { namespace SparkleLib {
public class SparkleConfig : XmlDocument { public class SparkleConfig : XmlDocument {
public static SparkleConfig DefaultConfig = new SparkleConfig ( public static SparkleConfig DefaultConfig = new SparkleConfig (
System.IO.Path.Combine (SparklePaths.SparkleConfigPath, "config.xml")); SparklePaths.SparkleConfigPath, "config.xml");
public string Path; public string Path;
public SparkleConfig (string path) public SparkleConfig (string config_path, string config_file_name)
{ {
if (!File.Exists (path)) Path = System.IO.Path.Combine (config_path, config_file_name);
throw new ConfigFileNotFoundException (path + " does not exist");
if (!Directory.Exists (config_path)) {
Directory.CreateDirectory (config_path);
SparkleHelpers.DebugInfo ("Config", "Created \"" + config_path + "\"");
}
string icons_path = System.IO.Path.Combine (config_path, "icons");
if (!Directory.Exists (icons_path)) {
Directory.CreateDirectory (icons_path);
SparkleHelpers.DebugInfo ("Config", "Created '" + icons_path + "'");
}
if (!File.Exists (Path))
CreateInitialConfig ();
Path = path;
Load (Path); Load (Path);
} }
private void CreateInitialConfig ()
{
string user_name = new UnixUserInfo (UnixEnvironment.UserName).RealName;
if (string.IsNullOrEmpty (user_name))
user_name = "";
else
user_name = user_name.TrimEnd (",".ToCharArray());
TextWriter writer = new StreamWriter (Path);
string n = Environment.NewLine;
writer.Write ("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" + n +
"<sparkleshare>" + n +
" <user>" + n +
" <name>" + user_name + "</name>" + n +
" <email>Unknown</email>" + n +
" </user>" + n +
"</sparkleshare>");
writer.Close ();
SparkleHelpers.DebugInfo ("Config", "Created \"" + Path + "\"");
}
public string UserName { public string UserName {
get { get {
XmlNode node = SelectSingleNode ("/sparkleshare/user/name/text()"); XmlNode node = SelectSingleNode ("/sparkleshare/user/name/text()");
@ -57,12 +96,12 @@ namespace SparkleLib {
public string UserEmail { public string UserEmail {
get { get {
XmlNode node = SelectSingleNode ("/sparkleshare/user/name/email()"); XmlNode node = SelectSingleNode ("/sparkleshare/user/email/text()");
return node.Value; return node.Value;
} }
set { set {
XmlNode node = SelectSingleNode ("/sparkleshare/user/name/email()"); XmlNode node = SelectSingleNode ("/sparkleshare/user/email/text()");
node.InnerText = value; node.InnerText = value;
Save (); Save ();
@ -70,14 +109,14 @@ namespace SparkleLib {
} }
public string [] Folders { public List<string> Folders {
get { get {
List<string> folders = new List<string> (); List<string> folders = new List<string> ();
foreach (XmlNode node_folder in SelectNodes ("/sparkleshare/folder")) foreach (XmlNode node_folder in SelectNodes ("/sparkleshare/folder"))
folders.Add (node_folder ["name"].InnerText); folders.Add (node_folder ["name"].InnerText);
return folders.ToArray (); return folders;
} }
} }
@ -135,12 +174,44 @@ namespace SparkleLib {
} }
public string GetConfigOption (string name)
{
XmlNode node = SelectSingleNode ("/sparkleshare/" + name);
if (node != null)
return node.InnerText;
else
return null;
}
public void SetConfigOption (string name, string content)
{
XmlNode node = SelectSingleNode ("/sparkleshare/" + name);
if (node != null) {
node.InnerText = content;
} else {
node = CreateElement (name);
node.InnerText = content;
XmlNode node_root = SelectSingleNode ("/sparkleshare");
node_root.AppendChild (node);
}
SparkleHelpers.DebugInfo ("Config", "Updated " + name + ":" + content);
Save ();
}
public void Save () public void Save ()
{ {
if (!File.Exists (Path)) if (!File.Exists (Path))
throw new ConfigFileNotFoundException (Path + " does not exist"); throw new ConfigFileNotFoundException (Path + " does not exist");
Save (Path); Save (Path);
SparkleHelpers.DebugInfo ("Config", "Updated \"" + Path + "\"");
} }
} }
@ -150,4 +221,4 @@ namespace SparkleLib {
public ConfigFileNotFoundException (string message) : public ConfigFileNotFoundException (string message) :
base (message) { } base (message) { }
} }
} }

View file

@ -451,22 +451,6 @@ namespace SparkleLib {
} }
protected string UserName
{
get {
return SparkleConfig.DefaultConfig.UserName;
}
}
protected string UserEmail
{
get {
return SparkleConfig.DefaultConfig.UserEmail;
}
}
// Recursively gets a folder's size in bytes // Recursively gets a folder's size in bytes
private double CalculateFolderSize (DirectoryInfo parent) private double CalculateFolderSize (DirectoryInfo parent)
{ {

View file

@ -35,7 +35,6 @@ namespace SparkleShare {
public List <SparkleRepoBase> Repositories; public List <SparkleRepoBase> Repositories;
public string FolderSize; public string FolderSize;
public bool FirstRun;
public readonly string SparklePath; public readonly string SparklePath;
public event OnQuitWhileSyncingEventHandler OnQuitWhileSyncing; public event OnQuitWhileSyncingEventHandler OnQuitWhileSyncing;
@ -106,22 +105,14 @@ namespace SparkleShare {
FolderSize = GetFolderSize (); FolderSize = GetFolderSize ();
string global_config_file_path = Path.Combine (SparklePaths.SparkleConfigPath, "config.xml"); // TODO: Legacy. Remove at some later point
string old_global_config_file_path = Path.Combine (SparklePaths.SparkleConfigPath, "config"); string old_global_config_file_path = Path.Combine (SparklePaths.SparkleConfigPath, "config");
if (File.Exists (old_global_config_file_path))
MigrateConfig ();
// Show the introduction screen if SparkleShare isn't configured if (FirstRun) {
if (!File.Exists (global_config_file_path)) { SparkleConfig.DefaultConfig.SetConfigOption ("notifications", bool.TrueString);
if (File.Exists (old_global_config_file_path)) {
MigrateConfig ();
FirstRun = false;
} else {
WriteDefaultConfig ("Unknown", "");
FirstRun = true;
}
} else { } else {
FirstRun = false;
AddKey (); AddKey ();
} }
@ -165,13 +156,19 @@ namespace SparkleShare {
} }
}; };
CreateConfigurationFolders ();
new Thread (new ThreadStart (PopulateRepositories)).Start (); new Thread (new ThreadStart (PopulateRepositories)).Start ();
} }
// TODO: remove this later public bool FirstRun {
private void MigrateConfig () { get {
return SparkleConfig.DefaultConfig.UserEmail.Equals ("Unknown");
}
}
private void MigrateConfig ()
{
string old_global_config_file_path = Path.Combine (SparklePaths.SparkleConfigPath, "config"); string old_global_config_file_path = Path.Combine (SparklePaths.SparkleConfigPath, "config");
StreamReader reader = new StreamReader (old_global_config_file_path); StreamReader reader = new StreamReader (old_global_config_file_path);
@ -188,7 +185,8 @@ namespace SparkleShare {
string user_email = match.Groups [1].Value; string user_email = match.Groups [1].Value;
WriteDefaultConfig (user_name, user_email); SparkleConfig.DefaultConfig.UserName = user_name;
SparkleConfig.DefaultConfig.UserEmail = user_email;
File.Delete (old_global_config_file_path); File.Delete (old_global_config_file_path);
} }
@ -229,12 +227,7 @@ namespace SparkleShare {
public List<string> Folders { public List<string> Folders {
get { get {
List<string> folders = new List <string> (); return SparkleConfig.DefaultConfig.Folders;
foreach (SparkleRepoBase repo in Repositories)
folders.Add (repo.LocalPath);
return folders;
} }
} }
@ -415,34 +408,6 @@ namespace SparkleShare {
string html = event_log_html.Replace ("<!-- $event-log-content -->", event_log); string html = event_log_html.Replace ("<!-- $event-log-content -->", event_log);
return html; return html;
} }
// Creates a folder in the user's home folder to store configuration
private void CreateConfigurationFolders ()
{
if (!Directory.Exists (SparklePaths.SparkleTmpPath))
Directory.CreateDirectory (SparklePaths.SparkleTmpPath);
string config_path = SparklePaths.SparkleConfigPath;
string local_icon_path = SparklePaths.SparkleLocalIconPath;
if (!Directory.Exists (config_path)) {
// Create a folder to store settings
Directory.CreateDirectory (config_path);
SparkleHelpers.DebugInfo ("Config", "Created '" + config_path + "'");
// Create a folder to store the avatars
Directory.CreateDirectory (local_icon_path);
SparkleHelpers.DebugInfo ("Config", "Created '" + local_icon_path + "'");
string notify_setting_file = SparkleHelpers.CombineMore (config_path, "sparkleshare.notify");
// Enable notifications by default
if (!File.Exists (notify_setting_file))
File.Create (notify_setting_file);
}
}
// Creates a .desktop entry in autostart folder to // Creates a .desktop entry in autostart folder to
@ -604,22 +569,29 @@ namespace SparkleShare {
public bool NotificationsEnabled { public bool NotificationsEnabled {
get { get {
string notify_setting_file_path = Path.Combine (SparklePaths.SparkleConfigPath, string notifications_enabled =
"sparkleshare.notify"); SparkleConfig.DefaultConfig.GetConfigOption ("notifications");
return File.Exists (notify_setting_file_path); if (String.IsNullOrEmpty (notifications_enabled)) {
SparkleConfig.DefaultConfig.SetConfigOption ("notifications", bool.TrueString);
return true;
} else {
return notifications_enabled.Equals (bool.TrueString);
}
} }
} }
public void ToggleNotifications () { public void ToggleNotifications () {
string notify_setting_file_path = Path.Combine (SparklePaths.SparkleConfigPath, bool notifications_enabled =
"sparkleshare.notify"); SparkleConfig.DefaultConfig.GetConfigOption ("notifications")
.Equals (bool.TrueString);
if (File.Exists (notify_setting_file_path))
File.Delete (notify_setting_file_path); if (notifications_enabled)
SparkleConfig.DefaultConfig.SetConfigOption ("notifications", bool.FalseString);
else else
File.Create (notify_setting_file_path); SparkleConfig.DefaultConfig.SetConfigOption ("notifications", bool.TrueString);
} }
@ -768,31 +740,7 @@ namespace SparkleShare {
public string UserEmail public string UserEmail
{ {
get { get {
string global_config_file_path = Path.Combine (SparklePaths.SparkleConfigPath, "config.xml"); return SparkleConfig.DefaultConfig.UserEmail;
if (File.Exists (global_config_file_path)) {
XmlDocument xml = new XmlDocument();
xml.Load (global_config_file_path);
XmlNode node = xml.SelectSingleNode("//user/email/text()");
return node.Value;
} else {
string keys_path = SparklePaths.SparkleKeysPath;
if (!Directory.Exists (keys_path))
return "";
foreach (string file_path in Directory.GetFiles (keys_path)) {
Regex regex = new Regex (@"sparkleshare\.(.+)\.key");
Match match = regex.Match (Path.GetFileName (file_path));
if (match.Success)
return match.Groups [1].Value;
}
return "";
}
} }
set { set {
@ -800,26 +748,6 @@ namespace SparkleShare {
} }
} }
private void WriteDefaultConfig (string user_name, string user_email)
{
string global_config_file_path = Path.Combine (SparklePaths.SparkleConfigPath, "config.xml");
// Write the user's information to a text file
TextWriter writer = new StreamWriter (global_config_file_path);
string n = Environment.NewLine;
writer.WriteLine ("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" + n +
"<sparkleshare>" + n +
" <user>" + n +
" <name>" + user_name + "</name>" + n +
" <email>" + user_email + "</email>" + n +
" </user>" + n +
"</sparkleshare>" + n);
writer.Close ();
SparkleHelpers.DebugInfo ("Config", "Updated '" + global_config_file_path + "'");
}
// Generates and installs an RSA keypair to identify this system // Generates and installs an RSA keypair to identify this system
public void GenerateKeyPair () public void GenerateKeyPair ()

View file

@ -78,22 +78,17 @@ namespace SparkleShare {
RowSpacing = 6 RowSpacing = 6
}; };
string full_name = new UnixUserInfo (UnixEnvironment.UserName).RealName;
if (string.IsNullOrEmpty (full_name))
full_name = "";
Label name_label = new Label ("<b>" + _("Full Name:") + "</b>") { Label name_label = new Label ("<b>" + _("Full Name:") + "</b>") {
UseMarkup = true, UseMarkup = true,
Xalign = 0 Xalign = 0
}; };
NameEntry = new Entry (full_name.TrimEnd (",".ToCharArray())); NameEntry = new Entry (SparkleShare.Controller.UserName);
NameEntry.Changed += delegate { NameEntry.Changed += delegate {
CheckAccountForm (); CheckAccountForm ();
}; };
EmailEntry = new Entry ();
EmailEntry = new Entry (SparkleShare.Controller.UserEmail);
EmailEntry.Changed += delegate { EmailEntry.Changed += delegate {
CheckAccountForm (); CheckAccountForm ();
}; };
@ -128,7 +123,6 @@ namespace SparkleShare {
SparkleShare.Controller.GenerateKeyPair (); SparkleShare.Controller.GenerateKeyPair ();
SparkleShare.Controller.AddKey (); SparkleShare.Controller.AddKey ();
SparkleShare.Controller.FirstRun = false;
SparkleUI.StatusIcon.CreateMenu (); SparkleUI.StatusIcon.CreateMenu ();
Deletable = true; Deletable = true;

View file

@ -131,9 +131,6 @@ namespace SparkleShare {
Directory.CreateDirectory (SparklePaths.SparklePath); Directory.CreateDirectory (SparklePaths.SparklePath);
SparkleHelpers.DebugInfo ("Controller", "Created '" + SparklePaths.SparklePath + "'"); SparkleHelpers.DebugInfo ("Controller", "Created '" + SparklePaths.SparklePath + "'");
string icon_file_path = SparkleHelpers.CombineMore (Defines.DATAROOTDIR, "icons", "hicolor",
"48x48", "apps", "folder-sparkleshare.png");
string gvfs_command_path = SparkleHelpers.CombineMore (Path.VolumeSeparatorChar.ToString (), string gvfs_command_path = SparkleHelpers.CombineMore (Path.VolumeSeparatorChar.ToString (),
"usr", "bin", "gvfs-set-attribute"); "usr", "bin", "gvfs-set-attribute");