diff --git a/SparkleLib/SparkleHelpers.cs b/SparkleLib/SparkleHelpers.cs
index e0328a17..9ffe020c 100644
--- a/SparkleLib/SparkleHelpers.cs
+++ b/SparkleLib/SparkleHelpers.cs
@@ -188,6 +188,26 @@ namespace SparkleLib {
}
+ // Recursively sets access rights of a folder to 'Normal'
+ public static void ClearAttributes (string path)
+ {
+
+ if (Directory.Exists (path)) {
+
+ string [] folders = Directory .GetDirectories (path);
+
+ foreach (string folder in folders)
+ ClearAttributes (folder);
+
+ string [] files = Directory .GetFiles(path);
+
+ foreach (string file in files)
+ File.SetAttributes (file, FileAttributes.Normal);
+
+ }
+
+ }
+
}
}
diff --git a/SparkleShare/SparkleIntro.cs b/SparkleShare/SparkleIntro.cs
index a7f0f0e2..bd42ae99 100644
--- a/SparkleShare/SparkleIntro.cs
+++ b/SparkleShare/SparkleIntro.cs
@@ -387,9 +387,7 @@ namespace SparkleShare {
};
try_again_button.Clicked += delegate (object o, EventArgs args) {
-
ShowServerForm ();
-
};
AddButton (try_again_button);
@@ -482,24 +480,13 @@ namespace SparkleShare {
Button button = new Button () {
- Sensitive = false
+ Sensitive = false,
+ Label = _("Finish")
};
- if (ServerFormOnly) {
-
- button.Label = _("Finish");
- button.Clicked += delegate {
- Destroy ();
- };
-
- } else {
-
- button.Label = _("Next");
- button.Clicked += delegate {
- ShowCompletedPage ();
- };
-
- }
+ button.Clicked += delegate {
+ Destroy ();
+ };
AddButton (button);
@@ -584,7 +571,6 @@ namespace SparkleShare {
{
string canonical_name = System.IO.Path.GetFileNameWithoutExtension (name);
-
string tmp_folder = SparkleHelpers.CombineMore (SparklePaths.SparkleTmpPath, canonical_name);
SparkleFetcher fetcher = new SparkleFetcher (url, tmp_folder);
@@ -601,7 +587,7 @@ namespace SparkleShare {
SparkleHelpers.DebugInfo ("Git", "[" + canonical_name + "] Repository cloned");
- ClearAttributes (tmp_folder);
+ SparkleHelpers.ClearAttributes (tmp_folder);
try {
@@ -644,7 +630,7 @@ namespace SparkleShare {
if (Directory.Exists (tmp_folder)) {
- ClearAttributes (tmp_folder);
+ SparkleHelpers.ClearAttributes (tmp_folder);
Directory.Delete (tmp_folder, true);
SparkleHelpers.DebugInfo ("Config", "[" + name + "] Deleted temporary directory");
@@ -831,27 +817,6 @@ namespace SparkleShare {
}
- // Recursively sets access rights of a folder to 'Normal'
- private void ClearAttributes (string path)
- {
-
- if (Directory.Exists (path)) {
-
- string [] folders = Directory .GetDirectories (path);
-
- foreach (string folder in folders)
- ClearAttributes (folder);
-
- string [] files = Directory .GetFiles(path);
-
- foreach (string file in files)
- File.SetAttributes (file, FileAttributes.Normal);
-
- }
-
- }
-
-
// Converts a Gdk RGB color to a hex value.
// Example: from "rgb:0,0,0" to "#000000"
public string GdkColorToHex (Gdk.Color color)
diff --git a/SparkleShare/SparkleInvitation.cs b/SparkleShare/SparkleInvitation.cs
index e127df48..ec64641c 100644
--- a/SparkleShare/SparkleInvitation.cs
+++ b/SparkleShare/SparkleInvitation.cs
@@ -18,6 +18,7 @@ using Gtk;
using Mono.Unix;
using SparkleLib;
using System;
+using System.Diagnostics;
using System.IO;
using System.Net;
using System.Xml;
@@ -145,7 +146,7 @@ namespace SparkleShare {
table.Attach (server, 1, 2, 1, 2);
Button reject_button = new Button (_("Reject"));
- Button accept_button = new Button (_("Accept"));
+ Button accept_button = new Button (_("Accept and Sync"));
reject_button.Clicked += delegate {
@@ -156,6 +157,15 @@ namespace SparkleShare {
};
+ accept_button.Clicked += delegate {
+
+ string url = "ssh://git@" + Server + "/projects/" + Folder;
+ SparkleHelpers.DebugInfo ("Git", "[" + Folder + "] Formed URL: " + url);
+
+ FetchFolder (url, Folder);
+
+ };
+
AddButton (reject_button);
AddButton (accept_button);
@@ -174,6 +184,232 @@ namespace SparkleShare {
}
+
+ private void FetchFolder (string url, string name)
+ {
+
+ string canonical_name = System.IO.Path.GetFileNameWithoutExtension (name);
+ string tmp_folder = SparkleHelpers.CombineMore (SparklePaths.SparkleTmpPath, canonical_name);
+
+ SparkleFetcher fetcher = new SparkleFetcher (url, tmp_folder);
+
+
+ fetcher.CloningStarted += delegate {
+
+ SparkleHelpers.DebugInfo ("Git", "[" + canonical_name + "] Cloning Repository");
+
+ };
+
+
+ fetcher.CloningFinished += delegate {
+
+ SparkleHelpers.DebugInfo ("Git", "[" + canonical_name + "] Repository cloned");
+
+ SparkleHelpers.ClearAttributes (tmp_folder);
+
+ try {
+
+ bool folder_exists = Directory.Exists (
+ SparkleHelpers.CombineMore (SparklePaths.SparklePath, canonical_name));
+
+ int i = 1;
+ while (folder_exists) {
+
+ i++;
+ folder_exists = Directory.Exists (
+ SparkleHelpers.CombineMore (SparklePaths.SparklePath, canonical_name + " (" + i + ")"));
+
+ }
+
+ string target_folder_name = canonical_name;
+
+ if (i > 1)
+ target_folder_name += " (" + i + ")";
+
+ string target_folder_path = SparkleHelpers.CombineMore (SparklePaths.SparklePath,
+ target_folder_name);
+
+ Directory.Move (tmp_folder, target_folder_path);
+
+ } catch (Exception e) {
+
+ SparkleHelpers.DebugInfo ("Git", "[" + name + "] Error moving folder: " + e.Message);
+
+ }
+
+ Application.Invoke (delegate { ShowSuccessPage (canonical_name); });
+
+ };
+
+
+ fetcher.CloningFailed += delegate {
+
+ SparkleHelpers.DebugInfo ("Git", "[" + canonical_name + "] Cloning failed");
+
+ if (Directory.Exists (tmp_folder)) {
+
+ SparkleHelpers.ClearAttributes (tmp_folder);
+ Directory.Delete (tmp_folder, true);
+
+ SparkleHelpers.DebugInfo ("Config", "[" + name + "] Deleted temporary directory");
+
+ }
+
+ Application.Invoke (delegate { ShowErrorPage (); });
+
+ };
+
+ ShowSyncingPage (canonical_name);
+
+ fetcher.Clone ();
+
+ }
+
+
+ private void ShowErrorPage ()
+ {
+
+ Reset ();
+
+ VBox layout_vertical = new VBox (false, 0);
+
+ Label header = new Label ("" +
+ _("Something went wrong…") +
+ "\n") {
+ UseMarkup = true,
+ Xalign = 0
+ };
+
+ Button close_button = new Button (_("Close")) {
+ Sensitive = true
+ };
+
+ close_button.Clicked += delegate (object o, EventArgs args) {
+ Destroy ();
+ };
+
+ AddButton (close_button);
+
+ layout_vertical.PackStart (header, false, false, 0);
+
+ Add (layout_vertical);
+
+ ShowAll ();
+
+ }
+
+
+ private void ShowSuccessPage (string name)
+ {
+
+ Reset ();
+
+ VBox layout_vertical = new VBox (false, 0);
+
+ Label header = new Label ("" +
+ _("Folder synced successfully!") +
+ "") {
+ UseMarkup = true,
+ Xalign = 0
+ };
+
+ Label information = new Label (_("Now you can access the synced files from ‘" + name + "’ " +
+ "in your SparkleShare folder.")) {
+ Xalign = 0,
+ Wrap = true,
+ UseMarkup = true
+ };
+
+ Button open_folder_button = new Button (_("Open Folder"));
+
+ open_folder_button.Clicked += delegate (object o, EventArgs args) {
+
+ string path = SparkleHelpers.CombineMore (SparklePaths.SparklePath, name);
+
+ Process process = new Process ();
+ process.StartInfo.FileName = "xdg-open";
+ process.StartInfo.Arguments = path.Replace (" ", "\\ "); // Escape space-characters
+ process.Start ();
+
+ Destroy ();
+
+ };
+
+ Button finish_button = new Button (_("Finish"));
+
+ finish_button.Clicked += delegate (object o, EventArgs args) {
+ Destroy ();
+ };
+
+ AddButton (open_folder_button);
+ AddButton (finish_button);
+
+ layout_vertical.PackStart (header, false, false, 0);
+ layout_vertical.PackStart (information, false, false, 21);
+
+ Add (layout_vertical);
+
+ ShowAll ();
+
+ }
+
+
+ private void ShowSyncingPage (string name)
+ {
+
+ Reset ();
+
+ VBox layout_vertical = new VBox (false, 0);
+
+ Label header = new Label ("" +
+ String.Format (_("Syncing folder ‘{0}’…"), name) +
+ "") {
+ UseMarkup = true,
+ Xalign = 0,
+ Wrap = true
+ };
+
+ Label information = new Label (_("This may take a while.\n") +
+ _("You sure it’s not coffee o-clock?")) {
+ UseMarkup = true,
+ Xalign = 0
+ };
+
+
+ Button button = new Button () {
+ Sensitive = false,
+ Label = _("Finish")
+ };
+
+ button.Clicked += delegate {
+ Destroy ();
+ };
+
+ AddButton (button);
+
+ SparkleSpinner spinner = new SparkleSpinner (22);
+
+ Table table = new Table (2, 2, false) {
+ RowSpacing = 12,
+ ColumnSpacing = 9
+ };
+
+ HBox box = new HBox (false, 0);
+
+ table.Attach (spinner, 0, 1, 0, 1);
+ table.Attach (header, 1, 2, 0, 1);
+ table.Attach (information, 1, 2, 1, 2);
+
+ box.PackStart (table, false, false, 0);
+
+ layout_vertical.PackStart (box, false, false, 0);
+
+ Add (layout_vertical);
+
+ ShowAll ();
+
+ }
+
}
}
diff --git a/SparkleShare/SparkleShare.cs b/SparkleShare/SparkleShare.cs
index 90750cd5..ae038a5a 100644
--- a/SparkleShare/SparkleShare.cs
+++ b/SparkleShare/SparkleShare.cs
@@ -74,10 +74,6 @@ namespace SparkleShare {
}
- UserName = GetUserName ();
- UserEmail = GetUserEmail ();
-
-
bool HideUI = false;
// Parse the command line arguments
diff --git a/SparkleShare/SparkleUI.cs b/SparkleShare/SparkleUI.cs
index c2cf8597..7dee1d2c 100644
--- a/SparkleShare/SparkleUI.cs
+++ b/SparkleShare/SparkleUI.cs
@@ -118,6 +118,11 @@ namespace SparkleShare {
SparkleIntro intro = new SparkleIntro ();
intro.ShowAll ();
+ } else {
+
+ SparkleShare.UserName = SparkleShare.GetUserName ();
+ SparkleShare.UserEmail = SparkleShare.GetUserEmail ();
+
}
// Create the statusicon