Skip to content

Commit 74d9290

Browse files
committed
Redesign exception stream handling and dispose stream to recycle
1 parent 2b60422 commit 74d9290

File tree

1 file changed

+18
-27
lines changed

1 file changed

+18
-27
lines changed

Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs

Lines changed: 18 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.Diagnostics;
66
using System.IO;
77
using System.Linq;
8+
using System.Text;
89
using System.Text.Json;
910
using System.Threading;
1011
using System.Threading.Tasks;
@@ -85,12 +86,15 @@ public List<Result> LoadContextMenus(Result selectedResult)
8586

8687
private async Task<List<Result>> DeserializedResultAsync(Stream output)
8788
{
88-
if (output == Stream.Null) return null;
89+
await using (output)
90+
{
91+
if (output == Stream.Null) return null;
8992

90-
var queryResponseModel =
91-
await JsonSerializer.DeserializeAsync<JsonRPCQueryResponseModel>(output, options);
93+
var queryResponseModel =
94+
await JsonSerializer.DeserializeAsync<JsonRPCQueryResponseModel>(output, options);
9295

93-
return ParseResults(queryResponseModel);
96+
return ParseResults(queryResponseModel);
97+
}
9498
}
9599

96100
private List<Result> DeserializedResult(string output)
@@ -132,7 +136,7 @@ private List<Result> ParseResults(JsonRPCQueryResponseModel queryResponseModel)
132136
}
133137
else
134138
{
135-
var actionResponse = await RequestAsync(result.JsonRPCAction);
139+
await using var actionResponse = await RequestAsync(result.JsonRPCAction);
136140

137141
if (actionResponse.Length == 0)
138142
{
@@ -273,31 +277,18 @@ protected async Task<Stream> ExecuteAsync(ProcessStartInfo startInfo, Cancellati
273277
return Stream.Null;
274278
}
275279

276-
sourceBuffer.Seek(0, SeekOrigin.Begin);
277-
278-
token.ThrowIfCancellationRequested();
279-
280-
if (sourceBuffer.Length == 0)
281-
{
282-
var errorMessage = errorBuffer.Length == 0 ?
283-
"Empty JSONRPC Response" :
284-
await process.StandardError.ReadToEndAsync();
285-
286-
Log.Error($"{context.CurrentPluginMetadata.Name}|{errorMessage}");
287-
}
288-
289-
if (errorBuffer.Length != 0)
280+
switch (sourceBuffer.Length, errorBuffer.Position)
290281
{
291-
using var error = new StreamReader(errorBuffer);
292-
293-
var errorMessage = await error.ReadToEndAsync();
294-
295-
if (!string.IsNullOrEmpty(errorMessage))
296-
{
297-
Log.Error($"|{context.CurrentPluginMetadata.Name}.{nameof(ExecuteAsync)}|{errorMessage}");
298-
}
282+
case (0, 0):
283+
var errorMessage = Encoding.UTF8.GetString(errorBuffer.GetBuffer(), 0, (int)errorBuffer.Position);
284+
Log.Warn($"|{nameof(JsonRPCPlugin)}.{nameof(ExecuteAsync)}|{errorMessage}");
285+
break;
286+
case (_, not 0):
287+
throw new InvalidDataException(Encoding.UTF8.GetString(errorBuffer.ToArray())); // The process has exited with an error message
299288
}
300289

290+
sourceBuffer.Seek(0, SeekOrigin.Begin);
291+
301292
return sourceBuffer;
302293
}
303294

0 commit comments

Comments
 (0)