Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 7 additions & 14 deletions Flow.Launcher.Core/Plugin/JsonPRCModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
using System.Linq;
using System.Text.Json.Serialization;
using Flow.Launcher.Plugin;
using System.Text.Json;

namespace Flow.Launcher.Core.Plugin
{
Expand Down Expand Up @@ -59,6 +60,8 @@ public class JsonRPCRequestModel : JsonRPCModelBase

public override string ToString()
{
return JsonSerializer.Serialize(this);

string rpc = string.Empty;
if (Parameters != null && Parameters.Length > 0)
{
Expand All @@ -78,9 +81,9 @@ private string GetParameterByType(object parameter)
=> parameter switch
{
null => "null",
string _ => $@"\""{ReplaceEscapes(parameter.ToString())}\""",
bool _ => $@"{parameter.ToString().ToLower()}",
_ => parameter.ToString()
string p => $@"\""{ReplaceEscapes(p)}\""",
bool p => $@"{p.ToString().ToLower()}",
_ => $@"\""{ReplaceEscapes(parameter.ToString())}\"""
};


Expand All @@ -97,11 +100,7 @@ private string ReplaceEscapes(string str)
/// </summary>
public class JsonRPCServerRequestModel : JsonRPCRequestModel
{
public override string ToString()
{
string rpc = base.ToString();
return rpc + "}";
}

}

/// <summary>
Expand All @@ -110,12 +109,6 @@ public override string ToString()
public class JsonRPCClientRequestModel : JsonRPCRequestModel
{
public bool DontHideAfterAction { get; set; }

public override string ToString()
{
string rpc = base.ToString();
return rpc + "}";
}
}

/// <summary>
Expand Down
12 changes: 6 additions & 6 deletions Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@ public List<Result> LoadContextMenus(Result selectedResult)
}



private async Task<List<Result>> DeserializedResultAsync(Stream output)
{
if (output == Stream.Null) return null;
Expand All @@ -71,7 +70,7 @@ private List<Result> ParseResults(JsonRPCQueryResponseModel queryResponseModel)
var results = new List<Result>();
if (queryResponseModel.Result == null) return null;

if(!string.IsNullOrEmpty(queryResponseModel.DebugMessage))
if (!string.IsNullOrEmpty(queryResponseModel.DebugMessage))
{
context.API.ShowMsg(queryResponseModel.DebugMessage);
}
Expand All @@ -92,6 +91,8 @@ private List<Result> ParseResults(JsonRPCQueryResponseModel queryResponseModel)
else
{
string actionReponse = ExecuteCallback(result.JsonRPCAction);
if (string.IsNullOrEmpty(actionReponse))
return false;
JsonRPCRequestModel jsonRpcRequestModel =
JsonSerializer.Deserialize<JsonRPCRequestModel>(actionReponse);
if (jsonRpcRequestModel != null
Expand Down Expand Up @@ -177,12 +178,11 @@ protected string Execute(ProcessStartInfo startInfo)

if (result.StartsWith("DEBUG:"))
{
MessageBox.Show(new Form { TopMost = true }, result.Substring(6));
MessageBox.Show(new Form {TopMost = true}, result.Substring(6));
return string.Empty;
}

return result;

}
catch (Exception e)
{
Expand Down Expand Up @@ -248,10 +248,10 @@ public async Task<List<Result>> QueryAsync(Query query, CancellationToken token)
}
}

public Task InitAsync(PluginInitContext context)
public virtual Task InitAsync(PluginInitContext context)
{
this.context = context;
return Task.CompletedTask;
}
}
}
}
29 changes: 20 additions & 9 deletions Flow.Launcher.Core/Plugin/PythonPlugin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,17 +28,19 @@ public PythonPlugin(string filename)
var path = Path.Combine(Constant.ProgramDirectory, JsonRPC);
_startInfo.EnvironmentVariables["PYTHONPATH"] = path;

//Add -B flag to tell python don't write .py[co] files. Because .pyc contains location infos which will prevent python portable
_startInfo.ArgumentList.Add("-B");
}

protected override Task<Stream> ExecuteQueryAsync(Query query, CancellationToken token)
{
JsonRPCServerRequestModel request = new JsonRPCServerRequestModel
{
Method = "query",
Parameters = new object[] { query.Search },
Method = "query", Parameters = new object[] {query.Search},
};
//Add -B flag to tell python don't write .py[co] files. Because .pyc contains location infos which will prevent python portable
_startInfo.Arguments = $"-B \"{context.CurrentPluginMetadata.ExecuteFilePath}\" \"{request}\"";

_startInfo.ArgumentList[2] = request.ToString();

// todo happlebao why context can't be used in constructor
_startInfo.WorkingDirectory = context.CurrentPluginMetadata.PluginDirectory;

Expand All @@ -47,22 +49,31 @@ protected override Task<Stream> ExecuteQueryAsync(Query query, CancellationToken

protected override string ExecuteCallback(JsonRPCRequestModel rpcRequest)
{
_startInfo.Arguments = $"-B \"{context.CurrentPluginMetadata.ExecuteFilePath}\" \"{rpcRequest}\"";
_startInfo.ArgumentList[2] = rpcRequest.ToString();
_startInfo.WorkingDirectory = context.CurrentPluginMetadata.PluginDirectory;
// TODO: Async Action
return Execute(_startInfo);
}

protected override string ExecuteContextMenu(Result selectedResult) {
JsonRPCServerRequestModel request = new JsonRPCServerRequestModel {
Method = "context_menu",
Parameters = new object[] { selectedResult.ContextData },
protected override string ExecuteContextMenu(Result selectedResult)
{
JsonRPCServerRequestModel request = new JsonRPCServerRequestModel
{
Method = "context_menu", Parameters = new object[] {selectedResult.ContextData},
};
_startInfo.Arguments = $"-B \"{context.CurrentPluginMetadata.ExecuteFilePath}\" \"{request}\"";
_startInfo.WorkingDirectory = context.CurrentPluginMetadata.PluginDirectory;

// TODO: Async Action
return Execute(_startInfo);
}

public override Task InitAsync(PluginInitContext context)
{
this.context = context;
_startInfo.ArgumentList.Add(context.CurrentPluginMetadata.ExecuteFilePath);
_startInfo.ArgumentList.Add("");
return Task.CompletedTask;
}
}
}