98 lines
2.8 KiB
C#
98 lines
2.8 KiB
C#
using System.IO;
|
|
using CommunityToolkit.Mvvm.ComponentModel;
|
|
using MimeKit;
|
|
using Wino.Core.Domain.Enums;
|
|
using Wino.Core.Domain.Models.Common;
|
|
using Wino.Core.Extensions;
|
|
|
|
namespace Wino.Mail.ViewModels.Data;
|
|
|
|
public partial class MailAttachmentViewModel : ObservableObject
|
|
{
|
|
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;
|
|
|
|
public MailAttachmentViewModel(MimePart mimePart)
|
|
{
|
|
_mimePart = mimePart;
|
|
|
|
var memoryStream = new MemoryStream();
|
|
|
|
using (memoryStream) mimePart.Content.DecodeTo(memoryStream);
|
|
|
|
Content = memoryStream.ToArray();
|
|
|
|
FileName = mimePart.FileName;
|
|
ReadableSize = ((long)Content.Length).GetBytesReadable();
|
|
|
|
var extension = Path.GetExtension(FileName);
|
|
AttachmentType = GetAttachmentType(extension);
|
|
}
|
|
|
|
public MailAttachmentViewModel(SharedFile sharedFile)
|
|
{
|
|
Content = sharedFile.Data;
|
|
|
|
FileName = sharedFile.FileName;
|
|
FilePath = sharedFile.FullFilePath;
|
|
|
|
ReadableSize = ((long)sharedFile.Data.Length).GetBytesReadable();
|
|
|
|
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;
|
|
}
|
|
}
|
|
}
|