Files
Wino-Mail/Wino.Mail.ViewModels/Data/MailItemViewModel.cs
T

188 lines
5.6 KiB
C#
Raw Normal View History

2025-10-25 10:54:38 +02:00
using System;
using System.Collections.Generic;
using CommunityToolkit.Mvvm.ComponentModel;
2024-11-10 23:28:25 +01:00
using Wino.Core.Domain.Entities.Mail;
2025-10-28 14:43:22 +01:00
using Wino.Core.Domain.Enums;
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
namespace Wino.Mail.ViewModels.Data;
/// <summary>
/// Single view model for IMailItem representation.
/// </summary>
2025-10-27 22:52:26 +01:00
public partial class MailItemViewModel(MailCopy mailCopy) : ObservableRecipient, IMailListItem
2024-04-18 01:44:37 +02:00
{
2025-10-28 14:43:22 +01:00
public MailCopy MailCopy { get; } = mailCopy;
2025-02-16 11:54:23 +01:00
[ObservableProperty]
2025-10-28 14:43:22 +01:00
public partial bool IsDisplayedInThread { get; set; }
2025-02-16 11:54:23 +01:00
[ObservableProperty]
2025-10-27 22:52:26 +01:00
[NotifyPropertyChangedRecipients]
2025-10-03 15:46:38 +02:00
public partial bool IsSelected { get; set; }
2025-10-28 14:43:22 +01:00
public DateTime CreationDate
{
get => MailCopy.CreationDate;
set => SetProperty(MailCopy.CreationDate, value, MailCopy, (u, n) => u.CreationDate = n);
}
[ObservableProperty]
2025-10-28 14:43:22 +01:00
public partial bool ThumbnailUpdatedEvent { get; set; } = false;
2025-02-16 11:54:23 +01:00
public bool IsFlagged
{
get => MailCopy.IsFlagged;
set => SetProperty(MailCopy.IsFlagged, value, MailCopy, (u, n) => u.IsFlagged = n);
}
public string FromName
{
get => string.IsNullOrEmpty(MailCopy.FromName) ? MailCopy.FromAddress : MailCopy.FromName;
set => SetProperty(MailCopy.FromName, value, MailCopy, (u, n) => u.FromName = n);
}
public bool IsFocused
{
get => MailCopy.IsFocused;
set => SetProperty(MailCopy.IsFocused, value, MailCopy, (u, n) => u.IsFocused = n);
}
public bool IsRead
{
get => MailCopy.IsRead;
set => SetProperty(MailCopy.IsRead, value, MailCopy, (u, n) => u.IsRead = n);
}
public bool IsDraft
{
get => MailCopy.IsDraft;
set => SetProperty(MailCopy.IsDraft, value, MailCopy, (u, n) => u.IsDraft = n);
}
public string DraftId
2024-04-18 01:44:37 +02:00
{
2025-02-16 11:54:23 +01:00
get => MailCopy.DraftId;
set => SetProperty(MailCopy.DraftId, value, MailCopy, (u, n) => u.DraftId = n);
2024-04-18 01:44:37 +02:00
}
2025-02-16 11:54:23 +01:00
public string Id
{
get => MailCopy.Id;
set => SetProperty(MailCopy.Id, value, MailCopy, (u, n) => u.Id = n);
}
public string Subject
{
get => MailCopy.Subject;
set => SetProperty(MailCopy.Subject, value, MailCopy, (u, n) => u.Subject = n);
}
public string PreviewText
{
get => MailCopy.PreviewText;
set => SetProperty(MailCopy.PreviewText, value, MailCopy, (u, n) => u.PreviewText = n);
}
public string FromAddress
{
get => MailCopy.FromAddress;
set => SetProperty(MailCopy.FromAddress, value, MailCopy, (u, n) => u.FromAddress = n);
}
public bool HasAttachments
{
get => MailCopy.HasAttachments;
set => SetProperty(MailCopy.HasAttachments, value, MailCopy, (u, n) => u.HasAttachments = n);
}
2025-10-25 10:54:38 +02:00
2025-10-28 14:43:22 +01:00
public MailImportance Importance
{
get => MailCopy.Importance;
set => SetProperty(MailCopy.Importance, value, MailCopy, (u, n) => u.Importance = n);
}
public string ThreadId
{
get => MailCopy.ThreadId;
set => SetProperty(MailCopy.ThreadId, value, MailCopy, (u, n) => u.ThreadId = n);
}
public string MessageId
{
get => MailCopy.MessageId;
set => SetProperty(MailCopy.MessageId, value, MailCopy, (u, n) => u.MessageId = n);
}
public string References
{
get => MailCopy.References;
set => SetProperty(MailCopy.References, value, MailCopy, (u, n) => u.References = n);
}
public string InReplyTo
{
get => MailCopy.InReplyTo;
set => SetProperty(MailCopy.InReplyTo, value, MailCopy, (u, n) => u.InReplyTo = n);
}
public Guid FileId
{
get => MailCopy.FileId;
set => SetProperty(MailCopy.FileId, value, MailCopy, (u, n) => u.FileId = n);
}
public Guid FolderId
{
get => MailCopy.FolderId;
set => SetProperty(MailCopy.FolderId, value, MailCopy, (u, n) => u.FolderId = n);
}
public Guid UniqueId
{
get => MailCopy.UniqueId;
set => SetProperty(MailCopy.UniqueId, value, MailCopy, (u, n) => u.UniqueId = n);
}
public string Base64ContactPicture
{
get => MailCopy.SenderContact?.Base64ContactPicture ?? string.Empty;
set => SetProperty(MailCopy.SenderContact.Base64ContactPicture, value, MailCopy, (u, n) => u.SenderContact.Base64ContactPicture = n);
}
public void NotifyPropertyChanges()
{
// Raise on property changes for all observable properties.
OnPropertyChanged(nameof(CreationDate));
OnPropertyChanged(nameof(IsFlagged));
OnPropertyChanged(nameof(FromName));
OnPropertyChanged(nameof(IsFocused));
OnPropertyChanged(nameof(IsRead));
OnPropertyChanged(nameof(IsDraft));
OnPropertyChanged(nameof(DraftId));
OnPropertyChanged(nameof(Id));
OnPropertyChanged(nameof(Subject));
OnPropertyChanged(nameof(PreviewText));
OnPropertyChanged(nameof(FromAddress));
OnPropertyChanged(nameof(HasAttachments));
OnPropertyChanged(nameof(Importance));
OnPropertyChanged(nameof(ThreadId));
OnPropertyChanged(nameof(MessageId));
OnPropertyChanged(nameof(References));
OnPropertyChanged(nameof(InReplyTo));
OnPropertyChanged(nameof(FileId));
OnPropertyChanged(nameof(FolderId));
OnPropertyChanged(nameof(UniqueId));
OnPropertyChanged(nameof(Base64ContactPicture));
}
2025-10-25 10:54:38 +02:00
public IEnumerable<Guid> GetContainingIds() => [MailCopy.UniqueId];
public IEnumerable<MailItemViewModel> GetSelectedMailItems()
{
if (IsSelected)
{
yield return this;
}
}
2024-04-18 01:44:37 +02:00
}