Files
Wino-Mail/Wino.Mail.ViewModels/Data/MailAttachmentViewModel.cs

99 lines
3.0 KiB
C#
Raw Normal View History

2024-04-18 01:44:37 +02:00
using System.IO;
using CommunityToolkit.Mvvm.ComponentModel;
using MimeKit;
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Models.Common;
2024-04-18 01:44:37 +02:00
using Wino.Core.Extensions;
namespace Wino.Mail.ViewModels.Data
{
public partial class MailAttachmentViewModel : ObservableObject
2024-04-18 01:44:37 +02:00
{
private readonly MimePart _mimePart;
public MailAttachmentType AttachmentType { get; }
public string FileName { get; }
public string FilePath { get; set; }
public string ReadableSize { get; }
public byte[] Content { get; set; }
public IMimeContent MimeContent => _mimePart.Content;
/// <summary>
/// Gets or sets whether attachment is busy with opening or saving etc.
/// </summary>
[ObservableProperty]
private bool isBusy;
2024-04-18 01:44:37 +02:00
public MailAttachmentViewModel(MimePart mimePart)
{
_mimePart = mimePart;
var memoryStream = new MemoryStream();
using (memoryStream) mimePart.Content.DecodeTo(memoryStream);
2024-04-18 01:44:37 +02:00
Content = memoryStream.ToArray();
2024-04-18 01:44:37 +02:00
FileName = mimePart.FileName;
ReadableSize = ((long)Content.Length).GetBytesReadable();
2024-04-18 01:44:37 +02:00
var extension = Path.GetExtension(FileName);
AttachmentType = GetAttachmentType(extension);
}
public MailAttachmentViewModel(SharedFile sharedFile)
2024-04-18 01:44:37 +02:00
{
Content = sharedFile.Data;
2024-04-18 01:44:37 +02:00
FileName = sharedFile.FileName;
FilePath = sharedFile.FullFilePath;
2024-04-18 01:44:37 +02:00
ReadableSize = ((long)sharedFile.Data.Length).GetBytesReadable();
2024-04-18 01:44:37 +02:00
var extension = Path.GetExtension(FileName);
AttachmentType = GetAttachmentType(extension);
}
public MailAttachmentType GetAttachmentType(string mediaSubtype)
{
if (string.IsNullOrEmpty(mediaSubtype))
return MailAttachmentType.None;
switch (mediaSubtype.ToLower())
{
case ".exe":
return MailAttachmentType.Executable;
case ".rar":
return MailAttachmentType.RarArchive;
case ".zip":
return MailAttachmentType.Archive;
case ".ogg":
case ".mp3":
case ".wav":
case ".aac":
case ".alac":
return MailAttachmentType.Audio;
case ".mp4":
case ".wmv":
case ".avi":
case ".flv":
return MailAttachmentType.Video;
case ".pdf":
return MailAttachmentType.PDF;
case ".htm":
case ".html":
return MailAttachmentType.HTML;
case ".png":
case ".jpg":
case ".jpeg":
case ".gif":
case ".jiff":
return MailAttachmentType.Image;
default:
return MailAttachmentType.Other;
}
}
}
}