import xbmc, xbmcgui from .utils import get_engine, localize EXPECTED_KBITS = 512 class TorrentPlayer(xbmc.Player) : pyrrent_engine = None loop = None def onPlayBackEnded(self): self.pyrrent_engine.close() self.loop.stopped = True xbmc.Player().stop() def onPlayBackPaused(self): self.pyrrent_engine.pause() def onPlayBackResumed(self): self.pyrrent_engine.resume() def onPlayBackStopped(self): self.pyrrent_engine.close() self.loop.stopped = True xbmc.Player().stop() def play(self, engine, f_index): self.pyrrent_engine = engine self.pyrrent_engine.start() self.pyrrent_engine.activate_file(f_index) monitor = xbmc.Monitor() pw = xbmcgui.DialogProgress() pw.create(localize(33055), line1='0 Kbit/s') while True: xbmc.sleep(500) if monitor.abortRequested() or pw.iscanceled(): pw.close() self.pyrrent_engine.close() xbmc.Player().stop() self.loop.stopped = True return False status = self.pyrrent_engine.status() d_rate = status.download_rate xbmc.log('*** DRATE: {}'.format(d_rate), level=xbmc.LOGNOTICE) perc = d_rate / EXPECTED_KBITS * 100 if perc > 100: perc = 100 pw.update(perc, line1='{} kbit/s'.format(int(d_rate))) if perc == 100: pw.close() break fstat = self.pyrrent_engine.file_status(f_index) listitem = xbmcgui.ListItem('.'.join(fstat.name.split('.')[:-1]), path=fstat.url) xbmc.Player.play(self, fstat.url, listitem) class VideoLoop(object): stopped = False status = None def __init__(self, torr_fp): self.e = get_engine(torr_fp) def start(self, f_index): self.mediaPlayer = TorrentPlayer() self.mediaPlayer.loop = self self.mediaPlayer.play(self.e, f_index) while not self.stopped: self.status = self.e.status() xbmc.sleep(1000)