Simple Download Manager is a complete desktop application built with Python and CustomTkinter. It downloads files from direct URLs, accelerates transfers with segmented multi-threading, supports pause and resume, and keeps a persistent download history across application restarts.
The project includes:
- a src-based package layout
- a runnable CustomTkinter desktop shell
- domain models for downloads and status tracking
- an HTTP probe service that inspects remote files before download
- a simple download manager with worker threads, pause, resume, cancel, partial resume, and file assembly
- SQLite-backed task history loaded automatically on startup
- SQLite-backed per-segment metadata for richer recovery and diagnostics
- configurable default save location, thread count, retry count, and max concurrent downloads
- queueing when the concurrent download limit is reached
- optional scheduled start times per download
- shared bandwidth limiting across active downloads
- queue actions for removing tasks and opening download folders
- direct open-file actions for completed downloads
- advanced progress with live speed and ETA
- a recent activity panel and in-app completion/failure notifications
- a live task details dialog for segment-level diagnostics
- unit and integration tests for speed tracking, persistence, segment resume, and end-to-end downloads
This implementation satisfies the project requirements for:
- file downloading from URLs
- multi-threaded segmented downloads
- HTTP Range request handling
- error handling with automatic retry
- pause and resume
- progress monitoring with percentage, speed, and ETA
- download history persistence
- download scheduling
- bandwidth limiting
- resume after application restart
- queue management
graph TD
UI[UI Layer] --> APP[Application Controller]
APP --> DM[Download Manager]
DM --> HTTP[HTTP Probe Service]
DM --> CTRL[Thread Controller]
CTRL --> WORKERS[Segment Workers]
CTRL --> ASSEMBLER[File Assembler]
DM --> CORE[Download Domain Model]
DM --> PERSIST[SQLite History Store]
The application follows a layered desktop architecture with a clear split between UI, orchestration, download execution, and persistence. Communication between components is handled through Python objects, threads, and HTTP requests.
Simple Download Manager/
├── main.py
├── pyproject.toml
├── requirements.txt
├── src/
│ └── sdm/
│ ├── app.py
│ ├── core/
│ ├── models/
│ └── ui/
└── tests/
Run the full automated suite:
python -m pytestCurrent result: 19 passed.
Create a virtual environment and install dependencies:
# Optional, but highly recommended
python3 -m venv venv
python -m pip install -r requirements.txtIf you are using Debian/Ubuntu:
sudo apt update
sudo apt install python3-tk
Finally, run the application:
python main.py
This project is licensed under the GNU General Public License v3.0. See the LICENSE file for the full text.
