Skip to content

Commit 2d61459

Browse files
committed
System.Text.Json refactor; UI updates
1 parent 4a1aadc commit 2d61459

File tree

14 files changed

+90
-55
lines changed

14 files changed

+90
-55
lines changed

SmartImage.Lib/Clients/AnilistClient.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Json;
1+
using System.Text.Json;
2+
using System.Text.Json.Nodes;
23
using Kantan.Net;
34

45
// ReSharper disable PossibleNullReferenceException
@@ -41,8 +42,9 @@ public async Task<string> GetTitleAsync(int anilistId)
4142
id = anilistId
4243
});
4344

44-
var value = response["data"];
45-
return value?["Media"]?["title"]?["english"];
45+
var value = response["data"];
46+
var title = value?["Media"]?["title"];
47+
return title?["english"]?.ToString() ?? title?["romaji"]?.ToString();
4648
}
4749

4850
#region IDisposable

SmartImage.Lib/Clients/FlareSolverrClient.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Author: Deci | Project: SmartImage.Lib | Name: FlareSolverrClient.cs
22
// Date: 2024/10/25 @ 12:10:45
33

4+
using System.Reflection;
45
using CliWrap;
56
using FlareSolverrSharp;
67

@@ -37,7 +38,10 @@ public bool Configure(string api)
3738
}
3839

3940
private FlareSolverrClient() { }
40-
41+
static FlareSolverrClient()
42+
{
43+
44+
}
4145
public static FlareSolverrClient Value { get; private set; } = new();
4246

4347
public void Dispose()

SmartImage.Lib/Clients/HydrusClient.cs

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
using System.Collections.Generic;
33
using System.ComponentModel;
44
using System.Diagnostics.CodeAnalysis;
5-
using System.Json;
5+
using System.Text.Json;
66
using System.Linq;
77
using System.Runtime.CompilerServices;
88
using System.Security.Authentication;
@@ -17,8 +17,6 @@
1717
using Flurl.Http;
1818
using Novus.Streams;
1919
using SmartImage.Lib.Utilities;
20-
using JsonObject = System.Json.JsonObject;
21-
using JsonValue = System.Json.JsonValue;
2220

2321
namespace SmartImage.Lib.Clients;
2422

@@ -60,7 +58,7 @@ public HydrusClient() : this(null, null) { }
6058

6159
public bool IsValid => EndpointUrl != null && Key != null;
6260

63-
public async Task<JsonValue> GetFileHashesAsync(string hash, string hashType = "sha256")
61+
public async Task<JsonNode> GetFileHashesAsync(string hash, string hashType = "sha256")
6462
{
6563

6664
using var res = await Client.Request("/get_files/file_hashes")
@@ -70,12 +68,12 @@ public async Task<JsonValue> GetFileHashesAsync(string hash, string hashType = "
7068
.GetAsync();
7169

7270
var b = await res.GetStreamAsync();
73-
var j = JsonValue.Load(b);
71+
var j = JsonValue.Parse(b);
7472
return j;
7573

7674
}
7775

78-
public async Task<JsonValue> GetFileMetadataAsync(HydrusQuery q)
76+
public async Task<JsonNode> GetFileMetadataAsync(HydrusQuery q)
7977
{
8078
var (name, value) = q.GetValue();
8179

@@ -84,11 +82,11 @@ public async Task<JsonValue> GetFileMetadataAsync(HydrusQuery q)
8482
.GetAsync();
8583

8684
var b = await res.GetStreamAsync();
87-
var j = JsonValue.Load(b);
85+
var j = JsonValue.Parse(b);
8886
return j;
8987
}
9088

91-
public async Task<JsonValue> GetFileRelationshipsAsync(HydrusQuery q)
89+
public async Task<JsonNode> GetFileRelationshipsAsync(HydrusQuery q)
9290
{
9391
var (name, value) = q.GetValue();
9492

@@ -97,7 +95,7 @@ public async Task<JsonValue> GetFileRelationshipsAsync(HydrusQuery q)
9795
.GetAsync();
9896

9997
var b = await res.GetStreamAsync();
100-
var j = JsonValue.Load(b);
98+
var j = JsonValue.Parse(b);
10199

102100
return j;
103101
}
@@ -309,9 +307,9 @@ public partial class HydrusFileRelationship
309307
[JsonPropertyName("king_is_on_file_domain")]
310308
public bool KingIsOnFileDomain { get; set; }
311309

312-
public static Dictionary<string, HydrusFileRelationship> Deserialize(JsonValue v)
310+
public static Dictionary<string, HydrusFileRelationship> Deserialize(JsonNode v)
313311
{
314-
var vs = ((JsonObject) v)["file_relationships"];
312+
var vs = ((JsonNode) v)["file_relationships"];
315313

316314
var re = JsonSerializer.Deserialize<Dictionary<string, HydrusFileRelationship>>(vs.ToString());
317315

SmartImage.Lib/Engines/BaseSearchEngine.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
using System.Collections.Concurrent;
44
using System.Diagnostics;
55
using System.Drawing;
6-
using System.Json;
6+
using System.Text.Json;
77
using System.Resources;
88
using Novus.Utilities;
99
using SmartImage.Lib.Results;
@@ -115,9 +115,9 @@ public override string ToString()
115115
return $"{Name}: {BaseUrl} {Timeout}";
116116
}
117117

118-
public virtual Task<SearchResult> GetResultAsync(SearchQuery query, CancellationToken token = default)
118+
public virtual async Task<SearchResult> GetResultAsync(SearchQuery query, CancellationToken token = default)
119119
{
120-
var b = VerifyQuery(query);
120+
var b = await VerifyQueryAsync(query);
121121

122122
/*
123123
if (!b) {
@@ -141,7 +141,7 @@ public virtual Task<SearchResult> GetResultAsync(SearchQuery query, Cancellation
141141

142142
Debug.WriteLine($"{Name} | {query} - {res.Status}", LogCategories.C_INFO);
143143

144-
return Task.FromResult(res);
144+
return res;
145145
}
146146

147147
protected virtual Url GetRawUrl(SearchQuery query)
@@ -152,7 +152,7 @@ protected virtual Url GetRawUrl(SearchQuery query)
152152
return u;
153153
}
154154

155-
public virtual bool VerifyQuery(SearchQuery q)
155+
public virtual async ValueTask<bool> VerifyQueryAsync(SearchQuery q)
156156
{
157157
/*if (q.Upload is not { }) {
158158
return false;
@@ -175,6 +175,7 @@ public virtual bool VerifyQuery(SearchQuery q)
175175
return b;
176176
}
177177

178+
178179
// TODO: move config application to ctors?
179180

180181
public abstract void Dispose();

SmartImage.Lib/Engines/Impl/Search/FluffleEngine.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,17 @@ public override async Task<SearchResult> GetResultAsync(SearchQuery query, Cance
7373
return sr;
7474
}
7575

76+
if (response == null) {
77+
goto ret;
78+
}
79+
7680
var fr = await response.GetJsonAsync<FluffleResponse>();
7781

7882
foreach (FluffleResult result in fr.Results) {
7983
var item = result.Convert(sr, out var c);
8084
sr.Results.Add(item);
8185
}
82-
86+
ret:
8387
sr.Update();
8488
return sr;
8589
}

SmartImage.Lib/Engines/Impl/Search/Other/BingEngine.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Json;
1+
using System.Text.Json;
2+
using System.Text.Json.Nodes;
23
using AngleSharp.Dom;
34
using AngleSharp.Html.Parser;
45
using Flurl;

SmartImage.Lib/Engines/Impl/Search/SauceNaoEngine.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
// ReSharper disable UnusedMember.Global
22

33
using System.Diagnostics;
4-
using System.Json;
4+
using System.Text.Json;
55
using System.Net;
66
using System.Text;
7+
using System.Text.Json.Nodes;
78
using AngleSharp.Dom;
89
using AngleSharp.Html.Dom;
910
using AngleSharp.Html.Parser;
@@ -14,9 +15,8 @@
1415
using Kantan.Text;
1516
using SmartImage.Lib.Results;
1617
using SmartImage.Lib.Results.Data;
18+
using SmartImage.Lib.Utilities;
1719
using static Kantan.Diagnostics.LogCategories;
18-
using JsonArray = System.Json.JsonArray;
19-
using JsonObject = System.Json.JsonObject;
2020

2121
// ReSharper disable PossibleNullReferenceException
2222

@@ -422,7 +422,7 @@ private async ValueTask GetAPIResultsAsync(SearchQuery url, SearchResult sr)
422422
var jsonString = JsonValue.Parse(c);
423423

424424
if (jsonString is JsonObject jsonObject) {
425-
var jsonArray = jsonObject[KeyResults];
425+
var jsonArray = jsonObject[KeyResults].AsArray();
426426

427427
for (int i = 0; i < jsonArray.Count; i++) {
428428
var header = jsonArray[i][KeyHeader];
@@ -437,11 +437,11 @@ private async ValueTask GetAPIResultsAsync(SearchQuery url, SearchResult sr)
437437
string json = jsonArray.ToString();
438438

439439
// var buffer = new List<SearchResultItem>();
440-
var resultArray = JsonValue.Parse(json);
440+
var resultArray = JsonValue.Parse(json).AsArray();
441441

442442
for (int i = 0; i < resultArray.Count; i++) {
443-
var result = resultArray[i];
444-
float similarity = float.Parse(result[KeySimilarity]);
443+
var result = resultArray[i].AsObject();
444+
float similarity = float.Parse(result[KeySimilarity].AsValue().ToString());
445445

446446
string[] strings = result.ContainsKey(KeyUrls)
447447
? (result[KeyUrls] as JsonArray)!

SmartImage.Lib/Engines/Impl/Search/TinEyeEngine.cs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,18 @@ public TinEyeEngine() : base("https://www.tineye.com/search?url=")
2121

2222
public override void Dispose() { }
2323

24-
public override bool VerifyQuery(SearchQuery q)
24+
public override async ValueTask<bool> VerifyQueryAsync(SearchQuery q)
2525
{
26-
q.Uni.AllocImage().Wait();
26+
var ok = await q.Uni.AllocImage();
27+
28+
if (ok) {
29+
if (q.Uni.Image.Width >= 10000) {
30+
return false;
31+
}
2732

28-
if (q.Uni.Image.Width >= 10000) {
29-
return false;
3033
}
3134

32-
return base.VerifyQuery(q);
35+
return await base.VerifyQueryAsync(q);
3336
}
3437

3538
public override async Task<SearchResult> GetResultAsync(SearchQuery query, CancellationToken token = default)
@@ -40,10 +43,8 @@ public override async Task<SearchResult> GetResultAsync(SearchQuery query, Cance
4043
goto ret;
4144
}
4245

43-
var req = await Client.Request(API_URL).PostMultipartAsync(b =>
44-
{
45-
b.AddString("url", query.Upload);
46-
}, cancellationToken: token);
46+
var req = await Client.Request(API_URL)
47+
.PostMultipartAsync(b => { b.AddString("url", query.Upload); }, cancellationToken: token);
4748

4849
TinEyeRoot tinEyeRoot = null;
4950

SmartImage.Lib/SmartImage.Lib.csproj

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,11 @@
4343
<PackageReference Include="AngleSharp.Io" Version="1.0.0" />
4444
<PackageReference Include="AngleSharp.Js" Version="0.15.0" />
4545
<PackageReference Include="AngleSharp.XPath" Version="2.0.4" />
46-
<PackageReference Include="CliWrap" Version="3.6.6" />
46+
<PackageReference Include="CliWrap" Version="3.6.7" />
4747
<PackageReference Include="CoenM.ImageSharp.ImageHash" Version="1.3.6" />
4848
<PackageReference Include="CommunityToolkit.Common" Version="8.3.2" />
4949
<PackageReference Include="Flurl.Http" Version="4.0.2" />
50-
<PackageReference Include="JetBrains.Annotations" Version="2024.2.0" />
50+
<PackageReference Include="JetBrains.Annotations" Version="2024.3.0" />
5151
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.10" />
5252
<PackageReference Include="Microsoft.Extensions.Configuration" Version="8.0.0" />
5353
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.1" />
@@ -64,13 +64,16 @@
6464
<PackageReference Include="SixLabors.ImageSharp" Version="3.1.5" />
6565
<PackageReference Include="System.Configuration.ConfigurationManager" Version="8.0.1" />
6666
<PackageReference Include="System.Drawing.Common" Version="8.0.10" />
67-
<PackageReference Include="System.Json" Version="4.7.1" />
6867
<PackageReference Include="System.Reactive" Version="6.0.1" />
6968
<PackageReference Include="System.Runtime.Caching" Version="8.0.1" />
70-
<PackageReference Include="Verify.Flurl" Version="0.1.0" />
69+
<PackageReference Include="System.Text.Json" Version="8.0.5" />
70+
<PackageReference Include="Verify.Flurl" Version="1.0.0" />
7171
</ItemGroup>
7272

7373
<ItemGroup>
74+
<Reference Include="FlareSolverrSharp">
75+
<HintPath>..\..\..\VSProjects\FlareSolverrSharp\src\FlareSolverrSharp\bin\Release\net8.0\FlareSolverrSharp.dll</HintPath>
76+
</Reference>
7477
<Reference Include="Kantan">
7578
<HintPath>..\..\..\VSProjects\Kantan\Kantan\bin\Release\net8.0\Kantan.dll</HintPath>
7679
</Reference>
@@ -80,12 +83,10 @@
8083
<Reference Include="Novus">
8184
<HintPath>..\..\..\VSProjects\Novus\Novus\bin\Release\net8.0\Novus.dll</HintPath>
8285
</Reference>
83-
<Reference Include="FlareSolverrSharp">
84-
<HintPath>..\..\..\VSProjects\FlareSolverrSharp\src\FlareSolverrSharp\bin\Release\net8.0\FlareSolverrSharp.dll</HintPath>
85-
</Reference>
8686
</ItemGroup>
8787

8888
<ItemGroup>
89+
<TrimmerRootAssembly Include="FlareSolverrSharp" />
8990
<TrimmerRootAssembly Include="System.Net" />
9091
<TrimmerRootAssembly Include="System.IO.FileSystem" />
9192
<TrimmerRootAssembly Include="Novus" />

SmartImage.Lib/Utilities/NodeUtil.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// 2023-01-13 @ 11:37 PM
33

44
using System.Diagnostics;
5+
using System.Text.Json.Nodes;
56
using AngleSharp.Dom;
67
using Flurl.Http;
78
using Flurl.Http.Configuration;
@@ -14,6 +15,11 @@ namespace SmartImage.Lib.Utilities;
1415
internal static class NodeUtil
1516
{
1617

18+
public static JsonNode TryGetKeyValue(this JsonObject v, string k)
19+
{
20+
return v.ContainsKey(k) ? v[k] : null;
21+
}
22+
1723
[CBN]
1824
[LinqTunnel]
1925
internal static T2 ApplyFunctorInnerPredicate<T, T2>(Func<Func<T2, bool>, T2> functor,
@@ -59,8 +65,7 @@ public static IEnumerable<string> QueryAllAttribute(this IParentNode doc, string
5965

6066
public static INode RecurseChildren(this INode n, int idx, int c)
6167
{
62-
if (c <= 0)
63-
{
68+
if (c <= 0) {
6469
return n;
6570
}
6671

0 commit comments

Comments
 (0)