fixed #3805: Added delete input file option to actions

This commit is contained in:
Jaex 2018-12-06 18:16:39 +03:00
parent 15cb8d3830
commit 1b0d16ab41
7 changed files with 175 additions and 88 deletions

View file

@ -32,16 +32,16 @@ namespace ShareX.HelpersLib
public class ExternalProgram
{
public bool IsActive { get; set; }
public bool HiddenWindow { get; set; }
public string Name { get; set; }
public string Path { get; set; }
public string Args { get; set; }
public string Extensions { get; set; }
public string OutputExtension { get; set; }
public string Extensions { get; set; }
public bool HiddenWindow { get; set; }
public bool DeleteInputFile { get; set; }
public ExternalProgram()
{
IsActive = false;
Args = "%input";
}
@ -59,87 +59,111 @@ public ExternalProgram(string name, string path, string args) : this(name, path)
}
}
public string Run(string filePath)
public string Run(string inputPath)
{
if (!string.IsNullOrEmpty(filePath) && CheckExtensions(filePath) && !string.IsNullOrEmpty(Path) && File.Exists(Path))
if (!string.IsNullOrEmpty(Path) && File.Exists(Path) && !string.IsNullOrWhiteSpace(inputPath))
{
filePath = filePath.Trim('"');
inputPath = inputPath.Trim('"');
try
if (CheckExtension(inputPath, Extensions))
{
string outputPath = "";
using (Process process = new Process())
try
{
ProcessStartInfo psi = new ProcessStartInfo(Path);
string outputPath = inputPath;
if (string.IsNullOrEmpty(Args))
using (Process process = new Process())
{
psi.Arguments = '"' + filePath + '"';
}
else
{
if (!string.IsNullOrEmpty(OutputExtension))
ProcessStartInfo psi = new ProcessStartInfo(Path);
psi.UseShellExecute = false;
if (string.IsNullOrEmpty(Args))
{
outputPath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(filePath), System.IO.Path.GetFileNameWithoutExtension(filePath));
if (!OutputExtension.Contains("."))
{
OutputExtension = "." + OutputExtension;
}
outputPath += OutputExtension;
psi.Arguments = '"' + inputPath + '"';
}
else
{
outputPath = filePath;
if (!string.IsNullOrWhiteSpace(OutputExtension))
{
outputPath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(inputPath), System.IO.Path.GetFileNameWithoutExtension(inputPath));
if (!OutputExtension.StartsWith("."))
{
outputPath += ".";
}
outputPath += OutputExtension;
}
psi.Arguments = CodeMenuEntryActions.Parse(Args, inputPath, outputPath);
}
psi.Arguments = CodeMenuEntryActions.Parse(Args, filePath, outputPath);
if (HiddenWindow)
{
psi.CreateNoWindow = true;
}
process.StartInfo = psi;
DebugHelper.WriteLine($"Running \"{psi.FileName}\" with arguments: {psi.Arguments}");
process.Start();
process.WaitForExit();
}
if (HiddenWindow)
if (!string.IsNullOrEmpty(outputPath) && File.Exists(outputPath))
{
psi.WindowStyle = ProcessWindowStyle.Hidden;
psi.CreateNoWindow = true;
if (DeleteInputFile && !inputPath.Equals(outputPath, StringComparison.OrdinalIgnoreCase) && File.Exists(inputPath))
{
DebugHelper.WriteLine("Deleting input file: " + inputPath);
File.Delete(inputPath);
}
return outputPath;
}
process.StartInfo = psi;
DebugHelper.WriteLine(string.Format("Running {0} with arguments: {1}", Path, psi.Arguments));
process.Start();
process.WaitForExit();
return inputPath;
}
if (!string.IsNullOrEmpty(outputPath) && File.Exists(outputPath))
catch (Exception e)
{
return outputPath;
DebugHelper.WriteException(e);
}
return filePath;
}
catch (Exception e)
{
DebugHelper.WriteException(e);
}
}
return filePath;
return inputPath;
}
private bool CheckExtensions(string path)
private bool CheckExtension(string path, string extensions)
{
if (string.IsNullOrEmpty(Extensions) || string.IsNullOrEmpty(path)) return true;
int idx = 0;
for (int i = 0; i <= Extensions.Length; ++i)
if (!string.IsNullOrWhiteSpace(path))
{
if (i == Extensions.Length || !char.IsLetterOrDigit(Extensions[i]))
if (string.IsNullOrWhiteSpace(extensions))
{
if (idx < i && path.EndsWith(Extensions.Substring(idx, i - idx))) return true;
idx = i + 1;
return true;
}
int index = 0;
for (int i = 0; i <= extensions.Length; ++i)
{
if (i == extensions.Length || !char.IsLetterOrDigit(extensions[i]))
{
if (i > index)
{
string extension = "." + extensions.Substring(index, i - index);
if (path.EndsWith(extension, StringComparison.OrdinalIgnoreCase))
{
return true;
}
}
index = i + 1;
}
}
}
return false;
}
}

View file

@ -43,6 +43,7 @@ private void InitializeComponent()
this.txtOutputExtension = new System.Windows.Forms.TextBox();
this.lblOutputExtension = new System.Windows.Forms.Label();
this.cbHiddenWindow = new System.Windows.Forms.CheckBox();
this.cbDeleteInputFile = new System.Windows.Forms.CheckBox();
this.SuspendLayout();
//
// lblName
@ -92,6 +93,7 @@ private void InitializeComponent()
// btnCancel
//
resources.ApplyResources(this.btnCancel, "btnCancel");
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnCancel.Name = "btnCancel";
this.btnCancel.UseVisualStyleBackColor = true;
this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
@ -110,6 +112,7 @@ private void InitializeComponent()
//
resources.ApplyResources(this.txtOutputExtension, "txtOutputExtension");
this.txtOutputExtension.Name = "txtOutputExtension";
this.txtOutputExtension.TextChanged += new System.EventHandler(this.txtOutputExtension_TextChanged);
//
// lblOutputExtension
//
@ -122,6 +125,12 @@ private void InitializeComponent()
this.cbHiddenWindow.Name = "cbHiddenWindow";
this.cbHiddenWindow.UseVisualStyleBackColor = true;
//
// cbDeleteInputFile
//
resources.ApplyResources(this.cbDeleteInputFile, "cbDeleteInputFile");
this.cbDeleteInputFile.Name = "cbDeleteInputFile";
this.cbDeleteInputFile.UseVisualStyleBackColor = true;
//
// ActionsForm
//
this.AcceptButton = this.btnOK;
@ -129,6 +138,7 @@ private void InitializeComponent()
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.SystemColors.Window;
this.CancelButton = this.btnCancel;
this.Controls.Add(this.cbDeleteInputFile);
this.Controls.Add(this.cbHiddenWindow);
this.Controls.Add(this.lblOutputExtension);
this.Controls.Add(this.txtOutputExtension);
@ -166,5 +176,6 @@ private void InitializeComponent()
private System.Windows.Forms.TextBox txtOutputExtension;
private System.Windows.Forms.Label lblOutputExtension;
private System.Windows.Forms.CheckBox cbHiddenWindow;
private System.Windows.Forms.CheckBox cbDeleteInputFile;
}
}

View file

@ -51,6 +51,7 @@ public ActionsForm(ExternalProgram fileAction)
txtOutputExtension.Text = fileAction.OutputExtension ?? "";
txtExtensions.Text = fileAction.Extensions ?? "";
cbHiddenWindow.Checked = fileAction.HiddenWindow;
cbDeleteInputFile.Checked = fileAction.DeleteInputFile;
}
private void btnPathBrowse_Click(object sender, EventArgs e)
@ -58,6 +59,11 @@ private void btnPathBrowse_Click(object sender, EventArgs e)
Helpers.BrowseFile(txtPath);
}
private void txtOutputExtension_TextChanged(object sender, EventArgs e)
{
cbDeleteInputFile.Enabled = txtOutputExtension.TextLength > 0;
}
private void btnOK_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(txtName.Text))
@ -78,6 +84,7 @@ private void btnOK_Click(object sender, EventArgs e)
FileAction.Extensions = txtExtensions.Text;
FileAction.OutputExtension = txtOutputExtension.Text;
FileAction.HiddenWindow = cbHiddenWindow.Checked;
FileAction.DeleteInputFile = cbDeleteInputFile.Checked;
DialogResult = DialogResult.OK;
Close();

View file

@ -144,7 +144,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;lblName.ZOrder" xml:space="preserve">
<value>13</value>
<value>14</value>
</data>
<data name="lblPath.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -171,7 +171,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;lblPath.ZOrder" xml:space="preserve">
<value>12</value>
<value>13</value>
</data>
<data name="lblArgs.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -198,7 +198,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;lblArgs.ZOrder" xml:space="preserve">
<value>11</value>
<value>12</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="txtName.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
@ -223,7 +223,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;txtName.ZOrder" xml:space="preserve">
<value>10</value>
<value>11</value>
</data>
<data name="txtPath.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
@ -247,7 +247,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;txtPath.ZOrder" xml:space="preserve">
<value>9</value>
<value>10</value>
</data>
<data name="txtArguments.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
@ -271,7 +271,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;txtArguments.ZOrder" xml:space="preserve">
<value>8</value>
<value>9</value>
</data>
<data name="btnPathBrowse.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
@ -287,7 +287,7 @@
</data>
<data name="btnPathBrowse.Text" xml:space="preserve">
<value>...</value>
<comment>@Invariant</comment></data>
</data>
<data name="&gt;&gt;btnPathBrowse.Name" xml:space="preserve">
<value>btnPathBrowse</value>
</data>
@ -298,16 +298,16 @@
<value>$this</value>
</data>
<data name="&gt;&gt;btnPathBrowse.ZOrder" xml:space="preserve">
<value>7</value>
<value>8</value>
</data>
<data name="btnOK.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
<value>Bottom, Right</value>
</data>
<data name="btnOK.Location" type="System.Drawing.Point, System.Drawing">
<value>155, 285</value>
<value>136, 304</value>
</data>
<data name="btnOK.Size" type="System.Drawing.Size, System.Drawing">
<value>72, 24</value>
<value>80, 24</value>
</data>
<data name="btnOK.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
@ -325,16 +325,16 @@
<value>$this</value>
</data>
<data name="&gt;&gt;btnOK.ZOrder" xml:space="preserve">
<value>6</value>
<value>7</value>
</data>
<data name="btnCancel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
<value>Bottom, Right</value>
</data>
<data name="btnCancel.Location" type="System.Drawing.Point, System.Drawing">
<value>233, 285</value>
<value>224, 304</value>
</data>
<data name="btnCancel.Size" type="System.Drawing.Size, System.Drawing">
<value>72, 24</value>
<value>80, 24</value>
</data>
<data name="btnCancel.TabIndex" type="System.Int32, mscorlib">
<value>12</value>
@ -352,7 +352,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;btnCancel.ZOrder" xml:space="preserve">
<value>5</value>
<value>6</value>
</data>
<data name="lblExtensions.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -379,7 +379,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;lblExtensions.ZOrder" xml:space="preserve">
<value>4</value>
<value>5</value>
</data>
<data name="txtExtensions.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
@ -403,7 +403,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;txtExtensions.ZOrder" xml:space="preserve">
<value>3</value>
<value>4</value>
</data>
<data name="txtOutputExtension.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
@ -427,7 +427,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;txtOutputExtension.ZOrder" xml:space="preserve">
<value>2</value>
<value>3</value>
</data>
<data name="lblOutputExtension.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -454,7 +454,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;lblOutputExtension.ZOrder" xml:space="preserve">
<value>1</value>
<value>2</value>
</data>
<data name="cbHiddenWindow.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -484,6 +484,36 @@
<value>$this</value>
</data>
<data name="&gt;&gt;cbHiddenWindow.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="cbDeleteInputFile.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="cbDeleteInputFile.Enabled" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="cbDeleteInputFile.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 272</value>
</data>
<data name="cbDeleteInputFile.Size" type="System.Drawing.Size, System.Drawing">
<value>99, 17</value>
</data>
<data name="cbDeleteInputFile.TabIndex" type="System.Int32, mscorlib">
<value>14</value>
</data>
<data name="cbDeleteInputFile.Text" xml:space="preserve">
<value>Delete input file</value>
</data>
<data name="&gt;&gt;cbDeleteInputFile.Name" xml:space="preserve">
<value>cbDeleteInputFile</value>
</data>
<data name="&gt;&gt;cbDeleteInputFile.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;cbDeleteInputFile.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;cbDeleteInputFile.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
@ -493,7 +523,7 @@
<value>6, 13</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>313, 317</value>
<value>313, 337</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterScreen</value>

View file

@ -1935,6 +1935,7 @@ private void InitializeComponent()
this.lvActions.View = System.Windows.Forms.View.Details;
this.lvActions.ItemMoved += new ShareX.HelpersLib.MyListView.ListViewItemMovedEventHandler(this.lvActions_ItemMoved);
this.lvActions.ItemChecked += new System.Windows.Forms.ItemCheckedEventHandler(this.lvActions_ItemChecked);
this.lvActions.SelectedIndexChanged += new System.EventHandler(this.lvActions_SelectedIndexChanged);
//
// chActionsName
//

View file

@ -311,7 +311,7 @@ public TaskSettingsForm(TaskSettings hotkeySetting, bool isDefault = false)
cbCaptureOCRAutoCopy.Enabled = !cbCaptureOCRSilent.Checked;
cbCaptureOCRProcessOnLoad.Enabled = !cbCaptureOCRSilent.Checked;
#endregion
#endregion OCR
#endregion Capture
@ -1139,7 +1139,7 @@ private void cbCaptureOCRAutoCopy_CheckedChanged(object sender, EventArgs e)
TaskSettings.CaptureSettings.OCROptions.AutoCopy = cbCaptureOCRAutoCopy.Checked;
}
#endregion
#endregion OCR
#endregion Capture
@ -1206,6 +1206,11 @@ private void txtNameFormatPatternActiveWindow_TextChanged(object sender, EventAr
UpdateNameFormatPreviews();
}
private void cbFileUploadReplaceProblematicCharacters_CheckedChanged(object sender, EventArgs e)
{
TaskSettings.UploadSettings.FileUploadReplaceProblematicCharacters = cbFileUploadReplaceProblematicCharacters.Checked;
}
private void btnResetAutoIncrementNumber_Click(object sender, EventArgs e)
{
Program.Settings.NameParserAutoIncrementNumber = 0;
@ -1424,6 +1429,11 @@ private void btnActionsRemove_Click(object sender, EventArgs e)
}
}
private void lvActions_SelectedIndexChanged(object sender, EventArgs e)
{
btnActionsEdit.Enabled = btnActionsDuplicate.Enabled = btnActionsRemove.Enabled = lvActions.SelectedItems.Count > 0;
}
private void lvActions_ItemChecked(object sender, ItemCheckedEventArgs e)
{
ExternalProgram fileAction = e.Item.Tag as ExternalProgram;
@ -1534,11 +1544,6 @@ private void txtToolsScreenColorPickerFormat_TextChanged(object sender, EventArg
TaskSettings.ToolsSettings.ScreenColorPickerFormat = txtToolsScreenColorPickerFormat.Text;
}
private void cbFileUploadReplaceProblematicCharacters_CheckedChanged(object sender, EventArgs e)
{
TaskSettings.UploadSettings.FileUploadReplaceProblematicCharacters = cbFileUploadReplaceProblematicCharacters.Checked;
}
#endregion Tools
#region Advanced

View file

@ -421,7 +421,7 @@
<value>btnAfterCapture</value>
</data>
<data name="&gt;&gt;btnAfterCapture.Type" xml:space="preserve">
<value>ShareX.HelpersLib.MenuButton, ShareX.HelpersLib, Version=12.3.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.HelpersLib.MenuButton, ShareX.HelpersLib, Version=12.4.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;btnAfterCapture.Parent" xml:space="preserve">
<value>tpTask</value>
@ -451,7 +451,7 @@
<value>btnAfterUpload</value>
</data>
<data name="&gt;&gt;btnAfterUpload.Type" xml:space="preserve">
<value>ShareX.HelpersLib.MenuButton, ShareX.HelpersLib, Version=12.3.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.HelpersLib.MenuButton, ShareX.HelpersLib, Version=12.4.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;btnAfterUpload.Parent" xml:space="preserve">
<value>tpTask</value>
@ -523,7 +523,7 @@
<value>btnDestinations</value>
</data>
<data name="&gt;&gt;btnDestinations.Type" xml:space="preserve">
<value>ShareX.HelpersLib.MenuButton, ShareX.HelpersLib, Version=12.3.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.HelpersLib.MenuButton, ShareX.HelpersLib, Version=12.4.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;btnDestinations.Parent" xml:space="preserve">
<value>tpTask</value>
@ -553,7 +553,7 @@
<value>btnTask</value>
</data>
<data name="&gt;&gt;btnTask.Type" xml:space="preserve">
<value>ShareX.HelpersLib.MenuButton, ShareX.HelpersLib, Version=12.3.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.HelpersLib.MenuButton, ShareX.HelpersLib, Version=12.4.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;btnTask.Parent" xml:space="preserve">
<value>tpTask</value>
@ -4606,7 +4606,7 @@
<value>lvUploaderFiltersList</value>
</data>
<data name="&gt;&gt;lvUploaderFiltersList.Type" xml:space="preserve">
<value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=12.3.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=12.4.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;lvUploaderFiltersList.Parent" xml:space="preserve">
<value>tpUploaderFilters</value>
@ -4887,6 +4887,9 @@
<data name="&gt;&gt;tpUpload.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="btnActionsDuplicate.Enabled" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="btnActionsDuplicate.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
@ -4981,7 +4984,7 @@
<value>lvActions</value>
</data>
<data name="&gt;&gt;lvActions.Type" xml:space="preserve">
<value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=12.3.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=12.4.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;lvActions.Parent" xml:space="preserve">
<value>pActions</value>
@ -4989,6 +4992,9 @@
<data name="&gt;&gt;lvActions.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="btnActionsEdit.Enabled" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="btnActionsEdit.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
@ -5016,6 +5022,9 @@
<data name="&gt;&gt;btnActionsEdit.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="btnActionsRemove.Enabled" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="btnActionsRemove.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
@ -5572,7 +5581,7 @@
<value>tttvMain</value>
</data>
<data name="&gt;&gt;tttvMain.Type" xml:space="preserve">
<value>ShareX.HelpersLib.TabToTreeView, ShareX.HelpersLib, Version=12.3.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.HelpersLib.TabToTreeView, ShareX.HelpersLib, Version=12.4.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;tttvMain.Parent" xml:space="preserve">
<value>$this</value>