From b4edef9021dda0bfc5bc924451e222002bae5da4 Mon Sep 17 00:00:00 2001 From: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Thu, 11 Apr 2024 10:08:38 +0200 Subject: [PATCH] Add common image processor --- src/Markdowser/Markdowser.csproj | 3 +++ .../Processors/CommonImageProcessor.cs | 21 +++++++++++++++++++ .../Content/CommonImageContentViewModel.cs | 9 ++++++++ .../ViewModels/MainWindowViewModel.cs | 1 + .../Content/CommonImageContentView.axaml | 17 +++++++++++++++ .../Content/CommonImageContentView.axaml.cs | 11 ++++++++++ 6 files changed, 62 insertions(+) create mode 100644 src/Markdowser/Processing/Processors/CommonImageProcessor.cs create mode 100644 src/Markdowser/ViewModels/Content/CommonImageContentViewModel.cs create mode 100644 src/Markdowser/Views/Content/CommonImageContentView.axaml create mode 100644 src/Markdowser/Views/Content/CommonImageContentView.axaml.cs diff --git a/src/Markdowser/Markdowser.csproj b/src/Markdowser/Markdowser.csproj index 31f776b..24b1d1b 100644 --- a/src/Markdowser/Markdowser.csproj +++ b/src/Markdowser/Markdowser.csproj @@ -39,6 +39,9 @@ + + CommonImageContentView.axaml + MarkdownContentView.axaml diff --git a/src/Markdowser/Processing/Processors/CommonImageProcessor.cs b/src/Markdowser/Processing/Processors/CommonImageProcessor.cs new file mode 100644 index 0000000..62368b8 --- /dev/null +++ b/src/Markdowser/Processing/Processors/CommonImageProcessor.cs @@ -0,0 +1,21 @@ +using Markdowser.ViewModels; +using Markdowser.ViewModels.Content; + +using System; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Threading.Tasks; + +namespace Markdowser.Processing.Processors; +internal class CommonImageProcessor : IContentProcessor +{ + public bool CanProcess(HttpContentHeaders httpContentHeaders) + { + return httpContentHeaders.ContentType?.MediaType?.StartsWith("image/") == true; + } + + public async Task Process(HttpResponseMessage httpResponseMessage, IProgress progress) + { + return new CommonImageContentViewModel(httpResponseMessage.RequestMessage?.RequestUri?.Host?.ToString() ?? "Image", await httpResponseMessage.Content.ReadAsStreamAsync()); + } +} diff --git a/src/Markdowser/ViewModels/Content/CommonImageContentViewModel.cs b/src/Markdowser/ViewModels/Content/CommonImageContentViewModel.cs new file mode 100644 index 0000000..e6573c8 --- /dev/null +++ b/src/Markdowser/ViewModels/Content/CommonImageContentViewModel.cs @@ -0,0 +1,9 @@ +using Avalonia.Media.Imaging; + +using System.IO; + +namespace Markdowser.ViewModels.Content; +internal class CommonImageContentViewModel(string title, Stream stream) : ContentViewModelBase(title) +{ + public Bitmap Image { get; set; } = Bitmap.DecodeToHeight(stream, 1080); +} diff --git a/src/Markdowser/ViewModels/MainWindowViewModel.cs b/src/Markdowser/ViewModels/MainWindowViewModel.cs index 9b0906e..2fcac4a 100644 --- a/src/Markdowser/ViewModels/MainWindowViewModel.cs +++ b/src/Markdowser/ViewModels/MainWindowViewModel.cs @@ -167,6 +167,7 @@ public partial class MainWindowViewModel : ViewModelBase content = DefaultContent; contentProcessorManager.RegisterProcessor(new HtmlProcessor()); + contentProcessorManager.RegisterProcessor(new CommonImageProcessor()); GlobalState.UrlChanged += (sender, url) => { diff --git a/src/Markdowser/Views/Content/CommonImageContentView.axaml b/src/Markdowser/Views/Content/CommonImageContentView.axaml new file mode 100644 index 0000000..1426a1d --- /dev/null +++ b/src/Markdowser/Views/Content/CommonImageContentView.axaml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file diff --git a/src/Markdowser/Views/Content/CommonImageContentView.axaml.cs b/src/Markdowser/Views/Content/CommonImageContentView.axaml.cs new file mode 100644 index 0000000..5582bea --- /dev/null +++ b/src/Markdowser/Views/Content/CommonImageContentView.axaml.cs @@ -0,0 +1,11 @@ +using Avalonia.Controls; + +namespace Markdowser.Views.Content; + +public partial class CommonImageContentView : UserControl +{ + public CommonImageContentView() + { + InitializeComponent(); + } +} \ No newline at end of file