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 tor = component.get("TorrentManager").torrents[torr] tor_handle = tor.handle for i in range(1, tor_handle.get_torrent_info().num_pieces()+1): tor_handle.set_piece_premiere(i, True) tor.force_recheck() @export def del_premiere_torrent(self, torr): if self.is_premiere_torrent(torr): del self.premiere_torrents[torr] tor = component.get("TorrentManager").torrents.get(torr) 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) tor.force_recheck() @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() for t in torrents.keys(): 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)