def playURL(url, ref): if xarg.dl_threads: src, cookies, ref = xsrc.getSource(url, ref=ref) url = dl.createJobs(src, xdef.dldir, xarg.dl_threads) if isPlayerRunning(): if os.path.exists(xdef.playlist): playbackMode = xurl.readLocal(xdef.playbackMode, 0).lower() if len(playbackMode) > 0 and playbackMode != 'normal': os.remove(xdef.playlist) setAct('stop', None) if xarg.playbackMode: xurl.saveLocal(xdef.playbackMode, xarg.playbackMode, 0) if xarg.pagelist: playlist = xurl.readLocal(xarg.pagelist) xurl.saveLocal(xdef.playlist, playlist, 0) while url != None: nextURL = getNext(url, playlist) if nextURL: p = Process(target=xsrc.getSource, args=(nextURL, )) p.start() playURL_core(url, ref) p.join() else: playURL_core(url, ref) url = ref = getNext(url, playlist) else: playURL_core(url, ref) return
def setAct(act, val): if checkActVal(act, val) == False: print('\n[xplay][setAct] invalid command: %s %s\n' % (act, val)) return if act == 'stop' and val != '#': if os.path.exists(xdef.playlist): os.remove(xdef.playlist) if act == 'playbackMode': xurl.saveLocal(xdef.playbackMode, val, 0) if val.lower() in ['autonext', 'loopall']: playing = xurl.readLocal(xdef.playing, 0) playlist = xurl.readLocal(xdef.playlist, 0) nextURL = nextLine(playing, playlist) if nextURL: if os.fork() == 0: xsrc.getSource(nextURL) return player = getPlayer() print('\n[xplay][setAct]\n\n\t' + '%s,%s,%s' % (player, act, val)) if player == 'mpv' and xproc.checkProcessRunning('mpv'): return mpv.setAct(act, val) if player == 'omxp' and xproc.checkProcessRunning('omxplayer.bin'): return omxp.setAct(act, val) if player == 'ffplay' and xproc.checkProcessRunning('ffplay'): return ffplay.setAct(act, val)
def getNext(playing, playlist): if playlist != xurl.readLocal(xdef.playlist, 0): return None if isPlayerRunning(): return None playbackMode = xurl.readLocal(xdef.playbackMode, 0).lower() if playbackMode == 'loopone': return playing if playbackMode in ['autonext', 'loopall']: return nextLine(playing, playlist) return None
def load(q): d = parse_qs(q) if 'j' in d: j = d['j'][0] local = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'jsons', j) return xurl.readLocal(local) return None
def getSource(url, fmt, ref): local_json = youtubedl.extractURL(url, dontParseJson=True) local_m3u8 = re.sub('.json', '.m3u8', local_json) m = re.search(r'"manifest_url": "([^"]*)"', xurl.readLocal(local_json)) if m: manifest_url = m.group(1) xurl.load(manifest_url, local=local_m3u8) return local_m3u8 return None
def runOMXP(url, ref): if youtubedl.checkURL(url): url = youtubedl.extractURL(url) if not url: print('[xplay] invalid url') return 0 if checkProcessRunning('omxplayer.bin'): omxp.setAct('stop', None) if re.search(r'.m3u($)', url): url = xurl.readLocal(url).rstrip() print('\n[omxp][play] '+url) p = subprocess.Popen('%s \'%s\' 2>&1 | tee %s' %(xdef.omxp, url, xdef.log), shell=True) if p: p.communicate() return 0
def index(req): req.content_type = 'text/html; charset=utf-8' form = req.form or util.FieldStorage(req) txt = '{}' v = search(r'view\.py\?v=(.*)$', req.unparsed_uri, re.DOTALL) a = form.get('a', None) # action n = form.get('n', None) # number f = form.get('f', None) # file c = form.get('c', None) # command if v: obj = play_obj(v) playURL(v, getOption(req)) txt = json.dumps(obj.__dict__) elif f: obj = play_obj(f) playURL(f) txt = json.dumps(obj.__dict__) elif a: obj = act_obj(a, n) sendACT(a, n) txt = json.dumps(obj.__dict__) elif c: status = handleCmd(c) obj = cmd_obj(status) txt = json.dumps(obj.__dict__) pb_cookie = Cookie.Cookie('playbackMode', xurl.readLocal(conf.playbackMode)) Cookie.add_cookie(req, pb_cookie) req.write(txt) return
def get_json_from_file(path): txt = xurl.readLocal(path) return json.loads(txt)
def dl(url, local, ref=None, read=True): if not os.path.exists(local): xurl.load(url, local, ref=ref) if read: return xurl.readLocal(local) return None
def unpackFILE(local): txt = xurl.readLocal(local) return unpack(txt)
def getSettingDefs(): local = os.path.dirname(os.path.abspath(__file__)) + '/settings.js' m = re.search(r'var settings = ({.*?});', xurl.readLocal(local), re.DOTALL | re.MULTILINE) if m: return ast.literal_eval(m.group(1)) return None