Theo dõi bài tập, thời hạn và lịch học từ hệ thống UTH E-learning.
UTHelper tổng hợp hoạt động học tập từ Moodle và lịch học từ UTH Portal trong một giao diện gọn. Ứng dụng theo dõi bài tập, quiz, điểm danh, thời hạn, trạng thái nộp bài và thay đổi điểm. Dữ liệu đăng nhập được lưu cục bộ bằng kho bí mật của hệ điều hành khi nền tảng hỗ trợ.
UTHelper là dự án độc lập dành cho sinh viên. Dự án không đại diện cho Trường Đại học Giao thông vận tải Thành phố Hồ Chí Minh và không thay thế các cổng thông tin chính thức của trường.
Phiên bản mã nguồn hiện tại là 2.5.0. UI, runtime package và số build nền tảng
đều được sinh từ version canonical trong pyproject.toml; không chỉnh version
riêng trong từng nền tảng.
Bản Android ARM64 nhẹ dùng tệp UTHelper-2.5.0-arm64-v8a.apk; bản universal
UTHelper-2.5.0.apk dành cho các kiến trúc còn lại và tương thích cập nhật cũ.
Windows tiếp tục dùng bộ cài EXE/MSI đã ký, với phần đóng gói được tinh gọn.
| Nhóm | Khả năng |
|---|---|
| Hoạt động học tập | Đồng bộ bài tập, quiz và điểm danh từ các Moodle site được hỗ trợ |
| Bài nộp | Xem trạng thái, tải lên, thêm, thay thế, đổi tên và xóa tệp khi Moodle cho phép |
| Lịch học | Hiển thị môn, khung giờ, phòng, cơ sở và trạng thái buổi học trong ngày |
| Điểm | Theo dõi thay đổi điểm và phát thông báo khi phát hiện dữ liệu mới |
| Nhắc hạn | Phân loại hoạt động theo mức khẩn cấp và mốc thời gian cấu hình được |
| Thông báo | Windows Toast, thông báo di động, Discord, Telegram và email |
| Làm việc ngoại tuyến | Đọc snapshot gần nhất trong lúc dịch vụ trường hoặc mạng không khả dụng |
| Cập nhật | Kiểm tra package đúng nền tảng, xác minh metadata và yêu cầu xác nhận trước khi cài |
| Giao diện | Sáu theme, bộ lọc theo môn và loại hoạt động, tìm kiếm, lịch và system tray trên Windows |
Khả năng sửa bài nộp phụ thuộc cấu hình, thời hạn và quyền do Moodle trả về. Các thao tác bị khóa, bài nhóm hoặc loại bài không được hỗ trợ sẽ mở luồng web thay vì cố ghi dữ liệu qua API.
| Nền tảng | Trạng thái | Gói phân phối |
|---|---|---|
| Windows 10/11 | Đường sử dụng chính | MSI và installer EXE |
| Android 8 trở lên | Được build và kiểm tra bằng CI | APK |
| iOS | Gói thiết bị không ký; người dùng phải tự ký lại | IPA không ký |
| Web | Dùng cho phát triển và chẩn đoán | Chạy từ source |
Tải bản phát hành tại GitHub Releases. Mỗi release production phải có manifest, checksum và bằng chứng xác minh tương ứng với package công bố.
Yêu cầu Python 3.11 trở lên. Các workflow CI hiện kiểm tra Python 3.12, 3.13 và 3.14.
git clone https://github.com/Chouwzi/UTHelper.git
cd UTHelper
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -e ".[windows]"
python src\main.pyChế độ Web dành cho phát triển:
python src\main.py --webỨng dụng phục vụ tại http://localhost:8561 nếu không cấu hình cổng khác.
Cài project, extension native và công cụ kiểm tra:
python -m pip install -e ".[windows]"
python -m pip install -e extensions\flet_uth_background_sync
python -m pip install pytest pytest-timeout ruffChạy các cổng kiểm tra chính:
$env:PYTHONPATH = "src;extensions/flet_uth_background_sync/src;."
python -m pytest tests -q --tb=short
ruff check src tests scripts
python scripts\measure_ui_performance.pyCác test live dùng tài khoản hoặc course thật bị tắt theo mặc định. Không đưa credential, cookie, token, HAR chưa che dữ liệu hoặc payload sinh viên vào commit, fixture hay log CI.
Đọc CONTRIBUTING.md trước khi mở pull request. Repository dùng
Gitflow: tính năng và bugfix đi vào develop; release ổn định đi từ develop
sang main; hotfix từ main phải merge ngược lại develop. Quy tắc nhánh đầy
đủ nằm trong hướng dẫn Gitflow.
python -m pip install -e ".[android-build]"
.\scripts\build_android.ps1 -Target apkAPK cục bộ nằm trong build/apk. Build production còn yêu cầu version code
chuẩn và khóa ký do release workflow cung cấp.
python -m pip install -e ".[windows]"
.\scripts\build_installer.ps1Entry point này build Flet bundle, kiểm tra cửa sổ và system tray, xác minh bundle, rồi đóng gói MSI và Burn EXE bằng WiX. Xem Windows packaging để biết dependency, ký mã và các cổng xác minh.
Danh mục script được duy trì tại scripts/README.md. Không
dùng file sinh ra trong build/ làm source hoặc commit chúng vào repository.
src/
├── core/ use case, Moodle/Portal service, cache và policy
├── gui/ Flet views, presenter, controller và composition root
├── notifiers/ các adapter thông báo
├── platform_utils/ tích hợp Windows, Android, iOS và package update
├── config.py settings, migration và secure persistence
└── main.py bootstrap, single-instance và Flet host
extensions/
└── flet_uth_background_sync/ bridge native cho đồng bộ và thông báo
Luồng phụ thuộc mong muốn là gui -> core use cases -> service/adapters. Core
không phụ thuộc GUI. Các quyết định kiến trúc có hiệu lực nằm trong
docs/adr; kế hoạch và bằng chứng refactor nằm trong
docs/architecture.
- Mật khẩu và token bí mật dùng Windows Credential Manager hoặc Keychain khi backend tương ứng khả dụng.
- HTML từ Moodle được làm sạch trước khi hiển thị.
- Request mạng có xác minh TLS và timeout hữu hạn.
- Chẩn đoán sự cố ẩn danh được bật mặc định và có thể tắt trong Cài đặt.
- Updater xác minh package, metadata và chữ ký theo chính sách của từng nền tảng trước khi mở installer.
Đọc điều khoản sử dụng và chính sách quyền riêng tư để biết dữ liệu chẩn đoán và thời hạn lưu. Báo cáo lỗ hổng theo SECURITY.md; không đăng credential hoặc chi tiết khai thác chưa vá trong issue công khai.
Chỉ mục tài liệu là điểm bắt đầu cho API contract, hướng dẫn
vận hành, test matrix, ADR và hồ sơ kiến trúc. Tài liệu trong docs/archive
chỉ lưu lịch sử thiết kế, không phải backlog hiện hành.
Mã nguồn được công bố theo PolyForm Noncommercial 1.0.0. Giấy phép cho phép sử dụng, nghiên cứu và sửa đổi trong phạm vi phi thương mại; đây không phải giấy phép nguồn mở theo định nghĩa OSI. Mọi hình thức sử dụng thương mại cần có thỏa thuận riêng với tác giả.
UTHelper được duy trì bởi @Chouwzi.