Commit Graph

126 Commits

Author SHA1 Message Date
Bendt
a0057f4d83 fix: Correct HelpScreen instantiation
- Fix missing app_bindings argument
- Pass self.BINDINGS list to HelpScreen constructor
- Help screen now works without crash
2025-12-28 13:35:26 -05:00
Bendt
977c8e4ee0 feat: Add comprehensive help screen modal
- Create HelpScreen with all keyboard shortcuts
- Add hardcoded sections for instructions
- Add binding for '?' key to show help
- Support ESC/q/? to close help screen
- Document notification compression feature in help
- Format help with colors and sections (Navigation, Actions, View, Search)

Features:
- Shows all keyboard shortcuts in organized sections
- Quick Actions section explains notification compression
- Configuration instructions for mail.toml
- Modal dialog with close button
- Extracts bindings automatically for display
2025-12-28 13:33:09 -05:00
Bendt
fa54f45998 fix: Remove unused 'm' key binding from ContentContainer
- The 'm' key was repurposed for toggle view mode, causing conflict
- Removed Binding from ContentContainer to free up the key for other uses
- action_toggle_mode still exists for extensibility but has no keybinding
- Tests still passing
2025-12-28 12:58:57 -05:00
Bendt
5f3fe302f1 fix: Fix runtime errors in mail app
- Fix envelopes list access: use index with bounds checking instead of .get()
- Add missing 'Any' type import to ContentContainer
- App now starts successfully without NameError or AttributeError
2025-12-28 12:52:23 -05:00
Bendt
de96353554 docs: Add future enhancements to notification compression
Add potential improvements:
- LLM-based summarization
- Learning from user feedback
- Custom notification types
- Bulk actions on notifications
- Notification grouping and statistics
2025-12-28 10:57:44 -05:00
Bendt
7564d11931 docs: Add notification compression documentation
- Update README with feature description
- Add configuration section for notification compression
- Create demo script showcasing the feature
- Document all supported platforms (GitLab, GitHub, Jira, etc.)
- Provide usage examples and configuration options
2025-12-28 10:57:19 -05:00
Bendt
b1cd99abf2 style: Apply ruff auto-fixes for Python 3.12
- Update type annotations to modern syntax (dict, list, X | Y)
- Remove unnecessary elif after return
- Minor style improvements

Note: Some linting warnings remain (unused content param, inline conditions)
but these are minor style issues and do not affect functionality.
All tests pass with these changes.
2025-12-28 10:55:31 -05:00
Bendt
78ab945a4d fix: Improve Confluence/Jira detection precision
- Add domain-specific matching for Atlassian services
- Fix Confluence being misclassified as Jira
- Add comprehensive test coverage for notification detection
- Add example configuration file with new options
- All 13 tests now passing

Files modified:
- src/mail/notification_detector.py: Better atlassian.net handling
- tests/test_notification_detector.py: Full test suite
- mail.toml.example: Config documentation with examples
2025-12-28 10:51:45 -05:00
Bendt
1c1b86b96b feat: Add notification email compression feature
Add intelligent notification email detection and compression:
- Detect notification emails from GitLab, GitHub, Jira, Confluence, Datadog, Renovate
- Extract structured summaries from notification emails
- Compress notifications into terminal-friendly markdown format
- Add configuration options for notification compression mode

Features:
- Rule-based detection using sender domains and subject patterns
- Type-specific extractors for each notification platform
- Configurable compression modes (summary, detailed, off)
- Integrated with ContentContainer for seamless display

Files added:
- src/mail/notification_detector.py: Notification type detection
- src/mail/notification_compressor.py: Content compression

Modified:
- src/mail/config.py: Add notification_compression_mode config
- src/mail/widgets/ContentContainer.py: Integrate compressor
- src/mail/app.py: Pass envelope data to display_content
- PROJECT_PLAN.md: Document new feature
2025-12-28 10:49:25 -05:00
Bendt
504e0d534d project plan 2025-12-24 15:28:44 -05:00
Bendt
2b76458de1 wip 2025-12-20 16:30:39 -05:00
Bendt
d6e10e3dc5 Add calendar invite actions to mail app with A/D/T keybindings
- Add calendar_invite.py with detect/find/respond functions for calendar invites
- Keybindings: A (accept), D (decline), T (tentative)
- Searches Graph API calendarView to find matching event by subject
- Responds via Graph API POST to event/{id}/accept|decline|tentativelyAccept
2025-12-19 16:51:40 -05:00
Bendt
ab6e080bb4 Fix search: increase tasks height to 4, disable input initially to prevent focus steal 2025-12-19 16:44:15 -05:00
Bendt
44cfe3f714 Fix search input stealing focus on app launch - explicitly focus main widget 2025-12-19 16:39:01 -05:00
Bendt
19bc1c7832 Increase calendar search bar height and center label vertically 2025-12-19 16:37:50 -05:00
Bendt
c5202793d4 Update PROJECT_PLAN.md: mark calendar search feature as completed 2025-12-19 16:34:40 -05:00
Bendt
95d3098bf3 Add search feature to calendar app with / keybinding using khal search 2025-12-19 16:34:21 -05:00
Bendt
599507068a Update PROJECT_PLAN.md: mark tasks search feature as completed 2025-12-19 16:31:04 -05:00
Bendt
505fdbcd3d Add search feature to tasks app with / keybinding and live filtering 2025-12-19 16:30:45 -05:00
Bendt
1337d84369 Update PROJECT_PLAN.md: mark subject styling as completed 2025-12-19 16:27:24 -05:00
Bendt
f1ec6c23e1 Enhance mail subject styling - bold bright white, remove label, add spacing 2025-12-19 16:27:11 -05:00
Bendt
4836bda9f9 Add cursor hour header highlighting in calendar week view 2025-12-19 16:25:42 -05:00
Bendt
9f596b10ae Add folder message counts to mail app sidebar 2025-12-19 16:24:56 -05:00
Bendt
98c318af04 Replace emoji and > separator with nerdfont icons in URL shortener 2025-12-19 16:22:32 -05:00
Bendt
994e545bd0 Add toggle read/unread action with 'u' keybinding in mail app 2025-12-19 16:18:09 -05:00
Bendt
fb0af600a1 Update PROJECT_PLAN.md: mark sync TUI default as completed 2025-12-19 16:16:44 -05:00
Bendt
39a5efbb81 Add 'r' keybinding to refresh mail message list 2025-12-19 16:16:12 -05:00
Bendt
b903832d17 Update PROJECT_PLAN.md: mark URL compression as completed 2025-12-19 16:15:39 -05:00
Bendt
8233829621 Add URL compression for mail content viewer 2025-12-19 16:15:08 -05:00
Bendt
36a1ea7c47 Notify tasks app when task is created from mail app 2025-12-19 16:11:42 -05:00
Bendt
4e859613f9 Add IPC notifications to sync dashboard after sync completes 2025-12-19 16:01:44 -05:00
Bendt
b9d818ac09 Update PROJECT_PLAN.md: mark Phase 1 items as completed 2025-12-19 15:58:04 -05:00
Bendt
ab55d0836e Add IPC listener to calendar and tasks apps for sync daemon refresh notifications 2025-12-19 15:57:46 -05:00
Bendt
f5ad43323c Improve mail and calendar UI: tighter checkbox layout and current time styling 2025-12-19 15:56:01 -05:00
Bendt
8933dadcd0 Improve mail sync performance with connection pooling and larger batches 2025-12-19 15:53:34 -05:00
Bendt
aaabd83fc7 Fix sync TUI freeze by completing auth before starting dashboard 2025-12-19 15:50:23 -05:00
Bendt
560bc1d3bd Add date picker for search date/before/after keywords
- Add DatePickerModal using MonthCalendar widget from calendar app
- Detect when user types 'date ', 'before ', or 'after ' and show picker
- Insert selected date (YYYY-MM-DD format) into search input
- Support keyboard navigation (left/right for months, Enter to select)
- Today button for quick selection of current date
2025-12-19 15:45:15 -05:00
Bendt
d4b09e5338 Improve search autocomplete UX
- Tab key accepts autocomplete suggestion (like right arrow)
- Prevent search from firing while autocomplete suggestion is visible
2025-12-19 15:42:31 -05:00
Bendt
9a2f8ee211 Add search autocomplete and fix search state restoration
- Add SuggestFromList with Himalaya keywords for search input autocomplete
- Cache and restore metadata_by_id when cancelling search (fixes navigation)
- Set search_mode=True when opening panel for consistent Escape behavior
- Fix SearchPanel CSS vertical alignment with explicit heights
2025-12-19 15:33:42 -05:00
Bendt
5deebbbf98 Fix search stability and improve Escape key behavior
- Add bounds check in _mark_message_as_read to prevent IndexError
- Clear metadata_by_id when search returns no results
- Escape now focuses search input when in search mode instead of exiting
- Add focus_input() method to SearchPanel
2025-12-19 15:10:50 -05:00
Bendt
807736f808 Support raw Himalaya query syntax in search
Detect when user types a query starting with Himalaya keywords (from, to,
subject, body, date, before, after, flag, not, order by) and pass it
through as-is instead of wrapping it in the compound search pattern.

This allows both:
- Simple searches: 'edson' → searches from/to/subject/body
- Raw queries: 'from edson' → uses Himalaya syntax directly
2025-12-19 15:00:04 -05:00
Bendt
a5f7e78d8d Fix IndexError when pressing Escape to exit search mode
Add bounds check in refresh_list_view_items() to handle cases where
ListView and message_store.envelopes are temporarily out of sync
during transitions (e.g., when exiting search mode).
2025-12-19 14:54:40 -05:00
Bendt
f56f1931bf Fix IndexError when selecting search results
The search header was being added to ListView but not to message_store.envelopes,
causing an index mismatch when marking messages as read. Now the search header
is included in the envelopes list and metadata_by_id is properly updated so
indices align between ListView and the message store.
2025-12-19 14:52:00 -05:00
Bendt
848e2a43a6 Fix Himalaya search by quoting query and placing it at end of command
The search query was being inserted unquoted in the middle of the command,
but Himalaya CLI expects the query to be quoted and positioned at the end.
2025-12-19 14:43:01 -05:00
Bendt
bbc53b4ce7 Add Himalaya search integration tests and fix 0 results display
- Add test mailbox with 5 sample emails for integration testing
- Add himalaya_test_config.toml for local Maildir backend testing
- Create 12 integration tests covering search by from/to/subject/body
- Fix search results display to clear list and show message when 0 results
- Add clear_content() method to ContentContainer widget
2025-12-19 14:42:10 -05:00
Bendt
8be4b4785c Add live search panel with debounced Himalaya search and help modal 2025-12-19 14:31:21 -05:00
Bendt
0cd7cf6984 Implement mail search using Himalaya CLI with auto-select first result 2025-12-19 14:18:40 -05:00
Bendt
d3468f7395 Fix mail search crash when envelope fields are None 2025-12-19 14:09:10 -05:00
Bendt
b75c069035 Fix mini-calendar to respect week_start_day config setting 2025-12-19 13:00:42 -05:00
Bendt
3629757e70 Add context filter to Tasks TUI and fix calendar UI bugs
Tasks TUI:
- Add context support to TaskBackend interface (get_context, set_context,
  get_contexts methods)
- Implement context methods in DstaskClient
- Add Context section to FilterSidebar (above projects/tags)
- Context changes persist via backend CLI

Calendar TUI:
- Remove duplicate header from InvitesPanel (use border_title instead)
- Fix border_title color to use $primary
- Fix WeekGrid to always scroll to work day start (7am) on mount
2025-12-19 11:51:53 -05:00