diff --git a/.coverage b/.coverage index 5459580..eca4f3d 100644 Binary files a/.coverage and b/.coverage differ diff --git a/drive_view_tui.py b/drive_view_tui.py index a5640fe..c5c3819 100644 --- a/drive_view_tui.py +++ b/drive_view_tui.py @@ -37,7 +37,7 @@ from textual.widgets.option_list import Option from src.utils.file_icons import get_file_icon # Import our DocumentViewerScreen -sys.path.append(os.path.join(os.path.dirname(__file__), "src", "maildir_gtd")) +sys.path.append(os.path.join(os.path.dirname(__file__), "src", "mail")) from screens.DocumentViewer import DocumentViewerScreen diff --git a/src/cli/__init__.py b/src/cli/__init__.py index ccb31c6..a456b5d 100644 --- a/src/cli/__init__.py +++ b/src/cli/__init__.py @@ -25,6 +25,8 @@ cli.add_command(ticktick) cli.add_command(godspeed) cli.add_command(gitlab_monitor) +# Add 'mail' as an alias for email +cli.add_command(email, name="mail") # Add 'tt' as a short alias for ticktick cli.add_command(ticktick, name="tt") # Add 'gs' as a short alias for godspeed diff --git a/src/cli/email.py b/src/cli/email.py index 251c38b..1141c99 100644 --- a/src/cli/email.py +++ b/src/cli/email.py @@ -1,5 +1,5 @@ import click -from src.maildir_gtd.app import launch_email_viewer +from src.mail.app import launch_email_viewer @click.command() diff --git a/src/mail/__init__.py b/src/mail/__init__.py new file mode 100644 index 0000000..2ccd38b --- /dev/null +++ b/src/mail/__init__.py @@ -0,0 +1 @@ +# Initialize the mail package diff --git a/src/maildir_gtd/actions/__init__.py b/src/mail/actions/__init__.py similarity index 100% rename from src/maildir_gtd/actions/__init__.py rename to src/mail/actions/__init__.py diff --git a/src/maildir_gtd/actions/archive.py b/src/mail/actions/archive.py similarity index 100% rename from src/maildir_gtd/actions/archive.py rename to src/mail/actions/archive.py diff --git a/src/maildir_gtd/actions/delete.py b/src/mail/actions/delete.py similarity index 100% rename from src/maildir_gtd/actions/delete.py rename to src/mail/actions/delete.py diff --git a/src/maildir_gtd/actions/newest.py b/src/mail/actions/newest.py similarity index 100% rename from src/maildir_gtd/actions/newest.py rename to src/mail/actions/newest.py diff --git a/src/maildir_gtd/actions/next.py b/src/mail/actions/next.py similarity index 100% rename from src/maildir_gtd/actions/next.py rename to src/mail/actions/next.py diff --git a/src/maildir_gtd/actions/oldest.py b/src/mail/actions/oldest.py similarity index 100% rename from src/maildir_gtd/actions/oldest.py rename to src/mail/actions/oldest.py diff --git a/src/maildir_gtd/actions/open.py b/src/mail/actions/open.py similarity index 100% rename from src/maildir_gtd/actions/open.py rename to src/mail/actions/open.py diff --git a/src/maildir_gtd/actions/previous.py b/src/mail/actions/previous.py similarity index 100% rename from src/maildir_gtd/actions/previous.py rename to src/mail/actions/previous.py diff --git a/src/maildir_gtd/actions/show_message.py b/src/mail/actions/show_message.py similarity index 100% rename from src/maildir_gtd/actions/show_message.py rename to src/mail/actions/show_message.py diff --git a/src/maildir_gtd/actions/task.py b/src/mail/actions/task.py similarity index 100% rename from src/maildir_gtd/actions/task.py rename to src/mail/actions/task.py diff --git a/src/maildir_gtd/app.py b/src/mail/app.py similarity index 99% rename from src/maildir_gtd/app.py rename to src/mail/app.py index a606581..6a71fe3 100644 --- a/src/maildir_gtd/app.py +++ b/src/mail/app.py @@ -1,4 +1,4 @@ -from .config import get_config, MaildirGTDConfig +from .config import get_config, MailAppConfig from .message_store import MessageStore from .widgets.ContentContainer import ContentContainer from .widgets.EnvelopeListItem import EnvelopeListItem, GroupHeader diff --git a/src/maildir_gtd/config.py b/src/mail/config.py similarity index 87% rename from src/maildir_gtd/config.py rename to src/mail/config.py index c7ded44..d5bcd82 100644 --- a/src/maildir_gtd/config.py +++ b/src/mail/config.py @@ -1,4 +1,4 @@ -"""Configuration system for MaildirGTD email reader using Pydantic.""" +"""Configuration system for Mail email reader using Pydantic.""" import logging import os @@ -90,7 +90,7 @@ class LinkPanelConfig(BaseModel): close_on_open: bool = False -class MailConfig(BaseModel): +class MailOperationsConfig(BaseModel): """Configuration for mail operations.""" # Folder to move messages to when archiving @@ -103,8 +103,8 @@ class ThemeConfig(BaseModel): theme_name: str = "monokai" -class MaildirGTDConfig(BaseModel): - """Main configuration for MaildirGTD email reader.""" +class MailAppConfig(BaseModel): + """Main configuration for Mail email reader.""" task: TaskBackendConfig = Field(default_factory=TaskBackendConfig) envelope_display: EnvelopeDisplayConfig = Field( @@ -112,7 +112,7 @@ class MaildirGTDConfig(BaseModel): ) content_display: ContentDisplayConfig = Field(default_factory=ContentDisplayConfig) link_panel: LinkPanelConfig = Field(default_factory=LinkPanelConfig) - mail: MailConfig = Field(default_factory=MailConfig) + mail: MailOperationsConfig = Field(default_factory=MailOperationsConfig) keybindings: KeybindingsConfig = Field(default_factory=KeybindingsConfig) theme: ThemeConfig = Field(default_factory=ThemeConfig) @@ -120,15 +120,15 @@ class MaildirGTDConfig(BaseModel): def get_config_path(cls) -> Path: """Get the path to the config file.""" # Check environment variable first - env_path = os.getenv("MAILDIR_GTD_CONFIG") + env_path = os.getenv("LUK_MAIL_CONFIG") if env_path: return Path(env_path) - # Default to ~/.config/luk/maildir_gtd.toml - return Path.home() / ".config" / "luk" / "maildir_gtd.toml" + # Default to ~/.config/luk/mail.toml + return Path.home() / ".config" / "luk" / "mail.toml" @classmethod - def load(cls, config_path: Optional[Path] = None) -> "MaildirGTDConfig": + def load(cls, config_path: Optional[Path] = None) -> "MailAppConfig": """Load config from TOML file with defaults for missing values.""" if config_path is None: config_path = cls.get_config_path() @@ -161,19 +161,19 @@ class MaildirGTDConfig(BaseModel): # Global config instance (lazy-loaded) -_config: Optional[MaildirGTDConfig] = None +_config: Optional[MailAppConfig] = None -def get_config() -> MaildirGTDConfig: +def get_config() -> MailAppConfig: """Get the global config instance, loading it if necessary.""" global _config if _config is None: - _config = MaildirGTDConfig.load() + _config = MailAppConfig.load() return _config -def reload_config() -> MaildirGTDConfig: +def reload_config() -> MailAppConfig: """Force reload of the config from disk.""" global _config - _config = MaildirGTDConfig.load() + _config = MailAppConfig.load() return _config diff --git a/src/maildir_gtd/email_viewer.tcss b/src/mail/email_viewer.tcss similarity index 100% rename from src/maildir_gtd/email_viewer.tcss rename to src/mail/email_viewer.tcss diff --git a/src/maildir_gtd/message_store.py b/src/mail/message_store.py similarity index 100% rename from src/maildir_gtd/message_store.py rename to src/mail/message_store.py diff --git a/src/maildir_gtd/screens/ConfirmDialog.py b/src/mail/screens/ConfirmDialog.py similarity index 100% rename from src/maildir_gtd/screens/ConfirmDialog.py rename to src/mail/screens/ConfirmDialog.py diff --git a/src/maildir_gtd/screens/CreateTask.py b/src/mail/screens/CreateTask.py similarity index 100% rename from src/maildir_gtd/screens/CreateTask.py rename to src/mail/screens/CreateTask.py diff --git a/src/maildir_gtd/screens/DocumentViewer.py b/src/mail/screens/DocumentViewer.py similarity index 100% rename from src/maildir_gtd/screens/DocumentViewer.py rename to src/mail/screens/DocumentViewer.py diff --git a/src/maildir_gtd/screens/LinkPanel.py b/src/mail/screens/LinkPanel.py similarity index 99% rename from src/maildir_gtd/screens/LinkPanel.py rename to src/mail/screens/LinkPanel.py index 7b39a11..08e2160 100644 --- a/src/maildir_gtd/screens/LinkPanel.py +++ b/src/mail/screens/LinkPanel.py @@ -13,7 +13,7 @@ from textual.containers import Container, Vertical from textual.screen import ModalScreen from textual.widgets import Label, ListView, ListItem, Static -from src.maildir_gtd.config import get_config +from src.mail.config import get_config @dataclass diff --git a/src/maildir_gtd/screens/OpenMessage.py b/src/mail/screens/OpenMessage.py similarity index 100% rename from src/maildir_gtd/screens/OpenMessage.py rename to src/mail/screens/OpenMessage.py diff --git a/src/maildir_gtd/screens/__init__.py b/src/mail/screens/__init__.py similarity index 100% rename from src/maildir_gtd/screens/__init__.py rename to src/mail/screens/__init__.py diff --git a/src/maildir_gtd/utils.py b/src/mail/utils.py similarity index 100% rename from src/maildir_gtd/utils.py rename to src/mail/utils.py diff --git a/src/maildir_gtd/widgets/ContentContainer.py b/src/mail/widgets/ContentContainer.py similarity index 98% rename from src/maildir_gtd/widgets/ContentContainer.py rename to src/mail/widgets/ContentContainer.py index 8be874b..a7f9759 100644 --- a/src/maildir_gtd/widgets/ContentContainer.py +++ b/src/mail/widgets/ContentContainer.py @@ -5,8 +5,8 @@ from textual.containers import Vertical, ScrollableContainer from textual.widgets import Static, Markdown, Label from textual.reactive import reactive from src.services.himalaya import client as himalaya_client -from src.maildir_gtd.config import get_config -from src.maildir_gtd.screens.LinkPanel import extract_links_from_content, LinkItem +from src.mail.config import get_config +from src.mail.screens.LinkPanel import extract_links_from_content, LinkItem import logging from datetime import datetime from typing import Literal, List diff --git a/src/maildir_gtd/widgets/EnvelopeHeader.py b/src/mail/widgets/EnvelopeHeader.py similarity index 100% rename from src/maildir_gtd/widgets/EnvelopeHeader.py rename to src/mail/widgets/EnvelopeHeader.py diff --git a/src/maildir_gtd/widgets/EnvelopeListItem.py b/src/mail/widgets/EnvelopeListItem.py similarity index 99% rename from src/maildir_gtd/widgets/EnvelopeListItem.py rename to src/mail/widgets/EnvelopeListItem.py index eab1a02..8ecb0ba 100644 --- a/src/maildir_gtd/widgets/EnvelopeListItem.py +++ b/src/mail/widgets/EnvelopeListItem.py @@ -7,7 +7,7 @@ from textual.app import ComposeResult from textual.containers import Horizontal, Vertical from textual.widgets import Label, Static -from src.maildir_gtd.config import EnvelopeDisplayConfig, get_config +from src.mail.config import EnvelopeDisplayConfig, get_config class EnvelopeListItem(Static): diff --git a/src/maildir_gtd/widgets/__init__.py b/src/mail/widgets/__init__.py similarity index 100% rename from src/maildir_gtd/widgets/__init__.py rename to src/mail/widgets/__init__.py diff --git a/src/maildir_gtd/__init__.py b/src/maildir_gtd/__init__.py deleted file mode 100644 index 11c4e8c..0000000 --- a/src/maildir_gtd/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# Initialize the maildir_gtd package diff --git a/src/services/himalaya/client.py b/src/services/himalaya/client.py index 2673d02..b533eb1 100644 --- a/src/services/himalaya/client.py +++ b/src/services/himalaya/client.py @@ -4,7 +4,7 @@ import json import logging import subprocess -from src.maildir_gtd.config import get_config +from src.mail.config import get_config async def list_envelopes(limit: int = 9999) -> Tuple[List[Dict[str, Any]], bool]: diff --git a/src/services/task_client.py b/src/services/task_client.py index 98c6e4c..7bda125 100644 --- a/src/services/task_client.py +++ b/src/services/task_client.py @@ -6,7 +6,7 @@ import logging import shlex from typing import Tuple, List, Dict, Any, Optional -from src.maildir_gtd.config import get_config +from src.mail.config import get_config logger = logging.getLogger(__name__)