UIMessage communication. Single instancing for server and re-connection mechanism on suspension.

This commit is contained in:
Burak Kaan Köse
2024-07-17 22:36:10 +02:00
parent ad1c7e1fd3
commit 329eae3a25
87 changed files with 412 additions and 321 deletions

View File

@@ -12,7 +12,7 @@ using Wino.Core.Domain.Interfaces;
using Wino.Core.Domain.Models.Folders;
using Wino.Core.Domain.Models.Navigation;
using Wino.Core.Messages.Navigation;
using Wino.Messages.Server;
using Wino.Messaging.Server;
namespace Wino.Mail.ViewModels
{

View File

@@ -20,7 +20,7 @@ using Wino.Core.Domain.Models.Synchronization;
using Wino.Core.Messages.Authorization;
using Wino.Core.Messages.Navigation;
using Wino.Mail.ViewModels.Data;
using Wino.Messages.Server;
using Wino.Messaging.Server;
namespace Wino.Mail.ViewModels
{

View File

@@ -26,7 +26,7 @@ using Wino.Core.Messages.Navigation;
using Wino.Core.Messages.Shell;
using Wino.Core.Messages.Synchronization;
using Wino.Core.Services;
using Wino.Messages.Server;
using Wino.Messaging.Server;
namespace Wino.Mail.ViewModels
{
@@ -83,6 +83,9 @@ namespace Wino.Mail.ViewModels
private readonly SemaphoreSlim accountInitFolderUpdateSlim = new SemaphoreSlim(1);
[ObservableProperty]
private string _activeConnectionStatus = WinoServerConnectionStatus.None.ToString();
public AppShellViewModel(IDialogService dialogService,
IWinoNavigationService navigationService,
IWinoSynchronizerFactory synchronizerFactory,
@@ -104,6 +107,14 @@ namespace Wino.Mail.ViewModels
StatePersistenceService = statePersistanceService;
ServerConnectionManager = serverConnectionManager;
ServerConnectionManager.StatusChanged += async (sender, status) =>
{
await ExecuteUIThread(() =>
{
ActiveConnectionStatus = status.ToString();
});
};
PreferencesService = preferencesService;
NavigationService = navigationService;

View File

@@ -6,7 +6,7 @@ using Wino.Core.Domain.Entities;
using Wino.Core.Domain.Interfaces;
using Wino.Core.Domain.Models.Folders;
using Wino.Core.Domain.Models.Navigation;
using Wino.Messages.Server;
using Wino.Messaging.Server;
namespace Wino.Mail.ViewModels
{
@@ -71,9 +71,7 @@ namespace Wino.Mail.ViewModels
protected virtual void OnFolderRenamed(IMailItemFolder mailItemFolder) { }
protected virtual void OnFolderSynchronizationEnabled(IMailItemFolder mailItemFolder) { }
public void ReportUIChange<TMessage>(TMessage message) where TMessage : class, IServerMessage
=> Messenger.Send(message);
public void ReportUIChange<TMessage>(TMessage message) where TMessage : class, IServerMessage => Messenger.Send(message);
void IRecipient<AccountCreatedMessage>.Receive(AccountCreatedMessage message) => OnAccountCreated(message.Account);
void IRecipient<AccountRemovedMessage>.Receive(AccountRemovedMessage message) => OnAccountRemoved(message.Account);
void IRecipient<AccountUpdatedMessage>.Receive(AccountUpdatedMessage message) => OnAccountUpdated(message.Account);

View File

@@ -602,6 +602,8 @@ namespace Wino.Mail.ViewModels
{
base.OnMailAdded(addedMail);
if (addedMail.AssignedAccount == null || addedMail.AssignedFolder == null) return;
try
{
await listManipulationSemepahore.WaitAsync();

View File

@@ -10,7 +10,7 @@ using Wino.Core.Domain.Interfaces;
using Wino.Core.Domain.Models.Navigation;
using Wino.Core.Messages.Navigation;
using Wino.Mail.ViewModels.Data;
using Wino.Messages.Server;
using Wino.Messaging.Server;
namespace Wino.Mail.ViewModels
{

View File

@@ -17,7 +17,7 @@
<ItemGroup>
<ProjectReference Include="..\Wino.Core.Domain\Wino.Core.Domain.csproj" />
<ProjectReference Include="..\Wino.Core\Wino.Core.csproj" />
<ProjectReference Include="..\Wino.Messages\Wino.Messages.csproj" />
<ProjectReference Include="..\Wino.Messages\Wino.Messaging.csproj" />
</ItemGroup>
</Project>