mirror of
https://github.com/ShareX/ShareX.git
synced 2024-06-30 20:20:34 +12:00
Support special folder variables in Actions
This commit is contained in:
parent
a8f992a203
commit
c85f23cc96
|
@ -52,9 +52,16 @@ public ExternalProgram(string name, string path) : this()
|
|||
Path = path;
|
||||
}
|
||||
|
||||
public string GetFullPath()
|
||||
{
|
||||
return Helpers.ExpandFolderVariables(Path);
|
||||
}
|
||||
|
||||
public string Run(string inputPath)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(Path) && File.Exists(Path) && !string.IsNullOrWhiteSpace(inputPath))
|
||||
string path = GetFullPath();
|
||||
|
||||
if (!string.IsNullOrEmpty(path) && File.Exists(path) && !string.IsNullOrWhiteSpace(inputPath))
|
||||
{
|
||||
inputPath = inputPath.Trim('"');
|
||||
|
||||
|
@ -91,7 +98,7 @@ public string Run(string inputPath)
|
|||
{
|
||||
ProcessStartInfo psi = new ProcessStartInfo()
|
||||
{
|
||||
FileName = Path,
|
||||
FileName = path,
|
||||
Arguments = arguments,
|
||||
UseShellExecute = false,
|
||||
CreateNoWindow = HiddenWindow
|
||||
|
|
|
@ -325,13 +325,18 @@ public static string GetRandomLineFromFile(string path)
|
|||
public static string GetValidFileName(string fileName, string separator = "")
|
||||
{
|
||||
char[] invalidFileNameChars = Path.GetInvalidFileNameChars();
|
||||
|
||||
if (string.IsNullOrEmpty(separator))
|
||||
{
|
||||
return new string(fileName.Where(c => !invalidFileNameChars.Contains(c)).ToArray());
|
||||
}
|
||||
else
|
||||
{
|
||||
invalidFileNameChars.ForEach(x => fileName = fileName.Replace(x.ToString(), separator));
|
||||
foreach (char invalidFileNameChar in invalidFileNameChars)
|
||||
{
|
||||
fileName = fileName.Replace(invalidFileNameChar.ToString(), separator);
|
||||
}
|
||||
|
||||
return fileName.Trim().Replace(separator + separator, separator);
|
||||
}
|
||||
}
|
||||
|
@ -730,6 +735,11 @@ public static bool BrowseFile(string title, TextBox tb, string initialDirectory
|
|||
{
|
||||
string path = tb.Text;
|
||||
|
||||
if (detectSpecialFolders)
|
||||
{
|
||||
path = ExpandFolderVariables(path);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(path))
|
||||
{
|
||||
path = Path.GetDirectoryName(path);
|
||||
|
@ -750,7 +760,15 @@ public static bool BrowseFile(string title, TextBox tb, string initialDirectory
|
|||
|
||||
if (ofd.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
tb.Text = detectSpecialFolders ? GetVariableFolderPath(ofd.FileName) : ofd.FileName;
|
||||
string fileName = ofd.FileName;
|
||||
|
||||
if (detectSpecialFolders)
|
||||
{
|
||||
fileName = GetVariableFolderPath(fileName);
|
||||
}
|
||||
|
||||
tb.Text = fileName;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -796,7 +814,10 @@ public static string GetVariableFolderPath(string path)
|
|||
{
|
||||
try
|
||||
{
|
||||
GetEnums<Environment.SpecialFolder>().ForEach(x => path = path.Replace(Environment.GetFolderPath(x), $"%{x}%", StringComparison.InvariantCultureIgnoreCase));
|
||||
foreach (Environment.SpecialFolder specialFolder in GetEnums<Environment.SpecialFolder>())
|
||||
{
|
||||
path = path.Replace(Environment.GetFolderPath(specialFolder), $"%{specialFolder}%", StringComparison.OrdinalIgnoreCase);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
@ -813,7 +834,11 @@ public static string ExpandFolderVariables(string path)
|
|||
{
|
||||
try
|
||||
{
|
||||
GetEnums<Environment.SpecialFolder>().ForEach(x => path = path.Replace($"%{x}%", Environment.GetFolderPath(x), StringComparison.InvariantCultureIgnoreCase));
|
||||
foreach (Environment.SpecialFolder specialFolder in GetEnums<Environment.SpecialFolder>())
|
||||
{
|
||||
path = path.Replace($"%{specialFolder}%", Environment.GetFolderPath(specialFolder), StringComparison.OrdinalIgnoreCase);
|
||||
}
|
||||
|
||||
path = Environment.ExpandEnvironmentVariables(path);
|
||||
}
|
||||
catch (Exception e)
|
||||
|
@ -825,6 +850,18 @@ public static string ExpandFolderVariables(string path)
|
|||
return path;
|
||||
}
|
||||
|
||||
public static string OutputSpecialFolders()
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
foreach (Environment.SpecialFolder specialFolder in GetEnums<Environment.SpecialFolder>())
|
||||
{
|
||||
sb.AppendLine(string.Format("{0,-25}{1}", specialFolder, Environment.GetFolderPath(specialFolder)));
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
public static bool WaitWhile(Func<bool> check, int interval, int timeout = -1)
|
||||
{
|
||||
Stopwatch timer = Stopwatch.StartNew();
|
||||
|
|
|
@ -112,12 +112,14 @@ public override void OnDraw(Graphics g)
|
|||
|
||||
protected void DrawFreehand(Graphics g)
|
||||
{
|
||||
int borderSize = Math.Max(BorderSize, 1);
|
||||
|
||||
if (Shadow)
|
||||
{
|
||||
DrawFreehand(g, ShadowColor, Math.Max(BorderSize, 1), positions.Select(x => x.Add(ShadowOffset)).ToArray());
|
||||
DrawFreehand(g, ShadowColor, borderSize, positions.Select(x => x.Add(ShadowOffset)).ToArray());
|
||||
}
|
||||
|
||||
DrawFreehand(g, BorderColor, Math.Max(BorderSize, 1), positions.ToArray());
|
||||
DrawFreehand(g, BorderColor, borderSize, positions.ToArray());
|
||||
}
|
||||
|
||||
protected void DrawFreehand(Graphics g, Color borderColor, int borderSize, Point[] points)
|
||||
|
|
|
@ -137,6 +137,8 @@ public override void OnDraw(Graphics g)
|
|||
|
||||
protected void DrawLine(Graphics g)
|
||||
{
|
||||
int borderSize = Math.Max(BorderSize, 1);
|
||||
|
||||
if (Shadow)
|
||||
{
|
||||
Point[] shadowPoints = new Point[Points.Length];
|
||||
|
@ -146,10 +148,10 @@ protected void DrawLine(Graphics g)
|
|||
shadowPoints[i] = Points[i].Add(ShadowOffset);
|
||||
}
|
||||
|
||||
DrawLine(g, ShadowColor, Math.Max(BorderSize, 1), shadowPoints);
|
||||
DrawLine(g, ShadowColor, borderSize, shadowPoints);
|
||||
}
|
||||
|
||||
DrawLine(g, BorderColor, Math.Max(BorderSize, 1), Points);
|
||||
DrawLine(g, BorderColor, borderSize, Points);
|
||||
}
|
||||
|
||||
protected void DrawLine(Graphics g, Color borderColor, int borderSize, Point[] points)
|
||||
|
|
1
ShareX/Forms/ActionsForm.Designer.cs
generated
1
ShareX/Forms/ActionsForm.Designer.cs
generated
|
@ -153,7 +153,6 @@ private void InitializeComponent()
|
|||
this.Controls.Add(this.lblArgs);
|
||||
this.Controls.Add(this.lblPath);
|
||||
this.Controls.Add(this.lblName);
|
||||
this.MaximizeBox = false;
|
||||
this.Name = "ActionsForm";
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
|
|
@ -56,7 +56,7 @@ public ActionsForm(ExternalProgram fileAction)
|
|||
|
||||
private void btnPathBrowse_Click(object sender, EventArgs e)
|
||||
{
|
||||
Helpers.BrowseFile(txtPath);
|
||||
Helpers.BrowseFile(txtPath, "", true);
|
||||
}
|
||||
|
||||
private void txtOutputExtension_TextChanged(object sender, EventArgs e)
|
||||
|
|
|
@ -895,7 +895,7 @@ private void UpdateActionsMenu(string filePath)
|
|||
|
||||
try
|
||||
{
|
||||
using (Icon icon = NativeMethods.GetFileIcon(action.Path, true))
|
||||
using (Icon icon = NativeMethods.GetFileIcon(action.GetFullPath(), true))
|
||||
{
|
||||
if (icon != null && icon.Width > 0 && icon.Height > 0)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue