From 2bfad01bd5b2396090cdee2a526e65220d7a8776 Mon Sep 17 00:00:00 2001 From: Alhaziel01 Date: Sat, 18 Dec 2021 12:00:48 +0100 Subject: [PATCH] fix StreamingCommunity --- channels/streamingcommunity.py | 19 ++++++++++++++++--- core/support.py | 27 +++++++++++++++++++++++++++ platformcode/platformtools.py | 19 +++++++------------ 3 files changed, 50 insertions(+), 15 deletions(-) diff --git a/channels/streamingcommunity.py b/channels/streamingcommunity.py index ba6891bd..1cb22aeb 100644 --- a/channels/streamingcommunity.py +++ b/channels/streamingcommunity.py @@ -5,8 +5,8 @@ import functools import json, requests, sys from channels.mediasetplay import Token -from core import support, channeltools, httptools -from platformcode import logger +from core import support, channeltools, httptools, jsontools, filetools +from platformcode import logger, config, platformtools # def findhost(url): @@ -191,7 +191,9 @@ def episodios(item): js = json.loads(support.match(item.url, patron=r'seasons="([^"]+)').match.replace('"','"')) for episodes in js: + logger.debug(jsontools.dump(js)) for it in episodes['episodes']: + itemlist.append( item.clone(title=support.typo(str(episodes['number']) + 'x' + str(it['number']).zfill(2) + ' - ' + support.cleantitle(it['name']), 'bold'), episode=it['number'], @@ -233,5 +235,16 @@ def play(item): token = b64encode(md5('{}{} Yc8U6r8KjAKAepEA'.format(expires, client_ip).encode('utf-8')).digest()).decode('utf-8').replace('=', '').replace('+', '-').replace('/', '_') url = 'https://scws.xyz/master/{}?token={}&expires={}&n=1'.format(scws_id, token, expires) + subs = [] + urls = [] + info = support.match(url, patron='(?:NAME="([^"]+)".*?URI="([^"]+)|RESOLUTION=\d+x(\d+).*?(http[^"\s]+))').matches - return [item.clone(title = channeltools.get_channel_parameters(item.channel)['title'], server='directo', url=url)] + for lang, sub, res, url in info: + if sub: + s = config.get_temp_file(lang +'.srt') + subs.append(s) + filetools.write(s, support.vttToSrt(httptools.downloadpage(support.match(sub, patron=r'(http[^\s\n]+)').match).data)) + elif url: + urls.append(['hls [{}]'.format(res), url]) + + return [item.clone(title = channeltools.get_channel_parameters(item.channel)['title'], server='directo', video_urls=urls, subtitle=subs, manifest='hls')] diff --git a/core/support.py b/core/support.py index 38f7957d..67aba48d 100755 --- a/core/support.py +++ b/core/support.py @@ -1594,3 +1594,30 @@ def thumb(item_itemlist_string=None, genre=False, live=False): else: return get_thumb('next.png') + + +def vttToSrt(data): + # Code adapted by VTT_TO_SRT.PY (c) Jansen A. Simanullang + ret = '' + + data = re.sub(r'(\d\d:\d\d:\d\d).(\d\d\d) --> (\d\d:\d\d:\d\d).(\d\d\d)(?:[ \-\w]+:[\w\%\d:]+)*\n', r'\1,\2 --> \3,\4\n', data) + data = re.sub(r'(\d\d:\d\d).(\d\d\d) --> (\d\d:\d\d).(\d\d\d)(?:[ \-\w]+:[\w\%\d:]+)*\n', r'00:\1,\2 --> 00:\3,\4\n', data) + data = re.sub(r'(\d\d).(\d\d\d) --> (\d\d).(\d\d\d)(?:[ \-\w]+:[\w\%\d:]+)*\n', r'00:00:\1,\2 --> 00:00:\3,\4\n', data) + data = re.sub(r'WEBVTT\n', '', data) + data = re.sub(r'Kind:[ \-\w]+\n', '', data) + data = re.sub(r'Language:[ \-\w]+\n', '', data) + data = re.sub(r'', '', data) + data = re.sub(r'', '', data) + data = re.sub(r'<\d\d:\d\d:\d\d.\d\d\d>', '', data) + data = re.sub(r'::[\-\w]+\([\-.\w\d]+\)[ ]*{[.,:;\(\) \-\w\d]+\n }\n', '', data) + data = re.sub(r'Style:\n##\n', '', data) + + lines = data.split(os.linesep) + + for n, line in enumerate(lines): + if re.match(r"((\d\d:){2}\d\d),(\d{3}) --> ((\d\d:){2}\d\d),(\d{3})", line): + ret += str(n + 1) + os.linesep + line + os.linesep + else: + ret += line + os.linesep + + return ret \ No newline at end of file diff --git a/platformcode/platformtools.py b/platformcode/platformtools.py index e109748b..67675919 100644 --- a/platformcode/platformtools.py +++ b/platformcode/platformtools.py @@ -1363,6 +1363,10 @@ def get_video_seleccionado(item, seleccion, video_urls, autoplay=False): def set_player(item, xlistitem, mediaurl, view, strm): logger.debug() item.options = {'strm':False} + if item.subtitle: + if type(item.subtitle) != list: item.subtitle = [item.subtitle] + item.subtitle.reverse() + xlistitem.setSubtitles(item.subtitle) # Moved del conector "torrent" here if item.server == "torrent": @@ -1371,9 +1375,6 @@ def set_player(item, xlistitem, mediaurl, view, strm): # If it is a strm file, play is not necessary elif strm: xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, xlistitem) - if item.subtitle: - xbmc.sleep(2000) - xbmc_player.setSubtitles(item.subtitle) else: if type(item.player_mode) == int: @@ -1385,8 +1386,7 @@ def set_player(item, xlistitem, mediaurl, view, strm): logger.info("mediaurl=" + mediaurl) prevent_busy() if player_mode in [0,1]: - if player_mode in [1]: - xlistitem.setProperty('StartOffset','{}'.format(resume_playback(get_played_time(item)))) + xlistitem.addStreamInfo('video', {'duration':240}) logger.info('Player Mode:',['Direct', 'Bookmark'][player_mode]) # Add the listitem to a playlist @@ -1411,12 +1411,6 @@ def set_player(item, xlistitem, mediaurl, view, strm): download_and_play.download_and_play(mediaurl, "download_and_play.tmp", config.get_setting("downloadpath")) return - # ALL LOOKING TO REMOVE VIEW - if item.subtitle and view: - logger.info("External subtitles: " + item.subtitle) - xbmc.sleep(2000) - xbmc_player.setSubtitles(item.subtitle) - # if it is a video library file send to mark as seen if strm or item.strm_path: item.options['strm'] = True @@ -1426,13 +1420,14 @@ def set_player(item, xlistitem, mediaurl, view, strm): # for cases where the audio playback window appears in place of the video one if item.focusOnVideoPlayer: - from core.support import dbg;dbg() while is_playing() and xbmcgui.getCurrentWindowId() != 12006: continue xbmc.sleep(500) xbmcgui.Window(12005).show() + + def add_next_to_playlist(item): import threading from core import filetools, videolibrarytools