Introduced IUnsubscriptionService and replaced the usage in rendering page view model.
This commit is contained in:
15
Wino.Core.Domain/Interfaces/IUnsubscriptionService.cs
Normal file
15
Wino.Core.Domain/Interfaces/IUnsubscriptionService.cs
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
using System.Threading.Tasks;
|
||||||
|
using Wino.Core.Domain.Models.Reader;
|
||||||
|
|
||||||
|
namespace Wino.Core.Domain.Interfaces
|
||||||
|
{
|
||||||
|
public interface IUnsubscriptionService
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Unsubscribes from the subscription using one-click method.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="info">Unsubscribtion information.</param>
|
||||||
|
/// <returns>Whether the unsubscription is succeeded or not.</returns>
|
||||||
|
Task<bool> OneClickUnsubscribeAsync(UnsubscribeInfo info);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -37,6 +37,7 @@ namespace Wino.Core
|
|||||||
services.AddTransient<IAutoDiscoveryService, AutoDiscoveryService>();
|
services.AddTransient<IAutoDiscoveryService, AutoDiscoveryService>();
|
||||||
services.AddTransient<IContextMenuItemService, ContextMenuItemService>();
|
services.AddTransient<IContextMenuItemService, ContextMenuItemService>();
|
||||||
services.AddTransient<IFontService, FontService>();
|
services.AddTransient<IFontService, FontService>();
|
||||||
|
services.AddTransient<IUnsubscriptionService, UnsubscriptionService>();
|
||||||
|
|
||||||
services.AddTransient<OutlookThreadingStrategy>();
|
services.AddTransient<OutlookThreadingStrategy>();
|
||||||
services.AddTransient<GmailThreadingStrategy>();
|
services.AddTransient<GmailThreadingStrategy>();
|
||||||
|
|||||||
36
Wino.Core/Services/UnsubscriptionService.cs
Normal file
36
Wino.Core/Services/UnsubscriptionService.cs
Normal file
@@ -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<bool> 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,8 +2,6 @@
|
|||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net.Http;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using CommunityToolkit.Mvvm.ComponentModel;
|
using CommunityToolkit.Mvvm.ComponentModel;
|
||||||
@@ -40,6 +38,7 @@ namespace Wino.Mail.ViewModels
|
|||||||
private readonly IWinoSynchronizerFactory _winoSynchronizerFactory;
|
private readonly IWinoSynchronizerFactory _winoSynchronizerFactory;
|
||||||
private readonly IWinoRequestDelegator _requestDelegator;
|
private readonly IWinoRequestDelegator _requestDelegator;
|
||||||
private readonly IClipboardService _clipboardService;
|
private readonly IClipboardService _clipboardService;
|
||||||
|
private readonly IUnsubscriptionService _unsubscriptionService;
|
||||||
|
|
||||||
private bool forceImageLoading = false;
|
private bool forceImageLoading = false;
|
||||||
|
|
||||||
@@ -127,6 +126,7 @@ namespace Wino.Mail.ViewModels
|
|||||||
IWinoRequestDelegator requestDelegator,
|
IWinoRequestDelegator requestDelegator,
|
||||||
IStatePersistanceService statePersistanceService,
|
IStatePersistanceService statePersistanceService,
|
||||||
IClipboardService clipboardService,
|
IClipboardService clipboardService,
|
||||||
|
IUnsubscriptionService unsubscriptionService,
|
||||||
IPreferencesService preferencesService) : base(dialogService)
|
IPreferencesService preferencesService) : base(dialogService)
|
||||||
{
|
{
|
||||||
NativeAppService = nativeAppService;
|
NativeAppService = nativeAppService;
|
||||||
@@ -134,6 +134,7 @@ namespace Wino.Mail.ViewModels
|
|||||||
PreferencesService = preferencesService;
|
PreferencesService = preferencesService;
|
||||||
|
|
||||||
_clipboardService = clipboardService;
|
_clipboardService = clipboardService;
|
||||||
|
_unsubscriptionService = unsubscriptionService;
|
||||||
_underlyingThemeService = underlyingThemeService;
|
_underlyingThemeService = underlyingThemeService;
|
||||||
_mimeFileService = mimeFileService;
|
_mimeFileService = mimeFileService;
|
||||||
_mailService = mailService;
|
_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);
|
confirmed = await DialogService.ShowConfirmationDialogAsync(string.Format(Translator.DialogMessage_UnsubscribeConfirmationOneClickMessage, FromName), Translator.DialogMessage_UnsubscribeConfirmationTitle, Translator.Unsubscribe);
|
||||||
if (!confirmed) return;
|
if (!confirmed) return;
|
||||||
|
|
||||||
using var httpClient = new HttpClient();
|
bool isOneClickUnsubscribed = await _unsubscriptionService.OneClickUnsubscribeAsync(CurrentRenderModel.UnsubscribeInfo);
|
||||||
|
|
||||||
var unsubscribeRequest = new HttpRequestMessage(HttpMethod.Post, CurrentRenderModel.UnsubscribeInfo.HttpLink)
|
if (isOneClickUnsubscribed)
|
||||||
{
|
|
||||||
Content = new StringContent("List-Unsubscribe=One-Click", Encoding.UTF8, "application/x-www-form-urlencoded")
|
|
||||||
};
|
|
||||||
|
|
||||||
var result = await httpClient.SendAsync(unsubscribeRequest);
|
|
||||||
if (result.IsSuccessStatusCode)
|
|
||||||
{
|
{
|
||||||
DialogService.InfoBarMessage(Translator.Unsubscribe, string.Format(Translator.Info_UnsubscribeSuccessMessage, FromName), InfoBarMessageType.Success);
|
DialogService.InfoBarMessage(Translator.Unsubscribe, string.Format(Translator.Info_UnsubscribeSuccessMessage, FromName), InfoBarMessageType.Success);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user