Preserve order when moving multiple torrents in the queue
This commit is contained in:
parent
3528549430
commit
b9030dfb8b
|
@ -706,7 +706,8 @@ class Core(component.Component):
|
||||||
@export
|
@export
|
||||||
def queue_top(self, torrent_ids):
|
def queue_top(self, torrent_ids):
|
||||||
log.debug("Attempting to queue %s to top", torrent_ids)
|
log.debug("Attempting to queue %s to top", torrent_ids)
|
||||||
for torrent_id in torrent_ids:
|
# torrent_ids must be sorted in reverse before moving to preserve order
|
||||||
|
for torrent_id in sorted(torrent_ids, key=self.torrentmanager.get_queue_position, reverse=True):
|
||||||
try:
|
try:
|
||||||
# If the queue method returns True, then we should emit a signal
|
# If the queue method returns True, then we should emit a signal
|
||||||
if self.torrentmanager.queue_top(torrent_id):
|
if self.torrentmanager.queue_top(torrent_id):
|
||||||
|
@ -717,31 +718,48 @@ class Core(component.Component):
|
||||||
@export
|
@export
|
||||||
def queue_up(self, torrent_ids):
|
def queue_up(self, torrent_ids):
|
||||||
log.debug("Attempting to queue %s to up", torrent_ids)
|
log.debug("Attempting to queue %s to up", torrent_ids)
|
||||||
|
torrents = ((self.torrentmanager.get_queue_position(torrent_id), torrent_id) for torrent_id in torrent_ids)
|
||||||
|
torrent_moved = True
|
||||||
|
prev_queue_position = None
|
||||||
#torrent_ids must be sorted before moving.
|
#torrent_ids must be sorted before moving.
|
||||||
for torrent_id in sorted(torrent_ids, key=self.torrentmanager.get_queue_position):
|
for queue_position, torrent_id in sorted(torrents):
|
||||||
try:
|
# Move the torrent if and only if there is space (by not moving it we preserve the order)
|
||||||
# If the queue method returns True, then we should emit a signal
|
if torrent_moved or queue_position - prev_queue_position > 1:
|
||||||
if self.torrentmanager.queue_up(torrent_id):
|
try:
|
||||||
component.get("EventManager").emit(TorrentQueueChangedEvent())
|
torrent_moved = self.torrentmanager.queue_up(torrent_id)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
log.warning("torrent_id: %s does not exist in the queue", torrent_id)
|
log.warning("torrent_id: %s does not exist in the queue", torrent_id)
|
||||||
|
# If the torrent moved, then we should emit a signal
|
||||||
|
if torrent_moved:
|
||||||
|
component.get("EventManager").emit(TorrentQueueChangedEvent())
|
||||||
|
else:
|
||||||
|
prev_queue_position = queue_position
|
||||||
|
|
||||||
@export
|
@export
|
||||||
def queue_down(self, torrent_ids):
|
def queue_down(self, torrent_ids):
|
||||||
log.debug("Attempting to queue %s to down", torrent_ids)
|
log.debug("Attempting to queue %s to down", torrent_ids)
|
||||||
|
torrents = ((self.torrentmanager.get_queue_position(torrent_id), torrent_id) for torrent_id in torrent_ids)
|
||||||
|
torrent_moved = True
|
||||||
|
prev_queue_position = None
|
||||||
#torrent_ids must be sorted before moving.
|
#torrent_ids must be sorted before moving.
|
||||||
for torrent_id in sorted(torrent_ids, key=self.torrentmanager.get_queue_position, reverse=True):
|
for queue_position, torrent_id in sorted(torrents, reverse=True):
|
||||||
try:
|
# Move the torrent if and only if there is space (by not moving it we preserve the order)
|
||||||
# If the queue method returns True, then we should emit a signal
|
if torrent_moved or prev_queue_position - queue_position > 1:
|
||||||
if self.torrentmanager.queue_down(torrent_id):
|
try:
|
||||||
component.get("EventManager").emit(TorrentQueueChangedEvent())
|
torrent_moved = self.torrentmanager.queue_down(torrent_id)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
log.warning("torrent_id: %s does not exist in the queue", torrent_id)
|
log.warning("torrent_id: %s does not exist in the queue", torrent_id)
|
||||||
|
# If the torrent moved, then we should emit a signal
|
||||||
|
if torrent_moved:
|
||||||
|
component.get("EventManager").emit(TorrentQueueChangedEvent())
|
||||||
|
else:
|
||||||
|
prev_queue_position = queue_position
|
||||||
|
|
||||||
@export
|
@export
|
||||||
def queue_bottom(self, torrent_ids):
|
def queue_bottom(self, torrent_ids):
|
||||||
log.debug("Attempting to queue %s to bottom", torrent_ids)
|
log.debug("Attempting to queue %s to bottom", torrent_ids)
|
||||||
for torrent_id in torrent_ids:
|
# torrent_ids must be sorted before moving to preserve order
|
||||||
|
for torrent_id in sorted(torrent_ids, key=self.torrentmanager.get_queue_position):
|
||||||
try:
|
try:
|
||||||
# If the queue method returns True, then we should emit a signal
|
# If the queue method returns True, then we should emit a signal
|
||||||
if self.torrentmanager.queue_bottom(torrent_id):
|
if self.torrentmanager.queue_bottom(torrent_id):
|
||||||
|
|
Loading…
Reference in New Issue