63 lines
2.2 KiB
Python
63 lines
2.2 KiB
Python
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)
|