From 91c72c68cfc9eb7a8e839f3f8f939221fced5a5e Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Tue, 13 Jul 2021 09:06:01 +0530 Subject: [PATCH 01/49] Remove tag checking --- WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs index 74cf284..a2c5ce6 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs @@ -90,13 +90,10 @@ public ValueTask LoadSearchApplicationAsync() public async IAsyncEnumerable SearchAsync(SearchRequest searchRequest, CancellationToken cancellationToken) { - string searchedTag = searchRequest.SearchedTag; string searchedText = searchRequest.SearchedText; searchedText = searchedText.Trim(); - if (string.IsNullOrWhiteSpace(searchedTag) || - !searchedTag.Equals(WikiSearchTagName, StringComparison.OrdinalIgnoreCase) || - string.IsNullOrWhiteSpace(searchedText)) + if (string.IsNullOrWhiteSpace(searchedText)) yield break; QueryConfiguration queryConfiguration = new() From a8d57997cbecffc72a51f2fad3b4a243ebd4b455 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Tue, 13 Jul 2021 09:35:33 +0530 Subject: [PATCH 02/49] Add logo --- .../WikiPreview.Fluent.Plugin.csproj | 5 +++++ .../WikiPreviewSearchApp.cs | 11 +++++++++-- WikiPreview.Fluent.Plugin/Wikipedia-logo.png | Bin 0 -> 16675 bytes 3 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 WikiPreview.Fluent.Plugin/Wikipedia-logo.png diff --git a/WikiPreview.Fluent.Plugin/WikiPreview.Fluent.Plugin.csproj b/WikiPreview.Fluent.Plugin/WikiPreview.Fluent.Plugin.csproj index 66e9b0b..fface08 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreview.Fluent.Plugin.csproj +++ b/WikiPreview.Fluent.Plugin/WikiPreview.Fluent.Plugin.csproj @@ -15,4 +15,9 @@ + + + + + diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs index a2c5ce6..d9ec4a9 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs @@ -12,6 +12,7 @@ using System.Linq; using System.Net.Http; using System.Net.Http.Json; +using System.Reflection; using System.Text.Json; using System.Threading; using System.Threading.Channels; @@ -29,6 +30,7 @@ internal class WikiPreviewSearchApp : ISearchApplication private const string UserAgentString = "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"; private readonly SearchApplicationInfo _applicationInfo; private readonly JsonSerializerOptions _serializerOptions = new() {PropertyNameCaseInsensitive = true}; + private BitmapImageResult _bitmapLogo; public WikiPreviewSearchApp() { @@ -84,6 +86,11 @@ public ValueTask HandleSearchResult(ISearchResult searchResult) public ValueTask LoadSearchApplicationAsync() { + var assembly = Assembly.GetExecutingAssembly(); + const string resourceName = "WikiPreview.Fluent.Plugin.Wikipedia-logo.png"; + Stream stream = assembly.GetManifestResourceStream(resourceName); + var image = new Bitmap(stream!); + _bitmapLogo = new BitmapImageResult(image); return ValueTask.CompletedTask; } @@ -147,7 +154,7 @@ public async ValueTask GetSearchResultForId(object searchObjectId return await GenerateSearchResult(pageView, pageView?.Title); } - private static async ValueTask GenerateSearchResult(PageView value, + private async ValueTask GenerateSearchResult(PageView value, string searchedText) { string resultName = value.Extract; @@ -167,7 +174,7 @@ private static async ValueTask GenerateSearchResult(Pag } else { - bitmapImageResult = null; + bitmapImageResult = _bitmapLogo; } return new WikiPreviewSearchResult diff --git a/WikiPreview.Fluent.Plugin/Wikipedia-logo.png b/WikiPreview.Fluent.Plugin/Wikipedia-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..0599207d9ff7aebd93d063ec6295156422f2262d GIT binary patch literal 16675 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 literal 0 HcmV?d00001 From 951a0fca116401577e827e5ddb9b14ed300d37fa Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Thu, 15 Jul 2021 13:51:23 +0530 Subject: [PATCH 03/49] Fix SearchTagOnly can't be disabled. --- WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs index d9ec4a9..d723199 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs @@ -43,7 +43,8 @@ public WikiPreviewSearchApp() SearchTagOnly = true, ApplicationIconGlyph = SearchResultIcon, SearchAllTime = ApplicationSearchTime.Fast, - DefaultSearchTags = SearchTags + DefaultSearchTags = SearchTags, + PluginName = "Wikipedia Preview" }; } @@ -97,10 +98,13 @@ public ValueTask LoadSearchApplicationAsync() public async IAsyncEnumerable SearchAsync(SearchRequest searchRequest, CancellationToken cancellationToken) { + string searchedTag = searchRequest.SearchedTag; string searchedText = searchRequest.SearchedText; searchedText = searchedText.Trim(); - if (string.IsNullOrWhiteSpace(searchedText)) + if (!string.IsNullOrWhiteSpace(searchedTag) && + !searchedTag.Equals(WikiSearchTagName, StringComparison.OrdinalIgnoreCase) || + string.IsNullOrWhiteSpace(searchedText)) yield break; QueryConfiguration queryConfiguration = new() From 9f237184733d9b77c857827736d8c01f34453183 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Tue, 24 Aug 2021 18:06:13 +0530 Subject: [PATCH 04/49] Improve code and add copy contents operation --- .../WikiPreview.Fluent.Plugin.csproj | 31 +++++++-------- .../WikiPreviewSearchApp.cs | 38 ++++++++++++------- .../WikiPreviewSearchOperation.cs | 2 +- .../WikiPreviewSearchResult.cs | 6 ++- pluginsInfo.json | 2 +- 5 files changed, 45 insertions(+), 34 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/WikiPreview.Fluent.Plugin.csproj b/WikiPreview.Fluent.Plugin/WikiPreview.Fluent.Plugin.csproj index fface08..b7fc162 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreview.Fluent.Plugin.csproj +++ b/WikiPreview.Fluent.Plugin/WikiPreview.Fluent.Plugin.csproj @@ -1,23 +1,20 @@ - - net5.0-windows10.0.19041 - - None - - AnyCPU;x64 - 1.2.0.0 - + + net5.0-windows10.0.19041 + AnyCPU;x64 + 1.3.0.0 + - - - - - + + + + + - - - - + + + + diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs index d723199..08cc00c 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs @@ -1,11 +1,4 @@ -using Blast.API.Core.Processes; -using Blast.API.Processes; -using Blast.API.Search; -using Blast.Core.Interfaces; -using Blast.Core.Objects; -using Blast.Core.Results; -using Dasync.Collections; -using System; +using System; using System.Collections.Generic; using System.Drawing; using System.IO; @@ -17,6 +10,13 @@ using System.Threading; using System.Threading.Channels; using System.Threading.Tasks; +using Blast.API.Core.Processes; +using Blast.API.Processes; +using Blast.API.Search; +using Blast.Core.Interfaces; +using Blast.Core.Objects; +using Blast.Core.Results; +using Dasync.Collections; using TextCopy; using static WikiPreview.Fluent.Plugin.WikiPreviewSearchResult; using static WikiPreview.Fluent.Plugin.WikiResult; @@ -29,7 +29,7 @@ internal class WikiPreviewSearchApp : ISearchApplication public const string WikiSearchTagName = "Wiki"; private const string UserAgentString = "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"; private readonly SearchApplicationInfo _applicationInfo; - private readonly JsonSerializerOptions _serializerOptions = new() {PropertyNameCaseInsensitive = true}; + private readonly JsonSerializerOptions _serializerOptions = new() { PropertyNameCaseInsensitive = true }; private BitmapImageResult _bitmapLogo; public WikiPreviewSearchApp() @@ -59,6 +59,7 @@ public ValueTask HandleSearchResult(ISearchResult searchResult) throw new InvalidCastException(nameof(WikiPreviewSearchResult)); string displayedName = wikiPreviewSearchResult.DisplayedName; + if (string.IsNullOrWhiteSpace(displayedName)) return new ValueTask(new HandleResult(true, false)); @@ -76,8 +77,19 @@ public ValueTask HandleSearchResult(ISearchResult searchResult) if (!string.IsNullOrWhiteSpace(actionUrl)) managerInstance.StartNewProcess(actionUrl); } + else if (wikiPreviewSearchResult.SelectedOperation.OperationName == CopyContentsStr) + { + string contents = wikiPreviewSearchResult.ResultName; + if (!string.IsNullOrWhiteSpace(contents)) + Clipboard.SetText(contents); + } else { + string pageUrl = wikiPreviewSearchResult.Url; + + if (string.IsNullOrWhiteSpace(pageUrl)) + return new ValueTask(new HandleResult(true, false)); + string wikiUrl = WikiRootUrl + wikiPreviewSearchResult.Url; Clipboard.SetText(wikiUrl); } @@ -89,9 +101,7 @@ public ValueTask LoadSearchApplicationAsync() { var assembly = Assembly.GetExecutingAssembly(); const string resourceName = "WikiPreview.Fluent.Plugin.Wikipedia-logo.png"; - Stream stream = assembly.GetManifestResourceStream(resourceName); - var image = new Bitmap(stream!); - _bitmapLogo = new BitmapImageResult(image); + _bitmapLogo = new BitmapImageResult(assembly.GetManifestResourceStream(resourceName)); return ValueTask.CompletedTask; } @@ -108,7 +118,7 @@ public async IAsyncEnumerable SearchAsync(SearchRequest searchReq yield break; QueryConfiguration queryConfiguration = new() - {SearchTerm = searchedText, WikiNameSpace = 0, ImageSize = 100, ResultsCount = 8}; + { SearchTerm = searchedText, WikiNameSpace = 0, ImageSize = 100, ResultsCount = 8 }; string url = GetFormattedUrl(queryConfiguration); using var httpClient = new HttpClient(); httpClient.DefaultRequestHeaders.UserAgent.TryParseAdd(UserAgentString); @@ -152,7 +162,7 @@ public async ValueTask GetSearchResultForId(object searchObjectId if (wiki == null) return default; Dictionary.ValueCollection pages = wiki.Query.Pages.Values; - if (pages is {Count: 0}) return default; + if (pages is { Count: 0 }) return default; PageView pageView = pages.First(); return await GenerateSearchResult(pageView, pageView?.Title); diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchOperation.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchOperation.cs index 2710f0e..203fe5e 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchOperation.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchOperation.cs @@ -32,4 +32,4 @@ private WikiPreviewSearchOperation(ActionType actionType, string actionName, str public static WikiPreviewSearchOperation OpenGoogle { get; } = new(ActionType.GoogleSearch, "Search in Google", "Search with Google.", "\uE721"); } -} +} \ No newline at end of file diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs index ab66356..23dd344 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs @@ -1,5 +1,6 @@ using System.Collections.ObjectModel; using System.Text; +using Avalonia.Input; using Blast.API.Search.SearchOperations; using Blast.Core.Interfaces; using Blast.Core.Results; @@ -15,6 +16,7 @@ public sealed class WikiPreviewSearchResult : SearchResultBase public const string GoogleSearchUrl = "https://www.google.com/search?q="; public const string SearchResultIcon = "\uEDE4"; public const string TagDescription = "Search in Wikipedia"; + public const string CopyContentsStr = "Copy Contents"; public static readonly ObservableCollection SupportedOperationCollections = new() @@ -22,7 +24,9 @@ public static readonly ObservableCollection SupportedOperation OpenWiki, OpenWikiWand, OpenGoogle, - new CopySearchOperation("Copy URL") {Description = "Copies the Wikipedia Page URL to Clipboard."} + new CopySearchOperation("Copy URL") { Description = "Copies the Wikipedia Page URL to Clipboard." }, + new CopySearchOperation("Copy Contents") + { Description = "Copy the Contents of the Result.", KeyGesture = new KeyGesture(Key.None) } }; public static readonly ObservableCollection SearchTags = new() diff --git a/pluginsInfo.json b/pluginsInfo.json index 09af6b2..f93bca9 100644 --- a/pluginsInfo.json +++ b/pluginsInfo.json @@ -1 +1 @@ -{"IsEnabled":true,"InstalledVersion":"1.2.0.0","Name":"WikiPreview","DisplayName":"Wikipedia Preview","Description":"Display Wikipedia Content in Fluent Search","PublisherName":"Makesh Vineeth","Version":"1.2.0.0","URL":"https://github.com/MakeshVineeth/WikiPreview.Fluent.Plugin","DownloadURL":"https://github.com/MakeshVineeth/WikiPreview.Fluent.Plugin/releases/","IconUrl":"","IconGlyph":"\uEDE4","PreviewImage":null} \ No newline at end of file +{"IsEnabled":true,"InstalledVersion":"1.3.0.0","Name":"WikiPreview","DisplayName":"Wikipedia Preview","Description":"Display Wikipedia Content in Fluent Search","PublisherName":"Makesh Vineeth","Version":"1.2.0.0","URL":"https://github.com/MakeshVineeth/WikiPreview.Fluent.Plugin","DownloadURL":"https://github.com/MakeshVineeth/WikiPreview.Fluent.Plugin/releases/","IconUrl":"","IconGlyph":"\uEDE4","PreviewImage":null} \ No newline at end of file From 1fcb9a749cb70f0b357b9b5036213daa19244750 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Tue, 7 Sep 2021 00:49:38 +0530 Subject: [PATCH 05/49] Use Custom Control - 1 --- .../WikiPreview.Fluent.Plugin.csproj | 2 +- .../WikiPreviewSearchApp.cs | 5 ++-- .../WikiPreviewSearchResult.cs | 29 ++++++++++++++++++- 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/WikiPreview.Fluent.Plugin.csproj b/WikiPreview.Fluent.Plugin/WikiPreview.Fluent.Plugin.csproj index b7fc162..2dae116 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreview.Fluent.Plugin.csproj +++ b/WikiPreview.Fluent.Plugin/WikiPreview.Fluent.Plugin.csproj @@ -8,7 +8,7 @@ - + diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs index 08cc00c..6853e21 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs @@ -118,7 +118,7 @@ public async IAsyncEnumerable SearchAsync(SearchRequest searchReq yield break; QueryConfiguration queryConfiguration = new() - { SearchTerm = searchedText, WikiNameSpace = 0, ImageSize = 100, ResultsCount = 8 }; + { SearchTerm = searchedText, WikiNameSpace = 0, ImageSize = FixedImageSize, ResultsCount = 8 }; string url = GetFormattedUrl(queryConfiguration); using var httpClient = new HttpClient(); httpClient.DefaultRequestHeaders.UserAgent.TryParseAdd(UserAgentString); @@ -191,12 +191,11 @@ private async ValueTask GenerateSearchResult(PageView v bitmapImageResult = _bitmapLogo; } - return new WikiPreviewSearchResult + return new WikiPreviewSearchResult(resultName) { Url = wikiUrl, PreviewImage = bitmapImageResult, DisplayedName = displayedName, - ResultName = resultName, SearchedText = searchedText, Score = score, SearchObjectId = pageId, diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs index 23dd344..799d2e8 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs @@ -1,6 +1,11 @@ using System.Collections.ObjectModel; using System.Text; +using Avalonia; +using Avalonia.Controls; using Avalonia.Input; +using Avalonia.Media; +using Avalonia.Threading; +using Blast.API.Graphics; using Blast.API.Search.SearchOperations; using Blast.Core.Interfaces; using Blast.Core.Results; @@ -17,6 +22,7 @@ public sealed class WikiPreviewSearchResult : SearchResultBase public const string SearchResultIcon = "\uEDE4"; public const string TagDescription = "Search in Wikipedia"; public const string CopyContentsStr = "Copy Contents"; + public const int FixedImageSize = 100; public static readonly ObservableCollection SupportedOperationCollections = new() @@ -39,12 +45,33 @@ public static readonly ObservableCollection SupportedOperation } }; - public WikiPreviewSearchResult() + public WikiPreviewSearchResult(string resultName) { Tags = SearchTags; SupportedOperations = SupportedOperationCollections; IconGlyph = SearchResultIcon; ResultType = WikiSearchTagName; + + Dispatcher.UIThread.Post(() => + { + UseCustomControl = true; + var wikiDescription = new TextBlock + { + Text = resultName, Padding = Thickness.Parse("10"), TextWrapping = TextWrapping.Wrap, + TextTrimming = TextTrimming.WordEllipsis, MaxLines = 4 + }; + + var stackPanel = new StackPanel(); + var imageControl = new Image + { + Source = PreviewImage.ConvertToAvaloniaBitmap(), MaxHeight = FixedImageSize, + MaxWidth = FixedImageSize + }; + + stackPanel.Children.Add(imageControl); + stackPanel.Children.Add(wikiDescription); + CustomControl = stackPanel; + }); } public string Url { get; set; } From ae9fcc4620f3c05dc475302ac1678e6576bf59d2 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Tue, 7 Sep 2021 22:34:47 +0530 Subject: [PATCH 06/49] Use OnFocusLoad --- .../WikiPreviewSearchResult.cs | 38 ++++++++++--------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs index 799d2e8..9773a4a 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs @@ -4,7 +4,6 @@ using Avalonia.Controls; using Avalonia.Input; using Avalonia.Media; -using Avalonia.Threading; using Blast.API.Graphics; using Blast.API.Search.SearchOperations; using Blast.Core.Interfaces; @@ -51,27 +50,30 @@ public WikiPreviewSearchResult(string resultName) SupportedOperations = SupportedOperationCollections; IconGlyph = SearchResultIcon; ResultType = WikiSearchTagName; + WikiText = resultName; + } + + private string WikiText { get; } - Dispatcher.UIThread.Post(() => + public override void OnFocusLoad(ISearchResult old, bool hasUserInteracted) + { + UseCustomControl = true; + var wikiDescription = new TextBlock { - UseCustomControl = true; - var wikiDescription = new TextBlock - { - Text = resultName, Padding = Thickness.Parse("10"), TextWrapping = TextWrapping.Wrap, - TextTrimming = TextTrimming.WordEllipsis, MaxLines = 4 - }; + Text = WikiText, Padding = Thickness.Parse("10"), TextWrapping = TextWrapping.Wrap, + TextTrimming = TextTrimming.WordEllipsis, MaxLines = 10 + }; - var stackPanel = new StackPanel(); - var imageControl = new Image - { - Source = PreviewImage.ConvertToAvaloniaBitmap(), MaxHeight = FixedImageSize, - MaxWidth = FixedImageSize - }; + var stackPanel = new StackPanel(); + var imageControl = new Image + { + Source = PreviewImage.ConvertToAvaloniaBitmap(), MaxHeight = FixedImageSize, + MaxWidth = FixedImageSize + }; - stackPanel.Children.Add(imageControl); - stackPanel.Children.Add(wikiDescription); - CustomControl = stackPanel; - }); + stackPanel.Children.Add(imageControl); + stackPanel.Children.Add(wikiDescription); + CustomControl = stackPanel; } public string Url { get; set; } From a5e7a39b82aba600d71420ea90c9f1c89bebe4da Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Tue, 7 Sep 2021 23:27:29 +0530 Subject: [PATCH 07/49] Add ScrollViewer --- .../WikiPreviewSearchResult.cs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs index 9773a4a..39fb131 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs @@ -60,8 +60,8 @@ public override void OnFocusLoad(ISearchResult old, bool hasUserInteracted) UseCustomControl = true; var wikiDescription = new TextBlock { - Text = WikiText, Padding = Thickness.Parse("10"), TextWrapping = TextWrapping.Wrap, - TextTrimming = TextTrimming.WordEllipsis, MaxLines = 10 + Text = WikiText, Padding = Thickness.Parse("0 10 0 0"), TextWrapping = TextWrapping.Wrap, + TextTrimming = TextTrimming.WordEllipsis }; var stackPanel = new StackPanel(); @@ -73,7 +73,15 @@ public override void OnFocusLoad(ISearchResult old, bool hasUserInteracted) stackPanel.Children.Add(imageControl); stackPanel.Children.Add(wikiDescription); - CustomControl = stackPanel; + + var scrollViewer = new ScrollViewer + { + Content = stackPanel, + MaxHeight = 200, + Margin = Thickness.Parse("10") + }; + + CustomControl = scrollViewer; } public string Url { get; set; } From 9e5029371838e71726795ed31ec5011009c46b27 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Wed, 8 Sep 2021 12:28:41 +0530 Subject: [PATCH 08/49] Hide scrollbar --- WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs index 39fb131..ad83e45 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs @@ -2,6 +2,7 @@ using System.Text; using Avalonia; using Avalonia.Controls; +using Avalonia.Controls.Primitives; using Avalonia.Input; using Avalonia.Media; using Blast.API.Graphics; @@ -78,7 +79,8 @@ public override void OnFocusLoad(ISearchResult old, bool hasUserInteracted) { Content = stackPanel, MaxHeight = 200, - Margin = Thickness.Parse("10") + Margin = Thickness.Parse("10"), + VerticalScrollBarVisibility = ScrollBarVisibility.Hidden }; CustomControl = scrollViewer; From de41d7c819f4461be7d420907b2da5de550d5565 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Wed, 8 Sep 2021 18:14:25 +0530 Subject: [PATCH 09/49] Rounded Corners Image --- .../WikiPreviewSearchResult.cs | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs index ad83e45..3b6f7b4 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs @@ -56,20 +56,29 @@ public WikiPreviewSearchResult(string resultName) private string WikiText { get; } + public string Url { get; set; } + public override string Context => WikiRootUrl + Url; + public override void OnFocusLoad(ISearchResult old, bool hasUserInteracted) { UseCustomControl = true; var wikiDescription = new TextBlock { - Text = WikiText, Padding = Thickness.Parse("0 10 0 0"), TextWrapping = TextWrapping.Wrap, + Text = WikiText, Padding = new Thickness(0, 5, 0, 0), TextWrapping = TextWrapping.Wrap, TextTrimming = TextTrimming.WordEllipsis }; var stackPanel = new StackPanel(); - var imageControl = new Image + var imageControl = new Border { - Source = PreviewImage.ConvertToAvaloniaBitmap(), MaxHeight = FixedImageSize, - MaxWidth = FixedImageSize + Background = new ImageBrush(PreviewImage.ConvertToAvaloniaBitmap()) + { + Stretch = Stretch.UniformToFill + }, + CornerRadius = new CornerRadius(5.0), + BorderThickness = new Thickness(5.0), + Height = FixedImageSize, + Width = FixedImageSize }; stackPanel.Children.Add(imageControl); @@ -79,16 +88,13 @@ public override void OnFocusLoad(ISearchResult old, bool hasUserInteracted) { Content = stackPanel, MaxHeight = 200, - Margin = Thickness.Parse("10"), + Margin = new Thickness(5.0), VerticalScrollBarVisibility = ScrollBarVisibility.Hidden }; CustomControl = scrollViewer; } - public string Url { get; set; } - public override string Context => WikiRootUrl + Url; - public static string GetFormattedUrl(QueryConfiguration queryConfiguration) { var builder = From 1472183383e44bcde76fb3b5609417ff9325fd57 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Wed, 8 Sep 2021 18:20:24 +0530 Subject: [PATCH 10/49] Revert "Rounded Corners Image" This reverts commit de41d7c819f4461be7d420907b2da5de550d5565. --- .../WikiPreviewSearchResult.cs | 22 +++++++------------ 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs index 3b6f7b4..ad83e45 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs @@ -56,29 +56,20 @@ public WikiPreviewSearchResult(string resultName) private string WikiText { get; } - public string Url { get; set; } - public override string Context => WikiRootUrl + Url; - public override void OnFocusLoad(ISearchResult old, bool hasUserInteracted) { UseCustomControl = true; var wikiDescription = new TextBlock { - Text = WikiText, Padding = new Thickness(0, 5, 0, 0), TextWrapping = TextWrapping.Wrap, + Text = WikiText, Padding = Thickness.Parse("0 10 0 0"), TextWrapping = TextWrapping.Wrap, TextTrimming = TextTrimming.WordEllipsis }; var stackPanel = new StackPanel(); - var imageControl = new Border + var imageControl = new Image { - Background = new ImageBrush(PreviewImage.ConvertToAvaloniaBitmap()) - { - Stretch = Stretch.UniformToFill - }, - CornerRadius = new CornerRadius(5.0), - BorderThickness = new Thickness(5.0), - Height = FixedImageSize, - Width = FixedImageSize + Source = PreviewImage.ConvertToAvaloniaBitmap(), MaxHeight = FixedImageSize, + MaxWidth = FixedImageSize }; stackPanel.Children.Add(imageControl); @@ -88,13 +79,16 @@ public override void OnFocusLoad(ISearchResult old, bool hasUserInteracted) { Content = stackPanel, MaxHeight = 200, - Margin = new Thickness(5.0), + Margin = Thickness.Parse("10"), VerticalScrollBarVisibility = ScrollBarVisibility.Hidden }; CustomControl = scrollViewer; } + public string Url { get; set; } + public override string Context => WikiRootUrl + Url; + public static string GetFormattedUrl(QueryConfiguration queryConfiguration) { var builder = From 5cd9d3cc207a0bbad18daa88e3528b98faec5242 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Wed, 8 Sep 2021 19:07:50 +0530 Subject: [PATCH 11/49] Revert "Revert "Rounded Corners Image"" This reverts commit 1472183383e44bcde76fb3b5609417ff9325fd57. --- .../WikiPreviewSearchResult.cs | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs index ad83e45..3b6f7b4 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs @@ -56,20 +56,29 @@ public WikiPreviewSearchResult(string resultName) private string WikiText { get; } + public string Url { get; set; } + public override string Context => WikiRootUrl + Url; + public override void OnFocusLoad(ISearchResult old, bool hasUserInteracted) { UseCustomControl = true; var wikiDescription = new TextBlock { - Text = WikiText, Padding = Thickness.Parse("0 10 0 0"), TextWrapping = TextWrapping.Wrap, + Text = WikiText, Padding = new Thickness(0, 5, 0, 0), TextWrapping = TextWrapping.Wrap, TextTrimming = TextTrimming.WordEllipsis }; var stackPanel = new StackPanel(); - var imageControl = new Image + var imageControl = new Border { - Source = PreviewImage.ConvertToAvaloniaBitmap(), MaxHeight = FixedImageSize, - MaxWidth = FixedImageSize + Background = new ImageBrush(PreviewImage.ConvertToAvaloniaBitmap()) + { + Stretch = Stretch.UniformToFill + }, + CornerRadius = new CornerRadius(5.0), + BorderThickness = new Thickness(5.0), + Height = FixedImageSize, + Width = FixedImageSize }; stackPanel.Children.Add(imageControl); @@ -79,16 +88,13 @@ public override void OnFocusLoad(ISearchResult old, bool hasUserInteracted) { Content = stackPanel, MaxHeight = 200, - Margin = Thickness.Parse("10"), + Margin = new Thickness(5.0), VerticalScrollBarVisibility = ScrollBarVisibility.Hidden }; CustomControl = scrollViewer; } - public string Url { get; set; } - public override string Context => WikiRootUrl + Url; - public static string GetFormattedUrl(QueryConfiguration queryConfiguration) { var builder = From d9881d78796a21b28fb03951a941b9f529de50ba Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Wed, 8 Sep 2021 19:17:29 +0530 Subject: [PATCH 12/49] Fix Rounded Corners Image --- WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs index 3b6f7b4..1391993 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs @@ -5,6 +5,7 @@ using Avalonia.Controls.Primitives; using Avalonia.Input; using Avalonia.Media; +using Avalonia.Media.Imaging; using Blast.API.Graphics; using Blast.API.Search.SearchOperations; using Blast.Core.Interfaces; @@ -22,7 +23,7 @@ public sealed class WikiPreviewSearchResult : SearchResultBase public const string SearchResultIcon = "\uEDE4"; public const string TagDescription = "Search in Wikipedia"; public const string CopyContentsStr = "Copy Contents"; - public const int FixedImageSize = 100; + public const int FixedImageSize = 120; public static readonly ObservableCollection SupportedOperationCollections = new() @@ -69,16 +70,19 @@ public override void OnFocusLoad(ISearchResult old, bool hasUserInteracted) }; var stackPanel = new StackPanel(); + Bitmap bitmap = PreviewImage.ConvertToAvaloniaBitmap(); var imageControl = new Border { - Background = new ImageBrush(PreviewImage.ConvertToAvaloniaBitmap()) + Background = new ImageBrush(bitmap) { Stretch = Stretch.UniformToFill }, CornerRadius = new CornerRadius(5.0), BorderThickness = new Thickness(5.0), - Height = FixedImageSize, - Width = FixedImageSize + Height = bitmap.Size.Height, + Width = bitmap.Size.Width, + MaxHeight = FixedImageSize, + MaxWidth = FixedImageSize }; stackPanel.Children.Add(imageControl); From daadbbec2a90276535037754a23ffb02d7cfa0d9 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Wed, 8 Sep 2021 21:01:17 +0530 Subject: [PATCH 13/49] Fix copy contents operation --- WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs | 2 +- WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs index 6853e21..5ebec04 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs @@ -79,7 +79,7 @@ public ValueTask HandleSearchResult(ISearchResult searchResult) } else if (wikiPreviewSearchResult.SelectedOperation.OperationName == CopyContentsStr) { - string contents = wikiPreviewSearchResult.ResultName; + string contents = wikiPreviewSearchResult.WikiText; if (!string.IsNullOrWhiteSpace(contents)) Clipboard.SetText(contents); } diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs index 1391993..40f71aa 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs @@ -55,7 +55,7 @@ public WikiPreviewSearchResult(string resultName) WikiText = resultName; } - private string WikiText { get; } + public string WikiText { get; } public string Url { get; set; } public override string Context => WikiRootUrl + Url; From 34012cca4e0943d292c7daec66bfec56bde91d43 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Sun, 12 Sep 2021 11:47:29 +0530 Subject: [PATCH 14/49] Use CustomPreview --- WikiPreview.Fluent.Plugin/CustomPreview.cs | 75 +++++++++++++++++++ .../WikiPreviewSearchApp.cs | 2 +- .../WikiPreviewSearchResult.cs | 53 ++----------- 3 files changed, 81 insertions(+), 49 deletions(-) create mode 100644 WikiPreview.Fluent.Plugin/CustomPreview.cs diff --git a/WikiPreview.Fluent.Plugin/CustomPreview.cs b/WikiPreview.Fluent.Plugin/CustomPreview.cs new file mode 100644 index 0000000..5b1bd5b --- /dev/null +++ b/WikiPreview.Fluent.Plugin/CustomPreview.cs @@ -0,0 +1,75 @@ +using System.Threading.Tasks; +using Avalonia; +using Avalonia.Controls; +using Avalonia.Controls.Primitives; +using Avalonia.Media; +using Avalonia.Media.Imaging; +using Blast.API.Graphics; +using Blast.Core.Interfaces; +using static WikiPreview.Fluent.Plugin.WikiPreviewSearchResult; + +namespace WikiPreview.Fluent.Plugin +{ + public class CustomPreview : IResultPreviewControlBuilder + { + public CustomPreview() + { + PreviewBuilderDescriptor = new PreviewBuilderDescriptor + { + Name = "Wikipedia Preview", + Description = "Displays the Wikipedia Article Information within Fluent Search.", + ShowPreviewAutomatically = true + }; + } + + public bool CanBuildPreviewForResult(ISearchResult searchResult) + { + return true; + } + + public ValueTask CreatePreviewControl(ISearchResult searchResult) + { + Control control = GeneratePreview(searchResult.ResultName, + searchResult.PreviewImage.ConvertToAvaloniaBitmap()); + return new ValueTask(control); + } + + public PreviewBuilderDescriptor PreviewBuilderDescriptor { get; } + + private static Control GeneratePreview(string text, IBitmap bitmap) + { + var wikiDescription = new TextBlock + { + Text = text, Padding = new Thickness(0, 5, 0, 0), TextWrapping = TextWrapping.Wrap, + TextTrimming = TextTrimming.WordEllipsis + }; + + var stackPanel = new StackPanel(); + var imageControl = new Border + { + Background = new ImageBrush(bitmap) + { + Stretch = Stretch.UniformToFill + }, + CornerRadius = new CornerRadius(5.0), + BorderThickness = new Thickness(5.0), + Height = bitmap.Size.Height, + Width = bitmap.Size.Width, + MaxHeight = FixedImageSize, + MaxWidth = FixedImageSize + }; + + stackPanel.Children.Add(imageControl); + stackPanel.Children.Add(wikiDescription); + + var scrollViewer = new ScrollViewer + { + Content = stackPanel, + Margin = new Thickness(5.0), + VerticalScrollBarVisibility = ScrollBarVisibility.Hidden + }; + + return scrollViewer; + } + } +} diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs index 5ebec04..6853e21 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs @@ -79,7 +79,7 @@ public ValueTask HandleSearchResult(ISearchResult searchResult) } else if (wikiPreviewSearchResult.SelectedOperation.OperationName == CopyContentsStr) { - string contents = wikiPreviewSearchResult.WikiText; + string contents = wikiPreviewSearchResult.ResultName; if (!string.IsNullOrWhiteSpace(contents)) Clipboard.SetText(contents); } diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs index 40f71aa..0ab4f28 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs @@ -1,12 +1,6 @@ using System.Collections.ObjectModel; using System.Text; -using Avalonia; -using Avalonia.Controls; -using Avalonia.Controls.Primitives; using Avalonia.Input; -using Avalonia.Media; -using Avalonia.Media.Imaging; -using Blast.API.Graphics; using Blast.API.Search.SearchOperations; using Blast.Core.Interfaces; using Blast.Core.Results; @@ -46,59 +40,21 @@ public static readonly ObservableCollection SupportedOperation } }; + private readonly CustomPreview _customPreview = new(); + public WikiPreviewSearchResult(string resultName) { Tags = SearchTags; SupportedOperations = SupportedOperationCollections; IconGlyph = SearchResultIcon; ResultType = WikiSearchTagName; - WikiText = resultName; + ResultName = resultName; + ResultPreviewControlBuilder = _customPreview; } - public string WikiText { get; } - public string Url { get; set; } public override string Context => WikiRootUrl + Url; - public override void OnFocusLoad(ISearchResult old, bool hasUserInteracted) - { - UseCustomControl = true; - var wikiDescription = new TextBlock - { - Text = WikiText, Padding = new Thickness(0, 5, 0, 0), TextWrapping = TextWrapping.Wrap, - TextTrimming = TextTrimming.WordEllipsis - }; - - var stackPanel = new StackPanel(); - Bitmap bitmap = PreviewImage.ConvertToAvaloniaBitmap(); - var imageControl = new Border - { - Background = new ImageBrush(bitmap) - { - Stretch = Stretch.UniformToFill - }, - CornerRadius = new CornerRadius(5.0), - BorderThickness = new Thickness(5.0), - Height = bitmap.Size.Height, - Width = bitmap.Size.Width, - MaxHeight = FixedImageSize, - MaxWidth = FixedImageSize - }; - - stackPanel.Children.Add(imageControl); - stackPanel.Children.Add(wikiDescription); - - var scrollViewer = new ScrollViewer - { - Content = stackPanel, - MaxHeight = 200, - Margin = new Thickness(5.0), - VerticalScrollBarVisibility = ScrollBarVisibility.Hidden - }; - - CustomControl = scrollViewer; - } - public static string GetFormattedUrl(QueryConfiguration queryConfiguration) { var builder = @@ -119,6 +75,7 @@ public static string GetFormattedUrl(QueryConfiguration queryConfiguration) protected override void OnSelectedSearchResultChanged() { + // Empty } } } From 4311024a6204b7a78eb692cf707005f3692dc87a Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Sun, 12 Sep 2021 12:00:46 +0530 Subject: [PATCH 15/49] Use double line breaks for better reading --- WikiPreview.Fluent.Plugin/CustomPreview.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/WikiPreview.Fluent.Plugin/CustomPreview.cs b/WikiPreview.Fluent.Plugin/CustomPreview.cs index 5b1bd5b..ddc4c91 100644 --- a/WikiPreview.Fluent.Plugin/CustomPreview.cs +++ b/WikiPreview.Fluent.Plugin/CustomPreview.cs @@ -1,4 +1,5 @@ -using System.Threading.Tasks; +using System.Text.RegularExpressions; +using System.Threading.Tasks; using Avalonia; using Avalonia.Controls; using Avalonia.Controls.Primitives; @@ -7,6 +8,7 @@ using Blast.API.Graphics; using Blast.Core.Interfaces; using static WikiPreview.Fluent.Plugin.WikiPreviewSearchResult; +using static System.Environment; namespace WikiPreview.Fluent.Plugin { @@ -38,6 +40,8 @@ public ValueTask CreatePreviewControl(ISearchResult searchResult) private static Control GeneratePreview(string text, IBitmap bitmap) { + text = Regex.Replace(text, @"\r\n?|\n", NewLine + NewLine); + var wikiDescription = new TextBlock { Text = text, Padding = new Thickness(0, 5, 0, 0), TextWrapping = TextWrapping.Wrap, From 4a3265fa1e273ecef7e152ac5f81f8238b497627 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Sun, 12 Sep 2021 13:44:33 +0530 Subject: [PATCH 16/49] Custom Preview - 1 --- WikiPreview.Fluent.Plugin/CustomPreview.cs | 35 ++++++++++++++++--- .../WikiPreviewSearchResult.cs | 2 +- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/CustomPreview.cs b/WikiPreview.Fluent.Plugin/CustomPreview.cs index ddc4c91..b4f3ede 100644 --- a/WikiPreview.Fluent.Plugin/CustomPreview.cs +++ b/WikiPreview.Fluent.Plugin/CustomPreview.cs @@ -1,5 +1,6 @@ using System.Text.RegularExpressions; using System.Threading.Tasks; +using Windows.UI.ViewManagement; using Avalonia; using Avalonia.Controls; using Avalonia.Controls.Primitives; @@ -31,24 +32,45 @@ public bool CanBuildPreviewForResult(ISearchResult searchResult) public ValueTask CreatePreviewControl(ISearchResult searchResult) { - Control control = GeneratePreview(searchResult.ResultName, + Control control = GeneratePreview(searchResult.DisplayedName, searchResult.ResultName, searchResult.PreviewImage.ConvertToAvaloniaBitmap()); return new ValueTask(control); } public PreviewBuilderDescriptor PreviewBuilderDescriptor { get; } - private static Control GeneratePreview(string text, IBitmap bitmap) + private static Control GeneratePreview(string title, string text, IBitmap bitmap) { + // double the new lines for better reading. text = Regex.Replace(text, @"\r\n?|\n", NewLine + NewLine); + // creates heading. + var header = new TextBlock + { + Text = title, + FontWeight = FontWeight.SemiBold, + FontSize = 20.0 + }; + + // creates separator + var defaultTheme = new UISettings(); + string uiTheme = defaultTheme.GetColorValue(UIColorType.Foreground).ToString(); + Color lineColor = Color.Parse(uiTheme); + + var separator = new Border + { + BorderThickness = new Thickness(0.6), Background = new SolidColorBrush(lineColor), + Margin = new Thickness(0, 5) + }; + + // creates article content. var wikiDescription = new TextBlock { - Text = text, Padding = new Thickness(0, 5, 0, 0), TextWrapping = TextWrapping.Wrap, + Text = text, Padding = new Thickness(0, 10, 0, 0), TextWrapping = TextWrapping.Wrap, TextTrimming = TextTrimming.WordEllipsis }; - var stackPanel = new StackPanel(); + // creates image control. var imageControl = new Border { Background = new ImageBrush(bitmap) @@ -63,13 +85,16 @@ private static Control GeneratePreview(string text, IBitmap bitmap) MaxWidth = FixedImageSize }; + var stackPanel = new StackPanel(); + stackPanel.Children.Add(header); + stackPanel.Children.Add(separator); stackPanel.Children.Add(imageControl); stackPanel.Children.Add(wikiDescription); var scrollViewer = new ScrollViewer { Content = stackPanel, - Margin = new Thickness(5.0), + Margin = new Thickness(10.0), VerticalScrollBarVisibility = ScrollBarVisibility.Hidden }; diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs index 0ab4f28..099fafd 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs @@ -17,7 +17,7 @@ public sealed class WikiPreviewSearchResult : SearchResultBase public const string SearchResultIcon = "\uEDE4"; public const string TagDescription = "Search in Wikipedia"; public const string CopyContentsStr = "Copy Contents"; - public const int FixedImageSize = 120; + public const int FixedImageSize = 150; public static readonly ObservableCollection SupportedOperationCollections = new() From fad50862d813fddc0e2077a659aaff73ec9f02bb Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Sun, 12 Sep 2021 14:00:52 +0530 Subject: [PATCH 17/49] Custom Preview - 2 --- WikiPreview.Fluent.Plugin/CustomPreview.cs | 11 +++++++---- WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs | 2 +- WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/CustomPreview.cs b/WikiPreview.Fluent.Plugin/CustomPreview.cs index b4f3ede..fa642bc 100644 --- a/WikiPreview.Fluent.Plugin/CustomPreview.cs +++ b/WikiPreview.Fluent.Plugin/CustomPreview.cs @@ -1,4 +1,5 @@ -using System.Text.RegularExpressions; +using System; +using System.Text.RegularExpressions; using System.Threading.Tasks; using Windows.UI.ViewManagement; using Avalonia; @@ -27,7 +28,9 @@ public CustomPreview() public bool CanBuildPreviewForResult(ISearchResult searchResult) { - return true; + return !string.IsNullOrWhiteSpace(searchResult.SearchApp) && + searchResult.SearchApp.Equals(WikiPreviewSearchApp.SearchAppName, + StringComparison.OrdinalIgnoreCase); } public ValueTask CreatePreviewControl(ISearchResult searchResult) @@ -54,7 +57,7 @@ private static Control GeneratePreview(string title, string text, IBitmap bitmap // creates separator var defaultTheme = new UISettings(); - string uiTheme = defaultTheme.GetColorValue(UIColorType.Foreground).ToString(); + string uiTheme = defaultTheme.GetColorValue(UIColorType.Foreground).ToString(); Color lineColor = Color.Parse(uiTheme); var separator = new Border @@ -94,7 +97,7 @@ private static Control GeneratePreview(string title, string text, IBitmap bitmap var scrollViewer = new ScrollViewer { Content = stackPanel, - Margin = new Thickness(10.0), + Margin = new Thickness(10.0, 0), VerticalScrollBarVisibility = ScrollBarVisibility.Hidden }; diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs index 6853e21..79e909e 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs @@ -25,7 +25,7 @@ namespace WikiPreview.Fluent.Plugin { internal class WikiPreviewSearchApp : ISearchApplication { - private const string SearchAppName = "WikiPreview"; + public const string SearchAppName = "WikiPreview"; public const string WikiSearchTagName = "Wiki"; private const string UserAgentString = "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"; private readonly SearchApplicationInfo _applicationInfo; diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs index 099fafd..91fffd5 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs @@ -78,4 +78,4 @@ protected override void OnSelectedSearchResultChanged() // Empty } } -} +} \ No newline at end of file From 5d47dc2676ec10cd50c49ddd1fd11e9c477ec2e5 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Sun, 12 Sep 2021 15:06:42 +0530 Subject: [PATCH 18/49] Improve spacing --- WikiPreview.Fluent.Plugin/CustomPreview.cs | 5 +++-- WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/CustomPreview.cs b/WikiPreview.Fluent.Plugin/CustomPreview.cs index fa642bc..eaf1d21 100644 --- a/WikiPreview.Fluent.Plugin/CustomPreview.cs +++ b/WikiPreview.Fluent.Plugin/CustomPreview.cs @@ -62,8 +62,9 @@ private static Control GeneratePreview(string title, string text, IBitmap bitmap var separator = new Border { - BorderThickness = new Thickness(0.6), Background = new SolidColorBrush(lineColor), - Margin = new Thickness(0, 5) + BorderThickness = new Thickness(0.6), + BorderBrush = new SolidColorBrush(lineColor), + Margin = new Thickness(0, 8) }; // creates article content. diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs index 91fffd5..099fafd 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs @@ -78,4 +78,4 @@ protected override void OnSelectedSearchResultChanged() // Empty } } -} \ No newline at end of file +} From 52ca12a8a3c2457f2f71b4dcadfe4450b5636f24 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Sun, 12 Sep 2021 18:25:24 +0530 Subject: [PATCH 19/49] Custom Preview - 3 --- WikiPreview.Fluent.Plugin/CustomPreview.cs | 91 +++++++++++++++------- 1 file changed, 62 insertions(+), 29 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/CustomPreview.cs b/WikiPreview.Fluent.Plugin/CustomPreview.cs index eaf1d21..18e300e 100644 --- a/WikiPreview.Fluent.Plugin/CustomPreview.cs +++ b/WikiPreview.Fluent.Plugin/CustomPreview.cs @@ -1,10 +1,11 @@ using System; using System.Text.RegularExpressions; using System.Threading.Tasks; -using Windows.UI.ViewManagement; using Avalonia; using Avalonia.Controls; using Avalonia.Controls.Primitives; +using Avalonia.Input; +using Avalonia.Layout; using Avalonia.Media; using Avalonia.Media.Imaging; using Blast.API.Graphics; @@ -35,42 +36,22 @@ public bool CanBuildPreviewForResult(ISearchResult searchResult) public ValueTask CreatePreviewControl(ISearchResult searchResult) { - Control control = GeneratePreview(searchResult.DisplayedName, searchResult.ResultName, + Control control = GeneratePreview(searchResult.ResultName, searchResult.PreviewImage.ConvertToAvaloniaBitmap()); return new ValueTask(control); } public PreviewBuilderDescriptor PreviewBuilderDescriptor { get; } - private static Control GeneratePreview(string title, string text, IBitmap bitmap) + private static Control GeneratePreview(string text, IBitmap bitmap) { // double the new lines for better reading. text = Regex.Replace(text, @"\r\n?|\n", NewLine + NewLine); - // creates heading. - var header = new TextBlock - { - Text = title, - FontWeight = FontWeight.SemiBold, - FontSize = 20.0 - }; - - // creates separator - var defaultTheme = new UISettings(); - string uiTheme = defaultTheme.GetColorValue(UIColorType.Foreground).ToString(); - Color lineColor = Color.Parse(uiTheme); - - var separator = new Border - { - BorderThickness = new Thickness(0.6), - BorderBrush = new SolidColorBrush(lineColor), - Margin = new Thickness(0, 8) - }; - // creates article content. var wikiDescription = new TextBlock { - Text = text, Padding = new Thickness(0, 10, 0, 0), TextWrapping = TextWrapping.Wrap, + Text = text, Padding = new Thickness(5, 10, 5, 0), TextWrapping = TextWrapping.Wrap, TextTrimming = TextTrimming.WordEllipsis }; @@ -89,20 +70,72 @@ private static Control GeneratePreview(string title, string text, IBitmap bitmap MaxWidth = FixedImageSize }; + // StackPanel to store image and text. var stackPanel = new StackPanel(); - stackPanel.Children.Add(header); - stackPanel.Children.Add(separator); stackPanel.Children.Add(imageControl); stackPanel.Children.Add(wikiDescription); var scrollViewer = new ScrollViewer { Content = stackPanel, - Margin = new Thickness(10.0, 0), - VerticalScrollBarVisibility = ScrollBarVisibility.Hidden + VerticalScrollBarVisibility = ScrollBarVisibility.Hidden, + Margin = new Thickness(0, 0, 0, 5) + }; + + scrollViewer.PointerEnter += ScrollViewerOnPointerEnter; + scrollViewer.PointerLeave += ScrollViewerOnPointerLeave; + + // Create Parent Grid. + var grid = new Grid + { + Margin = new Thickness(10.0, 0, 10, 10), + }; + grid.RowDefinitions.Add(new RowDefinition()); + grid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto }); + grid.Children.Add(scrollViewer); + + Button openWiki = CreateButton("Wikipedia"); + Button searchGoogle = CreateButton("Search Google"); + Button copyContents = CreateButton("Copy Text"); + + var uniformGrid = new UniformGrid + { + Columns = 3, + Rows = 0 }; - return scrollViewer; + uniformGrid.Children.Add(openWiki); + uniformGrid.Children.Add(searchGoogle); + uniformGrid.Children.Add(copyContents); + + // add buttons grid to the bottom row. + Grid.SetRow(uniformGrid, 1); + grid.Children.Add(uniformGrid); + + return grid; + } + + private static void ScrollViewerOnPointerLeave(object sender, PointerEventArgs e) + { + if (sender is ScrollViewer scrollViewer) + scrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Hidden; + } + + private static void ScrollViewerOnPointerEnter(object sender, PointerEventArgs e) + { + if (sender is ScrollViewer scrollViewer) + scrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Auto; + } + + private static Button CreateButton(string text) + { + return new Button + { + Content = text, + Margin = new Thickness(0, 0, 5, 0), + HorizontalAlignment = HorizontalAlignment.Stretch, + VerticalAlignment = VerticalAlignment.Stretch + }; } } } From 0567963275255d42f682feeba3e0cb587c202e38 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Sun, 12 Sep 2021 20:39:20 +0530 Subject: [PATCH 20/49] Custom Preview - 4 --- WikiPreview.Fluent.Plugin/CustomPreview.cs | 56 +++++++++++++++---- .../WikiPreviewSearchResult.cs | 2 +- 2 files changed, 47 insertions(+), 11 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/CustomPreview.cs b/WikiPreview.Fluent.Plugin/CustomPreview.cs index 18e300e..63d2623 100644 --- a/WikiPreview.Fluent.Plugin/CustomPreview.cs +++ b/WikiPreview.Fluent.Plugin/CustomPreview.cs @@ -5,11 +5,15 @@ using Avalonia.Controls; using Avalonia.Controls.Primitives; using Avalonia.Input; +using Avalonia.Interactivity; using Avalonia.Layout; using Avalonia.Media; using Avalonia.Media.Imaging; +using Blast.API.Core.Processes; using Blast.API.Graphics; +using Blast.API.Processes; using Blast.Core.Interfaces; +using TextCopy; using static WikiPreview.Fluent.Plugin.WikiPreviewSearchResult; using static System.Environment; @@ -17,6 +21,10 @@ namespace WikiPreview.Fluent.Plugin { public class CustomPreview : IResultPreviewControlBuilder { + private const string GoogleStr = "Search Google"; + private const string WikipediaStr = "Wikipedia"; + private const string CopyStr = "Copy Text"; + public CustomPreview() { PreviewBuilderDescriptor = new PreviewBuilderDescriptor @@ -36,15 +44,20 @@ public bool CanBuildPreviewForResult(ISearchResult searchResult) public ValueTask CreatePreviewControl(ISearchResult searchResult) { - Control control = GeneratePreview(searchResult.ResultName, - searchResult.PreviewImage.ConvertToAvaloniaBitmap()); + if (searchResult is not WikiPreviewSearchResult wikiPreviewSearchResult) + throw new InvalidCastException(nameof(wikiPreviewSearchResult)); + + Control control = GeneratePreview(wikiPreviewSearchResult); return new ValueTask(control); } public PreviewBuilderDescriptor PreviewBuilderDescriptor { get; } - private static Control GeneratePreview(string text, IBitmap bitmap) + private static Control GeneratePreview(WikiPreviewSearchResult searchResult) { + string text = searchResult.ResultName; + Bitmap bitmap = searchResult.PreviewImage.ConvertToAvaloniaBitmap(); + // double the new lines for better reading. text = Regex.Replace(text, @"\r\n?|\n", NewLine + NewLine); @@ -88,15 +101,15 @@ private static Control GeneratePreview(string text, IBitmap bitmap) // Create Parent Grid. var grid = new Grid { - Margin = new Thickness(10.0, 0, 10, 10), + Margin = new Thickness(10.0, 0, 10, 10) }; grid.RowDefinitions.Add(new RowDefinition()); grid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto }); grid.Children.Add(scrollViewer); - Button openWiki = CreateButton("Wikipedia"); - Button searchGoogle = CreateButton("Search Google"); - Button copyContents = CreateButton("Copy Text"); + Button openWiki = CreateButton(WikipediaStr, searchResult.Url); + Button searchGoogle = CreateButton(GoogleStr, searchResult.DisplayedName); + Button copyContents = CreateButton(CopyStr, text); var uniformGrid = new UniformGrid { @@ -127,15 +140,38 @@ private static void ScrollViewerOnPointerEnter(object sender, PointerEventArgs e scrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Auto; } - private static Button CreateButton(string text) + private static Button CreateButton(string text, string tag) { - return new Button + var button = new Button { Content = text, Margin = new Thickness(0, 0, 5, 0), HorizontalAlignment = HorizontalAlignment.Stretch, - VerticalAlignment = VerticalAlignment.Stretch + VerticalAlignment = VerticalAlignment.Stretch, + Tag = tag }; + + button.Click += ButtonOnClick; + return button; + } + + private static void ButtonOnClick(object sender, RoutedEventArgs e) + { + var button = sender as Button; + string buttonContent = button?.Content.ToString(); + + if (string.IsNullOrWhiteSpace(buttonContent)) return; + + string buttonTag = button.Tag?.ToString(); + + if (string.IsNullOrWhiteSpace(buttonTag)) return; + + IProcessManager managerInstance = ProcessUtils.GetManagerInstance(); + if (buttonContent.Contains(WikipediaStr)) + managerInstance.StartNewProcess(WikiRootUrl + buttonTag); + else if (buttonContent.Contains(GoogleStr)) + managerInstance.StartNewProcess(GoogleSearchUrl + buttonTag); + else if (buttonContent.Contains(CopyStr)) Clipboard.SetText(buttonTag); } } } diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs index 099fafd..91fffd5 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs @@ -78,4 +78,4 @@ protected override void OnSelectedSearchResultChanged() // Empty } } -} +} \ No newline at end of file From 7644b69729e3285fc91e606b362dc67c3ada7d34 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Sun, 12 Sep 2021 22:21:00 +0530 Subject: [PATCH 21/49] Improve buttons bg --- WikiPreview.Fluent.Plugin/CustomPreview.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/WikiPreview.Fluent.Plugin/CustomPreview.cs b/WikiPreview.Fluent.Plugin/CustomPreview.cs index 63d2623..e7878fa 100644 --- a/WikiPreview.Fluent.Plugin/CustomPreview.cs +++ b/WikiPreview.Fluent.Plugin/CustomPreview.cs @@ -7,6 +7,7 @@ using Avalonia.Input; using Avalonia.Interactivity; using Avalonia.Layout; +using Avalonia.Markup.Xaml.MarkupExtensions; using Avalonia.Media; using Avalonia.Media.Imaging; using Blast.API.Core.Processes; @@ -148,7 +149,8 @@ private static Button CreateButton(string text, string tag) Margin = new Thickness(0, 0, 5, 0), HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Stretch, - Tag = tag + Tag = tag, + [!TemplatedControl.BackgroundProperty] = new DynamicResourceExtension("TextControlBackground") }; button.Click += ButtonOnClick; From eefeb8f2b616ef8b7e1235be3aed7e9bc6f61209 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Mon, 13 Sep 2021 00:22:11 +0530 Subject: [PATCH 22/49] EXPERIMENTAL Global Preview --- WikiPreview.Fluent.Plugin/CustomPreview.cs | 127 ++++++++++++++---- .../WikiPreviewSearchApp.cs | 8 +- 2 files changed, 105 insertions(+), 30 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/CustomPreview.cs b/WikiPreview.Fluent.Plugin/CustomPreview.cs index e7878fa..7ff58fe 100644 --- a/WikiPreview.Fluent.Plugin/CustomPreview.cs +++ b/WikiPreview.Fluent.Plugin/CustomPreview.cs @@ -1,4 +1,8 @@ using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.Net.Http.Json; using System.Text.RegularExpressions; using System.Threading.Tasks; using Avalonia; @@ -13,10 +17,12 @@ using Blast.API.Core.Processes; using Blast.API.Graphics; using Blast.API.Processes; +using Blast.API.Search; using Blast.Core.Interfaces; using TextCopy; using static WikiPreview.Fluent.Plugin.WikiPreviewSearchResult; using static System.Environment; +using static WikiPreview.Fluent.Plugin.WikiPreviewSearchApp; namespace WikiPreview.Fluent.Plugin { @@ -38,30 +44,75 @@ public CustomPreview() public bool CanBuildPreviewForResult(ISearchResult searchResult) { - return !string.IsNullOrWhiteSpace(searchResult.SearchApp) && - searchResult.SearchApp.Equals(WikiPreviewSearchApp.SearchAppName, - StringComparison.OrdinalIgnoreCase); + if (string.IsNullOrWhiteSpace(searchResult.SearchApp)) return false; + + if (searchResult.SearchApp.Equals(SearchAppName, + StringComparison.OrdinalIgnoreCase)) return true; + + string host = searchResult.Context; + if (string.IsNullOrWhiteSpace(host)) return false; + + bool result = Uri.TryCreate(host, UriKind.Absolute, out Uri uri) + && uri.Scheme == Uri.UriSchemeHttps; + + if (!result) return false; + + host = uri.Host[3..]; + return host.StartsWith("wikipedia.org"); } public ValueTask CreatePreviewControl(ISearchResult searchResult) { - if (searchResult is not WikiPreviewSearchResult wikiPreviewSearchResult) - throw new InvalidCastException(nameof(wikiPreviewSearchResult)); + if (searchResult is WikiPreviewSearchResult result) + { + Control control = GeneratePreview(result); + return new ValueTask(control); + } - Control control = GeneratePreview(wikiPreviewSearchResult); - return new ValueTask(control); + string pageName = searchResult.Context.Split('/').Last(); + return GenerateElement(pageName); } public PreviewBuilderDescriptor PreviewBuilderDescriptor { get; } + private static async ValueTask GenerateElement(string pageName) + { + WikiPreviewSearchResult searchResult = await GetSearchResultForId(pageName); + Control control = GeneratePreview(searchResult); + return control; + } + private static Control GeneratePreview(WikiPreviewSearchResult searchResult) { string text = searchResult.ResultName; - Bitmap bitmap = searchResult.PreviewImage.ConvertToAvaloniaBitmap(); // double the new lines for better reading. text = Regex.Replace(text, @"\r\n?|\n", NewLine + NewLine); + // StackPanel to store image and text. + var stackPanel = new StackPanel(); + + // creates image control. + if (searchResult.PreviewImage is { IsEmpty: false }) + { + Bitmap bitmap = searchResult.PreviewImage.ConvertToAvaloniaBitmap(); + var imageControl = new Border + { + Background = new ImageBrush(bitmap) + { + Stretch = Stretch.UniformToFill + }, + CornerRadius = new CornerRadius(5.0), + BorderThickness = new Thickness(5.0), + Height = bitmap.Size.Height, + Width = bitmap.Size.Width, + MaxHeight = FixedImageSize, + MaxWidth = FixedImageSize + }; + + stackPanel.Children.Add(imageControl); + } + // creates article content. var wikiDescription = new TextBlock { @@ -69,24 +120,6 @@ private static Control GeneratePreview(WikiPreviewSearchResult searchResult) TextTrimming = TextTrimming.WordEllipsis }; - // creates image control. - var imageControl = new Border - { - Background = new ImageBrush(bitmap) - { - Stretch = Stretch.UniformToFill - }, - CornerRadius = new CornerRadius(5.0), - BorderThickness = new Thickness(5.0), - Height = bitmap.Size.Height, - Width = bitmap.Size.Width, - MaxHeight = FixedImageSize, - MaxWidth = FixedImageSize - }; - - // StackPanel to store image and text. - var stackPanel = new StackPanel(); - stackPanel.Children.Add(imageControl); stackPanel.Children.Add(wikiDescription); var scrollViewer = new ScrollViewer @@ -175,5 +208,47 @@ private static void ButtonOnClick(object sender, RoutedEventArgs e) managerInstance.StartNewProcess(GoogleSearchUrl + buttonTag); else if (buttonContent.Contains(CopyStr)) Clipboard.SetText(buttonTag); } + + private static async ValueTask GetSearchResultForId(string searchObjectId) + { + if (string.IsNullOrWhiteSpace(searchObjectId)) + return default; + + string url = "https://en.wikipedia.org/w/api.php?action=query&prop=extracts|pageimages&titles=" + + searchObjectId + + "&explaintext&exintro&pilicense=any&pithumbsize=100&format=json"; + + using var httpClient = new HttpClient(); + httpClient.DefaultRequestHeaders.UserAgent.TryParseAdd(UserAgentString); + var wiki = await httpClient.GetFromJsonAsync(url, SerializerOptions); + if (wiki == null) return default; + + Dictionary.ValueCollection pages = wiki.Query.Pages.Values; + if (pages is { Count: 0 }) return default; + + WikiResult.PageView pageView = pages.First(); + return GenerateSearchResult(pageView, pageView?.Title); + } + + + private static WikiPreviewSearchResult GenerateSearchResult(WikiResult.PageView value, + string searchedText) + { + string resultName = value.Extract; + string displayedName = value.Title; + double score = displayedName.SearchDistanceScore(searchedText); + string pageId = value.PageId.ToString(); + string wikiUrl = displayedName.Replace(' ', '_'); + + return new WikiPreviewSearchResult(resultName) + { + Url = wikiUrl, + DisplayedName = displayedName, + SearchedText = searchedText, + Score = score, + SearchObjectId = pageId, + PinUniqueId = pageId + }; + } } } diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs index 79e909e..aff1b95 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs @@ -27,9 +27,9 @@ internal class WikiPreviewSearchApp : ISearchApplication { public const string SearchAppName = "WikiPreview"; public const string WikiSearchTagName = "Wiki"; - private const string UserAgentString = "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"; + public const string UserAgentString = "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"; + public static readonly JsonSerializerOptions SerializerOptions = new() { PropertyNameCaseInsensitive = true }; private readonly SearchApplicationInfo _applicationInfo; - private readonly JsonSerializerOptions _serializerOptions = new() { PropertyNameCaseInsensitive = true }; private BitmapImageResult _bitmapLogo; public WikiPreviewSearchApp() @@ -125,7 +125,7 @@ public async IAsyncEnumerable SearchAsync(SearchRequest searchReq var channel = Channel.CreateUnbounded(); - _ = httpClient.GetFromJsonAsync(url, _serializerOptions, cancellationToken).ContinueWith(task => + _ = httpClient.GetFromJsonAsync(url, SerializerOptions, cancellationToken).ContinueWith(task => { if (task.IsCompletedSuccessfully) _ = task.Result?.Query.Pages.ParallelForEachAsync(async entry => @@ -158,7 +158,7 @@ public async ValueTask GetSearchResultForId(object searchObjectId using var httpClient = new HttpClient(); httpClient.DefaultRequestHeaders.UserAgent.TryParseAdd(UserAgentString); - var wiki = await httpClient.GetFromJsonAsync(url, _serializerOptions); + var wiki = await httpClient.GetFromJsonAsync(url, SerializerOptions); if (wiki == null) return default; Dictionary.ValueCollection pages = wiki.Query.Pages.Values; From 99056256a964d66766346e2643cfc06cec4aeb46 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Fri, 17 Sep 2021 23:16:16 +0530 Subject: [PATCH 23/49] Implement Singleton --- WikiPreview.Fluent.Plugin/CustomPreview.cs | 49 +--------- WikiPreview.Fluent.Plugin/ResultGenerator.cs | 92 +++++++++++++++++++ .../WikiPreviewSearchApp.cs | 63 +------------ WikiPreview.Fluent.Plugin/WikiResult.cs | 2 +- 4 files changed, 99 insertions(+), 107 deletions(-) create mode 100644 WikiPreview.Fluent.Plugin/ResultGenerator.cs diff --git a/WikiPreview.Fluent.Plugin/CustomPreview.cs b/WikiPreview.Fluent.Plugin/CustomPreview.cs index 7ff58fe..267699d 100644 --- a/WikiPreview.Fluent.Plugin/CustomPreview.cs +++ b/WikiPreview.Fluent.Plugin/CustomPreview.cs @@ -1,8 +1,5 @@ using System; -using System.Collections.Generic; using System.Linq; -using System.Net.Http; -using System.Net.Http.Json; using System.Text.RegularExpressions; using System.Threading.Tasks; using Avalonia; @@ -17,12 +14,12 @@ using Blast.API.Core.Processes; using Blast.API.Graphics; using Blast.API.Processes; -using Blast.API.Search; using Blast.Core.Interfaces; using TextCopy; using static WikiPreview.Fluent.Plugin.WikiPreviewSearchResult; using static System.Environment; using static WikiPreview.Fluent.Plugin.WikiPreviewSearchApp; +using static WikiPreview.Fluent.Plugin.ResultGenerator; namespace WikiPreview.Fluent.Plugin { @@ -77,7 +74,7 @@ public ValueTask CreatePreviewControl(ISearchResult searchResult) private static async ValueTask GenerateElement(string pageName) { - WikiPreviewSearchResult searchResult = await GetSearchResultForId(pageName); + WikiPreviewSearchResult searchResult = await Instance.GenerateOnDemand(pageName, true); Control control = GeneratePreview(searchResult); return control; } @@ -208,47 +205,5 @@ private static void ButtonOnClick(object sender, RoutedEventArgs e) managerInstance.StartNewProcess(GoogleSearchUrl + buttonTag); else if (buttonContent.Contains(CopyStr)) Clipboard.SetText(buttonTag); } - - private static async ValueTask GetSearchResultForId(string searchObjectId) - { - if (string.IsNullOrWhiteSpace(searchObjectId)) - return default; - - string url = "https://en.wikipedia.org/w/api.php?action=query&prop=extracts|pageimages&titles=" + - searchObjectId + - "&explaintext&exintro&pilicense=any&pithumbsize=100&format=json"; - - using var httpClient = new HttpClient(); - httpClient.DefaultRequestHeaders.UserAgent.TryParseAdd(UserAgentString); - var wiki = await httpClient.GetFromJsonAsync(url, SerializerOptions); - if (wiki == null) return default; - - Dictionary.ValueCollection pages = wiki.Query.Pages.Values; - if (pages is { Count: 0 }) return default; - - WikiResult.PageView pageView = pages.First(); - return GenerateSearchResult(pageView, pageView?.Title); - } - - - private static WikiPreviewSearchResult GenerateSearchResult(WikiResult.PageView value, - string searchedText) - { - string resultName = value.Extract; - string displayedName = value.Title; - double score = displayedName.SearchDistanceScore(searchedText); - string pageId = value.PageId.ToString(); - string wikiUrl = displayedName.Replace(' ', '_'); - - return new WikiPreviewSearchResult(resultName) - { - Url = wikiUrl, - DisplayedName = displayedName, - SearchedText = searchedText, - Score = score, - SearchObjectId = pageId, - PinUniqueId = pageId - }; - } } } diff --git a/WikiPreview.Fluent.Plugin/ResultGenerator.cs b/WikiPreview.Fluent.Plugin/ResultGenerator.cs new file mode 100644 index 0000000..28e656b --- /dev/null +++ b/WikiPreview.Fluent.Plugin/ResultGenerator.cs @@ -0,0 +1,92 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Net.Http; +using System.Net.Http.Json; +using System.Reflection; +using System.Threading.Tasks; +using Blast.API.Search; +using Blast.Core.Results; +using static WikiPreview.Fluent.Plugin.WikiPreviewSearchApp; +using static WikiPreview.Fluent.Plugin.WikiResult; + +namespace WikiPreview.Fluent.Plugin +{ + public sealed class ResultGenerator + { + private static readonly Lazy LazySingleton = + new(() => new ResultGenerator()); + + private readonly BitmapImageResult _bitmapLogo; + + private ResultGenerator() + { + var assembly = Assembly.GetExecutingAssembly(); + const string resourceName = "WikiPreview.Fluent.Plugin.Wikipedia-logo.png"; + _bitmapLogo = new BitmapImageResult(assembly.GetManifestResourceStream(resourceName)); + } + + public static ResultGenerator Instance => LazySingleton.Value; + + public async ValueTask GenerateSearchResult(PageView value, + string searchedText) + { + string resultName = value.Extract; + string displayedName = value.Title; + double score = displayedName.SearchDistanceScore(searchedText); + string pageId = value.PageId.ToString(); + string wikiUrl = displayedName.Replace(' ', '_'); + BitmapImageResult bitmapImageResult; + + if (value.Thumbnail != null) + { + string imgUrl = value.Thumbnail.Source; + using var imageClient = new HttpClient(); + imageClient.DefaultRequestHeaders.UserAgent.TryParseAdd(UserAgentString); + Stream stream = await imageClient.GetStreamAsync(imgUrl); + var bitmap = new Bitmap(stream); + bitmapImageResult = new BitmapImageResult(bitmap); + } + else + { + bitmapImageResult = _bitmapLogo; + } + + return new WikiPreviewSearchResult(resultName) + { + Url = wikiUrl, + PreviewImage = bitmapImageResult, + DisplayedName = displayedName, + SearchedText = searchedText, + Score = score, + SearchObjectId = pageId, + PinUniqueId = pageId + }; + } + + public async ValueTask GenerateOnDemand(string searchId, bool isCustomPreview = false) + { + if (string.IsNullOrWhiteSpace(searchId)) + return default; + + string searchType = isCustomPreview ? "titles=" : "pageids="; + + string url = "https://en.wikipedia.org/w/api.php?action=query&prop=extracts|pageimages&" + searchType + + searchId + + "&explaintext&exintro&pilicense=any&pithumbsize=100&format=json"; + + using var httpClient = new HttpClient(); + httpClient.DefaultRequestHeaders.UserAgent.TryParseAdd(UserAgentString); + var wiki = await httpClient.GetFromJsonAsync(url, SerializerOptions); + if (wiki == null) return default; + + Dictionary.ValueCollection pages = wiki.Query.Pages.Values; + if (pages is { Count: 0 }) return default; + + PageView pageView = pages.First(); + return await GenerateSearchResult(pageView, pageView?.Title); + } + } +} diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs index aff1b95..17170a0 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs @@ -1,18 +1,13 @@ using System; using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Linq; using System.Net.Http; using System.Net.Http.Json; -using System.Reflection; using System.Text.Json; using System.Threading; using System.Threading.Channels; using System.Threading.Tasks; using Blast.API.Core.Processes; using Blast.API.Processes; -using Blast.API.Search; using Blast.Core.Interfaces; using Blast.Core.Objects; using Blast.Core.Results; @@ -20,6 +15,7 @@ using TextCopy; using static WikiPreview.Fluent.Plugin.WikiPreviewSearchResult; using static WikiPreview.Fluent.Plugin.WikiResult; +using static WikiPreview.Fluent.Plugin.ResultGenerator; namespace WikiPreview.Fluent.Plugin { @@ -30,7 +26,7 @@ internal class WikiPreviewSearchApp : ISearchApplication public const string UserAgentString = "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"; public static readonly JsonSerializerOptions SerializerOptions = new() { PropertyNameCaseInsensitive = true }; private readonly SearchApplicationInfo _applicationInfo; - private BitmapImageResult _bitmapLogo; + public WikiPreviewSearchApp() { @@ -99,9 +95,6 @@ public ValueTask HandleSearchResult(ISearchResult searchResult) public ValueTask LoadSearchApplicationAsync() { - var assembly = Assembly.GetExecutingAssembly(); - const string resourceName = "WikiPreview.Fluent.Plugin.Wikipedia-logo.png"; - _bitmapLogo = new BitmapImageResult(assembly.GetManifestResourceStream(resourceName)); return ValueTask.CompletedTask; } @@ -131,7 +124,7 @@ public async IAsyncEnumerable SearchAsync(SearchRequest searchReq _ = task.Result?.Query.Pages.ParallelForEachAsync(async entry => { WikiPreviewSearchResult wikiPreviewSearchResult = - await GenerateSearchResult(entry.Value, searchedText); + await Instance.GenerateSearchResult(entry.Value, searchedText); if (wikiPreviewSearchResult != null) await channel.Writer.WriteAsync(wikiPreviewSearchResult, CancellationToken.None) @@ -152,55 +145,7 @@ public async ValueTask GetSearchResultForId(object searchObjectId if (string.IsNullOrWhiteSpace(pageId)) return default; - string url = "https://en.wikipedia.org/w/api.php?action=query&prop=extracts|pageimages&pageids=" + - pageId + - "&explaintext&exintro&pilicense=any&pithumbsize=100&format=json"; - - using var httpClient = new HttpClient(); - httpClient.DefaultRequestHeaders.UserAgent.TryParseAdd(UserAgentString); - var wiki = await httpClient.GetFromJsonAsync(url, SerializerOptions); - if (wiki == null) return default; - - Dictionary.ValueCollection pages = wiki.Query.Pages.Values; - if (pages is { Count: 0 }) return default; - - PageView pageView = pages.First(); - return await GenerateSearchResult(pageView, pageView?.Title); - } - - private async ValueTask GenerateSearchResult(PageView value, - string searchedText) - { - string resultName = value.Extract; - string displayedName = value.Title; - double score = displayedName.SearchDistanceScore(searchedText); - string pageId = value.PageId.ToString(); - string wikiUrl = displayedName.Replace(' ', '_'); - BitmapImageResult bitmapImageResult; - - if (value.Thumbnail != null) - { - string imgUrl = value.Thumbnail.Source; - using var imageClient = new HttpClient(); - imageClient.DefaultRequestHeaders.UserAgent.TryParseAdd(UserAgentString); - Stream stream = await imageClient.GetStreamAsync(imgUrl); - bitmapImageResult = new BitmapImageResult(new Bitmap(stream)); - } - else - { - bitmapImageResult = _bitmapLogo; - } - - return new WikiPreviewSearchResult(resultName) - { - Url = wikiUrl, - PreviewImage = bitmapImageResult, - DisplayedName = displayedName, - SearchedText = searchedText, - Score = score, - SearchObjectId = pageId, - PinUniqueId = pageId - }; + return await Instance.GenerateOnDemand(pageId); } } } diff --git a/WikiPreview.Fluent.Plugin/WikiResult.cs b/WikiPreview.Fluent.Plugin/WikiResult.cs index 1c0d76c..88ef5f3 100644 --- a/WikiPreview.Fluent.Plugin/WikiResult.cs +++ b/WikiPreview.Fluent.Plugin/WikiResult.cs @@ -2,7 +2,7 @@ namespace WikiPreview.Fluent.Plugin { - internal static class WikiResult + public static class WikiResult { public class PageView { From 97bc11a2e5cfe6768b76ed407330fcb7c275a89d Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Fri, 17 Sep 2021 23:36:44 +0530 Subject: [PATCH 24/49] Improve checking --- WikiPreview.Fluent.Plugin/CustomPreview.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WikiPreview.Fluent.Plugin/CustomPreview.cs b/WikiPreview.Fluent.Plugin/CustomPreview.cs index 267699d..f46b5aa 100644 --- a/WikiPreview.Fluent.Plugin/CustomPreview.cs +++ b/WikiPreview.Fluent.Plugin/CustomPreview.cs @@ -55,7 +55,7 @@ public bool CanBuildPreviewForResult(ISearchResult searchResult) if (!result) return false; host = uri.Host[3..]; - return host.StartsWith("wikipedia.org"); + return host.StartsWith("wikipedia.org") && uri.Segments.Length > 1; } public ValueTask CreatePreviewControl(ISearchResult searchResult) From 6b40596241a54a98930169c492bea5209de2b1c9 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Sat, 18 Sep 2021 00:07:21 +0530 Subject: [PATCH 25/49] Add bitmap checking --- WikiPreview.Fluent.Plugin/CustomPreview.cs | 30 +++++++++++-------- .../WikiPreviewSearchApp.cs | 2 +- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/CustomPreview.cs b/WikiPreview.Fluent.Plugin/CustomPreview.cs index f46b5aa..00cadec 100644 --- a/WikiPreview.Fluent.Plugin/CustomPreview.cs +++ b/WikiPreview.Fluent.Plugin/CustomPreview.cs @@ -93,21 +93,25 @@ private static Control GeneratePreview(WikiPreviewSearchResult searchResult) if (searchResult.PreviewImage is { IsEmpty: false }) { Bitmap bitmap = searchResult.PreviewImage.ConvertToAvaloniaBitmap(); - var imageControl = new Border + + if (!bitmap.Dpi.IsDefault & !bitmap.Size.IsDefault) { - Background = new ImageBrush(bitmap) + var imageControl = new Border { - Stretch = Stretch.UniformToFill - }, - CornerRadius = new CornerRadius(5.0), - BorderThickness = new Thickness(5.0), - Height = bitmap.Size.Height, - Width = bitmap.Size.Width, - MaxHeight = FixedImageSize, - MaxWidth = FixedImageSize - }; - - stackPanel.Children.Add(imageControl); + Background = new ImageBrush(bitmap) + { + Stretch = Stretch.UniformToFill + }, + CornerRadius = new CornerRadius(5.0), + BorderThickness = new Thickness(5.0), + Height = bitmap.Size.Height, + Width = bitmap.Size.Width, + MaxHeight = FixedImageSize, + MaxWidth = FixedImageSize + }; + + stackPanel.Children.Add(imageControl); + } } // creates article content. diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs index 17170a0..704dc70 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs @@ -148,4 +148,4 @@ public async ValueTask GetSearchResultForId(object searchObjectId return await Instance.GenerateOnDemand(pageId); } } -} +} \ No newline at end of file From 44bf59a8d70404c1db03b94f2e5c9c445c1abd57 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Sun, 19 Sep 2021 12:51:05 +0530 Subject: [PATCH 26/49] Use DockPanel --- WikiPreview.Fluent.Plugin/CustomPreview.cs | 10 ++++++---- .../WikiPreviewSearchOperation.cs | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/CustomPreview.cs b/WikiPreview.Fluent.Plugin/CustomPreview.cs index 00cadec..08742f3 100644 --- a/WikiPreview.Fluent.Plugin/CustomPreview.cs +++ b/WikiPreview.Fluent.Plugin/CustomPreview.cs @@ -87,7 +87,7 @@ private static Control GeneratePreview(WikiPreviewSearchResult searchResult) text = Regex.Replace(text, @"\r\n?|\n", NewLine + NewLine); // StackPanel to store image and text. - var stackPanel = new StackPanel(); + var wikiDetails = new DockPanel(); // creates image control. if (searchResult.PreviewImage is { IsEmpty: false }) @@ -110,7 +110,8 @@ private static Control GeneratePreview(WikiPreviewSearchResult searchResult) MaxWidth = FixedImageSize }; - stackPanel.Children.Add(imageControl); + wikiDetails.Children.Add(imageControl); + imageControl.SetValue(DockPanel.DockProperty, Dock.Top); } } @@ -121,11 +122,11 @@ private static Control GeneratePreview(WikiPreviewSearchResult searchResult) TextTrimming = TextTrimming.WordEllipsis }; - stackPanel.Children.Add(wikiDescription); + wikiDetails.Children.Add(wikiDescription); var scrollViewer = new ScrollViewer { - Content = stackPanel, + Content = wikiDetails, VerticalScrollBarVisibility = ScrollBarVisibility.Hidden, Margin = new Thickness(0, 0, 0, 5) }; @@ -138,6 +139,7 @@ private static Control GeneratePreview(WikiPreviewSearchResult searchResult) { Margin = new Thickness(10.0, 0, 10, 10) }; + grid.RowDefinitions.Add(new RowDefinition()); grid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto }); grid.Children.Add(scrollViewer); diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchOperation.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchOperation.cs index 203fe5e..2710f0e 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchOperation.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchOperation.cs @@ -32,4 +32,4 @@ private WikiPreviewSearchOperation(ActionType actionType, string actionName, str public static WikiPreviewSearchOperation OpenGoogle { get; } = new(ActionType.GoogleSearch, "Search in Google", "Search with Google.", "\uE721"); } -} \ No newline at end of file +} From f95989de3e915407602573e26dcf6c3cd06965d8 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Sun, 19 Sep 2021 13:50:51 +0530 Subject: [PATCH 27/49] Improvements --- WikiPreview.Fluent.Plugin/CustomPreview.cs | 4 ++-- WikiPreview.Fluent.Plugin/ResultGenerator.cs | 9 +++++---- WikiPreview.Fluent.Plugin/WikiPreviewSearchOperation.cs | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/CustomPreview.cs b/WikiPreview.Fluent.Plugin/CustomPreview.cs index 08742f3..21ae01a 100644 --- a/WikiPreview.Fluent.Plugin/CustomPreview.cs +++ b/WikiPreview.Fluent.Plugin/CustomPreview.cs @@ -55,7 +55,7 @@ public bool CanBuildPreviewForResult(ISearchResult searchResult) if (!result) return false; host = uri.Host[3..]; - return host.StartsWith("wikipedia.org") && uri.Segments.Length > 1; + return host.StartsWith("wikipedia.org") && uri.Segments.Length > 1 && uri.Fragment.Length == 0; } public ValueTask CreatePreviewControl(ISearchResult searchResult) @@ -74,7 +74,7 @@ public ValueTask CreatePreviewControl(ISearchResult searchResult) private static async ValueTask GenerateElement(string pageName) { - WikiPreviewSearchResult searchResult = await Instance.GenerateOnDemand(pageName, true); + WikiPreviewSearchResult searchResult = await Instance.GenerateOnDemand(pageName, true, false); Control control = GeneratePreview(searchResult); return control; } diff --git a/WikiPreview.Fluent.Plugin/ResultGenerator.cs b/WikiPreview.Fluent.Plugin/ResultGenerator.cs index 28e656b..0502541 100644 --- a/WikiPreview.Fluent.Plugin/ResultGenerator.cs +++ b/WikiPreview.Fluent.Plugin/ResultGenerator.cs @@ -31,7 +31,7 @@ private ResultGenerator() public static ResultGenerator Instance => LazySingleton.Value; public async ValueTask GenerateSearchResult(PageView value, - string searchedText) + string searchedText, bool loadImage = true) { string resultName = value.Extract; string displayedName = value.Title; @@ -40,7 +40,7 @@ public async ValueTask GenerateSearchResult(PageView va string wikiUrl = displayedName.Replace(' ', '_'); BitmapImageResult bitmapImageResult; - if (value.Thumbnail != null) + if (value.Thumbnail != null && loadImage) { string imgUrl = value.Thumbnail.Source; using var imageClient = new HttpClient(); @@ -66,7 +66,8 @@ public async ValueTask GenerateSearchResult(PageView va }; } - public async ValueTask GenerateOnDemand(string searchId, bool isCustomPreview = false) + public async ValueTask GenerateOnDemand(string searchId, bool isCustomPreview = false, + bool loadImage = true) { if (string.IsNullOrWhiteSpace(searchId)) return default; @@ -86,7 +87,7 @@ public async ValueTask GenerateOnDemand(string searchId if (pages is { Count: 0 }) return default; PageView pageView = pages.First(); - return await GenerateSearchResult(pageView, pageView?.Title); + return await GenerateSearchResult(pageView, pageView?.Title, loadImage); } } } diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchOperation.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchOperation.cs index 2710f0e..203fe5e 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchOperation.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchOperation.cs @@ -32,4 +32,4 @@ private WikiPreviewSearchOperation(ActionType actionType, string actionName, str public static WikiPreviewSearchOperation OpenGoogle { get; } = new(ActionType.GoogleSearch, "Search in Google", "Search with Google.", "\uE721"); } -} +} \ No newline at end of file From 435ff7dcc44c841373a9637e2c1cfc6b18d54a62 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Sun, 19 Sep 2021 15:00:07 +0530 Subject: [PATCH 28/49] Improve error checking --- WikiPreview.Fluent.Plugin/CustomPreview.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/WikiPreview.Fluent.Plugin/CustomPreview.cs b/WikiPreview.Fluent.Plugin/CustomPreview.cs index 21ae01a..15175b8 100644 --- a/WikiPreview.Fluent.Plugin/CustomPreview.cs +++ b/WikiPreview.Fluent.Plugin/CustomPreview.cs @@ -75,6 +75,9 @@ public ValueTask CreatePreviewControl(ISearchResult searchResult) private static async ValueTask GenerateElement(string pageName) { WikiPreviewSearchResult searchResult = await Instance.GenerateOnDemand(pageName, true, false); + + if (searchResult == null || string.IsNullOrWhiteSpace(searchResult.ResultName)) return default; + Control control = GeneratePreview(searchResult); return control; } From 5adb8133aec150dc79de994c65efb9162111f63f Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Sun, 19 Sep 2021 17:38:43 +0530 Subject: [PATCH 29/49] Improving Valid URLs checking --- WikiPreview.Fluent.Plugin/CustomPreview.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WikiPreview.Fluent.Plugin/CustomPreview.cs b/WikiPreview.Fluent.Plugin/CustomPreview.cs index 15175b8..58670a1 100644 --- a/WikiPreview.Fluent.Plugin/CustomPreview.cs +++ b/WikiPreview.Fluent.Plugin/CustomPreview.cs @@ -55,7 +55,7 @@ public bool CanBuildPreviewForResult(ISearchResult searchResult) if (!result) return false; host = uri.Host[3..]; - return host.StartsWith("wikipedia.org") && uri.Segments.Length > 1 && uri.Fragment.Length == 0; + return host.StartsWith("wikipedia.org") && uri.Segments.Length == 3 && uri.Fragment.Length == 0; } public ValueTask CreatePreviewControl(ISearchResult searchResult) From 698feb3e4053f513a74f3a284dbd29c8098348e9 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Mon, 20 Sep 2021 20:52:19 +0530 Subject: [PATCH 30/49] Add settings --- .../QueryConfiguration.cs | 3 ++- WikiPreview.Fluent.Plugin/ResultGenerator.cs | 2 +- .../WikiPreviewSearchApp.cs | 13 ++++++++--- .../WikiPreviewSearchResult.cs | 13 ++++++++--- WikiPreview.Fluent.Plugin/WikiSettings.cs | 22 +++++++++++++++++++ 5 files changed, 45 insertions(+), 8 deletions(-) create mode 100644 WikiPreview.Fluent.Plugin/WikiSettings.cs diff --git a/WikiPreview.Fluent.Plugin/QueryConfiguration.cs b/WikiPreview.Fluent.Plugin/QueryConfiguration.cs index 4110ad9..8dc63c4 100644 --- a/WikiPreview.Fluent.Plugin/QueryConfiguration.cs +++ b/WikiPreview.Fluent.Plugin/QueryConfiguration.cs @@ -6,5 +6,6 @@ public class QueryConfiguration public int WikiNameSpace { get; set; } public int ResultsCount { get; set; } public int ImageSize { get; set; } + public bool LoadImage { get; set; } } -} \ No newline at end of file +} diff --git a/WikiPreview.Fluent.Plugin/ResultGenerator.cs b/WikiPreview.Fluent.Plugin/ResultGenerator.cs index 0502541..3688a8b 100644 --- a/WikiPreview.Fluent.Plugin/ResultGenerator.cs +++ b/WikiPreview.Fluent.Plugin/ResultGenerator.cs @@ -90,4 +90,4 @@ public async ValueTask GenerateOnDemand(string searchId return await GenerateSearchResult(pageView, pageView?.Title, loadImage); } } -} +} \ No newline at end of file diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs index 704dc70..1a224aa 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs @@ -26,7 +26,7 @@ internal class WikiPreviewSearchApp : ISearchApplication public const string UserAgentString = "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"; public static readonly JsonSerializerOptions SerializerOptions = new() { PropertyNameCaseInsensitive = true }; private readonly SearchApplicationInfo _applicationInfo; - + private readonly WikiSettings _wikiSettings; public WikiPreviewSearchApp() { @@ -42,6 +42,8 @@ public WikiPreviewSearchApp() DefaultSearchTags = SearchTags, PluginName = "Wikipedia Preview" }; + + _applicationInfo.SettingsPage = _wikiSettings = new WikiSettings(_applicationInfo); } public SearchApplicationInfo GetApplicationInfo() @@ -110,8 +112,13 @@ public async IAsyncEnumerable SearchAsync(SearchRequest searchReq string.IsNullOrWhiteSpace(searchedText)) yield break; + // Wiki Namespace set to 0 for searching in main articles only. QueryConfiguration queryConfiguration = new() - { SearchTerm = searchedText, WikiNameSpace = 0, ImageSize = FixedImageSize, ResultsCount = 8 }; + { + SearchTerm = searchedText, WikiNameSpace = 0, ImageSize = FixedImageSize, + ResultsCount = _wikiSettings.MaxResults, LoadImage = _wikiSettings.LoadImages + }; + string url = GetFormattedUrl(queryConfiguration); using var httpClient = new HttpClient(); httpClient.DefaultRequestHeaders.UserAgent.TryParseAdd(UserAgentString); @@ -148,4 +155,4 @@ public async ValueTask GetSearchResultForId(object searchObjectId return await Instance.GenerateOnDemand(pageId); } } -} \ No newline at end of file +} diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs index 91fffd5..e7c69d1 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs @@ -67,8 +67,15 @@ public static string GetFormattedUrl(QueryConfiguration queryConfiguration) builder.Append("&gsrlimit="); builder.Append(queryConfiguration.ResultsCount); - builder.Append("&prop=pageimages|extracts&exintro&explaintext&pilicense=any&format=json&pithumbsize="); - builder.Append(queryConfiguration.ImageSize); + if (queryConfiguration.LoadImage) + { + builder.Append("&prop=pageimages|extracts&exintro&explaintext&pilicense=any&format=json&pithumbsize="); + builder.Append(queryConfiguration.ImageSize); + } + else + { + builder.Append("&prop=extracts&exintro&explaintext&format=json"); + } return builder.ToString(); } @@ -78,4 +85,4 @@ protected override void OnSelectedSearchResultChanged() // Empty } } -} \ No newline at end of file +} diff --git a/WikiPreview.Fluent.Plugin/WikiSettings.cs b/WikiPreview.Fluent.Plugin/WikiSettings.cs new file mode 100644 index 0000000..9aaba1e --- /dev/null +++ b/WikiPreview.Fluent.Plugin/WikiSettings.cs @@ -0,0 +1,22 @@ +using Blast.API.Settings; +using Blast.Core.Objects; +using static WikiPreview.Fluent.Plugin.WikiPreviewSearchResult; + +namespace WikiPreview.Fluent.Plugin +{ + public class WikiSettings : SearchApplicationSettingsPage + { + public WikiSettings(SearchApplicationInfo applicationInfo) : base(applicationInfo) + { + } + + [Setting(Name = "Max Results", Description = "Control number of results from Wikipedia", MinValue = 1, + MaxValue = 30, + DefaultValue = 8, IconGlyph = SearchResultIcon)] + public int MaxResults { get; set; } + + [Setting(Name = "Load Images", Description = "Whether to retrieve and load images from Wikipedia", + DefaultValue = true, IconGlyph = "\uEB9F")] + public bool LoadImages { get; set; } + } +} From dfd8dd46869492b0da81f6dc674c64c79213baf7 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Mon, 20 Sep 2021 21:20:04 +0530 Subject: [PATCH 31/49] Add more settings --- WikiPreview.Fluent.Plugin/CustomPreview.cs | 6 +++--- WikiPreview.Fluent.Plugin/QueryConfiguration.cs | 2 +- WikiPreview.Fluent.Plugin/ResultGenerator.cs | 14 +++++++++++++- WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs | 3 ++- .../WikiPreviewSearchResult.cs | 3 +-- WikiPreview.Fluent.Plugin/WikiSettings.cs | 6 ++++++ 6 files changed, 26 insertions(+), 8 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/CustomPreview.cs b/WikiPreview.Fluent.Plugin/CustomPreview.cs index 58670a1..ba54ab2 100644 --- a/WikiPreview.Fluent.Plugin/CustomPreview.cs +++ b/WikiPreview.Fluent.Plugin/CustomPreview.cs @@ -109,8 +109,8 @@ private static Control GeneratePreview(WikiPreviewSearchResult searchResult) BorderThickness = new Thickness(5.0), Height = bitmap.Size.Height, Width = bitmap.Size.Width, - MaxHeight = FixedImageSize, - MaxWidth = FixedImageSize + MaxHeight = Instance.GetImageSize(), + MaxWidth = Instance.GetImageSize() }; wikiDetails.Children.Add(imageControl); @@ -215,4 +215,4 @@ private static void ButtonOnClick(object sender, RoutedEventArgs e) else if (buttonContent.Contains(CopyStr)) Clipboard.SetText(buttonTag); } } -} +} \ No newline at end of file diff --git a/WikiPreview.Fluent.Plugin/QueryConfiguration.cs b/WikiPreview.Fluent.Plugin/QueryConfiguration.cs index 8dc63c4..a995403 100644 --- a/WikiPreview.Fluent.Plugin/QueryConfiguration.cs +++ b/WikiPreview.Fluent.Plugin/QueryConfiguration.cs @@ -8,4 +8,4 @@ public class QueryConfiguration public int ImageSize { get; set; } public bool LoadImage { get; set; } } -} +} \ No newline at end of file diff --git a/WikiPreview.Fluent.Plugin/ResultGenerator.cs b/WikiPreview.Fluent.Plugin/ResultGenerator.cs index 3688a8b..d812303 100644 --- a/WikiPreview.Fluent.Plugin/ResultGenerator.cs +++ b/WikiPreview.Fluent.Plugin/ResultGenerator.cs @@ -28,8 +28,20 @@ private ResultGenerator() _bitmapLogo = new BitmapImageResult(assembly.GetManifestResourceStream(resourceName)); } + private int ImageSize { get; set; } + public static ResultGenerator Instance => LazySingleton.Value; + public int GetImageSize() + { + return ImageSize; + } + + public void SetImageSize(int size) + { + ImageSize = size; + } + public async ValueTask GenerateSearchResult(PageView value, string searchedText, bool loadImage = true) { @@ -90,4 +102,4 @@ public async ValueTask GenerateOnDemand(string searchId return await GenerateSearchResult(pageView, pageView?.Title, loadImage); } } -} \ No newline at end of file +} diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs index 1a224aa..1a429af 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs @@ -97,6 +97,7 @@ public ValueTask HandleSearchResult(ISearchResult searchResult) public ValueTask LoadSearchApplicationAsync() { + Instance.SetImageSize(_wikiSettings.ImageSize); return ValueTask.CompletedTask; } @@ -115,7 +116,7 @@ public async IAsyncEnumerable SearchAsync(SearchRequest searchReq // Wiki Namespace set to 0 for searching in main articles only. QueryConfiguration queryConfiguration = new() { - SearchTerm = searchedText, WikiNameSpace = 0, ImageSize = FixedImageSize, + SearchTerm = searchedText, WikiNameSpace = 0, ImageSize = _wikiSettings.ImageSize, ResultsCount = _wikiSettings.MaxResults, LoadImage = _wikiSettings.LoadImages }; diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs index e7c69d1..b5952ce 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs @@ -17,7 +17,6 @@ public sealed class WikiPreviewSearchResult : SearchResultBase public const string SearchResultIcon = "\uEDE4"; public const string TagDescription = "Search in Wikipedia"; public const string CopyContentsStr = "Copy Contents"; - public const int FixedImageSize = 150; public static readonly ObservableCollection SupportedOperationCollections = new() @@ -85,4 +84,4 @@ protected override void OnSelectedSearchResultChanged() // Empty } } -} +} \ No newline at end of file diff --git a/WikiPreview.Fluent.Plugin/WikiSettings.cs b/WikiPreview.Fluent.Plugin/WikiSettings.cs index 9aaba1e..2df85ec 100644 --- a/WikiPreview.Fluent.Plugin/WikiSettings.cs +++ b/WikiPreview.Fluent.Plugin/WikiSettings.cs @@ -18,5 +18,11 @@ public WikiSettings(SearchApplicationInfo applicationInfo) : base(applicationInf [Setting(Name = "Load Images", Description = "Whether to retrieve and load images from Wikipedia", DefaultValue = true, IconGlyph = "\uEB9F")] public bool LoadImages { get; set; } + + [Setting(Name = "Max Image Size", + Description = "Sets the max image size shown in the Preview window", + DefaultValue = 150, IconGlyph = "\uE91B", MinValue = 80, MaxValue = 300, RequireRestart = true, + IsAdvanced = true)] + public int ImageSize { get; set; } } } From 6e34588befd89183719dc8144c006dea3d9aa43c Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Sat, 2 Oct 2021 15:24:30 +0530 Subject: [PATCH 32/49] Give default property values --- WikiPreview.Fluent.Plugin/WikiSettings.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/WikiSettings.cs b/WikiPreview.Fluent.Plugin/WikiSettings.cs index 2df85ec..448789e 100644 --- a/WikiPreview.Fluent.Plugin/WikiSettings.cs +++ b/WikiPreview.Fluent.Plugin/WikiSettings.cs @@ -13,16 +13,16 @@ public WikiSettings(SearchApplicationInfo applicationInfo) : base(applicationInf [Setting(Name = "Max Results", Description = "Control number of results from Wikipedia", MinValue = 1, MaxValue = 30, DefaultValue = 8, IconGlyph = SearchResultIcon)] - public int MaxResults { get; set; } + public int MaxResults { get; set; } = 8; [Setting(Name = "Load Images", Description = "Whether to retrieve and load images from Wikipedia", DefaultValue = true, IconGlyph = "\uEB9F")] - public bool LoadImages { get; set; } + public bool LoadImages { get; set; } = true; [Setting(Name = "Max Image Size", Description = "Sets the max image size shown in the Preview window", DefaultValue = 150, IconGlyph = "\uE91B", MinValue = 80, MaxValue = 300, RequireRestart = true, IsAdvanced = true)] - public int ImageSize { get; set; } + public int ImageSize { get; set; } = 150; } } From f2a855753f0bfdb6a96d22753d7e1abbbaf1224c Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Sat, 2 Oct 2021 15:35:45 +0530 Subject: [PATCH 33/49] Upgrade to .NET 6.0 --- WikiPreview.Fluent.Plugin/WikiPreview.Fluent.Plugin.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WikiPreview.Fluent.Plugin/WikiPreview.Fluent.Plugin.csproj b/WikiPreview.Fluent.Plugin/WikiPreview.Fluent.Plugin.csproj index 2dae116..827aab2 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreview.Fluent.Plugin.csproj +++ b/WikiPreview.Fluent.Plugin/WikiPreview.Fluent.Plugin.csproj @@ -1,7 +1,7 @@ - net5.0-windows10.0.19041 + net6.0 AnyCPU;x64 1.3.0.0 From 8e25fb5797bc0d783a60e9fa7b5f002eb72dd363 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Sun, 10 Oct 2021 23:22:18 +0530 Subject: [PATCH 34/49] ImageSize option without restart --- WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs | 5 +++++ WikiPreview.Fluent.Plugin/WikiSettings.cs | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs index 1a429af..e747231 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs @@ -113,6 +113,11 @@ public async IAsyncEnumerable SearchAsync(SearchRequest searchReq string.IsNullOrWhiteSpace(searchedText)) yield break; + // Change ImageSize in Singleton Instance whenever Settings has changed. + int currentImageSize = Instance.GetImageSize(); + int userSetSize = _wikiSettings.ImageSize; + if (currentImageSize != userSetSize) Instance.SetImageSize(userSetSize); + // Wiki Namespace set to 0 for searching in main articles only. QueryConfiguration queryConfiguration = new() { diff --git a/WikiPreview.Fluent.Plugin/WikiSettings.cs b/WikiPreview.Fluent.Plugin/WikiSettings.cs index 448789e..58cfb6a 100644 --- a/WikiPreview.Fluent.Plugin/WikiSettings.cs +++ b/WikiPreview.Fluent.Plugin/WikiSettings.cs @@ -21,7 +21,7 @@ public WikiSettings(SearchApplicationInfo applicationInfo) : base(applicationInf [Setting(Name = "Max Image Size", Description = "Sets the max image size shown in the Preview window", - DefaultValue = 150, IconGlyph = "\uE91B", MinValue = 80, MaxValue = 300, RequireRestart = true, + DefaultValue = 150, IconGlyph = "\uE91B", MinValue = 80, MaxValue = 300, IsAdvanced = true)] public int ImageSize { get; set; } = 150; } From 70f3d6bcfda34b9f0c631bb75d1506300421186e Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Sun, 10 Oct 2021 23:44:12 +0530 Subject: [PATCH 35/49] Verify resultName is null or empty. --- WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs | 6 +++++- WikiPreview.Fluent.Plugin/WikiSettings.cs | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs index b5952ce..7e380c8 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs @@ -47,6 +47,10 @@ public WikiPreviewSearchResult(string resultName) SupportedOperations = SupportedOperationCollections; IconGlyph = SearchResultIcon; ResultType = WikiSearchTagName; + + if (string.IsNullOrWhiteSpace(resultName)) + resultName = "Description not available for this Search Result."; + ResultName = resultName; ResultPreviewControlBuilder = _customPreview; } @@ -84,4 +88,4 @@ protected override void OnSelectedSearchResultChanged() // Empty } } -} \ No newline at end of file +} diff --git a/WikiPreview.Fluent.Plugin/WikiSettings.cs b/WikiPreview.Fluent.Plugin/WikiSettings.cs index 58cfb6a..2460f93 100644 --- a/WikiPreview.Fluent.Plugin/WikiSettings.cs +++ b/WikiPreview.Fluent.Plugin/WikiSettings.cs @@ -25,4 +25,4 @@ public WikiSettings(SearchApplicationInfo applicationInfo) : base(applicationInf IsAdvanced = true)] public int ImageSize { get; set; } = 150; } -} +} \ No newline at end of file From e7e2d9a7cd2bacfa9dd554a8faa00c316a5e2a6d Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Tue, 26 Oct 2021 10:49:43 +0530 Subject: [PATCH 36/49] Use static implementation instead of lazy --- WikiPreview.Fluent.Plugin/CustomPreview.cs | 8 ++--- WikiPreview.Fluent.Plugin/ResultGenerator.cs | 34 ++++++++----------- .../WikiPreviewSearchApp.cs | 10 +++--- .../WikiPreviewSearchResult.cs | 2 +- 4 files changed, 24 insertions(+), 30 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/CustomPreview.cs b/WikiPreview.Fluent.Plugin/CustomPreview.cs index ba54ab2..8023ab0 100644 --- a/WikiPreview.Fluent.Plugin/CustomPreview.cs +++ b/WikiPreview.Fluent.Plugin/CustomPreview.cs @@ -74,7 +74,7 @@ public ValueTask CreatePreviewControl(ISearchResult searchResult) private static async ValueTask GenerateElement(string pageName) { - WikiPreviewSearchResult searchResult = await Instance.GenerateOnDemand(pageName, true, false); + WikiPreviewSearchResult searchResult = await GenerateOnDemand(pageName, true, false); if (searchResult == null || string.IsNullOrWhiteSpace(searchResult.ResultName)) return default; @@ -109,8 +109,8 @@ private static Control GeneratePreview(WikiPreviewSearchResult searchResult) BorderThickness = new Thickness(5.0), Height = bitmap.Size.Height, Width = bitmap.Size.Width, - MaxHeight = Instance.GetImageSize(), - MaxWidth = Instance.GetImageSize() + MaxHeight = GetImageSize(), + MaxWidth = GetImageSize() }; wikiDetails.Children.Add(imageControl); @@ -215,4 +215,4 @@ private static void ButtonOnClick(object sender, RoutedEventArgs e) else if (buttonContent.Contains(CopyStr)) Clipboard.SetText(buttonTag); } } -} \ No newline at end of file +} diff --git a/WikiPreview.Fluent.Plugin/ResultGenerator.cs b/WikiPreview.Fluent.Plugin/ResultGenerator.cs index d812303..28ffea1 100644 --- a/WikiPreview.Fluent.Plugin/ResultGenerator.cs +++ b/WikiPreview.Fluent.Plugin/ResultGenerator.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Drawing; using System.IO; using System.Linq; @@ -14,35 +13,29 @@ namespace WikiPreview.Fluent.Plugin { - public sealed class ResultGenerator + public static class ResultGenerator { - private static readonly Lazy LazySingleton = - new(() => new ResultGenerator()); + private static readonly BitmapImageResult BitmapLogo; + private static int _imageSize; - private readonly BitmapImageResult _bitmapLogo; - - private ResultGenerator() + static ResultGenerator() { var assembly = Assembly.GetExecutingAssembly(); const string resourceName = "WikiPreview.Fluent.Plugin.Wikipedia-logo.png"; - _bitmapLogo = new BitmapImageResult(assembly.GetManifestResourceStream(resourceName)); + BitmapLogo = new BitmapImageResult(assembly.GetManifestResourceStream(resourceName)); } - private int ImageSize { get; set; } - - public static ResultGenerator Instance => LazySingleton.Value; - - public int GetImageSize() + public static int GetImageSize() { - return ImageSize; + return _imageSize; } - public void SetImageSize(int size) + public static void SetImageSize(int size) { - ImageSize = size; + _imageSize = size; } - public async ValueTask GenerateSearchResult(PageView value, + public static async ValueTask GenerateSearchResult(PageView value, string searchedText, bool loadImage = true) { string resultName = value.Extract; @@ -63,7 +56,7 @@ public async ValueTask GenerateSearchResult(PageView va } else { - bitmapImageResult = _bitmapLogo; + bitmapImageResult = BitmapLogo; } return new WikiPreviewSearchResult(resultName) @@ -78,7 +71,8 @@ public async ValueTask GenerateSearchResult(PageView va }; } - public async ValueTask GenerateOnDemand(string searchId, bool isCustomPreview = false, + public static async ValueTask GenerateOnDemand(string searchId, + bool isCustomPreview = false, bool loadImage = true) { if (string.IsNullOrWhiteSpace(searchId)) diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs index e747231..093d68f 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs @@ -97,7 +97,7 @@ public ValueTask HandleSearchResult(ISearchResult searchResult) public ValueTask LoadSearchApplicationAsync() { - Instance.SetImageSize(_wikiSettings.ImageSize); + SetImageSize(_wikiSettings.ImageSize); return ValueTask.CompletedTask; } @@ -114,9 +114,9 @@ public async IAsyncEnumerable SearchAsync(SearchRequest searchReq yield break; // Change ImageSize in Singleton Instance whenever Settings has changed. - int currentImageSize = Instance.GetImageSize(); + int currentImageSize = GetImageSize(); int userSetSize = _wikiSettings.ImageSize; - if (currentImageSize != userSetSize) Instance.SetImageSize(userSetSize); + if (currentImageSize != userSetSize) SetImageSize(userSetSize); // Wiki Namespace set to 0 for searching in main articles only. QueryConfiguration queryConfiguration = new() @@ -137,7 +137,7 @@ public async IAsyncEnumerable SearchAsync(SearchRequest searchReq _ = task.Result?.Query.Pages.ParallelForEachAsync(async entry => { WikiPreviewSearchResult wikiPreviewSearchResult = - await Instance.GenerateSearchResult(entry.Value, searchedText); + await GenerateSearchResult(entry.Value, searchedText); if (wikiPreviewSearchResult != null) await channel.Writer.WriteAsync(wikiPreviewSearchResult, CancellationToken.None) @@ -158,7 +158,7 @@ public async ValueTask GetSearchResultForId(object searchObjectId if (string.IsNullOrWhiteSpace(pageId)) return default; - return await Instance.GenerateOnDemand(pageId); + return await GenerateOnDemand(pageId); } } } diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs index 7e380c8..05b3ff0 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs @@ -88,4 +88,4 @@ protected override void OnSelectedSearchResultChanged() // Empty } } -} +} \ No newline at end of file From 2509796f2e52534f28bfdc5b032f1f4ecebb51c0 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Tue, 26 Oct 2021 17:12:30 +0530 Subject: [PATCH 37/49] Upgrade nugets --- .../WikiPreview.Fluent.Plugin.csproj | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/WikiPreview.Fluent.Plugin.csproj b/WikiPreview.Fluent.Plugin/WikiPreview.Fluent.Plugin.csproj index 827aab2..62390ea 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreview.Fluent.Plugin.csproj +++ b/WikiPreview.Fluent.Plugin/WikiPreview.Fluent.Plugin.csproj @@ -7,14 +7,12 @@ - - - + + - - + From d07875f0bc909d695da9eb092386647228c2903d Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Tue, 26 Oct 2021 17:15:18 +0530 Subject: [PATCH 38/49] Rename CustomPreview to WikiResultPreviewControlBuilder --- WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs | 4 ++-- .../{CustomPreview.cs => WikiResultPreviewControlBuilder.cs} | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) rename WikiPreview.Fluent.Plugin/{CustomPreview.cs => WikiResultPreviewControlBuilder.cs} (98%) diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs index 05b3ff0..3e426a2 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs @@ -39,7 +39,7 @@ public static readonly ObservableCollection SupportedOperation } }; - private readonly CustomPreview _customPreview = new(); + private readonly WikiResultPreviewControlBuilder _wikiResultPreviewControlBuilder = new(); public WikiPreviewSearchResult(string resultName) { @@ -52,7 +52,7 @@ public WikiPreviewSearchResult(string resultName) resultName = "Description not available for this Search Result."; ResultName = resultName; - ResultPreviewControlBuilder = _customPreview; + ResultPreviewControlBuilder = _wikiResultPreviewControlBuilder; } public string Url { get; set; } diff --git a/WikiPreview.Fluent.Plugin/CustomPreview.cs b/WikiPreview.Fluent.Plugin/WikiResultPreviewControlBuilder.cs similarity index 98% rename from WikiPreview.Fluent.Plugin/CustomPreview.cs rename to WikiPreview.Fluent.Plugin/WikiResultPreviewControlBuilder.cs index 8023ab0..c00c290 100644 --- a/WikiPreview.Fluent.Plugin/CustomPreview.cs +++ b/WikiPreview.Fluent.Plugin/WikiResultPreviewControlBuilder.cs @@ -23,13 +23,13 @@ namespace WikiPreview.Fluent.Plugin { - public class CustomPreview : IResultPreviewControlBuilder + public class WikiResultPreviewControlBuilder : IResultPreviewControlBuilder { private const string GoogleStr = "Search Google"; private const string WikipediaStr = "Wikipedia"; private const string CopyStr = "Copy Text"; - public CustomPreview() + public WikiResultPreviewControlBuilder() { PreviewBuilderDescriptor = new PreviewBuilderDescriptor { From 42d7cbd708eb5a7ab552e078dffd5eae59359618 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Tue, 26 Oct 2021 17:24:10 +0530 Subject: [PATCH 39/49] Code Improvements --- WikiPreview.Fluent.Plugin/ResultGenerator.cs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/ResultGenerator.cs b/WikiPreview.Fluent.Plugin/ResultGenerator.cs index 28ffea1..7275479 100644 --- a/WikiPreview.Fluent.Plugin/ResultGenerator.cs +++ b/WikiPreview.Fluent.Plugin/ResultGenerator.cs @@ -21,7 +21,7 @@ public static class ResultGenerator static ResultGenerator() { var assembly = Assembly.GetExecutingAssembly(); - const string resourceName = "WikiPreview.Fluent.Plugin.Wikipedia-logo.png"; + string resourceName = "WikiPreview.Fluent.Plugin.Wikipedia-logo.png"; BitmapLogo = new BitmapImageResult(assembly.GetManifestResourceStream(resourceName)); } @@ -40,7 +40,7 @@ public static async ValueTask GenerateSearchResult(Page { string resultName = value.Extract; string displayedName = value.Title; - double score = displayedName.SearchDistanceScore(searchedText); + double score = displayedName.SearchTokens(searchedText); string pageId = value.PageId.ToString(); string wikiUrl = displayedName.Replace(' ', '_'); BitmapImageResult bitmapImageResult; @@ -87,12 +87,11 @@ public static async ValueTask GenerateOnDemand(string s using var httpClient = new HttpClient(); httpClient.DefaultRequestHeaders.UserAgent.TryParseAdd(UserAgentString); var wiki = await httpClient.GetFromJsonAsync(url, SerializerOptions); - if (wiki == null) return default; - Dictionary.ValueCollection pages = wiki.Query.Pages.Values; + Dictionary.ValueCollection pages = wiki?.Query?.Pages?.Values; if (pages is { Count: 0 }) return default; - PageView pageView = pages.First(); + PageView pageView = pages?.First(); return await GenerateSearchResult(pageView, pageView?.Title, loadImage); } } From f73156653de6f46b0ea26fddf67bb76782a0480f Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Tue, 26 Oct 2021 20:25:59 +0530 Subject: [PATCH 40/49] Code Improvements --- WikiPreview.Fluent.Plugin/ResultGenerator.cs | 4 ++-- .../WikiPreview.Fluent.Plugin.csproj | 6 +++--- WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs | 10 +++++----- .../WikiResultPreviewControlBuilder.cs | 11 +++++------ 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/ResultGenerator.cs b/WikiPreview.Fluent.Plugin/ResultGenerator.cs index 7275479..90fab72 100644 --- a/WikiPreview.Fluent.Plugin/ResultGenerator.cs +++ b/WikiPreview.Fluent.Plugin/ResultGenerator.cs @@ -25,12 +25,12 @@ static ResultGenerator() BitmapLogo = new BitmapImageResult(assembly.GetManifestResourceStream(resourceName)); } - public static int GetImageSize() + public static int GetWikiImageSize() { return _imageSize; } - public static void SetImageSize(int size) + public static void SetWikiImageSize(int size) { _imageSize = size; } diff --git a/WikiPreview.Fluent.Plugin/WikiPreview.Fluent.Plugin.csproj b/WikiPreview.Fluent.Plugin/WikiPreview.Fluent.Plugin.csproj index 62390ea..284e2b6 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreview.Fluent.Plugin.csproj +++ b/WikiPreview.Fluent.Plugin/WikiPreview.Fluent.Plugin.csproj @@ -7,12 +7,12 @@ - - + + - + diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs index 093d68f..aa9df41 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs @@ -97,7 +97,7 @@ public ValueTask HandleSearchResult(ISearchResult searchResult) public ValueTask LoadSearchApplicationAsync() { - SetImageSize(_wikiSettings.ImageSize); + SetWikiImageSize(_wikiSettings.ImageSize); return ValueTask.CompletedTask; } @@ -113,15 +113,15 @@ public async IAsyncEnumerable SearchAsync(SearchRequest searchReq string.IsNullOrWhiteSpace(searchedText)) yield break; - // Change ImageSize in Singleton Instance whenever Settings has changed. - int currentImageSize = GetImageSize(); + // Change ImageSize in Singleton Instance whenever User Settings has been changed. + int currentImageSize = GetWikiImageSize(); int userSetSize = _wikiSettings.ImageSize; - if (currentImageSize != userSetSize) SetImageSize(userSetSize); + if (currentImageSize != userSetSize) SetWikiImageSize(userSetSize); // Wiki Namespace set to 0 for searching in main articles only. QueryConfiguration queryConfiguration = new() { - SearchTerm = searchedText, WikiNameSpace = 0, ImageSize = _wikiSettings.ImageSize, + SearchTerm = searchedText, WikiNameSpace = 0, ImageSize = userSetSize, ResultsCount = _wikiSettings.MaxResults, LoadImage = _wikiSettings.LoadImages }; diff --git a/WikiPreview.Fluent.Plugin/WikiResultPreviewControlBuilder.cs b/WikiPreview.Fluent.Plugin/WikiResultPreviewControlBuilder.cs index c00c290..72d0711 100644 --- a/WikiPreview.Fluent.Plugin/WikiResultPreviewControlBuilder.cs +++ b/WikiPreview.Fluent.Plugin/WikiResultPreviewControlBuilder.cs @@ -41,10 +41,9 @@ public WikiResultPreviewControlBuilder() public bool CanBuildPreviewForResult(ISearchResult searchResult) { - if (string.IsNullOrWhiteSpace(searchResult.SearchApp)) return false; - - if (searchResult.SearchApp.Equals(SearchAppName, - StringComparison.OrdinalIgnoreCase)) return true; + string appName = searchResult?.SearchApp; + if (!string.Equals(appName, SearchAppName, + StringComparison.OrdinalIgnoreCase)) return false; string host = searchResult.Context; if (string.IsNullOrWhiteSpace(host)) return false; @@ -109,8 +108,8 @@ private static Control GeneratePreview(WikiPreviewSearchResult searchResult) BorderThickness = new Thickness(5.0), Height = bitmap.Size.Height, Width = bitmap.Size.Width, - MaxHeight = GetImageSize(), - MaxWidth = GetImageSize() + MaxHeight = GetWikiImageSize(), + MaxWidth = GetWikiImageSize() }; wikiDetails.Children.Add(imageControl); From 0cdd2b616382c4ace3007799bbdd3f371b3cbea8 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Tue, 26 Oct 2021 21:21:35 +0530 Subject: [PATCH 41/49] Code Improvements --- WikiPreview.Fluent.Plugin/ResultGenerator.cs | 28 ++++++++++++------- .../WikiPreviewSearchApp.cs | 8 +++--- .../WikiResultPreviewControlBuilder.cs | 7 +++-- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/ResultGenerator.cs b/WikiPreview.Fluent.Plugin/ResultGenerator.cs index 90fab72..c00c921 100644 --- a/WikiPreview.Fluent.Plugin/ResultGenerator.cs +++ b/WikiPreview.Fluent.Plugin/ResultGenerator.cs @@ -13,26 +13,32 @@ namespace WikiPreview.Fluent.Plugin { + /// + /// A static class that stores the common methods to generate search results. + /// Also stores and initializes WikipediaLogo which will be used as placeholder for Wiki Results with no images. + /// Stores the Image Size (set in FS Plugin Settings) and is used across multiple places. + /// public static class ResultGenerator { - private static readonly BitmapImageResult BitmapLogo; - private static int _imageSize; + private static readonly BitmapImageResult WikipediaLogo; + private static int _imageSizePrefs; static ResultGenerator() { var assembly = Assembly.GetExecutingAssembly(); - string resourceName = "WikiPreview.Fluent.Plugin.Wikipedia-logo.png"; - BitmapLogo = new BitmapImageResult(assembly.GetManifestResourceStream(resourceName)); + WikipediaLogo = + new BitmapImageResult( + assembly.GetManifestResourceStream("WikiPreview.Fluent.Plugin.Wikipedia-logo.png")); } - public static int GetWikiImageSize() + public static int GetImageSizePrefs() { - return _imageSize; + return _imageSizePrefs; } - public static void SetWikiImageSize(int size) + public static void SetImageSizePrefs(int size) { - _imageSize = size; + _imageSizePrefs = size; } public static async ValueTask GenerateSearchResult(PageView value, @@ -51,12 +57,14 @@ public static async ValueTask GenerateSearchResult(Page using var imageClient = new HttpClient(); imageClient.DefaultRequestHeaders.UserAgent.TryParseAdd(UserAgentString); Stream stream = await imageClient.GetStreamAsync(imgUrl); - var bitmap = new Bitmap(stream); +#pragma warning disable CA1416 + var bitmap = new Bitmap(stream); // Wiki Images are not working with AvaloniaBitmap as of now. +#pragma warning restore CA1416 bitmapImageResult = new BitmapImageResult(bitmap); } else { - bitmapImageResult = BitmapLogo; + bitmapImageResult = WikipediaLogo; } return new WikiPreviewSearchResult(resultName) diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs index aa9df41..0f8c9e2 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchApp.cs @@ -97,7 +97,7 @@ public ValueTask HandleSearchResult(ISearchResult searchResult) public ValueTask LoadSearchApplicationAsync() { - SetWikiImageSize(_wikiSettings.ImageSize); + SetImageSizePrefs(_wikiSettings.ImageSize); return ValueTask.CompletedTask; } @@ -114,9 +114,9 @@ public async IAsyncEnumerable SearchAsync(SearchRequest searchReq yield break; // Change ImageSize in Singleton Instance whenever User Settings has been changed. - int currentImageSize = GetWikiImageSize(); + int currentImageSize = GetImageSizePrefs(); int userSetSize = _wikiSettings.ImageSize; - if (currentImageSize != userSetSize) SetWikiImageSize(userSetSize); + if (currentImageSize != userSetSize) SetImageSizePrefs(userSetSize); // Wiki Namespace set to 0 for searching in main articles only. QueryConfiguration queryConfiguration = new() @@ -161,4 +161,4 @@ public async ValueTask GetSearchResultForId(object searchObjectId return await GenerateOnDemand(pageId); } } -} +} \ No newline at end of file diff --git a/WikiPreview.Fluent.Plugin/WikiResultPreviewControlBuilder.cs b/WikiPreview.Fluent.Plugin/WikiResultPreviewControlBuilder.cs index 72d0711..f35bf2f 100644 --- a/WikiPreview.Fluent.Plugin/WikiResultPreviewControlBuilder.cs +++ b/WikiPreview.Fluent.Plugin/WikiResultPreviewControlBuilder.cs @@ -23,6 +23,9 @@ namespace WikiPreview.Fluent.Plugin { + /// + /// Builds a custom preview for Wiki Results. + /// public class WikiResultPreviewControlBuilder : IResultPreviewControlBuilder { private const string GoogleStr = "Search Google"; @@ -108,8 +111,8 @@ private static Control GeneratePreview(WikiPreviewSearchResult searchResult) BorderThickness = new Thickness(5.0), Height = bitmap.Size.Height, Width = bitmap.Size.Width, - MaxHeight = GetWikiImageSize(), - MaxWidth = GetWikiImageSize() + MaxHeight = GetImageSizePrefs(), + MaxWidth = GetImageSizePrefs() }; wikiDetails.Children.Add(imageControl); From 89fff3c97e8d8af9d3850e4bf699305cdd741953 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Tue, 26 Oct 2021 21:55:03 +0530 Subject: [PATCH 42/49] Null safety --- WikiPreview.Fluent.Plugin/ResultGenerator.cs | 9 +++++++-- WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs | 6 +----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/ResultGenerator.cs b/WikiPreview.Fluent.Plugin/ResultGenerator.cs index c00c921..f66bce0 100644 --- a/WikiPreview.Fluent.Plugin/ResultGenerator.cs +++ b/WikiPreview.Fluent.Plugin/ResultGenerator.cs @@ -44,10 +44,15 @@ public static void SetImageSizePrefs(int size) public static async ValueTask GenerateSearchResult(PageView value, string searchedText, bool loadImage = true) { + string displayedName = value?.Title; + string pageId = value?.PageId.ToString(); + if (string.IsNullOrWhiteSpace(displayedName) || string.IsNullOrWhiteSpace(pageId)) return null; + string resultName = value.Extract; - string displayedName = value.Title; + if (string.IsNullOrWhiteSpace(resultName)) + resultName = "Description not available for this Search Result."; + double score = displayedName.SearchTokens(searchedText); - string pageId = value.PageId.ToString(); string wikiUrl = displayedName.Replace(' ', '_'); BitmapImageResult bitmapImageResult; diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs index 3e426a2..b42899e 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs @@ -47,10 +47,6 @@ public WikiPreviewSearchResult(string resultName) SupportedOperations = SupportedOperationCollections; IconGlyph = SearchResultIcon; ResultType = WikiSearchTagName; - - if (string.IsNullOrWhiteSpace(resultName)) - resultName = "Description not available for this Search Result."; - ResultName = resultName; ResultPreviewControlBuilder = _wikiResultPreviewControlBuilder; } @@ -88,4 +84,4 @@ protected override void OnSelectedSearchResultChanged() // Empty } } -} \ No newline at end of file +} From d80cb5f35e4798a629ad571af446ac028a56b6a9 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Tue, 26 Oct 2021 22:14:39 +0530 Subject: [PATCH 43/49] Improve overall readability. --- WikiPreview.Fluent.Plugin/ResultGenerator.cs | 4 +-- .../WikiResultPreviewControlBuilder.cs | 26 +++++++++---------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/ResultGenerator.cs b/WikiPreview.Fluent.Plugin/ResultGenerator.cs index f66bce0..352fced 100644 --- a/WikiPreview.Fluent.Plugin/ResultGenerator.cs +++ b/WikiPreview.Fluent.Plugin/ResultGenerator.cs @@ -46,7 +46,7 @@ public static async ValueTask GenerateSearchResult(Page { string displayedName = value?.Title; string pageId = value?.PageId.ToString(); - if (string.IsNullOrWhiteSpace(displayedName) || string.IsNullOrWhiteSpace(pageId)) return null; + if (string.IsNullOrWhiteSpace(pageId) || string.IsNullOrWhiteSpace(displayedName)) return null; string resultName = value.Extract; if (string.IsNullOrWhiteSpace(resultName)) @@ -56,7 +56,7 @@ public static async ValueTask GenerateSearchResult(Page string wikiUrl = displayedName.Replace(' ', '_'); BitmapImageResult bitmapImageResult; - if (value.Thumbnail != null && loadImage) + if (loadImage && value.Thumbnail != null) { string imgUrl = value.Thumbnail.Source; using var imageClient = new HttpClient(); diff --git a/WikiPreview.Fluent.Plugin/WikiResultPreviewControlBuilder.cs b/WikiPreview.Fluent.Plugin/WikiResultPreviewControlBuilder.cs index f35bf2f..954cc2d 100644 --- a/WikiPreview.Fluent.Plugin/WikiResultPreviewControlBuilder.cs +++ b/WikiPreview.Fluent.Plugin/WikiResultPreviewControlBuilder.cs @@ -78,7 +78,7 @@ private static async ValueTask GenerateElement(string pageName) { WikiPreviewSearchResult searchResult = await GenerateOnDemand(pageName, true, false); - if (searchResult == null || string.IsNullOrWhiteSpace(searchResult.ResultName)) return default; + if (string.IsNullOrWhiteSpace(searchResult?.ResultName)) return default; Control control = GeneratePreview(searchResult); return control; @@ -97,20 +97,20 @@ private static Control GeneratePreview(WikiPreviewSearchResult searchResult) // creates image control. if (searchResult.PreviewImage is { IsEmpty: false }) { - Bitmap bitmap = searchResult.PreviewImage.ConvertToAvaloniaBitmap(); + Bitmap wikiBitmap = searchResult.PreviewImage.ConvertToAvaloniaBitmap(); - if (!bitmap.Dpi.IsDefault & !bitmap.Size.IsDefault) + if (wikiBitmap is { Size: { IsDefault: false } }) { var imageControl = new Border { - Background = new ImageBrush(bitmap) + Background = new ImageBrush(wikiBitmap) { Stretch = Stretch.UniformToFill }, CornerRadius = new CornerRadius(5.0), BorderThickness = new Thickness(5.0), - Height = bitmap.Size.Height, - Width = bitmap.Size.Width, + Height = wikiBitmap.Size.Height, + Width = wikiBitmap.Size.Width, MaxHeight = GetImageSizePrefs(), MaxWidth = GetImageSizePrefs() }; @@ -149,9 +149,9 @@ private static Control GeneratePreview(WikiPreviewSearchResult searchResult) grid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto }); grid.Children.Add(scrollViewer); - Button openWiki = CreateButton(WikipediaStr, searchResult.Url); - Button searchGoogle = CreateButton(GoogleStr, searchResult.DisplayedName); - Button copyContents = CreateButton(CopyStr, text); + Button openWiki = CreateOperationButton(WikipediaStr, searchResult.Url); + Button searchGoogle = CreateOperationButton(GoogleStr, searchResult.DisplayedName); + Button copyContents = CreateOperationButton(CopyStr, text); var uniformGrid = new UniformGrid { @@ -182,7 +182,7 @@ private static void ScrollViewerOnPointerEnter(object sender, PointerEventArgs e scrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Auto; } - private static Button CreateButton(string text, string tag) + private static Button CreateOperationButton(string text, string tag) { var button = new Button { @@ -194,19 +194,17 @@ private static Button CreateButton(string text, string tag) [!TemplatedControl.BackgroundProperty] = new DynamicResourceExtension("TextControlBackground") }; - button.Click += ButtonOnClick; + button.Click += ExecuteOperations; return button; } - private static void ButtonOnClick(object sender, RoutedEventArgs e) + private static void ExecuteOperations(object sender, RoutedEventArgs e) { var button = sender as Button; string buttonContent = button?.Content.ToString(); - if (string.IsNullOrWhiteSpace(buttonContent)) return; string buttonTag = button.Tag?.ToString(); - if (string.IsNullOrWhiteSpace(buttonTag)) return; IProcessManager managerInstance = ProcessUtils.GetManagerInstance(); From c27c69534f2528ec2185bdcbdfdc05bd3272b569 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Tue, 26 Oct 2021 23:02:59 +0530 Subject: [PATCH 44/49] Improve preview eligible checking. --- .../WikiResultPreviewControlBuilder.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/WikiResultPreviewControlBuilder.cs b/WikiPreview.Fluent.Plugin/WikiResultPreviewControlBuilder.cs index 954cc2d..eccf4c8 100644 --- a/WikiPreview.Fluent.Plugin/WikiResultPreviewControlBuilder.cs +++ b/WikiPreview.Fluent.Plugin/WikiResultPreviewControlBuilder.cs @@ -45,10 +45,10 @@ public WikiResultPreviewControlBuilder() public bool CanBuildPreviewForResult(ISearchResult searchResult) { string appName = searchResult?.SearchApp; - if (!string.Equals(appName, SearchAppName, - StringComparison.OrdinalIgnoreCase)) return false; + if (string.Equals(appName, SearchAppName, + StringComparison.OrdinalIgnoreCase)) return true; - string host = searchResult.Context; + string host = searchResult?.Context; if (string.IsNullOrWhiteSpace(host)) return false; bool result = Uri.TryCreate(host, UriKind.Absolute, out Uri uri) From bc0ab5092f63597b8f2c86bfe4b3ba3436109e0e Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Sun, 31 Oct 2021 15:55:24 +0530 Subject: [PATCH 45/49] Enable loading images for chromium Wiki URLs. --- WikiPreview.Fluent.Plugin/WikiResultPreviewControlBuilder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WikiPreview.Fluent.Plugin/WikiResultPreviewControlBuilder.cs b/WikiPreview.Fluent.Plugin/WikiResultPreviewControlBuilder.cs index eccf4c8..340750a 100644 --- a/WikiPreview.Fluent.Plugin/WikiResultPreviewControlBuilder.cs +++ b/WikiPreview.Fluent.Plugin/WikiResultPreviewControlBuilder.cs @@ -76,7 +76,7 @@ public ValueTask CreatePreviewControl(ISearchResult searchResult) private static async ValueTask GenerateElement(string pageName) { - WikiPreviewSearchResult searchResult = await GenerateOnDemand(pageName, true, false); + WikiPreviewSearchResult searchResult = await GenerateOnDemand(pageName, true); if (string.IsNullOrWhiteSpace(searchResult?.ResultName)) return default; From 56039641eefdb0dc757c7b7247fc076f51d46479 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Sun, 31 Oct 2021 16:06:22 +0530 Subject: [PATCH 46/49] Improve Readablity --- WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs | 2 +- WikiPreview.Fluent.Plugin/WikiResultPreviewControlBuilder.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs index b42899e..3a9a797 100644 --- a/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs +++ b/WikiPreview.Fluent.Plugin/WikiPreviewSearchResult.cs @@ -84,4 +84,4 @@ protected override void OnSelectedSearchResultChanged() // Empty } } -} +} \ No newline at end of file diff --git a/WikiPreview.Fluent.Plugin/WikiResultPreviewControlBuilder.cs b/WikiPreview.Fluent.Plugin/WikiResultPreviewControlBuilder.cs index 340750a..5b0832b 100644 --- a/WikiPreview.Fluent.Plugin/WikiResultPreviewControlBuilder.cs +++ b/WikiPreview.Fluent.Plugin/WikiResultPreviewControlBuilder.cs @@ -69,12 +69,12 @@ public ValueTask CreatePreviewControl(ISearchResult searchResult) } string pageName = searchResult.Context.Split('/').Last(); - return GenerateElement(pageName); + return GenerateFromTitle(pageName); } public PreviewBuilderDescriptor PreviewBuilderDescriptor { get; } - private static async ValueTask GenerateElement(string pageName) + private static async ValueTask GenerateFromTitle(string pageName) { WikiPreviewSearchResult searchResult = await GenerateOnDemand(pageName, true); From 3e8f1aa93a6c5af1dc8ee0b994e474a656466a18 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Sun, 31 Oct 2021 17:26:09 +0530 Subject: [PATCH 47/49] Improve image loading --- WikiPreview.Fluent.Plugin/ResultGenerator.cs | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/ResultGenerator.cs b/WikiPreview.Fluent.Plugin/ResultGenerator.cs index 352fced..652c185 100644 --- a/WikiPreview.Fluent.Plugin/ResultGenerator.cs +++ b/WikiPreview.Fluent.Plugin/ResultGenerator.cs @@ -59,13 +59,26 @@ public static async ValueTask GenerateSearchResult(Page if (loadImage && value.Thumbnail != null) { string imgUrl = value.Thumbnail.Source; + using var imageClient = new HttpClient(); imageClient.DefaultRequestHeaders.UserAgent.TryParseAdd(UserAgentString); - Stream stream = await imageClient.GetStreamAsync(imgUrl); + + using HttpResponseMessage response = + await imageClient.GetAsync(imgUrl, HttpCompletionOption.ResponseHeadersRead); + + if (response.IsSuccessStatusCode) + { + await using Stream stream = await response.Content.ReadAsStreamAsync(); #pragma warning disable CA1416 - var bitmap = new Bitmap(stream); // Wiki Images are not working with AvaloniaBitmap as of now. + var bitmap = + new Bitmap(stream); // Wiki Images are not working with AvaloniaBitmap as of now. #pragma warning restore CA1416 - bitmapImageResult = new BitmapImageResult(bitmap); + bitmapImageResult = new BitmapImageResult(bitmap); + } + else + { + bitmapImageResult = WikipediaLogo; + } } else { From a02c617ee58c18246ad1b204a8660a5d1829a7c8 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Sun, 31 Oct 2021 17:55:23 +0530 Subject: [PATCH 48/49] Improve image loading - 1 --- WikiPreview.Fluent.Plugin/ResultGenerator.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/WikiPreview.Fluent.Plugin/ResultGenerator.cs b/WikiPreview.Fluent.Plugin/ResultGenerator.cs index 652c185..7b027be 100644 --- a/WikiPreview.Fluent.Plugin/ResultGenerator.cs +++ b/WikiPreview.Fluent.Plugin/ResultGenerator.cs @@ -68,7 +68,8 @@ public static async ValueTask GenerateSearchResult(Page if (response.IsSuccessStatusCode) { - await using Stream stream = await response.Content.ReadAsStreamAsync(); + await using Stream stream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false); + #pragma warning disable CA1416 var bitmap = new Bitmap(stream); // Wiki Images are not working with AvaloniaBitmap as of now. From 8127bf85c0bd32b845e78b858dc8c1ba81f2e577 Mon Sep 17 00:00:00 2001 From: Makesh Vineeth Date: Thu, 4 Nov 2021 11:57:29 +0530 Subject: [PATCH 49/49] Improve code --- WikiPreview.Fluent.Plugin/ResultGenerator.cs | 31 +++++++------------- 1 file changed, 10 insertions(+), 21 deletions(-) diff --git a/WikiPreview.Fluent.Plugin/ResultGenerator.cs b/WikiPreview.Fluent.Plugin/ResultGenerator.cs index 7b027be..5b2850c 100644 --- a/WikiPreview.Fluent.Plugin/ResultGenerator.cs +++ b/WikiPreview.Fluent.Plugin/ResultGenerator.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using System.Drawing; -using System.IO; using System.Linq; using System.Net.Http; using System.Net.Http.Json; @@ -54,7 +53,7 @@ public static async ValueTask GenerateSearchResult(Page double score = displayedName.SearchTokens(searchedText); string wikiUrl = displayedName.Replace(' ', '_'); - BitmapImageResult bitmapImageResult; + BitmapImageResult bitmapImageResult = null; if (loadImage && value.Thumbnail != null) { @@ -63,29 +62,19 @@ public static async ValueTask GenerateSearchResult(Page using var imageClient = new HttpClient(); imageClient.DefaultRequestHeaders.UserAgent.TryParseAdd(UserAgentString); - using HttpResponseMessage response = - await imageClient.GetAsync(imgUrl, HttpCompletionOption.ResponseHeadersRead); - - if (response.IsSuccessStatusCode) + await imageClient.GetStreamAsync(imgUrl).ContinueWith(task => { - await using Stream stream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false); - -#pragma warning disable CA1416 + if (!task.IsCompletedSuccessfully) return; var bitmap = - new Bitmap(stream); // Wiki Images are not working with AvaloniaBitmap as of now. -#pragma warning restore CA1416 - bitmapImageResult = new BitmapImageResult(bitmap); - } - else - { - bitmapImageResult = WikipediaLogo; - } - } - else - { - bitmapImageResult = WikipediaLogo; + new Bitmap(task.Result); // Wiki Images are not working with AvaloniaBitmap as of now. + + if (!bitmap.Size.IsEmpty) + bitmapImageResult = new BitmapImageResult(bitmap); + }); } + bitmapImageResult ??= WikipediaLogo; + return new WikiPreviewSearchResult(resultName) { Url = wikiUrl,