From 528ce8e85869a420eca7ba9be112fb250bdaee22 Mon Sep 17 00:00:00 2001 From: Alexander Seiler Date: Fri, 14 Mar 2025 14:25:33 +0100 Subject: [PATCH] Automatically seek to the right starting position of video --- lib/play.py | 31 ++++++++----------------------- lib/srgssr.py | 14 ++++++++++++++ 2 files changed, 22 insertions(+), 23 deletions(-) diff --git a/lib/play.py b/lib/play.py index 7cc09ff..fb4cffc 100644 --- a/lib/play.py +++ b/lib/play.py @@ -17,10 +17,8 @@ # along with script.module.srgssr. # If not, see . -from urllib.parse import parse_qsl, ParseResult -from urllib.parse import urlparse as urlps - import json +import xbmc import xbmcgui import xbmcplugin @@ -133,28 +131,15 @@ def play_video(self, media_id_or_urn): end_time = end_time // 1000 break - if start_time and end_time: - parsed_url = urlps(auth_url) - query_list = parse_qsl(parsed_url.query) - updated_query_list = [] - for query in query_list: - if query[0] == "start" or query[0] == "end": - continue - updated_query_list.append(query) - updated_query_list.append(("start", str(start_time))) - updated_query_list.append(("end", str(end_time))) - new_query = utils.assemble_query_string(updated_query_list) - surl_result = ParseResult( - parsed_url.scheme, - parsed_url.netloc, - parsed_url.path, - parsed_url.params, - new_query, - parsed_url.fragment, - ) - auth_url = surl_result.geturl() self.srgssr.log(f"play_video, auth_url = {auth_url}") play_item = xbmcgui.ListItem(title, path=auth_url) + if self.srgssr.get_kodi_major_version() >= 20 and start_time and end_time: + info_tag = play_item.getVideoInfoTag() + duration = end_time - start_time + info_tag.setResumePoint(start_time, duration) + info_tag.addVideoStream(xbmc.VideoStreamDetail(duration=duration)) + info_tag.setDuration(duration) + subs = self.srgssr.get_subtitles(stream_url, urn) if subs: play_item.setSubtitles(subs) diff --git a/lib/srgssr.py b/lib/srgssr.py index 1447c29..2834fea 100644 --- a/lib/srgssr.py +++ b/lib/srgssr.py @@ -200,6 +200,20 @@ def open_url(self, url, use_cache=True): return response.text return self.cache.get(f"{ADDON_NAME}.open_url, url = {url}") + def get_kodi_major_version(self): + """ + Returns the major version number of Kodi (e.g., 20 for Kodi 20 Nexus). + """ + version = xbmc.getInfoLabel("System.BuildVersion") + try: + major_version = int(version.split(".")[0]) + return major_version + except (IndexError, ValueError): + self.log( + "get_kodi_major_version: Failed to parse Kodi version, assuming version 19" + ) + return 19 + def get_youtube_icon(self): path = os.path.join( # https://github.com/xbmc/xbmc/pull/19301