🎓 Theo dõi deadline & bài tập UTH Elearning — Không bỏ lỡ bất kỳ deadline nào.
| Tính năng | Mô tả |
|---|---|
| 📋 Theo dõi deadline | Tự động lấy bài tập, quiz, điểm danh từ Moodle WS API |
| 📊 Theo dõi điểm | Giám sát thay đổi điểm theo thời gian thực, thông báo khi có điểm mới |
| 🔔 Cảnh báo thông minh | Phân loại Khẩn cấp · Sắp hạn · An toàn · Quá hạn |
| 📅 Lịch học | Xem lịch học theo tuần với deadline trực quan |
| ⚡ Hiệu suất cao | Startup ~4s, parallel API, grade N+1 optimization |
| 📱 Đa nền tảng | Windows desktop · Android APK · Web browser |
| 🎨 6 Theme | Midnight Blue · Ocean Teal · Sakura Pink · Nord Frost · Monokai Pro · Solarized Dark |
| 📣 Đa kênh thông báo | Windows Toast · Discord · Telegram · Email |
| 🔐 Bảo mật | Mật khẩu lưu trong Credential Manager / Keychain |
| 🖥️ System Tray | Chạy nền, tự động cập nhật theo lịch |
| 🔍 Bộ lọc nâng cao | Lọc theo môn, loại, mức cấp bách, tìm kiếm full-text |
| 🔄 Smart Polling | Tự động làm mới với interval tùy chỉnh |
Coming soon
- Python 3.11+ (hỗ trợ đến 3.14)
- Windows 10/11 (desktop) hoặc Android 8+
# Clone repository
git clone https://github.com/Chouwzi/UTHelper.git
cd UTHelper
# Tạo virtual environment (khuyến nghị)
python -m venv .venv
.venv\Scripts\activate # Windows
# Cài dependencies
pip install -e ".[windows]" # Windows (đầy đủ)
pip install -e . # Cross-platform (core only)
# Chạy ứng dụng
python src/main.pypython src/main.py --web
# Mở http://localhost:8561# Set encoding (bắt buộc trên Windows)
$env:PYTHONIOENCODING = 'utf-8'
$env:PYTHONUTF8 = '1'
# Build APK
flet build apk
# Output: build/apk/UTHelper.apk$env:PYTHONIOENCODING = 'utf-8'
flet build windows| Tool | Mục đích | Ghi chú |
|---|---|---|
| Flutter SDK | Core engine | Tự động cài bởi Flet CLI |
| VS Build Tools 2022+ | Windows build | Cần C++ Desktop workload |
| Android SDK | Android build | Tự động qua Flutter |
src/
├── main.py # Entry point + crash handler
├── config.py # Settings (Pydantic) + keyring
├── models.py # Data models (Activity, Course)
│
├── core/ # Business logic
│ ├── client.py # MoodleClient (urllib + Cloudflare bypass)
│ ├── data_orchestrator.py # Pipeline: WS API → activities (parallel fetch)
│ ├── ws_functions.py # 30+ Moodle WS API wrappers
│ ├── grade_monitor.py # Grade change detection (N+1 optimized)
│ ├── data_cache.py # Thread-safe data cache
│ ├── filter_service.py # Smart filtering engine
│ ├── time_utils.py # Timezone-aware time helpers
│ ├── display_utils.py # Display formatters
│ ├── security.py # HTML sanitizer
│ ├── network_utils.py # Network connectivity check
│ ├── notification_history.py # Notification dedup + history
│ ├── update_checker.py # GitHub release auto-update
│ └── background_scheduler.py # Periodic background tasks
│
├── gui/ # UI layer (Flet 0.85+)
│ ├── app_controller.py # Main controller + navigation
│ ├── compact_desktop.py # Desktop layout orchestrator
│ ├── tray.py # System tray (Windows)
│ ├── components/
│ │ ├── activity_card.py # Activity card widget
│ │ ├── detail_view.py # Detail view + file manager
│ │ ├── calendar_view.py # Calendar view (weekly)
│ │ ├── grade_overview_view.py # Grade overview panel
│ │ ├── login_dialog.py # Login dialog
│ │ └── settings_view.py # Settings (6 themes + integrations)
│ └── core/
│ ├── theme.py # 6 theme presets + color system
│ └── utils.py # UI utilities
│
├── notifiers/ # Notification channels
│ ├── manager.py # Notification orchestrator
│ ├── windows.py # Windows Toast notifications
│ ├── discord.py # Discord webhook
│ ├── email.py # Email (SMTP/Gmail)
│ ├── telegram.py # Telegram bot
│ └── mobile.py # Android/iOS push notifications
│
└── platform_utils/ # Platform abstraction
├── android.py # Android-specific (storage, etc.)
└── credentials.py # Cross-platform credential store
- ✅ Mật khẩu lưu trong Windows Credential Manager / macOS Keychain (không plaintext)
- ✅ HTML content từ Moodle được sanitize trước khi hiển thị
- ✅ SSL verification luôn bật, timeout trên mọi request
- ✅ Zero dependency HTTP client (stdlib
urllib.request) - ✅ Không lưu credentials trong source code
# Chạy unit tests
cd src && python -m pytest ../tests/ -q
# Với coverage
python -m pytest ../tests/ --cov=. --cov-report=html
# 314 tests covering:
# ├── Core modules (client, orchestrator, ws_functions)
# ├── Grade monitoring & change detection
# ├── Filter service & data cache
# ├── Display utils & time utils
# ├── Notification manager & history
# ├── HTML parsing & sanitization
# └── Credential security| Workflow | Trigger | Jobs |
|---|---|---|
CI (ci.yml) |
Push/PR to develop, main |
🔍 Lint (Ruff) · 🧪 Test (3.12/3.13/3.14) · 🔒 Security (pip-audit) |
Build Android (build-android.yml) |
Push to main, tags v* |
📱 Build APK/AAB · 📤 Upload artifact · 🏷️ Release |
Gitflow workflow:
main ← Production releases (tagged)
└─ develop ← Integration branch
├─ feature/* ← New features
├─ bugfix/* ← Bug fixes
└─ hotfix/* ← Critical production fixes
feat(gui): add theme switching with live preview
fix(client): handle timeout on slow connections
perf(grade): optimize N+1 API calls (37 → 0-2 per cycle)
docs: update README with build instructions
- Moodle WS API integration (30+ endpoints)
- 6 theme presets + custom colors
- Multi-channel notifications (Toast/Discord/Telegram/Email)
- Android APK build
- Grade monitoring & change alerts
- Calendar view (weekly schedule)
- Smart polling with configurable interval
- Notification badge with unread count
- Performance optimization (startup 15s → 4s)
- CI/CD pipeline (lint + test + security)
- iOS TestFlight build
- File download & re-upload workflow
- Welcome screen for first-time users
- Offline mode with local cache
⚠️ Mã nguồn mở nhưng CẤM sử dụng thương mại. Bạn được phép xem, sử dụng, sửa đổi cho mục đích cá nhân, học tập, nghiên cứu. Không được sao chép, bán, hoặc dùng cho mục đích thương mại mà không có sự đồng ý bằng văn bản của tác giả.
Made with ❤️ for UTH students by @Chouwzi.