mirror of
https://git.deluge-torrent.org/deluge
synced 2025-08-27 13:15:31 +00:00
Fix: os.join created root path in Remove_Empty_Folder if variable 'folder' had a leading slash
This commit is contained in:
parent
98ca371b15
commit
1e0005f572
1 changed files with 10 additions and 7 deletions
|
@ -42,6 +42,7 @@ import time
|
||||||
import shutil
|
import shutil
|
||||||
import operator
|
import operator
|
||||||
import logging
|
import logging
|
||||||
|
import re
|
||||||
|
|
||||||
from twisted.internet import reactor
|
from twisted.internet import reactor
|
||||||
from twisted.internet.task import LoopingCall
|
from twisted.internet.task import LoopingCall
|
||||||
|
@ -746,18 +747,20 @@ class TorrentManager(component.Component):
|
||||||
fastresume_file.close()
|
fastresume_file.close()
|
||||||
except IOError:
|
except IOError:
|
||||||
log.warning("Error trying to save fastresume file")
|
log.warning("Error trying to save fastresume file")
|
||||||
|
|
||||||
def remove_empty_folders(self, torrent_id, folder):
|
def remove_empty_folders(self, torrent_id, folder):
|
||||||
"""
|
"""
|
||||||
Recursively removes folders but only if they are empty.
|
Recursively removes folders but only if they are empty.
|
||||||
Cleans up after libtorrent folder renames.
|
Cleans up after libtorrent folder renames.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if torrent_id not in self.torrents:
|
if torrent_id not in self.torrents:
|
||||||
raise InvalidTorrentError("torrent_id is not in session")
|
raise InvalidTorrentError("torrent_id is not in session")
|
||||||
|
|
||||||
info = self.torrents[torrent_id].get_status(['save_path'])
|
info = self.torrents[torrent_id].get_status(['save_path'])
|
||||||
folder_full_path = os.path.join(info['save_path'], folder)
|
# Regex removes leading slashes that causes join function to ignore save_path
|
||||||
|
folder_full_path = os.path.join(info['save_path'], re.sub("^/*", "", folder))
|
||||||
|
folder_full_path = os.path.normpath(folder_full_path)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if not os.listdir(folder_full_path):
|
if not os.listdir(folder_full_path):
|
||||||
|
@ -775,7 +778,7 @@ class TorrentManager(component.Component):
|
||||||
log.debug("%s", strerror)
|
log.debug("%s", strerror)
|
||||||
|
|
||||||
except OSError as (errno, strerror):
|
except OSError as (errno, strerror):
|
||||||
log.debug("Cannot Remove Folder: %s (ErrNo %s)", strerror, errno)
|
log.debug("Cannot Remove Folder: %s (ErrNo %s)", strerror, errno)
|
||||||
|
|
||||||
def queue_top(self, torrent_id):
|
def queue_top(self, torrent_id):
|
||||||
"""Queue torrent to top"""
|
"""Queue torrent to top"""
|
||||||
|
@ -1038,7 +1041,7 @@ class TorrentManager(component.Component):
|
||||||
if len(wait_on_folder[2]) == 1:
|
if len(wait_on_folder[2]) == 1:
|
||||||
# This is the last alert we were waiting for, time to send signal
|
# This is the last alert we were waiting for, time to send signal
|
||||||
component.get("EventManager").emit(TorrentFolderRenamedEvent(torrent_id, wait_on_folder[0], wait_on_folder[1]))
|
component.get("EventManager").emit(TorrentFolderRenamedEvent(torrent_id, wait_on_folder[0], wait_on_folder[1]))
|
||||||
# Empty folders are removed after libtorrent folder renames
|
# Empty folders are removed after libtorrent folder renames
|
||||||
self.remove_empty_folders(torrent_id, wait_on_folder[0])
|
self.remove_empty_folders(torrent_id, wait_on_folder[0])
|
||||||
del torrent.waiting_on_folder_rename[i]
|
del torrent.waiting_on_folder_rename[i]
|
||||||
self.save_resume_data((torrent_id,))
|
self.save_resume_data((torrent_id,))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue