code cleanup

This commit is contained in:
Hylke Bons 2010-07-21 20:39:28 +01:00
parent 9d0d25b94e
commit 97d0208495
4 changed files with 294 additions and 216 deletions

View file

@ -0,0 +1,49 @@
// SparkleShare, an instant update workflow to Git.
// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
//
// 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 <http://www.gnu.org/licenses/>.
using Gtk;
using Notifications;
using SparkleShare;
namespace SparkleShare {
public class SparkleBubble : Notification {
public SparkleBubble (string title, string subtext) : base (title, subtext)
{
IconName = "folder-sparkleshare";
Timeout = 4500;
Urgency = Urgency.Low;
AttachToStatusIcon (SparkleUI.NotificationIcon);
}
// Checks whether the system allows adding buttons to a notification,
// prevents error messages in Ubuntu.
new public void AddAction (string action, string label, ActionHandler handler)
{
if (System.Array.IndexOf (Notifications.Global.Capabilities, "actions") > -1)
base.AddAction (action, label, handler);
}
}
}

View file

@ -29,32 +29,32 @@ namespace SparkleShare {
public class SparkleIntro : Window { public class SparkleIntro : Window {
public Entry NameEntry;
public Entry EmailEntry;
public Entry ServerEntry;
// Short alias for the translations // Short alias for the translations
public static string _ (string s) public static string _ (string s)
{ {
return Catalog.GetString (s); return Catalog.GetString (s);
} }
public SparkleIntro () : base ("") public SparkleIntro () : base ("")
{ {
// using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) BorderWidth = 0;
// { IconName = "folder-sparkleshare";
// File.WriteAllText ("PublicKeyOnly.xml", rsa.ToXmlString (false)); Resizable = false;
// File.WriteAllText ("PublicPrivate.xml", rsa.ToXmlString (true));
//}
BorderWidth = 0;
SetSizeRequest (640, 400);
Resizable = false;
IconName = "folder-sparkleshare";
WindowPosition = WindowPosition.Center; WindowPosition = WindowPosition.Center;
SetSizeRequest (640, 400);
ShowStepOne (); ShowStepOne ();
} }
public void ShowStepOne () public void ShowStepOne ()
{ {
@ -63,139 +63,127 @@ namespace SparkleShare {
// TODO: Fix the path // TODO: Fix the path
Image side_splash = new Image ("/home/hbons/github/SparkleShare/data/side-splash.png"); Image side_splash = new Image ("/home/hbons/github/SparkleShare/data/side-splash.png");
layout_horizontal.PackStart (side_splash, false, false, 0); VBox wrapper = new VBox (false, 0);
VBox wrapper = new VBox (false, 0); VBox layout_vertical = new VBox (false, 0) {
BorderWidth = 30
VBox layout_vertical = new VBox (false, 0) {
BorderWidth = 30
};
Label introduction = new Label ("<span size='x-large'><b>" +
_("Welcome to SparkleShare!") +
"</b></span>") {
UseMarkup = true,
Xalign = 0
};
Label information = new Label (_("Before we can create a SparkleShare folder on this " +
"computer, we need a few bits of information from you.")) {
Xalign = 0,
Wrap = true
};
UnixUserInfo unix_user_info = new UnixUserInfo (UnixEnvironment.UserName);
Label name_label = new Label ("<b>" + _("Full Name:") + "</b>") {
UseMarkup = true,
Xalign = 0
}; };
Label introduction = new Label ("<span size='x-large'><b>" +
_("Welcome to SparkleShare!") +
"</b></span>") {
UseMarkup = true,
Xalign = 0
};
Label information = new Label (_("Before we can create a SparkleShare folder on this " +
"computer, we need a few bits of information from you.")) {
Xalign = 0,
Wrap = true
};
Entry name_entry = new Entry (unix_user_info.RealName); UnixUserInfo unix_user_info = new UnixUserInfo (UnixEnvironment.UserName);
Label name_label = new Label ("<b>" + _("Full Name:") + "</b>") {
UseMarkup = true,
Xalign = 0
};
NameEntry = new Entry (unix_user_info.RealName);
Table table = new Table (6, 2, true) { Table table = new Table (6, 2, true) {
RowSpacing = 6 RowSpacing = 6
}; };
Entry email_entry = new Entry (""); EmailEntry = new Entry ("");
Label email_label = new Label ("<b>" + _("Email:") + "</b>") { Label email_label = new Label ("<b>" + _("Email:") + "</b>") {
UseMarkup = true, UseMarkup = true,
Xalign = 0 Xalign = 0
}; };
Entry server_entry = new Entry ("ssh://gitorious.org/sparkleshare") { Entry server_entry = new Entry ("ssh://gitorious.org/sparkleshare") {
Sensitive = false Sensitive = false
}; };
Label server_label = new Label ("<b>" + _("Folder Address:") + "</b>") { Label server_label = new Label ("<b>" + _("Folder Address:") + "</b>") {
UseMarkup = true, UseMarkup = true,
Xalign = 0, Xalign = 0,
Sensitive = false Sensitive = false
}; };
CheckButton check_button; CheckButton check_button;
check_button = new CheckButton (_("I already have access to an existing " + check_button = new CheckButton (_("I already subscribed to an existing " +
"folder on a SparkleShare server")); "folder on a SparkleShare server"));
check_button.Clicked += delegate { check_button.Clicked += delegate {
if (check_button.Active) { if (check_button.Active) {
server_label.Sensitive = true; server_label.Sensitive = true;
server_entry.Sensitive = true; server_entry.Sensitive = true;
server_entry.HasFocus = true; server_entry.HasFocus = true;
} else { } else {
server_label.Sensitive = false; server_label.Sensitive = false;
server_entry.Sensitive = false; server_entry.Sensitive = false;
} }
ShowAll (); ShowAll ();
}; };
table.Attach (name_label, 0, 1, 0, 1); table.Attach (name_label, 0, 1, 0, 1);
table.Attach (name_entry, 1, 2, 0, 1); table.Attach (NameEntry, 1, 2, 0, 1);
table.Attach (email_label, 0, 1, 1, 2); table.Attach (email_label, 0, 1, 1, 2);
table.Attach (email_entry, 1, 2, 1, 2); table.Attach (EmailEntry, 1, 2, 1, 2);
table.Attach (check_button, 0, 2, 3, 4); table.Attach (check_button, 0, 2, 3, 4);
table.Attach (server_label, 0, 1, 4, 5); table.Attach (server_label, 0, 1, 4, 5);
table.Attach (server_entry, 1, 2, 4, 5); table.Attach (server_entry, 1, 2, 4, 5);
HButtonBox controls = new HButtonBox () { HButtonBox controls = new HButtonBox () {
BorderWidth = 12, BorderWidth = 12,
Layout = ButtonBoxStyle.End Layout = ButtonBoxStyle.End
}; };
Button done_button = new Button (_("Next")); Button done_button = new Button (_("Next"));
done_button.Clicked += delegate (object o, EventArgs args) { done_button.Clicked += delegate (object o, EventArgs args) {
done_button.Remove (done_button.Child); done_button.Remove (done_button.Child);
HBox hbox = new HBox (); HBox hbox = new HBox ();
hbox.Add (new SparkleSpinner ()); hbox.Add (new SparkleSpinner ());
hbox.Add (new Label (_("Configuring…"))); hbox.Add (new Label (_("Configuring…")));
done_button.Add (hbox); done_button.Add (hbox);
done_button.Sensitive = false; done_button.Sensitive = false;
table.Sensitive = false; table.Sensitive = false;
done_button.ShowAll (); done_button.ShowAll ();
string user_name = name_entry.Text; Configure ();
string user_email = email_entry.Text;
string config_file_path = SparkleHelpers.CombineMore (SparklePaths.SparkleConfigPath, ".gitconfig"); ShowStepTwo ();
TextWriter writer = new StreamWriter (config_file_path); };
writer.WriteLine ("[user]\n" +
"\tname = " + user_name + "\n" +
"\temail = " + user_email + "\n");
writer.Close ();
SparkleHelpers.DebugInfo ("Config", "Created '" + config_file_path + "'");
ShowStepTwo ();
};
controls.Add (done_button); controls.Add (done_button);
layout_vertical.PackStart (introduction, false, false, 0); layout_vertical.PackStart (introduction, false, false, 0);
layout_vertical.PackStart (information, false, false, 21); layout_vertical.PackStart (information, false, false, 21);
layout_vertical.PackStart (new Label (""), false, false, 0); layout_vertical.PackStart (new Label (""), false, false, 0);
layout_vertical.PackStart (table, false, false, 0); layout_vertical.PackStart (table, false, false, 0);
wrapper.PackStart (layout_vertical, true, true, 0); wrapper.PackStart (layout_vertical, true, true, 0);
wrapper.PackStart (controls, false, true, 0); wrapper.PackStart (controls, false, true, 0);
layout_horizontal.PackStart (side_splash, false, false, 0);
layout_horizontal.PackStart (wrapper, true, true, 0); layout_horizontal.PackStart (wrapper, true, true, 0);
Add (layout_horizontal); Add (layout_horizontal);
@ -203,7 +191,8 @@ namespace SparkleShare {
ShowAll (); ShowAll ();
} }
public void ShowStepTwo () public void ShowStepTwo ()
{ {
@ -240,6 +229,7 @@ namespace SparkleShare {
HBox link_wrapper = new HBox (false, 0); HBox link_wrapper = new HBox (false, 0);
LinkButton link = new LinkButton ("http://www.sparkleshare.org/", LinkButton link = new LinkButton ("http://www.sparkleshare.org/",
_("Learn how to host your own SparkleServer")); _("Learn how to host your own SparkleServer"));
link_wrapper.PackStart (link, false, false, 0); link_wrapper.PackStart (link, false, false, 0);
layout_vertical.PackStart (introduction, false, false, 0); layout_vertical.PackStart (introduction, false, false, 0);
@ -270,6 +260,32 @@ namespace SparkleShare {
} }
// Configure SparkleShare with the user's information
public void Configure ()
{
string config_file_path = SparkleHelpers.CombineMore (SparklePaths.SparkleConfigPath, ".gitconfig");
TextWriter writer = new StreamWriter (config_file_path);
writer.WriteLine ("[user]\n" +
"\tname = " + NameEntry.Text + "\n" +
"\temail = " + EmailEntry.Text + "\n");
writer.Close ();
GenerateKeyPair ();
SparkleHelpers.DebugInfo ("Config", "Created '" + config_file_path + "'");
}
// Generates an RSA keypair to identify this system
public void GenerateKeyPair ()
{
}
} }
} }

View file

@ -647,11 +647,16 @@ namespace SparkleShare {
} }
public class SparkleEventArgs : System.EventArgs {
public string Message;
public SparkleEventArgs (string s)
{
Message = s;
}
}
} }

View file

@ -46,98 +46,23 @@ namespace SparkleShare {
string SparklePath = SparklePaths.SparklePath; string SparklePath = SparklePaths.SparklePath;
EnableSystemAutostart ();
// Create .desktop entry in autostart folder to CreateSparkleShareFolder ();
// start SparkleShare on each login
switch (SparklePlatform.Name) {
case "GNOME":
string autostart_path = SparkleHelpers.CombineMore (SparklePaths.HomePath, ".config", "autostart");
string desktopfile_path = SparkleHelpers.CombineMore (autostart_path, "sparkleshare.desktop");
if (!File.Exists (desktopfile_path)) {
if (!Directory.Exists (autostart_path))
Directory.CreateDirectory (autostart_path);
TextWriter writer = new StreamWriter (desktopfile_path);
writer.WriteLine ("[Desktop Entry]\n" +
"Type=Application\n" +
"Name=SparkleShare\n" +
"Exec=sparkleshare start\n" +
"Icon=folder-sparkleshare\n" +
"Terminal=false\n" +
"X-GNOME-Autostart-enabled=true");
writer.Close ();
// Give the launcher the right permissions so it can be launched by the user
Syscall.chmod (desktopfile_path, FilePermissions.S_IRWXU);
SparkleHelpers.DebugInfo ("Config", "Created '" + desktopfile_path + "'");
}
break;
}
// Create 'SparkleShare' folder in the user's home folder
// if it's not there already
if (!Directory.Exists (SparklePath)) {
Directory.CreateDirectory (SparklePath);
SparkleHelpers.DebugInfo ("Config", "Created '" + SparklePath + "'");
// Add a special icon to the SparkleShare folder
switch (SparklePlatform.Name) {
case "GNOME":
Process.StartInfo.FileName = "gvfs-set-attribute";
Process.StartInfo.Arguments = SparklePath + " metadata::custom-icon " +
"file:///usr/share/icons/hicolor/48x48/places/" +
"folder-sparkleshare.png";
Process.Start ();
break;
}
// Add the SparkleShare folder to the bookmarks
switch (SparklePlatform.Name) {
case "GNOME":
string BookmarksFileName =
Path.Combine (SparklePaths.HomePath, ".gtk-bookmarks");
if (File.Exists (BookmarksFileName)) {
TextWriter TextWriter = File.AppendText (BookmarksFileName);
TextWriter.WriteLine ("file://" + SparklePath + " SparkleShare");
TextWriter.Close ();
}
break;
}
}
// Create a directory to store temporary files in // Create a directory to store temporary files in
if (!Directory.Exists (SparklePaths.SparkleTmpPath)) if (!Directory.Exists (SparklePaths.SparkleTmpPath))
Directory.CreateDirectory (SparklePaths.SparkleTmpPath); Directory.CreateDirectory (SparklePaths.SparkleTmpPath);
if (!HideUI)
NotificationIcon = new SparkleStatusIcon ();
UpdateRepositories (); UpdateRepositories ();
// Don't create the window and status // Don't create the window and status
// icon when --disable-gui was given // icon when --disable-gui was given
if (!HideUI) { if (!HideUI) {
SparkleIntro intro = new SparkleIntro (); SparkleIntro intro = new SparkleIntro ();
intro.ShowAll (); intro.ShowAll ();
NotificationIcon = new SparkleStatusIcon ();
// Show a notification if there are no folders yet // Show a notification if there are no folders yet
if (SparkleShare.Repositories.Length == 0) { if (SparkleShare.Repositories.Length == 0) {
@ -214,12 +139,110 @@ namespace SparkleShare {
File.Create (NotifySettingFile); File.Create (NotifySettingFile);
} }
// Creates .desktop entry in autostart folder to
// start SparkleShare automnatically at login
public void EnableSystemAutostart ()
{
switch (SparklePlatform.Name) {
case "GNOME":
string autostart_path = SparkleHelpers.CombineMore (SparklePaths.HomePath, ".config", "autostart");
string desktopfile_path = SparkleHelpers.CombineMore (autostart_path, "sparkleshare.desktop");
if (!File.Exists (desktopfile_path)) {
if (!Directory.Exists (autostart_path))
Directory.CreateDirectory (autostart_path);
TextWriter writer = new StreamWriter (desktopfile_path);
writer.WriteLine ("[Desktop Entry]\n" +
"Type=Application\n" +
"Name=SparkleShare\n" +
"Exec=sparkleshare start\n" +
"Icon=folder-sparkleshare\n" +
"Terminal=false\n" +
"X-GNOME-Autostart-enabled=true");
writer.Close ();
// Give the launcher the right permissions so it can be launched by the user
Syscall.chmod (desktopfile_path, FilePermissions.S_IRWXU);
SparkleHelpers.DebugInfo ("Config", "Created '" + desktopfile_path + "'");
}
break;
}
}
public void AddToBookmarks ()
{
// Add the SparkleShare folder to the bookmarks
switch (SparklePlatform.Name) {
case "GNOME":
string bookmarks_file_name = Path.Combine (SparklePaths.HomePath, ".gtk-bookmarks");
if (File.Exists (bookmarks_file_name)) {
TextWriter writer = File.AppendText (bookmarks_file_name);
writer.WriteLine ("file://" + SparklePaths.SparklePath + " SparkleShare");
writer.Close ();
}
break;
}
}
// Creates the 'SparkleShare' folder in the user's home folder if
// it's not already there
public void CreateSparkleShareFolder ()
{
if (!Directory.Exists (SparklePaths.SparklePath)) {
Directory.CreateDirectory (SparklePaths.SparklePath);
SparkleHelpers.DebugInfo ("Config", "Created '" + SparklePaths.SparklePath + "'");
// Add a special icon to the SparkleShare folder
switch (SparklePlatform.Name) {
case "GNOME":
Process.StartInfo.FileName = "gvfs-set-attribute";
Process.StartInfo.Arguments = SparklePaths.SparklePath + " metadata::custom-icon " +
"file:///usr/share/icons/hicolor/48x48/places/" +
"folder-sparkleshare.png";
Process.Start ();
break;
}
AddToBookmarks ();
}
}
public void Test (object o, SparkleEventArgs args) { public void Test (object o, SparkleEventArgs args) {
Console.WriteLine ("AAAAAAAAAAAAAAAAAA"); Console.WriteLine ("AAAAAAAAAAAAAAAAAA");
} }
public void UpdateRepositories () public void UpdateRepositories ()
{ {
@ -228,12 +251,12 @@ namespace SparkleShare {
SparkleRepo [] TmpRepos = new SparkleRepo [Directory.GetDirectories (SparklePath).Length]; SparkleRepo [] TmpRepos = new SparkleRepo [Directory.GetDirectories (SparklePath).Length];
int FolderCount = 0; int FolderCount = 0;
foreach (string Folder in Directory.GetDirectories (SparklePath)) { foreach (string folder in Directory.GetDirectories (SparklePath)) {
// Check if the folder is a git repo // Check if the folder is a git repo
if (Directory.Exists (SparkleHelpers.CombineMore (Folder, ".git"))) { if (Directory.Exists (SparkleHelpers.CombineMore (folder, ".git"))) {
TmpRepos [FolderCount] = new SparkleRepo (Folder); TmpRepos [FolderCount] = new SparkleRepo (folder);
FolderCount++; FolderCount++;
// TODO: emblems don't show up in nautilus // TODO: emblems don't show up in nautilus
@ -242,7 +265,7 @@ namespace SparkleShare {
case "GNOME": case "GNOME":
Process.StartInfo.FileName = "gvfs-set-attribute"; Process.StartInfo.FileName = "gvfs-set-attribute";
Process.StartInfo.Arguments = "-t string \"" + Folder + Process.StartInfo.Arguments = "-t string \"" + folder +
"\" metadata::emblems [synced]"; "\" metadata::emblems [synced]";
Process.Start (); Process.Start ();
@ -255,7 +278,7 @@ namespace SparkleShare {
} }
SparkleRepo a = TmpRepos [0]; SparkleRepo a = TmpRepos [0];
a.Added += new SparkleRepo.AddedEventHandler (Test); a.Added += Test;
SparkleShare.Repositories = new SparkleRepo [FolderCount]; SparkleShare.Repositories = new SparkleRepo [FolderCount];
@ -264,21 +287,6 @@ namespace SparkleShare {
} }
} }
public class SparkleEventArgs : System.EventArgs {
private string message;
public SparkleEventArgs (string s)
{
this.message = s;
}
public string Message ()
{
return message;
}
}
} }