The download manager is in the wild

So it's finally done, it took very long, but it's done. The download manager I once had in mind is taking off into the wildness :-) Of course it took long because I never did something with it, writing a front-end to wget/curl isn't interesting -- who cares about downloading HTTP/FTP files when the web browser handles it for you anyway -- and reusing GVFS doesn't make sense cause really you don't want to download from your trash:// or whatever proto:// and again only HTTP/FTP is not interesting. Not at all. I have come across Uget and other very good projects but most of them are either writing the code to handle the protocol like HTTP and/or are looking forward to handle more interesting protocols like BitTorrent. I think it's a very tough job that demands too much for a one-maintainer project. Recently I saw the new release of aria2 that comes with an XML-RPC interface and this took all my interest during 4 days. I believe this utility is very promising and I had really like to write the good and user-friendly XML-RPC GUI client that it seems to be missing!

What is so exciting about aria2? In case you know the project you don't have to read, but it is worth mentionning the features of this small utility. It supports HTTP(s)/FTP but also BitTorrent and Metalinks. It is widely customizable for each specific protocol. It can download one file by splitting it into several pieces and using multiple connections and even mix HTTP URIs with BitTorrent and by the same time upload to BitTorrent peers what has been downloaded through HTTP. So this has to be the perfect candidate to write a nice download manager, hasn't it?

The client is a very first version that I intended to code name draft although the release assistant on xfce.org doesn't allow this. Instead it will take the more neutral road of 0.1.0 to 0.1.1 etc until 0.2.0 followed by stable fix releases.

Why draft? Simple. It's being written with a higher level language than C but not even Vala :-) High-level languages are a great deal when starting a new application, as you can type more and get more, instead of typing like a dog for a rocking hot, well lousy, window. Since I do like Ruby, it's being written in Ruby currently, and it depends on the ruby-gnome2 project for the bindings. To get a picture, a main file to open a window takes 3 lines. Of course the final version is meant to be written in Vala/C, but I still need to convince myself that Vala+libsoup isn't an option that is going to waste too much time. Also at first glance libsoup looks easy to use, it allows to build XML-RPC requests, to request the HTTP bodies and to send messages, but it is not an XML-RPC client and you never know how well the Vala bindings will play. This means extra attention for small things. Starting an application from scratch with such constraints are usually a big time-killer therefore using like in this case an existing XML-RPC client is very important. The GUI is done with Glade in GtkBuilder format and reusing it into a new language will be pretty easy.

So what's next? I'll just wait for some feedback see what the audience thinks about it, if at all, and polish here and there. Keep tuned for the next update.


  1. Hmm, so does this mean I could download, say, a new Ubuntu release from both the torrent and Canonical's server and seed it immediately?

  2. Good you mention this. Currently from the GUI you can only add one URI per download. This means either you download from HTTP/FTP or from BitTorrent. But then you have the possibility to download from Metalinks and Ubuntu mades such files available. A Metalink file is a basically a meta file with several URIs, both BitTorrent and HTTP/FTP. A Metalink has also the particularity to put many source locations by geography so that it can choose the best one out. Although this parameter isn't yet customizable through the GUI, I didn't tie down what kind of useful options I can put up for Metalinks.

    Ubuntu 9.10 desktop for example: http://releases.ubuntu.com/karmic/ubuntu-9.10-desktop-i386.metalink

    And yes aria2 uploads directly to BitTorrent.

    I'll see how to programmatically add several sources at one time. This works fine from the command line, I'm not sure for the XML-RPC interface.

  3. Ah, great, thanks for the information :)

  4. Easy go, addUri takes an array with multiple URIs (I already convert the string into an array). The problem is actually how I had like to propose it in the GUI while Keeping It Simple Stupid :-)

  5. This comment has been removed by the author.

  6. Can you make something portable? The Mac OS X community needs the power of aria2c too :D, I can test it!

  7. @XoOr: I have given this a first try with the current Ruby code, but getting the ruby-gnome2 project is kinda a mess. I will give this a second try when I start to port it into Vala, which is likely to work!