Skip to content

Commit 7603335

Browse files
committed
Adjust JsonRPCPlugin.cs Exception Handling
1 parent d2bec9c commit 7603335

File tree

1 file changed

+18
-52
lines changed

1 file changed

+18
-52
lines changed

Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs

Lines changed: 18 additions & 52 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,12 +228,14 @@ 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
256235
// Manually Check whether disposed
236+
// ReSharper disable once AccessToDisposedClosure
257237
if (!disposed && !process.HasExited)
238+
// ReSharper disable once AccessToDisposedClosure
258239
process.Kill();
259240
});
260241

@@ -274,30 +255,27 @@ protected async Task<Stream> ExecuteAsync(ProcessStartInfo startInfo, Cancellati
274255

275256
token.ThrowIfCancellationRequested();
276257

258+
if (buffer.Length == 0)
259+
{
260+
var errorMessage = process.StandardError.EndOfStream ?
261+
"Empty JSONRPC Response" :
262+
await process.StandardError.ReadToEndAsync();
263+
throw new InvalidDataException($"{context.CurrentPluginMetadata.Name}|{errorMessage}");
264+
}
265+
277266
if (!process.StandardError.EndOfStream)
278267
{
279268
using var standardError = process.StandardError;
280269
var error = await standardError.ReadToEndAsync();
281270

282271
if (!string.IsNullOrEmpty(error))
283272
{
284-
Log.Error($"|JsonRPCPlugin.ExecuteAsync|{error}");
285-
return Stream.Null;
273+
Log.Error($"|{context.CurrentPluginMetadata.Name}.{nameof(ExecuteAsync)}|{error}");
286274
}
287-
288-
Log.Error("|JsonRPCPlugin.ExecuteAsync|Empty standard output and standard error.");
289-
return Stream.Null;
290275
}
291276

292277
return buffer;
293278
}
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-
}
301279
finally
302280
{
303281
process?.Dispose();
@@ -307,20 +285,8 @@ protected async Task<Stream> ExecuteAsync(ProcessStartInfo startInfo, Cancellati
307285

308286
public async Task<List<Result>> QueryAsync(Query query, CancellationToken token)
309287
{
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-
}
288+
var output = await ExecuteQueryAsync(query, token);
289+
return await DeserializedResultAsync(output);
324290
}
325291

326292
public virtual Task InitAsync(PluginInitContext context)

0 commit comments

Comments
 (0)