[#2946] Workaround 1.1 libtorrent default piece priority

* The default piece priority was changed in lt 1.1 from 1 to 4
   so in 1.3 we will simple convert them back to 1 as 4 is not used.
 * The set_file_priorities method was refactored to make the changes simpler.
This commit is contained in:
Calum Lind 2017-01-11 12:58:15 +00:00
parent af76abb038
commit 78851becf2
1 changed files with 11 additions and 11 deletions

View File

@ -310,19 +310,19 @@ class Torrent(object):
self.options["move_completed_path"] = move_completed_path self.options["move_completed_path"] = move_completed_path
def set_file_priorities(self, file_priorities): def set_file_priorities(self, file_priorities):
if len(file_priorities) != len(self.get_files()): handle_file_priorities = self.handle.file_priorities()
log.debug("file_priorities len != num_files") # Workaround for libtorrent 1.1 changing default priorities from 1 to 4.
self.options["file_priorities"] = self.handle.file_priorities() if 4 in handle_file_priorities:
return handle_file_priorities = [1 if x == 4 else x for x in handle_file_priorities]
if self.options["compact_allocation"]:
log.debug("setting file priority with compact allocation does not work!")
self.options["file_priorities"] = self.handle.file_priorities()
return
log.debug("setting %s's file priorities: %s", self.torrent_id, file_priorities) log.debug("setting %s's file priorities: %s", self.torrent_id, file_priorities)
self.handle.prioritize_files(file_priorities) if (self.handle.has_metadata() and not self.options["compact_allocation"] and
file_priorities and len(file_priorities) == len(self.get_files())):
self.handle.prioritize_files(file_priorities)
else:
log.debug("Unable to set new file priorities.")
file_priorities = handle_file_priorities
if 0 in self.options["file_priorities"]: if 0 in self.options["file_priorities"]:
# We have previously marked a file 'Do Not Download' # We have previously marked a file 'Do Not Download'
@ -334,7 +334,7 @@ class Torrent(object):
self.update_state() self.update_state()
break break
self.options["file_priorities"] = self.handle.file_priorities() self.options["file_priorities"] = handle_file_priorities
if self.options["file_priorities"] != list(file_priorities): if self.options["file_priorities"] != list(file_priorities):
log.warning("File priorities were not set for this torrent") log.warning("File priorities were not set for this torrent")