forked from platypush/platypush
Managing torrent stop and remove as well
This commit is contained in:
parent
ab51c1d1bc
commit
76b40c0c37
2 changed files with 45 additions and 15 deletions
|
@ -64,5 +64,14 @@ class TorrentDownloadCompletedEvent(TorrentEvent):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class TorrentDownloadStopEvent(TorrentEvent):
|
||||||
|
"""
|
||||||
|
Event triggered when a torrent transfer is stopped
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
# vim:sw=4:ts=4:et:
|
# vim:sw=4:ts=4:et:
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ from platypush.plugins import Plugin, action
|
||||||
from platypush.message.event.torrent import \
|
from platypush.message.event.torrent import \
|
||||||
TorrentDownloadStartEvent, TorrentSeedingStartEvent, \
|
TorrentDownloadStartEvent, TorrentSeedingStartEvent, \
|
||||||
TorrentStateChangeEvent, TorrentDownloadProgressEvent, \
|
TorrentStateChangeEvent, TorrentDownloadProgressEvent, \
|
||||||
TorrentDownloadCompletedEvent
|
TorrentDownloadCompletedEvent, TorrentDownloadStopEvent
|
||||||
|
|
||||||
|
|
||||||
class TorrentPlugin(Plugin):
|
class TorrentPlugin(Plugin):
|
||||||
|
@ -178,7 +178,12 @@ class TorrentPlugin(Plugin):
|
||||||
bus.post(TorrentDownloadStartEvent(**self.torrent_state[torrent]))
|
bus.post(TorrentDownloadStartEvent(**self.torrent_state[torrent]))
|
||||||
last_status = None
|
last_status = None
|
||||||
|
|
||||||
while (not status.is_seeding):
|
while not status.is_seeding:
|
||||||
|
if not torrent in self.transfers:
|
||||||
|
self.logger.info('Torrent {} has been stopped and removed')
|
||||||
|
bus.post(TorrentDownloadStopEvent(url=torrent))
|
||||||
|
return
|
||||||
|
|
||||||
if not last_status:
|
if not last_status:
|
||||||
bus.post(TorrentSeedingStartEvent(**self.torrent_state[torrent]))
|
bus.post(TorrentSeedingStartEvent(**self.torrent_state[torrent]))
|
||||||
|
|
||||||
|
@ -217,7 +222,7 @@ class TorrentPlugin(Plugin):
|
||||||
try: os.unlink(torrent_file)
|
try: os.unlink(torrent_file)
|
||||||
except: pass
|
except: pass
|
||||||
|
|
||||||
bus.post(TorrentStateChangeEvent(**self.torrent_state[torrent], files=files))
|
bus.post(TorrentDownloadCompletedEvent(**self.torrent_state[torrent], files=files))
|
||||||
del self.torrent_state[torrent]
|
del self.torrent_state[torrent]
|
||||||
del self.transfers[torrent]
|
del self.transfers[torrent]
|
||||||
return files
|
return files
|
||||||
|
@ -234,32 +239,48 @@ class TorrentPlugin(Plugin):
|
||||||
return self.torrent_state
|
return self.torrent_state
|
||||||
|
|
||||||
@action
|
@action
|
||||||
def pause(self, torrent_url):
|
def pause(self, torrent):
|
||||||
"""
|
"""
|
||||||
Pause a torrent transfer.
|
Pause a torrent transfer.
|
||||||
|
|
||||||
:param torrent_url: Torrent URL as returned from `get_status()`
|
:param torrent: Torrent URL as returned from `get_status()`
|
||||||
:type torrent_url: str
|
:type torrent: str
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if torrent_url not in self.transfers:
|
if torrent not in self.transfers:
|
||||||
return (None, "No transfer in progress for {}".format(torrent_url))
|
return (None, "No transfer in progress for {}".format(torrent))
|
||||||
|
|
||||||
self.transfers[torrent_url].pause()
|
self.transfers[torrent].pause()
|
||||||
|
|
||||||
@action
|
@action
|
||||||
def resume(self, torrent_url):
|
def resume(self, torrent):
|
||||||
"""
|
"""
|
||||||
Resume a torrent transfer.
|
Resume a torrent transfer.
|
||||||
|
|
||||||
:param torrent_url: Torrent URL as returned from `get_status()`
|
:param torrent: Torrent URL as returned from `get_status()`
|
||||||
:type torrent_url: str
|
:type torrent: str
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if torrent_url not in self.transfers:
|
if torrent not in self.transfers:
|
||||||
return (None, "No transfer in progress for {}".format(torrent_url))
|
return (None, "No transfer in progress for {}".format(torrent))
|
||||||
|
|
||||||
self.transfers[torrent_url].resume()
|
self.transfers[torrent].resume()
|
||||||
|
|
||||||
|
@action
|
||||||
|
def remove(self, torrent):
|
||||||
|
"""
|
||||||
|
Stops and removes a torrent transfer.
|
||||||
|
|
||||||
|
:param torrent: Torrent URL as returned from `get_status()`
|
||||||
|
:type torrent: str
|
||||||
|
"""
|
||||||
|
|
||||||
|
if torrent not in self.transfers:
|
||||||
|
return (None, "No transfer in progress for {}".format(torrent))
|
||||||
|
|
||||||
|
self.transfers[torrent].pause()
|
||||||
|
del self.torrent_state[torrent]
|
||||||
|
del self.transfers[torrent]
|
||||||
|
|
||||||
def _generate_rand_filename(self, length=16):
|
def _generate_rand_filename(self, length=16):
|
||||||
name = ''
|
name = ''
|
||||||
|
|
Loading…
Reference in a new issue