from dataclasses import dataclass, field from app.services.mime_body_extractor import ExtractedMimePart, MirroredMimeContent, extract_mirror_content from app.services.raw_mime_storage import get_raw_mime_storage @dataclass class HandoffMirrorPayload: body_text: str body_html: str | None inline_parts: list[ExtractedMimePart] = field(default_factory=list) file_attachments: list[ExtractedMimePart] = field(default_factory=list) async def load_mirror_payload(external_message: dict) -> HandoffMirrorPayload: body_text = (external_message.get("body_text") or external_message.get("snippet") or "").strip() body_html = external_message.get("body_html") inline_parts: list[ExtractedMimePart] = [] file_attachments: list[ExtractedMimePart] = [] if external_message.get("raw_mime"): try: raw = await get_raw_mime_storage().get(external_message["raw_mime"]) extracted: MirroredMimeContent = extract_mirror_content(raw) if extracted.body_text: body_text = extracted.body_text if extracted.body_html: body_html = extracted.body_html inline_parts = extracted.inline_parts file_attachments = extracted.file_attachments except Exception: pass if not body_text: body_text = external_message.get("snippet") or "(No message body)" return HandoffMirrorPayload( body_text=body_text, body_html=body_html, inline_parts=inline_parts, file_attachments=file_attachments, ) async def load_mirror_update_payload( external_message: dict, *, agent_email: str, ) -> HandoffMirrorPayload: return await load_mirror_payload(external_message)