1
- using Accessibility ;
2
- using Flow . Launcher . Core . Resource ;
1
+ using Flow . Launcher . Core . Resource ;
3
2
using Flow . Launcher . Infrastructure ;
4
3
using System ;
5
4
using System . Collections . Generic ;
6
5
using System . Diagnostics ;
7
6
using System . IO ;
8
7
using System . Linq ;
9
- using System . Reflection ;
8
+ using System . Text ;
10
9
using System . Text . Json ;
11
10
using System . Threading ;
12
11
using System . Threading . Tasks ;
13
12
using Flow . Launcher . Infrastructure . Logger ;
14
13
using Flow . Launcher . Infrastructure . UserSettings ;
15
14
using Flow . Launcher . Plugin ;
16
- using ICSharpCode . SharpZipLib . Zip ;
17
- using JetBrains . Annotations ;
18
15
using Microsoft . IO ;
19
- using System . Text . Json . Serialization ;
20
16
using System . Windows ;
21
17
using System . Windows . Controls ;
22
18
using YamlDotNet . Serialization ;
23
19
using YamlDotNet . Serialization . NamingConventions ;
24
20
using CheckBox = System . Windows . Controls . CheckBox ;
25
21
using Control = System . Windows . Controls . Control ;
26
- using Label = System . Windows . Controls . Label ;
27
22
using Orientation = System . Windows . Controls . Orientation ;
28
23
using TextBox = System . Windows . Controls . TextBox ;
29
24
using UserControl = System . Windows . Controls . UserControl ;
30
- using System . Windows . Data ;
31
25
32
26
namespace Flow . Launcher . Core . Plugin
33
27
{
@@ -92,12 +86,15 @@ public List<Result> LoadContextMenus(Result selectedResult)
92
86
93
87
private async Task < List < Result > > DeserializedResultAsync ( Stream output )
94
88
{
95
- if ( output == Stream . Null ) return null ;
89
+ await using ( output )
90
+ {
91
+ if ( output == Stream . Null ) return null ;
96
92
97
- var queryResponseModel =
98
- await JsonSerializer . DeserializeAsync < JsonRPCQueryResponseModel > ( output , options ) ;
93
+ var queryResponseModel =
94
+ await JsonSerializer . DeserializeAsync < JsonRPCQueryResponseModel > ( output , options ) ;
99
95
100
- return ParseResults ( queryResponseModel ) ;
96
+ return ParseResults ( queryResponseModel ) ;
97
+ }
101
98
}
102
99
103
100
private List < Result > DeserializedResult ( string output )
@@ -139,7 +136,7 @@ private List<Result> ParseResults(JsonRPCQueryResponseModel queryResponseModel)
139
136
}
140
137
else
141
138
{
142
- var actionResponse = await RequestAsync ( result . JsonRPCAction ) ;
139
+ await using var actionResponse = await RequestAsync ( result . JsonRPCAction ) ;
143
140
144
141
if ( actionResponse . Length == 0 )
145
142
{
@@ -254,24 +251,17 @@ protected async Task<Stream> ExecuteAsync(ProcessStartInfo startInfo, Cancellati
254
251
return Stream . Null ;
255
252
}
256
253
257
-
258
-
259
254
var sourceBuffer = BufferManager . GetStream ( ) ;
260
- var errorBuffer = BufferManager . GetStream ( ) ;
255
+ using var errorBuffer = BufferManager . GetStream ( ) ;
261
256
262
257
var sourceCopyTask = process . StandardOutput . BaseStream . CopyToAsync ( sourceBuffer , token ) ;
263
258
var errorCopyTask = process . StandardError . BaseStream . CopyToAsync ( errorBuffer , token ) ;
264
-
265
- token . Register ( ( ) =>
259
+
260
+ await using var registeredEvent = token . Register ( ( ) =>
266
261
{
267
- try
268
- {
269
- if ( ! process . HasExited )
270
- process . Kill ( ) ;
271
- }
272
- catch ( InvalidOperationException )
273
- {
274
- }
262
+ if ( ! process . HasExited )
263
+ process . Kill ( ) ;
264
+ sourceBuffer . Dispose ( ) ;
275
265
} ) ;
276
266
277
267
try
@@ -287,31 +277,18 @@ protected async Task<Stream> ExecuteAsync(ProcessStartInfo startInfo, Cancellati
287
277
return Stream . Null ;
288
278
}
289
279
290
- sourceBuffer . Seek ( 0 , SeekOrigin . Begin ) ;
291
-
292
- token . ThrowIfCancellationRequested ( ) ;
293
-
294
- if ( sourceBuffer . Length == 0 )
295
- {
296
- var errorMessage = errorBuffer . Length == 0 ?
297
- "Empty JSONRPC Response" :
298
- await process . StandardError . ReadToEndAsync ( ) ;
299
-
300
- Log . Error ( $ "{ context . CurrentPluginMetadata . Name } |{ errorMessage } ") ;
301
- }
302
-
303
- if ( errorBuffer . Length != 0 )
280
+ switch ( sourceBuffer . Length , errorBuffer . Length )
304
281
{
305
- using var error = new StreamReader ( errorBuffer ) ;
306
-
307
- var errorMessage = await error . ReadToEndAsync ( ) ;
308
-
309
- if ( ! string . IsNullOrEmpty ( errorMessage ) )
310
- {
311
- Log . Error ( $ "|{ context . CurrentPluginMetadata . Name } .{ nameof ( ExecuteAsync ) } |{ errorMessage } ") ;
312
- }
282
+ case ( 0 , 0 ) :
283
+ const string errorMessage = "Empty JSON-RPC Response." ;
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
313
288
}
314
289
290
+ sourceBuffer . Seek ( 0 , SeekOrigin . Begin ) ;
291
+
315
292
return sourceBuffer ;
316
293
}
317
294
0 commit comments