Add Windows share target draft attachment flow

This commit is contained in:
Burak Kaan Köse
2026-04-14 01:23:39 +02:00
parent 4bea53a667
commit aa16609f89
9 changed files with 307 additions and 3 deletions
+1
View File
@@ -13,6 +13,7 @@ public static class ServicesContainerSetup
services.AddSingleton<IApplicationConfiguration, ApplicationConfiguration>();
services.AddSingleton<IWinoLogger, WinoLogger>();
services.AddSingleton<ILaunchProtocolService, LaunchProtocolService>();
services.AddSingleton<IShareActivationService, ShareActivationService>();
services.AddSingleton<IMimeFileService, MimeFileService>();
services.AddSingleton<ICalendarIcsFileService, CalendarIcsFileService>();
services.AddTransient<IMimeStorageService, MimeStorageService>();
+70
View File
@@ -0,0 +1,70 @@
#nullable enable
using System;
using Wino.Core.Domain.Interfaces;
using Wino.Core.Domain.Models.Launch;
namespace Wino.Services;
public class ShareActivationService : IShareActivationService
{
private readonly object _syncRoot = new();
private MailShareRequest? _pendingShareRequest;
private PendingComposeMailShareRequest? _pendingComposeShareRequest;
public MailShareRequest? PendingShareRequest
{
get
{
lock (_syncRoot)
{
return _pendingShareRequest;
}
}
set
{
lock (_syncRoot)
{
_pendingShareRequest = value;
}
}
}
public MailShareRequest? ConsumePendingShareRequest()
{
lock (_syncRoot)
{
var pendingRequest = _pendingShareRequest;
_pendingShareRequest = null;
return pendingRequest;
}
}
public void ClearPendingShareRequest()
{
lock (_syncRoot)
{
_pendingShareRequest = null;
}
}
public void StagePendingComposeShareRequest(Guid draftUniqueId, MailShareRequest shareRequest)
{
lock (_syncRoot)
{
_pendingComposeShareRequest = new PendingComposeMailShareRequest(draftUniqueId, shareRequest);
}
}
public MailShareRequest? ConsumePendingComposeShareRequest(Guid draftUniqueId)
{
lock (_syncRoot)
{
if (_pendingComposeShareRequest?.DraftUniqueId != draftUniqueId)
return null;
var pendingRequest = _pendingComposeShareRequest.ShareRequest;
_pendingComposeShareRequest = null;
return pendingRequest;
}
}
}