|
3 | 3 | using System; |
4 | 4 | using System.Collections.Generic; |
5 | 5 | using System.Diagnostics; |
| 6 | +using System.IO; |
6 | 7 | using System.Json; |
7 | 8 | using System.Linq; |
8 | 9 | using System.Net; |
|
14 | 15 | using SimpleCore.Net; |
15 | 16 | using SimpleCore.Utilities; |
16 | 17 | using SmartImage.Lib.Searching; |
| 18 | +using SmartImage.Lib.Utilities; |
17 | 19 | using static SimpleCore.Diagnostics.LogCategories; |
18 | 20 | using JsonArray = System.Json.JsonArray; |
19 | 21 | using JsonObject = System.Json.JsonObject; |
@@ -55,14 +57,23 @@ public SauceNaoEngine() : this(String.Empty) { } |
55 | 57 | public override SearchEngineOptions EngineOption => SearchEngineOptions.SauceNao; |
56 | 58 |
|
57 | 59 |
|
58 | | - private static IEnumerable<SauceNaoDataResult> ParseResults(string url) |
| 60 | + private static IEnumerable<SauceNaoDataResult> ParseResults(ImageQuery query) |
59 | 61 | { |
60 | 62 | var docp = new HtmlParser(); |
61 | 63 |
|
62 | 64 | var rc = new RestClient(BASE_URL); |
63 | | - var req = new RestRequest("search.php"); |
64 | | - req.AddQueryParameter("url", url); |
| 65 | + var req = new RestRequest("search.php", Method.POST); |
65 | 66 |
|
| 67 | + if (query.IsFile) { |
| 68 | + req.AddFile("file", File.ReadAllBytes(query.Value), "image.png"); |
| 69 | + } |
| 70 | + else if (query.IsUri) { |
| 71 | + req.AddParameter("url", query, ParameterType.GetOrPost); |
| 72 | + } |
| 73 | + else { |
| 74 | + throw new SmartImageException(); |
| 75 | + } |
| 76 | + |
66 | 77 | var execute = rc.Execute(req); |
67 | 78 |
|
68 | 79 | string html = execute.Content; |
@@ -118,11 +129,11 @@ private static SauceNaoDataResult Parse(INode result) |
118 | 129 |
|
119 | 130 | string link = null; |
120 | 131 |
|
121 | | - var g = resultcontentcolumn.ChildNodes.GetElementsByTagName("a") |
| 132 | + var element = resultcontentcolumn.ChildNodes.GetElementsByTagName("a") |
122 | 133 | .FirstOrDefault(x => x.GetAttribute("href") != null); |
123 | 134 |
|
124 | | - if (g != null) { |
125 | | - link = g.GetAttribute("href"); |
| 135 | + if (element != null) { |
| 136 | + link = element.GetAttribute("href"); |
126 | 137 | } |
127 | 138 |
|
128 | 139 | // //div[contains(@class, 'resulttitle')] |
@@ -152,22 +163,20 @@ private static SauceNaoDataResult Parse(INode result) |
152 | 163 | return dataResult; |
153 | 164 | } |
154 | 165 |
|
155 | | - public override SearchResult GetResult(ImageQuery url) |
| 166 | + public override SearchResult GetResult(ImageQuery query) |
156 | 167 | { |
157 | | - var sresult = base.GetResult(url); |
| 168 | + var sresult = base.GetResult(query); |
158 | 169 |
|
159 | 170 | var result = new ImageResult(); |
160 | 171 |
|
161 | 172 | try { |
162 | | - var orig = GetDataResults(url.Image.ToString()); |
| 173 | + var orig = GetDataResults(query.Image.ToString()); |
163 | 174 |
|
164 | 175 | if (orig == null) { |
165 | | - //return result; |
166 | | - Debug.WriteLine($"[{Name}] Parsing HTML", LogCategories.C_INFO); |
167 | | - |
168 | | - string urlStr = url.Image.ToString(); |
169 | 176 |
|
170 | | - var sauceNaoDataResults = ParseResults(urlStr); |
| 177 | + Debug.WriteLine($"[{Name}] Parsing HTML", LogCategories.C_INFO); |
| 178 | + |
| 179 | + var sauceNaoDataResults = ParseResults(query); |
171 | 180 |
|
172 | 181 | if (sauceNaoDataResults == null) { |
173 | 182 | sresult.ErrorMessage = "Daily search limit (100) exceeded"; |
|
0 commit comments