Version: unspecified (using KDE 4.5.2)
Looking at http://wiki.theory.org/BitTorrentSpecification it says:
completed: Must be sent to the tracker when the download completes. However, must not be sent if the download was already 100% complete when the client started. Presumably, this is to allow the tracker to increment the "completed downloads" metric based solely on this event.
There are trackers which use this to start counting "seeding time" after this event has been reported, and therefore should be sent also for torrents which are not 100% complete (but never would be).
This is often the case if you exclude files like samples from the torrent that you are not interested in.
AFAIK uTorrent has the same issue, while BitComet are doing so.
As far as I've understood this is only informational and it makes sense to interpret it like "it is completed for the user", not "it is completely being downloaded".
Doing what you propose would lead to completed events being sent twice, if you later decide to download more files of the torrent. This would make the tracker stats incorrect.
KTorrent could just remember that it had sent the completed event for this torrent already, couldn't it?
It could, but that would mean we would have to keep track of that.
This is a matter of interpretation of the standard, which is not clear at all on this. I'm more inclined to keep things as they are until this is clarified.
Certainly when you consider there is actually a partial seed extension:
Which would solve the problem in a proper manner.
Git commit f82ea475ac2975edbf4cdb3fa2ff79886f88bca3 by Joris.
Committed on 21/02/2011 at 20:27.
Pushed by guisson into branch 'master'.
Implement partial seeding extension
M +1 -0 ChangeLog
M +1 -0 src/interfaces/peerinterface.cpp
M +2 -0 src/interfaces/peerinterface.h
M +6 -0 src/magnet/magnetdownloader.cpp
M +1 -0 src/magnet/magnetdownloader.h
M +7 -1 src/peer/peer.cpp
M +1 -1 src/peer/peer.h
M +26 -3 src/peer/peermanager.cpp
M +6 -0 src/peer/peermanager.h
M +1 -1 src/torrent/advancedchokealgorithm.cpp
M +4 -1 src/torrent/torrentcontrol.cpp
M +7 -3 src/tracker/httptracker.cpp
M +1 -0 src/tracker/httptracker.h
M +1 -0 src/tracker/tracker.h
M +5 -0 src/tracker/trackermanager.cpp
M +1 -0 src/tracker/trackermanager.h