Implemented Phase 10 (Desktop Notifications) with three stages: notify-rust integration, smart filtering, and production polish. Stage 1 - Base Implementation: - Add NotificationManager module (src/notifications.rs, 350+ lines) - Integrate notify-rust 4.11 with feature flag "notifications" - Implement NotificationsConfig in config.toml (enabled, only_mentions, show_preview) - Add notification_manager field to TdClient - Create configure_notifications() method for config integration - Hook into handle_new_message_update() to send notifications - Send notifications for messages outside current chat - Format notification body with sender name and message preview Stage 2 - Smart Filtering: - Sync muted chats from Telegram (sync_muted_chats method) - Filter muted chats from notifications automatically - Add MessageInfo::has_mention() to detect @username mentions - Implement only_mentions filter (notify only when mentioned) - Beautify media labels with emojis (📷 📹 🎤 🎨 📎 etc.) - Support 10+ media types in notification preview Stage 3 - Production Polish: - Add graceful error handling (no panics on notification failure) - Implement comprehensive logging (tracing::debug!/warn!) - Add timeout_ms configuration (0 = system default) - Add urgency configuration (low/normal/critical, Linux only) - Platform-specific #[cfg] for urgency support - Log all notification skip reasons at debug level Hotkey Change: - Move profile view from 'i' to Ctrl+i to avoid conflicts Technical Details: - Cross-platform support (macOS, Linux, Windows) - Feature flag for optional notifications support - Graceful fallback when notifications unavailable - LRU-friendly muted chats sync - Test coverage for all core notification logic - All 75 tests passing Files Changed: - NEW: src/notifications.rs - Complete NotificationManager - NEW: config.example.toml - Example configuration with notifications - Modified: Cargo.toml - Add notify-rust 4.11 dependency - Modified: src/config/mod.rs - Add NotificationsConfig struct - Modified: src/tdlib/types.rs - Add has_mention() method - Modified: src/tdlib/client.rs - Add notification integration - Modified: src/tdlib/update_handlers.rs - Hook notifications - Modified: src/config/keybindings.rs - Change profile to Ctrl+i - Modified: tests/* - Add notification config to tests Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
56 lines
1.3 KiB
TOML
56 lines
1.3 KiB
TOML
[package]
|
|
name = "tele-tui"
|
|
version = "0.1.0"
|
|
edition = "2021"
|
|
authors = ["Your Name <your.email@example.com>"]
|
|
description = "Terminal UI for Telegram with Vim-style navigation"
|
|
license = "MIT"
|
|
repository = "https://github.com/your-username/tele-tui"
|
|
keywords = ["telegram", "tui", "terminal", "cli"]
|
|
categories = ["command-line-utilities"]
|
|
|
|
[features]
|
|
default = ["clipboard", "url-open", "notifications"]
|
|
clipboard = ["dep:arboard"]
|
|
url-open = ["dep:open"]
|
|
notifications = ["dep:notify-rust"]
|
|
|
|
[dependencies]
|
|
ratatui = "0.29"
|
|
crossterm = "0.28"
|
|
tdlib-rs = { version = "1.2.0", features = ["download-tdlib"] }
|
|
tokio = { version = "1", features = ["full"] }
|
|
async-trait = "0.1"
|
|
serde = { version = "1.0", features = ["derive"] }
|
|
serde_json = "1.0"
|
|
dotenvy = "0.15"
|
|
chrono = "0.4"
|
|
open = { version = "5.0", optional = true }
|
|
arboard = { version = "3.4", optional = true }
|
|
notify-rust = { version = "4.11", optional = true }
|
|
toml = "0.8"
|
|
dirs = "5.0"
|
|
thiserror = "1.0"
|
|
tracing = "0.1"
|
|
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
|
|
|
|
[dev-dependencies]
|
|
insta = "1.34"
|
|
tokio-test = "0.4"
|
|
criterion = "0.5"
|
|
|
|
[build-dependencies]
|
|
tdlib-rs = { version = "1.2.0", features = ["download-tdlib"] }
|
|
|
|
[[bench]]
|
|
name = "group_messages"
|
|
harness = false
|
|
|
|
[[bench]]
|
|
name = "formatting"
|
|
harness = false
|
|
|
|
[[bench]]
|
|
name = "format_markdown"
|
|
harness = false
|