There have been some blog posts on KGet and now it is my turn to add another one.
The last few weeks/months I kept polishing all the changes I did for KGet during GSOC and also introduced new stuff. It is fantastic to see how KGet improved the last few months with all the work we (the KGet team) put into it.
Speeding up downloads
Multisource-Downloading worked and still can work a way that a file is split into segments, then a TransferDataSource is assigned a segment and then downloads it. What that means is that whenever a TransferDataSource finishes the download of a segment it is assigned a different segment and connects again to the server … In fact that is not ideal as connecting to the server takes time, so I changed that.
Now multiple segments e.g. segment 1 to 10 can be assigned to a TransferDataSource, thus the connection is not always closed and recreated once a segment is finished, but only closes once the segment range finished resulting in less resource usage and faster downloads. [1]
Whenever the user decides to use more connections per mirror or when they add another mirror the TransferDataSource that has most undowloaded segments splits the range.
Threads
One of those polishing changes I did was to use threads when creating checksums, like when a download is being verified, or when you create a metalink and chose to automatically create checksums. Now these calls are not blocking anymore and you can control KGet during this kind of operations normally.
I also experimented with OpenMP and optimizing the loading of files when calculating the checksums, though the very small speedup does not justify the changes in the code, so it won’t be there.
Signatures
Other than that I implemented PGP signature checking.
The user has the posibility to enter a signature or in case of a metalink this happens automatically — in fact only if the signature is embed in the metalink. If there is no key for that signature then the user is asked if the key should be searched for. It can even be specified (in the Preferences) in which order the servers should be tried.

Yes, now all that can be configured. Btw. “Strong” is default.
Ok, so what does it all look like, you may ask? First I changed the transfer settings dialog, to give the user a better overview of what the situation is like for all the files of a transfer, which ones have been verified etc.

[2]
The verification dialog now shows which checksums have been verified (in the screenshot I used the “Strongest” option):

Enough talking about side aspects, here is the signature-dialog. I tried to use icons where feasable — to help the user find what could be a problem — it will see some improvments in the following weeks, though I think it is in a releasable state already.

In fact the newly added keys will also appear in KGpg or Kleopatra or any other program using gpg one way or the other, as I’m using gpgme++, btw. thanks to the everyone who worked on gpgme++ makes life way easier than gpgme [3] and thanks to the people who helped me on the ml.
Before you ask so far I do not plan to add support for decrypting, imo you should use other tools for that than a download program.
Bugs
I also fixed some bugs, now that annoying one where the details of transfers would still be shown even if they were (re)moved is finally gone.
Lukas also worked a lot on KGet like changing the basic model that is used in the view etc. (up to him to blog about that
) and Dario tracked down some rare crashes via using QTests.
On Bugs, if you find some in trunk please report them so that we can fix them before 4.4.
Conclusio
All in all I have the feeling that the next KGet release (with KDE 4.4) will be a great one. That also means that you are encouraged to test KGet from trunk and report bugs and that I’m encouraged to try fixing them in the weeks to follow.
PS.: This blog post has been in the work for quite a while, but rl caught up,
[1] Thanks to the people on #kde-devel who discussed with me on this issue! And thanks in general for all the help you gave me on the several #kde channels.
[2] Btw. do you know an easy way to find a good size for a dialog? E.g. all columns in a view should not be smaller than their prefered size, when there is enough space the dialog should expand to show everything –> the dialog you see in the screenshot has been manually resized by me, otherwise it would not look that way.
[3] In search of what I thought was a bug I reprogrammed large parts with gpgme (yummy, error handling with c-libs *turns crazy*), later on it turned out that I just misunderstood something. Meh!
November 10, 2009 at 3:19 am |
Wow, this looks exciting! Cannot wait for 4.4.
November 10, 2009 at 5:09 am |
Great work.
One of a very useful feature that i think need to be added is an ability to change the download source one the fly. FDM is the only download manager i know to implement this feature, but it only exist on Windows world. I would like to see KGET has this feature.
For example, i download a file from megaupload. Due to slow internet connection, my download took long time and then stopped in the middle because the download link no longer valid. I can took a new download link, but that mean i need to download the whole thing back from beginning. In FDM i can replace the old download link with the new one, and resume my download from where it was stopped.
November 10, 2009 at 10:27 am |
I added that already to KGet. The user can add mirrors on the fly, define which ones should be used [1] and how many connections each mirror should have.
You can even move the download to a different hard disk while downloading. [2]
[1] Suppose the user chooses a faulty mirror, then this one is automatically deactivated and another — if there are enough — is chosen, so that the number of mirrors used stays constant.
[2] In case the download is finished and the checksums and or signature are currently verified this might result in problems, otherwise it works nicely.
November 10, 2009 at 10:45 pm
Great…
This is why i like KDE so much….
November 10, 2009 at 5:46 am |
hi,
for the transfer settings dialog, the checkbox for “Upload Limit”, “download limit” etc can appear after the label (and before the spin box where we enter the limit value). I believe this will give better alignment.
November 12, 2009 at 6:32 pm |
Thanks for your comment.
I changed it now, so that these options are only shown if a transfer actually supports them and that there are no checkboxes anymore.
Instead you have a “Not set” in the spinbox if set to 0.
November 10, 2009 at 7:26 pm |
Yay nice blog entry… keep up the good work!
Lukas
November 11, 2009 at 1:01 am |
[...] And another KGet entry The last few weeks/months I kept polishing all the changes I did for KGet during GSOC and also introduced new stuff. It is fantastic to see how KGet improved the last few months with all the work we (the KGet team) put into it. [...]
November 11, 2009 at 2:00 am |
[...] And another KGet entry « mat69’s (mfuchs) Blog [...]
November 12, 2009 at 4:10 am |
Great work, Matthias!
So many cool features!
Looking forward to using them in 4.4 and other people being able to use them.
November 13, 2009 at 11:05 pm |
[...] Development snapshots of QT 4.6.0 and KDE 4.4 are now included. When you add a Plasma widget, you will be presented with a much more beautiful overview of all available widgets. The Ozone and Nitrogen themes have now been merged in Oxygen. There are lots of improvements in KGet. [...]
November 18, 2009 at 1:27 am |
[...] Development snapshots of QT 4.6.0 and KDE 4.4 are now included. When you add a Plasma widget, you will be presented with a much more beautiful overview of all available widgets. The Ozone and Nitrogen themes have now been merged in Oxygen. There are lots of improvements in KGet. [...]
December 27, 2009 at 6:49 pm |
Hi, I am from Ukraine. Please sorry for my English (Is bad).
I think will be greats if kget include –refer parameter for integration with browsers. For example I using firefox, and try to download from UA file share services some files. But in some services need to specify referrer.
For wget I can use this command line wget “[url]” –referer=”[REFERER]” with firefox plugin FlashGot, but for kget i can using only url. In this case I can download files from this services with kget.
May be it is mistake, and need something else for this,I launch now from wget/flashgot and see something like that: 206 Partial Content. But referrer need to ? )
Can you do this improvements?