2020-05-14 07:13:50 +02:00
|
|
|
from deluge.plugins.pluginbase import CorePluginBase
|
|
|
|
import deluge.component as component
|
|
|
|
from deluge.core.rpcserver import export
|
|
|
|
|
|
|
|
from twisted.internet.task import LoopingCall, deferLater
|
|
|
|
from twisted.internet import reactor
|
|
|
|
|
|
|
|
|
|
|
|
class Core(CorePluginBase):
|
|
|
|
def enable(self):
|
|
|
|
self.loop = None
|
|
|
|
self.premiere_torrents = {}
|
|
|
|
deferLater(reactor, 5, self.enable_loop)
|
|
|
|
|
|
|
|
def enable_loop(self):
|
|
|
|
self.loop = LoopingCall(self.premiere_loop)
|
|
|
|
self.loop.start(10)
|
|
|
|
|
|
|
|
def disable(self):
|
|
|
|
if self.loop and self.loop.running:
|
|
|
|
self.loop.stop()
|
|
|
|
|
|
|
|
def update(self):
|
|
|
|
pass
|
|
|
|
|
|
|
|
@export
|
|
|
|
def add_premiere_torrent(self, torr):
|
|
|
|
self.premiere_torrents[torr] = True
|
2020-05-18 23:46:21 +02:00
|
|
|
tor = component.get("TorrentManager").torrents[torr]
|
|
|
|
tor_handle = tor.handle
|
2020-05-14 07:13:50 +02:00
|
|
|
for i in range(1, tor_handle.get_torrent_info().num_pieces()+1):
|
|
|
|
tor_handle.set_piece_premiere(i, True)
|
2020-05-18 23:46:21 +02:00
|
|
|
tor.force_recheck()
|
2020-05-14 07:13:50 +02:00
|
|
|
|
|
|
|
@export
|
|
|
|
def del_premiere_torrent(self, torr):
|
|
|
|
if self.is_premiere_torrent(torr):
|
|
|
|
del self.premiere_torrents[torr]
|
2020-05-18 21:18:48 +02:00
|
|
|
tor = component.get("TorrentManager").torrents.get(torr)
|
2020-05-14 07:13:50 +02:00
|
|
|
if not tor:
|
|
|
|
return
|
|
|
|
tor_handle = tor.handle
|
|
|
|
for i in range(tor_handle.get_torrent_info().num_pieces()+1):
|
|
|
|
tor_handle.set_piece_premiere(i, False)
|
2020-05-18 23:46:21 +02:00
|
|
|
tor.force_recheck()
|
2020-05-14 07:13:50 +02:00
|
|
|
|
|
|
|
@export
|
|
|
|
def is_premiere_torrent(self, torr):
|
|
|
|
return torr in self.premiere_torrents
|
|
|
|
|
|
|
|
@export
|
|
|
|
def get_premiere_torrents(self):
|
|
|
|
return self.premiere_torrents
|
|
|
|
|
|
|
|
def premiere_loop(self):
|
|
|
|
torrents = self.get_premiere_torrents()
|
2020-05-18 22:23:11 +02:00
|
|
|
for t in torrents.keys():
|
2020-05-14 07:13:50 +02:00
|
|
|
tor = component.get("TorrentManager").torrents.get(t)
|
|
|
|
if not tor:
|
|
|
|
self.del_premiere_torrent(t)
|
|
|
|
continue
|
|
|
|
if tor.status.state == tor.status.seeding:
|
|
|
|
tor = tor.handle
|
|
|
|
if not tor.get_peer_info():
|
|
|
|
continue
|
|
|
|
if not all(len(p.pieces) > 0 and p.pieces[0] for p in tor.get_peer_info()):
|
|
|
|
tor.force_reannounce()
|
|
|
|
tor.set_piece_premiere(0, False)
|
|
|
|
for i in range(0, tor.get_torrent_info().num_pieces()+1):
|
|
|
|
if all(len(p.pieces) > i and p.pieces[i] for p in tor.get_peer_info()) and tor.is_piece_premiere(i+1):
|
|
|
|
tor.set_piece_premiere(i+1, False)
|