mirror of
https://github.com/Flow-Launcher/Flow.Launcher.git
synced 2026-03-11 08:54:32 +00:00
Refactor JsonRPC structure
This commit is contained in:
parent
f1ed346d94
commit
7ab86ca1f2
4 changed files with 34 additions and 64 deletions
|
|
@ -24,36 +24,16 @@ namespace Flow.Launcher.Core.Plugin
|
|||
};
|
||||
}
|
||||
|
||||
protected override Task<Stream> ExecuteQueryAsync(Query query, CancellationToken token)
|
||||
protected override Task<Stream> RequestAsync(JsonRPCRequestModel request, CancellationToken token = default)
|
||||
{
|
||||
JsonRPCServerRequestModel request = new JsonRPCServerRequestModel
|
||||
{
|
||||
Method = "query",
|
||||
Parameters = new object[] {query.Search},
|
||||
};
|
||||
|
||||
_startInfo.Arguments = $"\"{request}\"";
|
||||
|
||||
return ExecuteAsync(_startInfo, token);
|
||||
}
|
||||
|
||||
protected override string ExecuteCallback(JsonRPCRequestModel rpcRequest)
|
||||
protected override string Request(JsonRPCRequestModel rpcRequest, CancellationToken token = default)
|
||||
{
|
||||
_startInfo.Arguments = $"\"{rpcRequest}\"";
|
||||
return Execute(_startInfo);
|
||||
}
|
||||
|
||||
protected override string ExecuteContextMenu(Result selectedResult)
|
||||
{
|
||||
JsonRPCServerRequestModel request = new JsonRPCServerRequestModel
|
||||
{
|
||||
Method = "contextmenu",
|
||||
Parameters = new object[] {selectedResult.ContextData},
|
||||
};
|
||||
|
||||
_startInfo.Arguments = $"\"{request}\"";
|
||||
|
||||
return Execute(_startInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -30,16 +30,22 @@ namespace Flow.Launcher.Core.Plugin
|
|||
/// The language this JsonRPCPlugin support
|
||||
/// </summary>
|
||||
public abstract string SupportedLanguage { get; set; }
|
||||
|
||||
protected abstract Task<Stream> ExecuteQueryAsync(Query query, CancellationToken token);
|
||||
protected abstract string ExecuteCallback(JsonRPCRequestModel rpcRequest);
|
||||
protected abstract string ExecuteContextMenu(Result selectedResult);
|
||||
protected abstract Task<Stream> RequestAsync(JsonRPCRequestModel rpcRequest, CancellationToken token = default);
|
||||
protected abstract string Request(JsonRPCRequestModel rpcRequest, CancellationToken token = default);
|
||||
|
||||
private static readonly RecyclableMemoryStreamManager BufferManager = new();
|
||||
|
||||
public List<Result> LoadContextMenus(Result selectedResult)
|
||||
{
|
||||
var output = ExecuteContextMenu(selectedResult);
|
||||
var request = new JsonRPCRequestModel
|
||||
{
|
||||
Method = "context_menu",
|
||||
Parameters = new[]
|
||||
{
|
||||
selectedResult.ContextData
|
||||
}
|
||||
};
|
||||
var output = Request(request);
|
||||
return DeserializedResult(output);
|
||||
}
|
||||
|
||||
|
|
@ -100,7 +106,7 @@ namespace Flow.Launcher.Core.Plugin
|
|||
}
|
||||
else
|
||||
{
|
||||
var actionResponse = ExecuteCallback(result.JsonRPCAction);
|
||||
var actionResponse = Request(result.JsonRPCAction);
|
||||
|
||||
if (string.IsNullOrEmpty(actionResponse))
|
||||
{
|
||||
|
|
@ -255,8 +261,8 @@ namespace Flow.Launcher.Core.Plugin
|
|||
|
||||
if (buffer.Length == 0)
|
||||
{
|
||||
var errorMessage = process.StandardError.EndOfStream ?
|
||||
"Empty JSONRPC Response" :
|
||||
var errorMessage = process.StandardError.EndOfStream ?
|
||||
"Empty JSONRPC Response" :
|
||||
await process.StandardError.ReadToEndAsync();
|
||||
throw new InvalidDataException($"{context.CurrentPluginMetadata.Name}|{errorMessage}");
|
||||
}
|
||||
|
|
@ -283,7 +289,15 @@ namespace Flow.Launcher.Core.Plugin
|
|||
|
||||
public async Task<List<Result>> QueryAsync(Query query, CancellationToken token)
|
||||
{
|
||||
var output = await ExecuteQueryAsync(query, token);
|
||||
var request = new JsonRPCRequestModel
|
||||
{
|
||||
Method = "query",
|
||||
Parameters = new[]
|
||||
{
|
||||
query.Search
|
||||
}
|
||||
};
|
||||
var output = await RequestAsync(request, token);
|
||||
return await DeserializedResultAsync(output);
|
||||
}
|
||||
|
||||
|
|
@ -293,4 +307,4 @@ namespace Flow.Launcher.Core.Plugin
|
|||
return Task.CompletedTask;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -32,13 +32,8 @@ namespace Flow.Launcher.Core.Plugin
|
|||
_startInfo.ArgumentList.Add("-B");
|
||||
}
|
||||
|
||||
protected override Task<Stream> ExecuteQueryAsync(Query query, CancellationToken token)
|
||||
protected override Task<Stream> RequestAsync(JsonRPCRequestModel request, CancellationToken token = default)
|
||||
{
|
||||
JsonRPCServerRequestModel request = new JsonRPCServerRequestModel
|
||||
{
|
||||
Method = "query", Parameters = new object[] {query.Search},
|
||||
};
|
||||
|
||||
_startInfo.ArgumentList[2] = request.ToString();
|
||||
|
||||
// todo happlebao why context can't be used in constructor
|
||||
|
|
@ -47,27 +42,13 @@ namespace Flow.Launcher.Core.Plugin
|
|||
return ExecuteAsync(_startInfo, token);
|
||||
}
|
||||
|
||||
protected override string ExecuteCallback(JsonRPCRequestModel rpcRequest)
|
||||
protected override string Request(JsonRPCRequestModel rpcRequest, CancellationToken token = default)
|
||||
{
|
||||
_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},
|
||||
};
|
||||
_startInfo.ArgumentList[2] = request.ToString();
|
||||
_startInfo.WorkingDirectory = context.CurrentPluginMetadata.PluginDirectory;
|
||||
|
||||
// TODO: Async Action
|
||||
return Execute(_startInfo);
|
||||
}
|
||||
|
||||
public override Task InitAsync(PluginInitContext context)
|
||||
{
|
||||
this.context = context;
|
||||
|
|
|
|||
|
|
@ -18,19 +18,14 @@ namespace Flow.Launcher.Test.Plugins
|
|||
{
|
||||
public override string SupportedLanguage { get; set; } = AllowedLanguage.Executable;
|
||||
|
||||
protected override string ExecuteCallback(JsonRPCRequestModel rpcRequest)
|
||||
protected override string Request(JsonRPCRequestModel rpcRequest, CancellationToken token = default)
|
||||
{
|
||||
throw new System.NotImplementedException();
|
||||
}
|
||||
|
||||
protected override string ExecuteContextMenu(Result selectedResult)
|
||||
protected override Task<Stream> RequestAsync(JsonRPCRequestModel request, CancellationToken token = default)
|
||||
{
|
||||
throw new System.NotImplementedException();
|
||||
}
|
||||
|
||||
protected override Task<Stream> ExecuteQueryAsync(Query query, CancellationToken token)
|
||||
{
|
||||
var byteInfo = Encoding.UTF8.GetBytes(query.RawQuery);
|
||||
var byteInfo = Encoding.UTF8.GetBytes(request.Parameters[0] as string ?? string.Empty);
|
||||
|
||||
var resultStream = new MemoryStream(byteInfo);
|
||||
return Task.FromResult((Stream)resultStream);
|
||||
|
|
@ -45,7 +40,7 @@ namespace Flow.Launcher.Test.Plugins
|
|||
{
|
||||
var results = await QueryAsync(new Query
|
||||
{
|
||||
RawQuery = resultText
|
||||
Search = resultText
|
||||
}, default);
|
||||
|
||||
Assert.IsNotNull(results);
|
||||
|
|
@ -85,8 +80,8 @@ namespace Flow.Launcher.Test.Plugins
|
|||
|
||||
var pascalText = JsonSerializer.Serialize(reference);
|
||||
|
||||
var results1 = await QueryAsync(new Query { RawQuery = camelText }, default);
|
||||
var results2 = await QueryAsync(new Query { RawQuery = pascalText }, default);
|
||||
var results1 = await QueryAsync(new Query { Search = camelText }, default);
|
||||
var results2 = await QueryAsync(new Query { Search = pascalText }, default);
|
||||
|
||||
Assert.IsNotNull(results1);
|
||||
Assert.IsNotNull(results2);
|
||||
|
|
|
|||
Loading…
Reference in a new issue