|
1 | 1 | using System; |
| 2 | +using System.Collections; |
2 | 3 | using System.Collections.Generic; |
3 | 4 | using System.Diagnostics; |
4 | 5 | using System.Linq; |
5 | 6 | using Flurl.Http; |
6 | 7 | using JetBrains.Annotations; |
| 8 | +using Kantan.Collections; |
| 9 | +using Kantan.Text; |
7 | 10 | using Newtonsoft.Json; |
8 | 11 | using Newtonsoft.Json.Linq; |
9 | 12 | using RestSharp.Serialization.Json; |
10 | 13 | using SmartImage.Lib.Clients; |
11 | 14 | using SmartImage.Lib.Engines.Search.Base; |
12 | 15 | using SmartImage.Lib.Searching; |
13 | 16 | using static Kantan.Diagnostics.LogCategories; |
| 17 | +using JsonSerializer = Newtonsoft.Json.JsonSerializer; |
14 | 18 |
|
15 | 19 | // ReSharper disable InconsistentNaming |
16 | 20 | #pragma warning disable IDE1006, IDE0051 |
@@ -54,45 +58,54 @@ protected override SearchResult Process(object obj, SearchResult r) |
54 | 58 | .SetQueryParam("url", |
55 | 59 | query.UploadUri.ToString(), |
56 | 60 | true); |
57 | | - |
58 | 61 | var task = request.GetStringAsync(); |
59 | | - |
60 | 62 | task.Wait(Timeout); |
61 | | - var result = task.Result; |
62 | | - |
63 | | - /*JObject jo; |
64 | | -
|
65 | | - jo = JObject.Parse(result); |
66 | | - var token = jo["result"]; |
67 | | -
|
68 | | - Debug.WriteLine(result); |
69 | | - var rg = JsonConvert.DeserializeObject<List<TraceMoeDoc>>(token.ToString()); |
70 | | -
|
71 | | - tm = new(); |
72 | | - tm.result = rg.ToList(); |
73 | | - tm.error = jo["error"].ToString(); |
74 | | - tm.frameCount = long.Parse(jo["frameCount"].ToString());*/ |
| 63 | + var json = task.Result; |
75 | 64 |
|
76 | | - |
77 | | - // tm = JsonConvert.DeserializeObject<TraceMoeRootObject>(result); |
78 | | - |
79 | 65 | var settings = new JsonSerializerSettings |
80 | 66 | { |
81 | 67 | Error = (sender, args) => |
82 | 68 | { |
83 | | - if (object.Equals(args.ErrorContext.Member, nameof(TraceMoeDoc.episode)) && |
84 | | - args.ErrorContext.OriginalObject.GetType() == typeof(TraceMoeDoc)) |
85 | | - { |
| 69 | + |
| 70 | + if (object.Equals(args.ErrorContext.Member, nameof(TraceMoeDoc.episode)) /*&& |
| 71 | + args.ErrorContext.OriginalObject.GetType() == typeof(TraceMoeRootObject)*/) { |
86 | 72 | args.ErrorContext.Handled = true; |
| 73 | + |
87 | 74 | } |
| 75 | + |
| 76 | + Debug.WriteLine($"{args.ErrorContext}"); |
88 | 77 | } |
89 | 78 | }; |
90 | | - tm = JsonConvert.DeserializeObject<TraceMoeRootObject>(result, settings); |
91 | 79 |
|
| 80 | + /*var tm2t = request.GetJsonAsync(); |
| 81 | + tm2t.Wait(); |
| 82 | + var tm2 = tm2t.Result; |
| 83 | +
|
| 84 | + dynamic result = tm2.result; |
| 85 | + Debug.WriteLine($"{result}"); |
| 86 | + tm = new() { result = new(), error = tm2.error, frameCount = tm2.frameCount }; |
92 | 87 |
|
| 88 | + for (int i = 0; i < result.Count; i++) { |
| 89 | + Debug.WriteLine($"{result[i]}"); |
| 90 | +
|
| 91 | + var d = result[i]; |
| 92 | +
|
| 93 | + var doc = new TraceMoeDoc() |
| 94 | + { |
| 95 | + episode = d.episode, |
| 96 | + from = d.from, |
| 97 | + to = d.to, |
| 98 | + filename = d.filename, anilist = d.anilist |
| 99 | + }; |
| 100 | +
|
| 101 | + tm.result.Add(doc); |
| 102 | + }*/ |
| 103 | + |
| 104 | + |
| 105 | + tm = JsonConvert.DeserializeObject<TraceMoeRootObject>(json, settings); |
93 | 106 | } |
94 | 107 | catch (Exception e) { |
95 | | - Debug.WriteLine($"{e.Message}"); |
| 108 | + Debug.WriteLine($">>>>{e.Message}"); |
96 | 109 |
|
97 | 110 | goto ret; |
98 | 111 | } |
@@ -145,10 +158,22 @@ private IEnumerable<ImageResult> ConvertResults(TraceMoeRootObject obj, SearchRe |
145 | 158 | var doc = docs[i]; |
146 | 159 | float sim = MathF.Round((float) (doc.similarity * 100.0f), 2); |
147 | 160 |
|
| 161 | + var episode = doc.episode; |
| 162 | + |
| 163 | + string epStr = episode.ToString(); |
| 164 | + |
| 165 | + if (episode is string) { |
| 166 | + epStr = episode as string; |
| 167 | + } |
| 168 | + else if (episode is IEnumerable enumerable) { |
| 169 | + var ls = enumerable.CopyToList().Select(x => Int64.Parse(x.ToString() ?? String.Empty)); |
| 170 | + epStr = ls.QuickJoin(); |
| 171 | + } |
| 172 | + |
148 | 173 | var result = new ImageResult(r) |
149 | 174 | { |
150 | 175 | Similarity = sim, |
151 | | - Description = $"Episode #{doc.episode} @ {TimeSpan.FromSeconds(doc.from)}" |
| 176 | + Description = $"Episode #{epStr} @ {TimeSpan.FromSeconds(doc.from)}" |
152 | 177 | }; |
153 | 178 |
|
154 | 179 | try { |
@@ -199,8 +224,8 @@ private class TraceMoeDoc |
199 | 224 |
|
200 | 225 |
|
201 | 226 | /// <remarks>Episode field may contain multiple possible results delimited by <c>|</c></remarks> |
202 | | - [JsonIgnore] |
203 | | - public string episode { get; set; } |
| 227 | + // [JsonIgnore] |
| 228 | + public object episode { get; set; } |
204 | 229 |
|
205 | 230 | public double similarity { get; set; } |
206 | 231 |
|
|
0 commit comments