Initial event composing.

This commit is contained in:
Burak Kaan Köse
2026-03-06 17:46:38 +01:00
parent e1be644631
commit 6608baed69
27 changed files with 1938 additions and 13 deletions
+14
View File
@@ -6,12 +6,14 @@ using CommunityToolkit.Mvvm.Messaging;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Wino.Core.Domain;
using Wino.Core.Domain.Entities.Calendar;
using Wino.Core.Domain.Entities.Mail;
using Wino.Core.Domain.Entities.Shared;
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Interfaces;
using Wino.Core.Domain.Models;
using Wino.Core.Domain.Models.Accounts;
using Wino.Core.Domain.Models.Calendar;
using Wino.Core.Domain.Models.Folders;
using Wino.Core.Domain.Models.Synchronization;
using Wino.Mail.WinUI.Extensions;
@@ -122,6 +124,18 @@ public class DialogService : DialogServiceBase, IMailDialogService
return accountPicker.PickedAccount ?? null!;
}
public async Task<AccountCalendar> ShowSingleCalendarPickerDialogAsync(List<CalendarPickerAccountGroup> availableCalendarGroups)
{
var calendarPicker = new SingleCalendarPickerDialog(availableCalendarGroups)
{
RequestedTheme = ThemeService.RootTheme.ToWindowsElementTheme()
};
await HandleDialogPresentationAsync(calendarPicker);
return calendarPicker.PickedCalendar ?? null!;
}
public async Task<AccountSignature> ShowSignatureEditorDialog(AccountSignature? signatureModel = null)
{
SignatureEditorDialog signatureEditorDialog;
@@ -120,6 +120,40 @@ public class DialogServiceBase : IDialogServiceBase
return returnList;
}
public async Task<List<PickedFileMetadata>> PickFilesMetadataAsync(params object[] typeFilters)
{
var returnList = new List<PickedFileMetadata>();
var picker = new FileOpenPicker
{
ViewMode = PickerViewMode.Thumbnail,
SuggestedStartLocation = PickerLocationId.Desktop
};
foreach (var filter in typeFilters)
{
picker.FileTypeFilter.Add(filter.ToString());
}
var mainWindow = WinoApplication.MainWindow;
if (mainWindow == null) return returnList;
nint windowHandle = WindowNative.GetWindowHandle(mainWindow);
InitializeWithWindow.Initialize(picker, windowHandle);
var files = await picker.PickMultipleFilesAsync();
if (files == null) return returnList;
foreach (var file in files)
{
StorageApplicationPermissions.FutureAccessList.Add(file);
var basicProperties = await file.GetBasicPropertiesAsync();
returnList.Add(new PickedFileMetadata(file.Path, (long)basicProperties.Size));
}
return returnList;
}
private async Task<StorageFile?> PickFileAsync(params object[] typeFilters)
{
var picker = new FileOpenPicker
@@ -55,7 +55,8 @@ public class NavigationService : NavigationServiceBase, INavigationService
private static readonly WinoPage[] CalendarOnlyPages =
[
WinoPage.CalendarPage,
WinoPage.EventDetailsPage
WinoPage.EventDetailsPage,
WinoPage.CalendarEventComposePage
];
public NavigationService(IStatePersistanceService statePersistanceService, IDispatcher dispatcher, IWinoWindowManager windowManager)
@@ -126,6 +127,7 @@ public class NavigationService : NavigationServiceBase, INavigationService
WinoPage.SpecialImapCredentialsPage => typeof(SpecialImapCredentialsPage),
WinoPage.CalendarPage => typeof(CalendarPage),
WinoPage.EventDetailsPage => typeof(EventDetailsPage),
WinoPage.CalendarEventComposePage => typeof(CalendarEventComposePage),
WinoPage.CalendarSettingsPage => typeof(CalendarSettingsPage),
WinoPage.CalendarAccountSettingsPage => typeof(CalendarAccountSettingsPage),
_ => null,
@@ -248,7 +250,7 @@ public class NavigationService : NavigationServiceBase, INavigationService
}
_statePersistanceService.IsReadingMail = _renderingPageTypes.Contains(page);
_statePersistanceService.IsEventDetailsVisible = page == WinoPage.EventDetailsPage;
_statePersistanceService.IsEventDetailsVisible = page == WinoPage.EventDetailsPage || page == WinoPage.CalendarEventComposePage;
Frame? innerShellFrame = GetCoreFrameInternal(NavigationReferenceFrame.InnerShellFrame);
if (innerShellFrame == null && frame == NavigationReferenceFrame.ShellFrame)