Skip to content

Commit c344dea

Browse files
authored
Merge pull request #633 from Flow-Launcher/JsonPRCExceptionHandle
Adjust JsonRPCPlugin.cs Exception Handling
2 parents d524b0a + 7778449 commit c344dea

File tree

1 file changed

+17
-53
lines changed

1 file changed

+17
-53
lines changed

Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs

Lines changed: 17 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,7 @@ internal abstract class JsonRPCPlugin : IAsyncPlugin, IContextMenu
4040
public List<Result> LoadContextMenus(Result selectedResult)
4141
{
4242
var output = ExecuteContextMenu(selectedResult);
43-
try
44-
{
45-
return DeserializedResult(output);
46-
}
47-
catch (Exception e)
48-
{
49-
Log.Exception($"|JsonRPCPlugin.LoadContextMenus|Exception on result <{selectedResult}>", e);
50-
return null;
51-
}
43+
return DeserializedResult(output);
5244
}
5345

5446
private static readonly JsonSerializerOptions options = new()
@@ -65,23 +57,10 @@ private async Task<List<Result>> DeserializedResultAsync(Stream output)
6557
{
6658
if (output == Stream.Null) return null;
6759

68-
try
69-
{
70-
var queryResponseModel =
71-
await JsonSerializer.DeserializeAsync<JsonRPCQueryResponseModel>(output, options);
72-
73-
return ParseResults(queryResponseModel);
74-
}
75-
catch (JsonException e)
76-
{
77-
Log.Exception(GetType().FullName, "Unexpected Json Input", e);
78-
}
79-
finally
80-
{
81-
await output.DisposeAsync();
82-
}
60+
var queryResponseModel =
61+
await JsonSerializer.DeserializeAsync<JsonRPCQueryResponseModel>(output, options);
8362

84-
return null;
63+
return ParseResults(queryResponseModel);
8564
}
8665

8766
private List<Result> DeserializedResult(string output)
@@ -249,7 +228,7 @@ protected async Task<Stream> ExecuteAsync(ProcessStartInfo startInfo, Cancellati
249228
await using var source = process.StandardOutput.BaseStream;
250229

251230
var buffer = BufferManager.GetStream();
252-
231+
253232
token.Register(() =>
254233
{
255234
// ReSharper disable once AccessToModifiedClosure
@@ -274,30 +253,27 @@ protected async Task<Stream> ExecuteAsync(ProcessStartInfo startInfo, Cancellati
274253

275254
token.ThrowIfCancellationRequested();
276255

256+
if (buffer.Length == 0)
257+
{
258+
var errorMessage = process.StandardError.EndOfStream ?
259+
"Empty JSONRPC Response" :
260+
await process.StandardError.ReadToEndAsync();
261+
throw new InvalidDataException($"{context.CurrentPluginMetadata.Name}|{errorMessage}");
262+
}
263+
277264
if (!process.StandardError.EndOfStream)
278265
{
279266
using var standardError = process.StandardError;
280267
var error = await standardError.ReadToEndAsync();
281268

282269
if (!string.IsNullOrEmpty(error))
283270
{
284-
Log.Error($"|JsonRPCPlugin.ExecuteAsync|{error}");
285-
return Stream.Null;
271+
Log.Error($"|{context.CurrentPluginMetadata.Name}.{nameof(ExecuteAsync)}|{error}");
286272
}
287-
288-
Log.Error("|JsonRPCPlugin.ExecuteAsync|Empty standard output and standard error.");
289-
return Stream.Null;
290273
}
291274

292275
return buffer;
293276
}
294-
catch (Exception e)
295-
{
296-
Log.Exception(
297-
$"|JsonRPCPlugin.ExecuteAsync|Exception for filename <{startInfo.FileName}> with argument <{startInfo.Arguments}>",
298-
e);
299-
return Stream.Null;
300-
}
301277
finally
302278
{
303279
process?.Dispose();
@@ -307,20 +283,8 @@ protected async Task<Stream> ExecuteAsync(ProcessStartInfo startInfo, Cancellati
307283

308284
public async Task<List<Result>> QueryAsync(Query query, CancellationToken token)
309285
{
310-
try
311-
{
312-
var output = await ExecuteQueryAsync(query, token);
313-
return await DeserializedResultAsync(output);
314-
}
315-
catch (OperationCanceledException)
316-
{
317-
return null;
318-
}
319-
catch (Exception e)
320-
{
321-
Log.Exception($"|JsonRPCPlugin.Query|Exception when query <{query}>", e);
322-
return null;
323-
}
286+
var output = await ExecuteQueryAsync(query, token);
287+
return await DeserializedResultAsync(output);
324288
}
325289

326290
public virtual Task InitAsync(PluginInitContext context)
@@ -329,4 +293,4 @@ public virtual Task InitAsync(PluginInitContext context)
329293
return Task.CompletedTask;
330294
}
331295
}
332-
}
296+
}

0 commit comments

Comments
 (0)