Calendar invitations for Mail part of the app.

This commit is contained in:
Burak Kaan Köse
2026-01-05 00:21:07 +01:00
parent 0b0f6b8d8e
commit 3d07328f47
24 changed files with 679 additions and 66 deletions
@@ -140,6 +140,12 @@ public class CalendarItem : ICalendarItem
public string HtmlLink { get; set; }
public CalendarItemStatus Status { get; set; }
public CalendarItemVisibility Visibility { get; set; }
/// <summary>
/// Indicates how the event should be shown in the calendar (Free, Busy, Tentative, etc.).
/// </summary>
public CalendarItemShowAs ShowAs { get; set; } = CalendarItemShowAs.Busy;
public DateTimeOffset CreatedAt { get; set; }
public DateTimeOffset UpdatedAt { get; set; }
public Guid CalendarId { get; set; }
@@ -103,6 +103,11 @@ public class MailCopy
/// </summary>
public bool HasAttachments { get; set; }
/// <summary>
/// Type of mail item (regular mail, calendar invitation, calendar response, etc.).
/// </summary>
public MailItemType ItemType { get; set; } = MailItemType.Mail;
/// <summary>
/// Assigned draft id.
/// </summary>
@@ -78,6 +78,14 @@ public class MailAccount
/// </summary>
public SpecialImapProvider SpecialImapProvider { get; set; }
/// <summary>
/// Gets or sets whether calendar access is granted for this account.
/// When false, synchronizers will not process EventMessages or calendar invitations.
/// Default is false for existing accounts to prevent scope issues.
/// New accounts created after this feature will have this set to true.
/// </summary>
public bool IsCalendarAccessGranted { get; set; }
/// <summary>
/// Contains the merged inbox this account belongs to.
/// Ignored for all SQLite operations.
+27
View File
@@ -0,0 +1,27 @@
namespace Wino.Core.Domain.Enums;
/// <summary>
/// Represents the type of mail item.
/// </summary>
public enum MailItemType
{
/// <summary>
/// Regular mail message.
/// </summary>
Mail = 0,
/// <summary>
/// Calendar invitation (meeting request).
/// </summary>
CalendarInvitation = 1,
/// <summary>
/// Calendar response (meeting accepted, tentatively accepted, or declined).
/// </summary>
CalendarResponse = 2,
/// <summary>
/// Calendar cancellation (meeting cancelled).
/// </summary>
CalendarCancellation = 3
}
@@ -11,4 +11,12 @@ namespace Wino.Core.Domain.Models.Calendar;
/// <param name="CalendarItem">Calendar item to operate on.</param>
/// <param name="Attendees">List of attendees for the calendar event.</param>
/// <param name="ResponseMessage">Optional message to include with event responses (Accept, Decline, Tentative).</param>
public record CalendarOperationPreparationRequest(CalendarSynchronizerOperation Operation, CalendarItem CalendarItem, List<CalendarEventAttendee> Attendees, string ResponseMessage = null);
/// <param name="OriginalItem">Original calendar item state before update (for revert capability).</param>
/// <param name="OriginalAttendees">Original attendees list before update (for revert capability).</param>
public record CalendarOperationPreparationRequest(
CalendarSynchronizerOperation Operation,
CalendarItem CalendarItem,
List<CalendarEventAttendee> Attendees,
string ResponseMessage = null,
CalendarItem OriginalItem = null,
List<CalendarEventAttendee> OriginalAttendees = null);