Skip to content

Commit 63d895c

Browse files
committed
Original image result
1 parent 0ef3e6f commit 63d895c

File tree

10 files changed

+102
-33
lines changed

10 files changed

+102
-33
lines changed

SmartImage.Lib/Engines/BaseSearchEngine.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public async Task<SearchResult> GetResultAsync(ImageQuery query)
6767

6868
public Uri GetRawResultUrl(ImageQuery query)
6969
{
70-
var uri = new Uri(BaseUrl + query.Image);
70+
var uri = new Uri(BaseUrl + query.UploadUri);
7171

7272
bool ok = Network.IsUriAlive(uri, Timeout);
7373

SmartImage.Lib/Engines/Impl/SauceNaoEngine.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ private IEnumerable<SauceNaoDataResult> GetAPIResults(ImageQuery url)
223223
req.AddQueryParameter("output_type", "2");
224224
req.AddQueryParameter("numres", "16");
225225
req.AddQueryParameter("api_key", Authentication);
226-
req.AddQueryParameter("url", url.Image.ToString());
226+
req.AddQueryParameter("url", url.UploadUri.ToString());
227227

228228
var res = m_client.Execute(req);
229229

SmartImage.Lib/Engines/Impl/TraceMoeEngine.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ protected override SearchResult Process(ImageQuery query, SearchResult r)
4141

4242

4343
var rq = new RestRequest("search");
44-
rq.AddQueryParameter("url", query.Image.ToString());
44+
rq.AddQueryParameter("url", query.UploadUri.ToString());
4545
//rq.AddQueryParameter("anilistInfo", "");
4646
rq.OnBeforeDeserialization = resp => { resp.ContentType = "application/json"; };
4747
rq.Timeout = Timeout.Milliseconds;
@@ -60,7 +60,7 @@ protected override SearchResult Process(ImageQuery query, SearchResult r)
6060
r = new SearchResult(this)
6161
{
6262
PrimaryResult = best,
63-
RawUri = new Uri(BaseUrl + query.Image),
63+
RawUri = new Uri(BaseUrl + query.UploadUri),
6464

6565
};
6666

SmartImage.Lib/SearchClient.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public SearchClient(SearchConfig config)
3131
Config = config;
3232

3333
Results = new List<SearchResult>();
34+
3435
FilteredResults = new List<SearchResult>();
3536

3637
Reload();
@@ -76,6 +77,7 @@ public void Reload()
7677
.ToArray();
7778

7879
Trace.WriteLine($"Engines: {Config.SearchEngines} | {Engines.QuickJoin()}");
80+
7981

8082
}
8183

SmartImage.Lib/Searching/ImageQuery.cs

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Diagnostics;
3+
using System.Drawing;
34
using System.IO;
45
using JetBrains.Annotations;
56
using SimpleCore.Net;
@@ -35,7 +36,7 @@ public sealed class ImageQuery
3536
/// <summary>
3637
/// Uploaded direct image
3738
/// </summary>
38-
public Uri Image { get; }
39+
public Uri UploadUri { get; }
3940

4041
/// <summary>
4142
/// Upload engine used for uploading the input file; if applicable
@@ -45,15 +46,14 @@ public sealed class ImageQuery
4546
public Stream Stream { get; }
4647

4748

48-
4949
public ImageQuery([NotNull] string value, [CanBeNull] BaseUploadEngine engine = null)
5050
{
5151
if (String.IsNullOrWhiteSpace(value)) {
5252
throw new ArgumentNullException(nameof(value));
5353
}
5454

5555

56-
value = value.CleanString();
56+
value = value.CleanString();
5757

5858
(IsUri, IsFile) = IsUriOrFile(value);
5959

@@ -66,28 +66,49 @@ public ImageQuery([NotNull] string value, [CanBeNull] BaseUploadEngine engine =
6666

6767
UploadEngine = engine ?? new LitterboxEngine(); //todo
6868

69-
Image = IsUri ? new Uri(Value) : UploadEngine.Upload(Value);
69+
UploadUri = IsUri ? new Uri(Value) : UploadEngine.Upload(Value);
7070

7171
Stream = IsFile ? File.OpenRead(value) : WebUtilities.GetStream(value);
7272

73-
Trace.WriteLine($"{nameof(ImageQuery)}: {Image}", C_SUCCESS);
73+
Trace.WriteLine($"{nameof(ImageQuery)}: {UploadUri}", C_SUCCESS);
7474
}
7575

7676

7777
public static implicit operator ImageQuery(Uri value) => new(value.ToString());
7878

7979
public static implicit operator ImageQuery(string value) => new(value);
80-
80+
8181

8282
public static (bool IsUri, bool IsFile) IsUriOrFile(string x)
8383
{
8484
return (ImageHelper.IsDirect(x, DirectImageType.Binary), File.Exists(x));
8585
}
8686

87+
public ImageResult GetImageResult()
88+
{
89+
90+
var result = new ImageResult()
91+
{
92+
Url = UploadUri,
93+
Direct = UploadUri,
94+
Image = Image.FromStream(Stream)
95+
};
96+
97+
result.OtherMetadata.Add("Upload engine", UploadEngine.Name);
98+
result.OtherMetadata.Add("Input type", IsUri ? "URI" : "File");
99+
result.OtherMetadata.Add("Input value", Value);
100+
101+
result.UpdateImageData();
102+
103+
return result;
104+
105+
106+
}
107+
87108

88109
public override string ToString()
89110
{
90-
return $"{Value} | {Image}";
111+
return $"{Value} | {UploadUri}";
91112
}
92113
}
93114
}

SmartImage.Lib/Searching/SearchResult.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public enum ResultStatus
4343
Extraneous
4444
}
4545

46+
4647

4748
/// <summary>
4849
/// Describes a search result

SmartImage.UI/Form.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ private void Update(ImageQuery query)
238238
{
239239
m_cl.Config.Query = query;
240240
inputTextBox.Text = query.Value;
241-
uploadTextBox.Text = m_cl.Config.Query.Image.ToString();
241+
uploadTextBox.Text = m_cl.Config.Query.UploadUri.ToString();
242242
inputPictureBox.Image = Image.FromStream(query.Stream);
243243
}
244244

SmartImage/Core/AppInfo.cs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,21 @@
55
using SimpleCore.Utilities;
66
using SmartImage.Utilities;
77
using System;
8+
using System.Collections.Generic;
89
using System.Diagnostics;
910
using System.Diagnostics.CodeAnalysis;
1011
using System.Globalization;
1112
using System.IO;
1213
using System.Linq;
1314
using System.Reflection;
15+
using System.Reflection.Metadata;
1416
using System.Runtime.CompilerServices;
1517
using System.Text;
1618
using System.Threading;
1719
using SimpleCore.Diagnostics;
20+
// ReSharper disable CognitiveComplexity
21+
22+
// ReSharper disable PossibleNullReferenceException
1823

1924
// ReSharper disable UnusedMember.Global
2025

@@ -87,6 +92,36 @@ public static string ExeLocation
8792
}
8893
}
8994

95+
public static List<string> InstalledUtilities
96+
{
97+
get
98+
{
99+
var utils = new List<string>
100+
{
101+
"ffmpeg.exe", "ffprobe.exe", "magick.exe", "youtube-dl.exe"
102+
};
103+
104+
var rg = new List<string>();
105+
106+
foreach (string s in utils) {
107+
string[] path = Environment.GetEnvironmentVariable("PATH").Split(';');
108+
109+
foreach (string directory in path) {
110+
if (Directory.Exists(directory)) {
111+
foreach (string file in Directory.EnumerateFiles(directory)) {
112+
if (Path.GetFileName(file) == s) {
113+
rg.Add(file);
114+
}
115+
}
116+
}
117+
}
118+
}
119+
120+
return rg;
121+
122+
}
123+
}
124+
90125

91126
public static bool IsAppFolderInPath => FileSystem.IsFolderInPath(AppFolder);
92127

SmartImage/Core/AppInterface.cs

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -149,13 +149,21 @@ internal static class AppInterface
149149
Console.WriteLine();
150150
Console.WriteLine(Strings.Separator);
151151

152+
foreach (string utility in AppInfo.InstalledUtilities) {
153+
Console.WriteLine(utility);
154+
}
155+
156+
Console.WriteLine();
157+
152158
var dependencies = ReflectionHelper.DumpDependencies();
153159

154160
foreach (var name in dependencies) {
155161
Console.WriteLine($"{name.Name} ({name.Version})");
156162
}
157163

158164
NConsole.WaitForInput();
165+
166+
159167
return null;
160168
}
161169
},
@@ -221,7 +229,7 @@ private static NConsoleOption CreateConfigOption(MemberInfo m, string name)
221229
});
222230

223231
var enumValue = Enums.ReadFromSet<SearchEngineOptions>(selected);
224-
var field = Config.GetType().ResolveField((m).Name);
232+
var field = Config.GetType().GetResolvedField((m).Name);
225233
field.SetValue(Config, enumValue);
226234

227235
Console.WriteLine(enumValue);
@@ -272,7 +280,7 @@ private static NConsoleOption CreateConfigOption(PropertyInfo member, string nam
272280
Name = GetName(name, initVal),
273281
Function = () =>
274282
{
275-
var fi = Config.GetType().ResolveField(member.Name);
283+
var fi = Config.GetType().GetResolvedField(member.Name);
276284
object curVal = fi.GetValue(Config);
277285
bool newVal = !(bool) curVal;
278286
fi.SetValue(Config, newVal);
@@ -360,24 +368,21 @@ public static NConsoleOption[] CreateResultOptions(IEnumerable<ImageResult> resu
360368
return result.Select(r => CreateResultOption(r, $"{n} #{i++}", c)).ToArray();
361369
}
362370

363-
private static NConsoleOption CreateResultOption(ImageResult result, string n, Color c)
371+
internal static NConsoleOption CreateResultOption(ImageResult result, string n, Color c, float correction=-.3f)
364372
{
365-
366-
const float CORRECTION_FACTOR = -.3f;
367-
368373
var option = new NConsoleOption
369374
{
370375
Function = CreateOpenFunction(result.Url),
371376
ComboFunction = CreateDownloadFunction(result),
372-
Color = c.ChangeBrightness(CORRECTION_FACTOR),
377+
Color = c.ChangeBrightness(correction),
373378
Name = n,
374379
Data = result
375380
};
376381

377382
return option;
378383
}
379384

380-
private static NConsoleFunction CreateOpenFunction(Uri url)
385+
internal static NConsoleFunction CreateOpenFunction(Uri url)
381386
{
382387
return () =>
383388
{
@@ -389,7 +394,7 @@ private static NConsoleFunction CreateOpenFunction(Uri url)
389394
};
390395
}
391396

392-
private static NConsoleFunction CreateDownloadFunction(ImageResult result)
397+
internal static NConsoleFunction CreateDownloadFunction(ImageResult result)
393398
{
394399
return () =>
395400
{

SmartImage/Program.cs

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,7 @@ public static class Program
5050
// |___/
5151

5252
#region Core fields
53-
54-
#line 54 "Initialization"
53+
5554
public static readonly SearchConfig Config = new();
5655

5756
public static readonly SearchClient Client = new(Config);
@@ -61,7 +60,7 @@ public static class Program
6160
Options = new List<NConsoleOption>(),
6261
Description = AppInterface.Description
6362
};
64-
#line default
63+
6564

6665
#endregion
6766

@@ -121,16 +120,16 @@ private static async Task Main(string[] args)
121120
* Handle CLI args
122121
*/
123122

124-
var enumerator = args.GetEnumerator();
123+
var argEnumerator = args.GetEnumerator();
125124

126-
while (enumerator.MoveNext()) {
127-
object? arg = enumerator.Current;
125+
while (argEnumerator.MoveNext()) {
126+
object? arg = argEnumerator.Current;
128127

129128
switch (arg) {
130129
case CMD_FIND_DIRECT:
131-
enumerator.MoveNext();
130+
argEnumerator.MoveNext();
132131

133-
var directImages = ImageHelper.FindDirectImages((string) enumerator.Current);
132+
var directImages = ImageHelper.FindDirectImages((string) argEnumerator.Current);
134133

135134
var imageResults = directImages.Select(ImageResult.FromDirectImage);
136135

@@ -146,8 +145,8 @@ private static async Task Main(string[] args)
146145

147146
return;
148147
case CMD_SEARCH:
149-
enumerator.MoveNext();
150-
Config.Query = (string) enumerator.Current;
148+
argEnumerator.MoveNext();
149+
Config.Query = (string) argEnumerator.Current;
151150
break;
152151
default:
153152
Config.Query = args.First();
@@ -165,19 +164,25 @@ private static async Task Main(string[] args)
165164

166165
Client.ResultCompleted += OnResultCompleted;
167166

168-
Client.SearchCompleted += (_, eventArgs) =>
167+
Client.SearchCompleted += (obj, eventArgs) =>
169168
{
170-
OnSearchCompleted(_, eventArgs, cts);
169+
OnSearchCompleted(obj, eventArgs, cts);
171170
};
172171

173172
NConsoleProgress.Queue(cts);
174173

175174
// Show results
176175
var searchTask = Client.RunSearchAsync();
177176

177+
// Add original image
178+
ResultDialog.Options.Add(AppInterface.CreateResultOption(
179+
Config.Query.GetImageResult(), "(Original image)",
180+
AppInterface.ColorMain, -0.1f));
181+
178182

179183
NConsole.ReadOptions(ResultDialog);
180184

185+
181186
await searchTask;
182187
}
183188
catch (Exception exception) {

0 commit comments

Comments
 (0)