feat: Scrollable envelope header with proper To/CC display

- Refactor ContentContainer to Vertical layout with fixed header + scrollable content
- Change EnvelopeHeader to ScrollableContainer for long recipient lists
- Parse headers from message content (fixes empty To: field from himalaya)
- Strip all email headers, MIME boundaries, base64 blocks from body display
- Add 22 unit tests for header parsing and content stripping
- Cancelled meeting emails now render with empty body as expected
This commit is contained in:
Bendt
2025-12-29 14:15:21 -05:00
parent de61795476
commit 09d4bc18d7
5 changed files with 667 additions and 17 deletions

View File

@@ -901,19 +901,19 @@ class EmailViewerApp(App):
def action_scroll_down(self) -> None:
"""Scroll the main content down."""
self.query_one("#main_content").scroll_down()
self.query_one("#content_scroll").scroll_down()
def action_scroll_up(self) -> None:
"""Scroll the main content up."""
self.query_one("#main_content").scroll_up()
self.query_one("#content_scroll").scroll_up()
def action_scroll_page_down(self) -> None:
"""Scroll the main content down by a page."""
self.query_one("#main_content").scroll_page_down()
self.query_one("#content_scroll").scroll_page_down()
def action_scroll_page_up(self) -> None:
"""Scroll the main content up by a page."""
self.query_one("#main_content").scroll_page_up()
self.query_one("#content_scroll").scroll_page_up()
def action_toggle_header(self) -> None:
"""Toggle between compressed and full envelope headers."""