mirror of
https://github.com/ShareX/ShareX.git
synced 2024-06-28 03:00:22 +12:00
Added -NativeMessagingInput CLI argument which is now used by NativeMessagingHost
This commit is contained in:
parent
ae39dbd947
commit
4057ec27cb
|
@ -1232,7 +1232,7 @@ public static string GetAbsolutePath(string path)
|
|||
return Path.GetFullPath(path);
|
||||
}
|
||||
|
||||
public static string GetTempPath(string extension)
|
||||
public static string GetTempFilePath(string extension)
|
||||
{
|
||||
string path = Path.GetTempFileName();
|
||||
return Path.ChangeExtension(path, extension);
|
||||
|
@ -1391,7 +1391,8 @@ public static Cursor CreateCursor(byte[] data)
|
|||
|
||||
public static string EscapeCLIText(string text)
|
||||
{
|
||||
return string.Format("\"{0}\"", text.Replace("\\", "\\\\").Replace("\"", "\\\""));
|
||||
string escapedText = text.Replace("\\", "\\\\").Replace("\"", "\\\"");
|
||||
return $"\"{escapedText}\"";
|
||||
}
|
||||
|
||||
public static string BytesToHex(byte[] bytes)
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
|
||||
#endregion License Information (GPL v3)
|
||||
|
||||
using Newtonsoft.Json;
|
||||
using ShareX.HelpersLib;
|
||||
using System;
|
||||
using System.IO;
|
||||
|
@ -40,7 +39,16 @@ private static void Main(string[] args)
|
|||
{
|
||||
try
|
||||
{
|
||||
Run();
|
||||
string input = GetNativeMessagingInput();
|
||||
|
||||
if (!string.IsNullOrEmpty(input))
|
||||
{
|
||||
string filePath = Helpers.GetAbsolutePath("ShareX.exe");
|
||||
string tempFilePath = Helpers.GetTempFilePath("json");
|
||||
File.WriteAllText(tempFilePath, input, Encoding.UTF8);
|
||||
string argument = $"-NativeMessagingInput \"{tempFilePath}\"";
|
||||
NativeMethods.CreateProcess(filePath, argument, CreateProcessFlags.CREATE_BREAKAWAY_FROM_JOB);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
@ -54,40 +62,7 @@ private static void Main(string[] args)
|
|||
}
|
||||
}
|
||||
|
||||
private static void Run()
|
||||
{
|
||||
string input = GetInput();
|
||||
|
||||
if (!string.IsNullOrEmpty(input))
|
||||
{
|
||||
NativeMessagingInput nativeMessagingInput = JsonConvert.DeserializeObject<NativeMessagingInput>(input);
|
||||
|
||||
if (nativeMessagingInput != null)
|
||||
{
|
||||
string argument = null;
|
||||
|
||||
if (!string.IsNullOrEmpty(nativeMessagingInput.URL))
|
||||
{
|
||||
argument = Helpers.EscapeCLIText(nativeMessagingInput.URL);
|
||||
}
|
||||
else if (!string.IsNullOrEmpty(nativeMessagingInput.Text))
|
||||
{
|
||||
string filepath = Helpers.GetTempPath("txt");
|
||||
File.WriteAllText(filepath, nativeMessagingInput.Text, Encoding.UTF8);
|
||||
argument = $"\"{filepath}\"";
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(argument))
|
||||
{
|
||||
string path = Helpers.GetAbsolutePath("ShareX.exe");
|
||||
|
||||
NativeMethods.CreateProcess(path, argument, CreateProcessFlags.CREATE_BREAKAWAY_FROM_JOB);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static string GetInput()
|
||||
private static string GetNativeMessagingInput()
|
||||
{
|
||||
Stream inputStream = Console.OpenStandardInput();
|
||||
|
||||
|
|
|
@ -48,7 +48,6 @@
|
|||
<Compile Include="..\SharedAssemblyInfo.cs">
|
||||
<Link>Properties\SharedAssemblyInfo.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="NativeMessageInput.cs" />
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
|
@ -61,11 +60,6 @@
|
|||
<ItemGroup>
|
||||
<None Include="app.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Newtonsoft.Json">
|
||||
<Version>13.0.1</Version>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
|
||||
#endregion License Information (GPL v3)
|
||||
|
||||
namespace ShareX.NativeMessagingHost
|
||||
namespace ShareX
|
||||
{
|
||||
public class NativeMessagingInput
|
||||
{
|
|
@ -219,6 +219,7 @@
|
|||
<Compile Include="Forms\TextUploadForm.Designer.cs">
|
||||
<DependentUpon>TextUploadForm.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="NativeMessageInput.cs" />
|
||||
<Compile Include="NewsItem.cs" />
|
||||
<Compile Include="NewsManager.cs" />
|
||||
<Compile Include="..\SharedAssemblyInfo.cs">
|
||||
|
|
|
@ -51,7 +51,8 @@ public void UseCommandLineArgs(List<CLICommand> commands)
|
|||
|
||||
if (command.IsCommand)
|
||||
{
|
||||
if (CheckCustomUploader(command) || CheckImageEffect(command) || CheckCLIHotkey(command) || CheckCLIWorkflow(command))
|
||||
if (CheckCustomUploader(command) || CheckImageEffect(command) || CheckCLIHotkey(command) || CheckCLIWorkflow(command) ||
|
||||
CheckNativeMessagingInput(command))
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -153,5 +154,20 @@ private bool CheckCLIWorkflow(CLICommand command)
|
|||
|
||||
return false;
|
||||
}
|
||||
|
||||
private bool CheckNativeMessagingInput(CLICommand command)
|
||||
{
|
||||
if (command.Command.Equals("NativeMessagingInput", StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
if (!string.IsNullOrEmpty(command.Parameter) && command.Parameter.EndsWith(".json", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
TaskHelpers.HandleNativeMessagingInput(command.Parameter);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1727,6 +1727,35 @@ public static void ImportImageEffect(string filePath)
|
|||
}
|
||||
}
|
||||
|
||||
public static void HandleNativeMessagingInput(string filePath)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(filePath) && File.Exists(filePath))
|
||||
{
|
||||
NativeMessagingInput nativeMessagingInput = null;
|
||||
|
||||
try
|
||||
{
|
||||
nativeMessagingInput = JsonHelpers.DeserializeFromFile<NativeMessagingInput>(filePath);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
DebugHelper.WriteException(e);
|
||||
}
|
||||
|
||||
if (nativeMessagingInput != null)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(nativeMessagingInput.URL) && URLHelpers.IsValidURL(nativeMessagingInput.URL))
|
||||
{
|
||||
UploadManager.DownloadAndUploadFile(nativeMessagingInput.URL);
|
||||
}
|
||||
else if (!string.IsNullOrEmpty(nativeMessagingInput.Text))
|
||||
{
|
||||
UploadManager.UploadText(nativeMessagingInput.Text);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void OpenActionsToolbar()
|
||||
{
|
||||
ActionsToolbarForm.Instance.ForceActivate();
|
||||
|
|
Loading…
Reference in a new issue