Skip to content

Commit a5f5c09

Browse files
authored
Merge pull request #466 from Flow-Launcher/fixFlowCallback
Add Customized Object Converter, fix Length issue
2 parents a75b883 + c399a87 commit a5f5c09

File tree

3 files changed

+53
-6
lines changed

3 files changed

+53
-6
lines changed

Flow.Launcher.Core/Plugin/JsonPRCModel.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
*
1414
*/
1515

16+
using Flow.Launcher.Core.Resource;
1617
using System.Collections.Generic;
1718
using System.Linq;
1819
using System.Text.Json.Serialization;
@@ -108,6 +109,7 @@ public class JsonRPCServerRequestModel : JsonRPCRequestModel
108109
/// </summary>
109110
public class JsonRPCClientRequestModel : JsonRPCRequestModel
110111
{
112+
[JsonPropertyName("dontHideAfterAction")]
111113
public bool DontHideAfterAction { get; set; }
112114
}
113115

Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System;
1+
using Flow.Launcher.Core.Resource;
2+
using System;
23
using System.Collections.Generic;
34
using System.Diagnostics;
45
using System.IO;
@@ -45,13 +46,14 @@ public List<Result> LoadContextMenus(Result selectedResult)
4546
}
4647
}
4748

49+
private static readonly JsonSerializerOptions _options = new() {Converters = {new JsonObjectConverter()}};
4850

4951
private async Task<List<Result>> DeserializedResultAsync(Stream output)
5052
{
5153
if (output == Stream.Null) return null;
5254

53-
JsonRPCQueryResponseModel queryResponseModel = await
54-
JsonSerializer.DeserializeAsync<JsonRPCQueryResponseModel>(output);
55+
var queryResponseModel = await
56+
JsonSerializer.DeserializeAsync<JsonRPCQueryResponseModel>(output, _options);
5557

5658
return ParseResults(queryResponseModel);
5759
}
@@ -60,11 +62,12 @@ private List<Result> DeserializedResult(string output)
6062
{
6163
if (string.IsNullOrEmpty(output)) return null;
6264

63-
JsonRPCQueryResponseModel queryResponseModel =
64-
JsonSerializer.Deserialize<JsonRPCQueryResponseModel>(output);
65+
var queryResponseModel =
66+
JsonSerializer.Deserialize<JsonRPCQueryResponseModel>(output, _options);
6567
return ParseResults(queryResponseModel);
6668
}
6769

70+
6871
private List<Result> ParseResults(JsonRPCQueryResponseModel queryResponseModel)
6972
{
7073
var results = new List<Result>();
@@ -85,7 +88,7 @@ private List<Result> ParseResults(JsonRPCQueryResponseModel queryResponseModel)
8588
{
8689
if (result.JsonRPCAction.Method.StartsWith("Flow.Launcher."))
8790
{
88-
ExecuteFlowLauncherAPI(result.JsonRPCAction.Method.Substring(4),
91+
ExecuteFlowLauncherAPI(result.JsonRPCAction.Method[14..],
8992
result.JsonRPCAction.Parameters);
9093
}
9194
else
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
using System;
2+
using System.Text.Json;
3+
using System.Text.Json.Serialization;
4+
5+
namespace Flow.Launcher.Core.Resource
6+
{
7+
public class JsonObjectConverter : JsonConverter<object>
8+
{
9+
public override object Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
10+
{
11+
switch (reader.TokenType)
12+
{
13+
case JsonTokenType.True:
14+
return true;
15+
case JsonTokenType.False:
16+
return false;
17+
case JsonTokenType.Number when reader.TryGetInt32(out var i):
18+
return i;
19+
case JsonTokenType.Number when reader.TryGetInt64(out var l):
20+
return l;
21+
case JsonTokenType.Number:
22+
return reader.GetDouble();
23+
case JsonTokenType.String when reader.TryGetDateTime(out DateTime datetime):
24+
return datetime;
25+
case JsonTokenType.String:
26+
return reader.GetString();
27+
default:
28+
// Use JsonElement as fallback.
29+
// Newtonsoft uses JArray or JObject.
30+
using (var document = JsonDocument.ParseValue(ref reader))
31+
{
32+
return document.RootElement.Clone();
33+
}
34+
}
35+
}
36+
37+
public override void Write(Utf8JsonWriter writer, object value, JsonSerializerOptions options)
38+
{
39+
throw new InvalidOperationException("Should not get here.");
40+
}
41+
}
42+
}

0 commit comments

Comments
 (0)