Your task is to write a simple but powerful Download Manager.
The software will be written in pure Win32 API. It will run in all Windows versions, XP and newer.
Your final source code must compile in LCC-Win32 compiler. Use C, not C++
You are not allowed to use any external libraries, dependencies or runtimes.
The application will consist of a main window (with the list of currently downloading files and their current progress), control icons (to start / stop / resume download, to add new URLs for download, to remove given download, etc.), system tray icon, and some Configuration dialog where user can set some default values. Furthermore each file will have rightclick-menu where the values may be set per individual file.
If you know uTorrent, the user interface is somehow similar to what I want. Yet I do not need torrent support, only pure HTTP support.
User will provide a list of URLs which he wants to download, and the software will download all the given files in parallel. It will show progress for each file. It will support RESUME operation to continue interrupted download automatically. It will also support downloading of a file using several connections, downloading one part of the file in one connection and other part of the file in the other connection, etc. (it will split file into several parts and use RANGE requests to get just the specified ranges, with fallback to single connection if the server doesn't support RANGE).
User will be able to add more files during active download, and the files will start downloading right away. The software will allow the user to stop or resume any existing download. HTTPS support is not needed.
You must absolutely understand the following:
- HTTP byte range
- Win32 API
- LCC-Win32 compiler
- Manifest for visual styles (ala XP)
Your task is to design the software too, so it is usable, intuitive, simple, yet nice looking too. For example, I didn't mention that the tray icon must have a rightclick menu where user can "Close" the application, or "Pause all downloads", etc... - these things are so obvious that you must be prepared to make them without needing me to request them. Use your brain and make the software useful for users.
I will require you to write high quality software, I am a software developer myself and I will check your code daily.