Skip to content

Commit e802c01

Browse files
committed
Optimize Ascii2D
1 parent e9230ab commit e802c01

File tree

4 files changed

+34
-69
lines changed

4 files changed

+34
-69
lines changed

SmartImage.Lib/Engines/Impl/Ascii2DEngine.cs

Lines changed: 9 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ namespace SmartImage.Lib.Engines.Impl
2121
{
2222
public sealed class Ascii2DEngine : WebSearchEngine
2323
{
24-
2524
public Ascii2DEngine() : base("https://ascii2d.net/search/url/")
2625
{
2726
FollowRedirects = true;
@@ -34,8 +33,14 @@ public Ascii2DEngine() : base("https://ascii2d.net/search/url/")
3433

3534
public override string Name => EngineOption.ToString();
3635

37-
private Uri ConvertToDetailUri(Uri url)
36+
protected override Uri GetRaw(ImageQuery query)
3837
{
38+
var a = base.GetRaw(query);
39+
40+
var request = WebRequest.Create(a);
41+
42+
using var response = request.GetResponse();
43+
3944
/*
4045
* URL parameters
4146
*
@@ -50,46 +55,21 @@ private Uri ConvertToDetailUri(Uri url)
5055
*
5156
*/
5257

53-
var res = Network.GetResponse(url.ToString(), (int) Timeout.TotalMilliseconds, Method.GET, false);
54-
55-
// Get redirect url (color url)
56-
57-
string newUrl = res.ResponseUri.ToString();
58-
5958
// Convert to detail url
6059

61-
string detailUrl = newUrl.Replace("/color/", "/bovw/");
60+
string detailUrl = response.ResponseUri.ToString().Replace("/color/", "/bovw/");
6261

6362
return new Uri(detailUrl);
64-
}
65-
66-
protected override Uri GetRaw(ImageQuery query)
67-
{
68-
var a = base.GetRaw(query);
69-
return WebRequest.Create(a).GetResponse().ResponseUri;
7063

7164
}
7265

73-
protected internal override IDocument GetContent(IRestResponse response)
74-
{
75-
var url = response.ResponseUri;
76-
77-
response.ResponseUri = ConvertToDetailUri(url);
78-
79-
response.Content = WebUtilities.GetString(response.ResponseUri.ToString());
80-
81-
return base.GetContent(response);
82-
83-
}
8466

8567
protected override bool GetInitialResult(ImageQuery query, out Uri rawUri, out IRestResponse res)
8668
{
8769
rawUri = GetRaw(query);
8870

89-
// NOTE: wtf?
71+
res = new RestResponse();
9072

91-
res = Network.GetResponse(rawUri.ToString(), (int) Timeout.TotalMilliseconds, Method.GET, FollowRedirects);
92-
9373
res.Content = WebUtilities.GetString(rawUri.ToString());
9474

9575
return true;

SmartImage.Lib/Engines/Model/BaseSearchEngine.cs

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ protected BaseSearchEngine(string baseUrl)
2525

2626
public abstract SearchEngineOptions EngineOption { get; }
2727

28-
2928
public virtual string Name => EngineOption.ToString();
3029

3130
public virtual TimeSpan Timeout { get; set; } = TimeSpan.FromSeconds(3);
@@ -45,13 +44,11 @@ protected SearchResult GetResult(ImageQuery query, out IRestResponse response)
4544
sr.Status = ResultStatus.Success;
4645
}
4746

48-
4947
return sr;
5048
}
5149

5250
public virtual SearchResult GetResult(ImageQuery query) => GetResult(query, out _);
5351

54-
5552
public async Task<SearchResult> GetResultAsync(ImageQuery query)
5653
{
5754

@@ -87,7 +84,6 @@ protected virtual bool GetInitialResult(ImageQuery query, out Uri rawUri, out IR
8784
}*/
8885

8986
res = Network.GetResponse(rawUri.ToString(), (int) Timeout.TotalMilliseconds, Method.GET, FollowRedirects);
90-
9187

9288
if (!res.IsSuccessful) {
9389
if ((FollowRedirects && res.StatusCode == HttpStatusCode.Redirect)) {
@@ -101,24 +97,5 @@ protected virtual bool GetInitialResult(ImageQuery query, out Uri rawUri, out IR
10197

10298
return true;
10399
}
104-
105-
protected static SearchResult TryProcess(SearchResult sr, Func<SearchResult, SearchResult> process)
106-
{
107-
if (!sr.IsSuccessful) {
108-
return sr;
109-
}
110-
111-
try {
112-
113-
sr = process(sr);
114-
}
115-
catch (Exception e) {
116-
sr.Status = ResultStatus.Failure;
117-
sr.ErrorMessage = e.Message;
118-
Trace.WriteLine($"{sr.Engine.Name}: {e.Message}", LogCategories.C_ERROR);
119-
}
120-
121-
return sr;
122-
}
123100
}
124101
}

SmartImage.Lib/Engines/Model/ProcessedSearchEngine.cs

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Diagnostics;
33
using AngleSharp.Dom;
4+
using Kantan.Diagnostics;
45
using RestSharp;
56
using SmartImage.Lib.Searching;
67

@@ -28,30 +29,33 @@ public override SearchResult GetResult(ImageQuery query)
2829
{
2930
// HACK: this is questionable, but it resolves the edge case with polymorphism
3031

31-
SearchResult result;
32-
3332
ClientSearchEngine c;
3433
WebSearchEngine w;
3534

36-
IRestResponse response = null;
35+
var sr = GetResult(query, out IRestResponse response);
3736

3837
switch (this) {
3938
case ClientSearchEngine:
40-
result = base.GetResult(query);
39+
//sr = base.GetResult(query);
4140
c = this as ClientSearchEngine;
4241
w = null;
4342
break;
4443
case WebSearchEngine:
45-
result = GetResult(query, out response);
44+
//sr = GetResult(query, out response);
4645
w = this as WebSearchEngine;
4746
c = null;
4847
break;
4948
default:
5049
throw new InvalidOperationException();
5150
}
51+
52+
53+
if (!sr.IsSuccessful) {
54+
return sr;
55+
}
56+
57+
try {
5258

53-
return TryProcess(result, sr =>
54-
{
5559
object o;
5660

5761
if (c != null) {
@@ -64,10 +68,20 @@ public override SearchResult GetResult(ImageQuery query)
6468
throw new InvalidOperationException();
6569
}
6670

67-
6871
sr = Process(o, sr);
72+
6973
return sr;
70-
});
74+
}
75+
catch (Exception e) {
76+
77+
sr.Status = ResultStatus.Failure;
78+
sr.ErrorMessage = e.Message;
79+
80+
Trace.WriteLine($"{sr.Engine.Name}: {e.Message}", LogCategories.C_ERROR);
81+
}
82+
83+
return sr;
84+
7185
}
7286
}
7387
}

SmartImage/Program.cs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ public static class Program
9696
}
9797

9898
foreach (NConsoleOption? option in buffer.Select(NConsoleFactory.CreateResultOption)) {
99-
Program.ResultDialog.Options.Add(option);
99+
ResultDialog.Options.Add(option);
100100
}
101101

102102
_isFilteredShown = !_isFilteredShown;
@@ -161,13 +161,7 @@ private static async Task Main(string[] args)
161161
ResultDialog.Subtitle = $"SE: {Config.SearchEngines} " +
162162
$"| PE: {Config.PriorityEngines} " +
163163
$"| Filtering: {Config.Filtering.ToToggleString()}";
164-
165-
await Run();
166-
}
167-
168-
private static async Task Run()
169-
{
170-
164+
171165
CancellationTokenSource cts = new();
172166

173167
// Run search

0 commit comments

Comments
 (0)