diff --git a/Duplicati/Server/Program.cs b/Duplicati/Server/Program.cs index 13e41f4d5..7d99918b2 100644 --- a/Duplicati/Server/Program.cs +++ b/Duplicati/Server/Program.cs @@ -328,7 +328,7 @@ namespace Duplicati.Server LiveControl.ThreadPriorityChanged += new EventHandler(LiveControl_ThreadPriorityChanged); LiveControl.ThrottleSpeedChanged += new EventHandler(LiveControl_ThrottleSpeedChanged); - Program.WorkThread = new Duplicati.Library.Utility.WorkerThread>(Runner.Run, LiveControl.State == LiveControls.LiveControlState.Paused); + Program.WorkThread = new Duplicati.Library.Utility.WorkerThread>((x) => { Runner.Run(x); }, LiveControl.State == LiveControls.LiveControlState.Paused); Program.Scheduler = new Scheduler(WorkThread); Program.WorkThread.StartingWork += new EventHandler(SignalNewEvent); diff --git a/Duplicati/Server/Runner.cs b/Duplicati/Server/Runner.cs index 88183269c..d1bf58415 100644 --- a/Duplicati/Server/Runner.cs +++ b/Duplicati/Server/Runner.cs @@ -182,11 +182,10 @@ namespace Duplicati.Server return t; } - public static void Run(Tuple item) + public static Duplicati.Library.Interface.IBasicResults Run(Tuple item, params object[] args) { Duplicati.Server.Serialization.Interface.IBackup backup = null; - try { backup = Program.DataConnection.GetBackup(item.Item1); @@ -198,6 +197,17 @@ namespace Duplicati.Server Program.GenerateProgressState = () => sink.Copy(); Program.StatusEventNotifyer.SignalNewEvent(); + if (args != null && args.Length > 0) + { + var arg = (IDictionary)args.Where(x => x != null && typeof(IDictionary).IsAssignableFrom(x.GetType())).FirstOrDefault(); + if (arg != null) + { + args = args.Where(x => x != arg).ToArray(); + foreach(var k in arg.Keys) + options[k] = arg[k]; + } + } + using(var controller = new Duplicati.Library.Main.Controller(backup.TargetURL, options, sink)) { switch (item.Item2) @@ -213,45 +223,47 @@ namespace Duplicati.Server var r = controller.Backup(sources, filter); UpdateMetadata(backup, r); - } - break; - + return r; + } case DuplicatiOperation.List: { - //TODO: Need to pass arguments - var r = controller.List(); + string filter = null; + if (args != null && args.Length > 0) + filter = args[0] as string; + + var r = controller.List(filter); UpdateMetadata(backup, r); + return r; } - break; case DuplicatiOperation.Repair: { var r = controller.Repair(); UpdateMetadata(backup, r); + return r; } - break; case DuplicatiOperation.Remove: { var r = controller.Delete(); UpdateMetadata(backup, r); + return r; } - break; case DuplicatiOperation.Restore: { //TODO: Need to pass arguments var r = controller.Restore(new string[] { "*" }); UpdateMetadata(backup, r); + return r; } - break; case DuplicatiOperation.Verify: { //TODO: Need to pass arguments var r = controller.Test(); UpdateMetadata(backup, r); + return r; } - break; default: //TODO: Log this - return; + return null; } } } @@ -259,6 +271,7 @@ namespace Duplicati.Server { Program.DataConnection.LogError(item.Item1, string.Format("Failed while executing \"{0}\" with id: {1}", item.Item2, item.Item1), ex); //TODO: Update metadata with the error here + return null; } }