private void _BtnWork_Click(object sender, RoutedEventArgs e) { string inputFolder = _TxtInputFolder.Text; string inputWater = _TxtInputWater.Text; string outputFolder = _TxtOutputFolder.Text; if (string.IsNullOrEmpty(inputFolder)) { _Log.WriteException($"Input folder not valid"); return; } if (string.IsNullOrEmpty(inputWater)) { _Log.WriteException($"Input watermark not valid"); return; } if (string.IsNullOrEmpty(outputFolder)) { _Log.WriteException($"Output folder not valid"); return; } try { inputFolder = Path.GetFullPath(inputFolder); inputWater = Path.GetFullPath(inputWater); outputFolder = Path.GetFullPath(outputFolder); _TxtInputFolder.Text = inputFolder; _TxtInputWater.Text = inputWater; _TxtOutputFolder.Text = outputFolder; } catch (System.Exception exception) { _Log.WriteException(exception); return; } if (_TxtWaterScale.Text.Length != 0) { _TxtWaterScale.Text = _TxtWaterScale.Text.Replace(',', '.'); } double waterScale = 0.5; if ( string.IsNullOrWhiteSpace(_TxtWaterScale.Text) || double.TryParse(_TxtWaterScale.Text, out waterScale) == false ) { waterScale = 0.5; _Log.WriteWarning($"Watermark scale not valid : [{_TxtWaterScale.Text}], using default scale {waterScale}"); } _TxtWaterScale.Text = waterScale.ToString(); _BtnProcessImages.IsEnabled = false; _PrgWaterProcess.Value = 0; var waterTask = new WatermarkTask(); waterTask.WatermarkBulkArgs = new WatermarkBulkArgs() { InputFolder = inputFolder, InputWaterImage = inputWater, OutputFolder = outputFolder, ParentTask = waterTask, ForceWrite = true, WaterScale = waterScale }; waterTask.OnProgressChanged += WaterTask_OnProgressChanged; Task.Run(() => { Watermark.MarkImages(waterTask.WatermarkBulkArgs); }).ContinueWith(t => { if (t.Exception != null) { _Log.WriteException(t.Exception); } Dispatcher.Invoke(() => { _BtnProcessImages.IsEnabled = true; }); }); }
private static IEnumerable <ITask> ParseChildren(XmlNode parent) { if (parent == null || parent.ChildNodes.Count == 0) { return(null); } var tasks = new List <ITask>(); foreach (XmlNode child in parent.ChildNodes) { if (child.NodeType != XmlNodeType.Element) { continue; } var children = ParseChildren(child); ITask task = null; var transliteratePath = child.Attributes["transliteratePath"] != null && bool.Parse(child.Attributes["transliteratePath"].Value); switch (child.Name) { case "copy": var copy = new CopyTask(null, children, child.Attributes["target"].Value, transliteratePath); var overrideMode = OverwriteMode.Rename; if (child.Attributes["overwriteMode"] != null) { overrideMode = (OverwriteMode)Enum.Parse(typeof(OverwriteMode), child.Attributes["overwriteMode"].Value, true); } copy.OverrideMode = overrideMode; task = copy; break; case "xslt": task = new XsltTask(child.Attributes["filePathKey"].Value, null, children); break; case "crop": task = new CropTask(child.Attributes["xKey"].Value, child.Attributes["yKey"].Value, child.Attributes["widthKey"].Value, child.Attributes["heightKey"].Value, null, children); break; case "watermark": task = new WatermarkTask(child.Attributes["textKey"].Value, child.Attributes["textPositionKey"].Value, null, children); break; case "temp": task = new TempTask(null, children); break; case "delete": task = new DeleteTask(null, children, bool.Parse(child.Attributes["deleteEmptyFolders"].Value)); break; case "dpof": var targetDirectory = child.Attributes["targetDirectory"].Value; var channelDirectoryName = child.Attributes["channelDirectoryName"].Value; var copyCountKey = child.Attributes["copyCountKey"].Value; var paperSizeKey = child.Attributes["paperSizeKey"].Value; var channelKey = child.Attributes["printChannelKey"].Value; task = new DpofTask(null, children, copyCountKey, paperSizeKey, channelDirectoryName, channelKey, targetDirectory, transliteratePath); break; case "convert": ConvertTask.ConvertFormat format; Enum.TryParse(child.Attributes["to"].Value, true, out format); task = new ConvertTask(format, null, children); break; } if (task != null) { if (children != null) { foreach (var ch in children) { ch.ParentTask = task; } } tasks.Add(task); } } return(tasks); }