feat: add email result and search filter models

Add EmailResult class for holding email search results with
subject, sender, date, body preview, attachments, and metadata.
Add SearchFilters for encapsulating search criteria.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-20 11:42:59 -05:00
parent ccc7aeb972
commit b2fd117b83
2 changed files with 70 additions and 0 deletions

View File

@@ -0,0 +1,58 @@
using NetOffice.OutlookApi;
public class EmailResult
{
public string Subject { get; set; } = "";
public string Sender { get; set; } = "";
public string CC { get; set; } = "";
public string BCC { get; set; } = "";
public DateTime ReceivedDate { get; set; }
public string BodyPreview { get; set; } = "";
public string Folder { get; set; } = "";
public int AttachmentCount { get; set; }
public string AttachmentNames { get; set; } = "";
public string Importance { get; set; } = "";
public string Categories { get; set; } = "";
public string FlagStatus { get; set; } = "";
public static EmailResult FromMailItem(MailItem mail, string folderName)
{
var bodyPreview = TruncatePreview(mail.Body ?? "", 300);
var attachmentNames = GetAttachmentNames(mail);
return new EmailResult
{
Subject = mail.Subject ?? "(No Subject)",
Sender = $"{mail.SenderName} <{mail.SenderEmailAddress}>",
CC = mail.CC ?? "",
BCC = mail.BCC ?? "",
ReceivedDate = mail.ReceivedTime,
BodyPreview = bodyPreview,
Folder = folderName,
AttachmentCount = attachmentNames.Count,
AttachmentNames = string.Join(", ", attachmentNames),
Importance = mail.Importance.ToString().Replace("olImportance", ""),
Categories = mail.Categories ?? "",
FlagStatus = mail.FlagStatus.ToString().Replace("olFlag", "").Replace("olNo", "Not")
};
}
private static string TruncatePreview(string body, int maxLength)
{
var preview = body;
if (preview.Length > maxLength)
preview = preview.Substring(0, maxLength) + "...";
return preview.Replace("\r\n", " ").Replace("\n", " ").Trim();
}
private static List<string> GetAttachmentNames(MailItem mail)
{
var names = new List<string>();
foreach (var attachment in mail.Attachments)
{
if (attachment is Attachment att)
names.Add(att.FileName);
}
return names;
}
}

View File

@@ -0,0 +1,12 @@
using NetOffice.OutlookApi.Enums;
public class SearchFilters
{
public string? Keywords { get; set; }
public string? Sender { get; set; }
public string? Subject { get; set; }
public string? HasAttachment { get; set; }
public OlImportance? Importance { get; set; }
public string? Category { get; set; }
public OlFlagStatus? FlagStatus { get; set; }
}