Wiz, here are my thoughts. It’s not going to be 100% perfect, but a final hash check would be needed after download is complete if this was used.
Lets say we have a 100GB torrent task and a power failure causes your computer to crash a 115am. You then restart and BitComet spends a couple hours hashchecking the task.
If it saved a restore point at 1am that listed all the pieces that were downloaded and passed hash check, then anything downloaded after 1am can be discared and download can proceed. There is a remote chance that the crash could have damaged previous pieces, but this can be checked and determined later on final hash check. Keep in mind that someone in a developing country might have a dozen or more of these crashes in the time the task is downloading, considering that this task could run for several weeks, so existing methods would do a hashcheck each time there was an error, but with a restore point, only one final rehash would be needed.
Naturally doing this could cause you to drop good data (anything downloaded from 1am till 115 when the crash occurred, but this could be a better option then stopping the download everytime a problem like this happens, but it would definitely need to be an option the user selects. Perhaps a prompt saying something like…
Corrupt data may be present and a hash check will need to be done. Would you like to hash check now, or continue download and hash check when complete?
might want to work on that language a bit
Also, depending on how much computing it would take to save a restore point, perhaps one could be made every ten mins, or even every 5 mins… at least on large torrents.
Basically it would (in effect) simply drop any data that wasn’t previously confirmed as intact.
In fact, it may not even require any special saving of a restore point. The client should already know what pieces passed hash check and it could just change the status of any previous downloaded pieces from “good” to some sort of middle ground like “unconfirmed”, so they will be kept and assumed as “good” until the final hash check is performed.