From 11b652f8518ce141fc8403a7f5a415d48ce97ebf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Kaan=20K=C3=B6se?= Date: Thu, 2 May 2024 00:21:29 +0200 Subject: [PATCH] Introduced IUnsubscriptionService and replaced the usage in rendering page view model. --- .../Interfaces/IUnsubscriptionService.cs | 15 ++++++++ Wino.Core/CoreContainerSetup.cs | 1 + Wino.Core/Services/UnsubscriptionService.cs | 36 +++++++++++++++++++ .../MailRenderingPageViewModel.cs | 15 +++----- 4 files changed, 57 insertions(+), 10 deletions(-) create mode 100644 Wino.Core.Domain/Interfaces/IUnsubscriptionService.cs create mode 100644 Wino.Core/Services/UnsubscriptionService.cs diff --git a/Wino.Core.Domain/Interfaces/IUnsubscriptionService.cs b/Wino.Core.Domain/Interfaces/IUnsubscriptionService.cs new file mode 100644 index 00000000..f066895a --- /dev/null +++ b/Wino.Core.Domain/Interfaces/IUnsubscriptionService.cs @@ -0,0 +1,15 @@ +using System.Threading.Tasks; +using Wino.Core.Domain.Models.Reader; + +namespace Wino.Core.Domain.Interfaces +{ + public interface IUnsubscriptionService + { + /// + /// Unsubscribes from the subscription using one-click method. + /// + /// Unsubscribtion information. + /// Whether the unsubscription is succeeded or not. + Task OneClickUnsubscribeAsync(UnsubscribeInfo info); + } +} diff --git a/Wino.Core/CoreContainerSetup.cs b/Wino.Core/CoreContainerSetup.cs index 0554b0a0..67f4c2ce 100644 --- a/Wino.Core/CoreContainerSetup.cs +++ b/Wino.Core/CoreContainerSetup.cs @@ -37,6 +37,7 @@ namespace Wino.Core services.AddTransient(); services.AddTransient(); services.AddTransient(); + services.AddTransient(); services.AddTransient(); services.AddTransient(); diff --git a/Wino.Core/Services/UnsubscriptionService.cs b/Wino.Core/Services/UnsubscriptionService.cs new file mode 100644 index 00000000..c9f7225d --- /dev/null +++ b/Wino.Core/Services/UnsubscriptionService.cs @@ -0,0 +1,36 @@ +using System; +using System.Net.Http; +using System.Text; +using System.Threading.Tasks; +using Serilog; +using Wino.Core.Domain.Interfaces; +using Wino.Core.Domain.Models.Reader; + +namespace Wino.Core.Services +{ + public class UnsubscriptionService : IUnsubscriptionService + { + public async Task OneClickUnsubscribeAsync(UnsubscribeInfo info) + { + try + { + using var httpClient = new HttpClient(); + + var unsubscribeRequest = new HttpRequestMessage(HttpMethod.Post, info.HttpLink) + { + Content = new StringContent("List-Unsubscribe=One-Click", Encoding.UTF8, "application/x-www-form-urlencoded") + }; + + var result = await httpClient.SendAsync(unsubscribeRequest).ConfigureAwait(false); + + return result.IsSuccessStatusCode; + } + catch (Exception ex) + { + Log.Error("Failed to unsubscribe from {HttpLink} - {Message}", info.HttpLink, ex.Message); + } + + return false; + } + } +} diff --git a/Wino.Mail.ViewModels/MailRenderingPageViewModel.cs b/Wino.Mail.ViewModels/MailRenderingPageViewModel.cs index 6f4ffa2c..df3dac28 100644 --- a/Wino.Mail.ViewModels/MailRenderingPageViewModel.cs +++ b/Wino.Mail.ViewModels/MailRenderingPageViewModel.cs @@ -2,8 +2,6 @@ using System.Collections.ObjectModel; using System.IO; using System.Linq; -using System.Net.Http; -using System.Text; using System.Threading; using System.Threading.Tasks; using CommunityToolkit.Mvvm.ComponentModel; @@ -40,6 +38,7 @@ namespace Wino.Mail.ViewModels private readonly IWinoSynchronizerFactory _winoSynchronizerFactory; private readonly IWinoRequestDelegator _requestDelegator; private readonly IClipboardService _clipboardService; + private readonly IUnsubscriptionService _unsubscriptionService; private bool forceImageLoading = false; @@ -127,6 +126,7 @@ namespace Wino.Mail.ViewModels IWinoRequestDelegator requestDelegator, IStatePersistanceService statePersistanceService, IClipboardService clipboardService, + IUnsubscriptionService unsubscriptionService, IPreferencesService preferencesService) : base(dialogService) { NativeAppService = nativeAppService; @@ -134,6 +134,7 @@ namespace Wino.Mail.ViewModels PreferencesService = preferencesService; _clipboardService = clipboardService; + _unsubscriptionService = unsubscriptionService; _underlyingThemeService = underlyingThemeService; _mimeFileService = mimeFileService; _mailService = mailService; @@ -194,15 +195,9 @@ namespace Wino.Mail.ViewModels confirmed = await DialogService.ShowConfirmationDialogAsync(string.Format(Translator.DialogMessage_UnsubscribeConfirmationOneClickMessage, FromName), Translator.DialogMessage_UnsubscribeConfirmationTitle, Translator.Unsubscribe); if (!confirmed) return; - using var httpClient = new HttpClient(); + bool isOneClickUnsubscribed = await _unsubscriptionService.OneClickUnsubscribeAsync(CurrentRenderModel.UnsubscribeInfo); - var unsubscribeRequest = new HttpRequestMessage(HttpMethod.Post, CurrentRenderModel.UnsubscribeInfo.HttpLink) - { - Content = new StringContent("List-Unsubscribe=One-Click", Encoding.UTF8, "application/x-www-form-urlencoded") - }; - - var result = await httpClient.SendAsync(unsubscribeRequest); - if (result.IsSuccessStatusCode) + if (isOneClickUnsubscribed) { DialogService.InfoBarMessage(Translator.Unsubscribe, string.Format(Translator.Info_UnsubscribeSuccessMessage, FromName), InfoBarMessageType.Success); }