svnsync/svnsync/Controllers/ControllersTray.cs

223 lines
7.6 KiB
C#

using System;
using BlubbFish.Utils;
using svnsync.Views;
using svnsync.Helpers;
using System.Collections.Generic;
namespace svnsync.Controllers
{
class ControllersTray : OwnController
{
private static ViewsTray viewTray;
private static ControllersWindow controllerWindow;
//private string args;
public delegate void _enableLoopRun();
public static event _enableLoopRun StartLoop;
/// <summary>
/// Controlls a Tray.
/// </summary>
public ControllersTray() { }
protected override void Init()
{
viewTray = new ViewsTray();
InitControllerWindow();
Runner();
}
private static void Runner() {
if(viewTray.Model.Args.HasArgumentType("-cron")) {
if(CronJob(0, false)) {
viewTray.ShowSuccess();
System.Threading.Thread.Sleep(5000);
viewTray.Dispose();
} else {
StartLoop();
}
return;
} else {
controllerWindow.Execute();
}
}
private static void InitControllerWindow() {
controllerWindow = new ControllersWindow();
}
public override void Dispose()
{
if (viewTray != null) {
viewTray.Dispose();
}
if (controllerWindow != null) {
controllerWindow.Dispose();
}
}
private static Boolean CronJob(Int32 run, Boolean readyToCommit)
{
if (viewTray.Model.Svn == null) {
return HandleError(Handles.SvnType.NotInit, "");
}
if (run > 10) {
return HandleError(Handles.SvnType.ToMutchChronRuns, "");
}
if (viewTray.Model.Svn.IsError) {
return HandleError(Handles.SvnType.UnexpectedError, viewTray.Model.Svn.Error);
}
try {
viewTray.Model.Svn.CheckStatus();
} catch (NotImplementedException e) {
return HandleError(Handles.SvnType.UnexpectedError, e.Message, e.StackTrace);
} catch (Helpers.SvnLockedException e) {
return HandleError(Handles.SvnType.LockedFile, e.Message);
}
if (viewTray.Model.Svn.IsNotOnlyModified) {
if (viewTray.Model.Svn.IsUncheckedFiles) {
if (viewTray.Model.Args.HasArgumentType("-autoadd")) {
viewTray.Model.Svn.AddFiles(viewTray.Model.Svn.NoVersionFiles);
if (viewTray.Model.Svn.IsError) {
return HandleError(Handles.SvnType.UnexpectedError, viewTray.Model.Svn.Error);
}
} else {
return HandleError(Handles.SvnType.HasVersionitedFiles, "");
}
}
if (viewTray.Model.Svn.IsExternDeletedFiles) {
if (viewTray.Model.Args.HasArgumentType("-autodelete")) {
viewTray.Model.Svn.DeleteFiles(viewTray.Model.Svn.WasDeletedFiles);
if (viewTray.Model.Svn.IsError) {
return HandleError(Handles.SvnType.UnexpectedError, viewTray.Model.Svn.Error);
}
} else {
return HandleError(Handles.SvnType.ExternDeletedFiles, "");
}
}
return CronJob(run + 1, true);
} else {
if (readyToCommit) {
viewTray.Model.Svn.SetArgCheckIn("Automatic Cronjob Checkin: " + StringHelper.GetTimeStamp(DateTime.Now));
if (viewTray.Model.Svn.IsError) {
return HandleError(Handles.SvnType.UnexpectedError, viewTray.Model.Svn.Error);
}
} else {
viewTray.Model.Svn.Update();
if (viewTray.Model.Svn.IsError) {
return HandleError(Handles.SvnType.UnexpectedError, viewTray.Model.Svn.Error);
}
return CronJob(run + 1, true);
}
}
return true;
}
private static Boolean HandleError(Handles.SvnType svnType, String message, String stacktrace = "")
{
viewTray.ShowError(svnType, message);
switch (svnType) {
case Handles.SvnType.ToMutchChronRuns:
controllerWindow.SetAction(Handles.FormType.MuchCronJobs);
break;
case Handles.SvnType.HasVersionitedFiles:
controllerWindow.SetAction(Handles.FormType.UnversionFiles);
controllerWindow.SetNewFiles(viewTray.Model.Svn.NoVersionFiles);
break;
case Handles.SvnType.UnexpectedError:
controllerWindow.SetAction(Handles.FormType.Error);
controllerWindow.SetMessage(message + " " + stacktrace);
break;
case Handles.SvnType.ExternDeletedFiles:
controllerWindow.SetAction(Handles.FormType.DeletedFiles);
controllerWindow.SetDeletedFiles(viewTray.Model.Svn.WasDeletedFiles);
break;
case Handles.SvnType.LockedFile:
controllerWindow.SetAction(Handles.FormType.ManualResolve);
controllerWindow.SetMessage(message);
break;
}
return false;
}
/// <summary>
/// If you Click on the Tray Icon
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public static void Click_Tray(Object sender, EventArgs e)
{
controllerWindow.Execute();
}
/// <summary>
/// If you Click on the Tray Ballon
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public static void Click_Ballon(Object sender, EventArgs e)
{
controllerWindow.Execute();
}
internal void HideToolTip()
{
viewTray.HideToolTip();
}
internal static void Click_Quit(Object sender, EventArgs e)
{
viewTray.Dispose();
System.Windows.Forms.Application.Exit();
}
internal static void DeleteButton_Click(object sender, EventArgs e) {
if(!(sender is System.Windows.Forms.Button)) {
return;
}
System.Windows.Forms.TreeView t = (System.Windows.Forms.TreeView)((ViewsWindowFormFileList)((System.Windows.Forms.Button)sender).Parent).tree;
List<System.Windows.Forms.TreeNode> l = TreeBuilder.getSelectedNodes(t.Nodes);
controllerWindow.Dispose();
System.Windows.Forms.Application.DoEvents();
InitControllerWindow();
viewTray.Model.Svn.DeleteFiles(l);
if(viewTray.Model.Svn.IsError) {
HandleError(Handles.SvnType.UnexpectedError, viewTray.Model.Svn.Error);
return;
}
RunAgainButton_Click(sender, null);
}
internal static void RunAgainButton_Click(object sender, EventArgs e) {
controllerWindow.Dispose();
System.Windows.Forms.Application.DoEvents();
InitControllerWindow();
viewTray.Model.Svn.ClearError();
Runner();
}
internal static void SvnOpenButton_Click(object sender, EventArgs e) {
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = "cmd";
p.StartInfo.WorkingDirectory = viewTray.Model.Args.GetArgumentData("-d");
p.StartInfo.Arguments = "/K svn";
p.Start();
}
internal static void AddButton_Click(object sender, EventArgs e) {
if(!(sender is System.Windows.Forms.Button)) {
return;
}
System.Windows.Forms.TreeView t = (System.Windows.Forms.TreeView)((ViewsWindowFormFileList)((System.Windows.Forms.Button)sender).Parent).tree;
List<System.Windows.Forms.TreeNode> l = TreeBuilder.getSelectedNodes(t.Nodes);
controllerWindow.Dispose();
System.Windows.Forms.Application.DoEvents();
InitControllerWindow();
viewTray.Model.Svn.AddFiles(l);
if(viewTray.Model.Svn.IsError) {
HandleError(Handles.SvnType.UnexpectedError, viewTray.Model.Svn.Error);
return;
}
RunAgainButton_Click(sender, null);
}
}
}