223 lines
7.6 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|