Move more logic from [intro] to [controller]

This commit is contained in:
Hylke Bons 2010-11-19 01:07:59 +00:00
parent 390c1f3bdb
commit fd6d489ce5
3 changed files with 129 additions and 98 deletions

View file

@ -41,8 +41,13 @@ namespace SparkleLib {
Server = server;
Channel = channel;
//TODO: check why nick is sometimes null
if (Nick != null)
Nick = nick.Replace ("@", "_at_").Replace (".", "_dot_");
else
Nick = "oops";
// Keep the nick short
if (Nick.Length > 9)
Nick = Nick.Substring (0, 9);

View file

@ -30,6 +30,12 @@ namespace SparkleShare {
public string FolderSize;
public event FolderFetchedEventHandler FolderFetched;
public delegate void FolderFetchedEventHandler ();
public event FolderFetchErrorEventHandler FolderFetchError;
public delegate void FolderFetchErrorEventHandler ();
public event RepositoryListChangedEventHandler RepositoryListChanged;
public delegate void RepositoryListChangedEventHandler ();
@ -617,6 +623,96 @@ namespace SparkleShare {
}
public void FetchFolder (string url, string name)
{
// Strip the '.git' from the 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);
bool folder_exists = Directory.Exists (
SparkleHelpers.CombineMore (SparklePaths.SparklePath, canonical_name));
// Add a numbered suffix to the nameif a folder with the same name
// already exists. Example: "Folder (2)"
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 + ")";
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 {
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);
}
if (FolderFetched != null)
FolderFetched ();
if (RepositoryListChanged != null)
RepositoryListChanged ();
};
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");
}
if (FolderFetchError != null)
FolderFetchError ();
};
fetcher.Clone ();
}
// Quits the program
public void Quit ()
{

View file

@ -358,8 +358,34 @@ namespace SparkleShare {
string url = server + "/" + name;
SparkleHelpers.DebugInfo ("Git", "[" + name + "] Formed URL: " + url);
FetchFolder (url, name);
string canonical_name = System.IO.Path.GetFileNameWithoutExtension (name);
DeleteEvent += PreventClose;
ShowSyncingPage (canonical_name);
SparkleShare.Controller.FolderFetched += delegate {
DeleteEvent -= PreventClose;
Application.Invoke (delegate {
ShowSuccessPage (name);
});
};
SparkleShare.Controller.FolderFetchError += delegate {
DeleteEvent -= PreventClose;
Application.Invoke (delegate { ShowErrorPage (); });
};
SparkleShare.Controller.FetchFolder (url, name);
};
@ -614,102 +640,6 @@ namespace SparkleShare {
}
private void FetchFolder (string url, string name)
{
// Strip the '.git' from the name
string canonical_name = System.IO.Path.GetFileNameWithoutExtension (name);
string tmp_folder = SparkleHelpers.CombineMore (SparklePaths.SparkleTmpPath, canonical_name);
ShowSyncingPage (canonical_name);
SparkleFetcher fetcher = new SparkleFetcher (url, tmp_folder);
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 + ")";
fetcher.CloningStarted += delegate {
DeleteEvent += PreventClose;
SparkleHelpers.DebugInfo ("Git", "[" + canonical_name + "] Cloning Repository");
};
fetcher.Progress.ProgressChanged += delegate {
Application.Invoke (delegate { ProgressBar.Fraction = fetcher.Progress.Fraction;
ProgressBar.ShowAll ();
});
Console.WriteLine ("!!!!!!!!!!!UPDATED BAR!!!!!!!!1");
};
fetcher.CloningFinished += delegate {
DeleteEvent -= PreventClose;
SparkleHelpers.DebugInfo ("Git", "[" + canonical_name + "] Repository cloned");
SparkleHelpers.ClearAttributes (tmp_folder);
try {
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 (target_folder_name); });
};
fetcher.CloningFailed += delegate {
DeleteEvent -= PreventClose;
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 (); });
};
fetcher.Clone ();
}
// Enables or disables the 'Next' button depending on the
// entries filled in by the user
private void CheckAccountForm ()