diff --git a/jellyfin_kodi/dialogs/skip.py b/jellyfin_kodi/dialogs/skip.py index c99a63ca..5e1ee298 100644 --- a/jellyfin_kodi/dialogs/skip.py +++ b/jellyfin_kodi/dialogs/skip.py @@ -1,15 +1,9 @@ # -*- coding: utf-8 -*- from __future__ import division, absolute_import, print_function, unicode_literals - -################################################################################################## - import xbmcgui - from ..helper import LazyLogger from ..helper.translate import translate -################################################################################################## - LOG = LazyLogger(__name__) # Action IDs @@ -32,8 +26,6 @@ SEGMENT_LABELS = { "Commercial": "Ad", } -################################################################################################## - class SkipDialog(xbmcgui.WindowXMLDialog): """ diff --git a/jellyfin_kodi/jellyfin/api.py b/jellyfin_kodi/jellyfin/api.py index 4613f3d3..0450be17 100644 --- a/jellyfin_kodi/jellyfin/api.py +++ b/jellyfin_kodi/jellyfin/api.py @@ -508,27 +508,13 @@ class API(object): response = self.send_request(server_address, "system/info/public") return response.url.replace("/system/info/public", "") - def get_intro_skipper_segments(self, item_id): - """Get intro-skipper plugin segments (Introduction, Credits, Recap, Preview).""" - try: - return self._get("Episode/%s/IntroSkipperSegments" % item_id) - except HTTPException as e: - if e.status == 404: - LOG.debug("Intro-skipper plugin not installed or no segments for %s", item_id) - else: - LOG.warning("Error fetching intro-skipper segments: %s", e) - return None - except Exception as e: - LOG.warning("Error fetching intro-skipper segments: %s", e) - return None - def get_media_segments(self, item_id): - """Get native Media Segments API data (Jellyfin 10.10+ fallback).""" + """Get media segments for an item (Jellyfin 10.10+).""" try: - return self._get("MediaSegments", params={"itemId": item_id}) + return self._get("MediaSegments/%s" % item_id) except HTTPException as e: if e.status == 404: - LOG.debug("Media Segments API not available for %s", item_id) + LOG.debug("Media Segments not available for %s", item_id) else: LOG.warning("Error fetching media segments: %s", e) return None diff --git a/jellyfin_kodi/player.py b/jellyfin_kodi/player.py index aa9d1f27..614d1063 100644 --- a/jellyfin_kodi/player.py +++ b/jellyfin_kodi/player.py @@ -522,15 +522,13 @@ class Player(xbmc.Player): pass self.skip_dialog = None - segments = item["Server"].jellyfin.get_intro_skipper_segments(item_id) - if not segments: - segments = item["Server"].jellyfin.get_media_segments(item_id) - if segments: - segments = self._convert_media_segments(segments) + segments = item["Server"].jellyfin.get_media_segments(item_id) + if segments: + segments = self._convert_media_segments(segments) if segments: self.skip_segments[item_id] = segments - LOG.info("Loaded intro-skipper segments for %s: %s", item_id, list(segments.keys())) + LOG.info("Loaded media segments for %s: %s", item_id, list(segments.keys())) def _convert_media_segments(self, response): if not response or "Items" not in response: diff --git a/resources/language/resource.language.en_gb/strings.po b/resources/language/resource.language.en_gb/strings.po index 7c353427..a02ea2e4 100644 --- a/resources/language/resource.language.en_gb/strings.po +++ b/resources/language/resource.language.en_gb/strings.po @@ -1174,12 +1174,12 @@ msgid "384" msgstr "384" msgctxt "#33246" -msgid "Intro Skipper" -msgstr "Intro Skipper" +msgid "Segment Skipping" +msgstr "Segment Skipping" msgctxt "#33247" -msgid "Enable intro/outro skipping" -msgstr "Enable intro/outro skipping" +msgid "Enable segment skipping" +msgstr "Enable segment skipping" msgctxt "#33248" msgid "Skip mode" diff --git a/tests/test_intro_skipper.py b/tests/test_media_segments.py similarity index 79% rename from tests/test_intro_skipper.py rename to tests/test_media_segments.py index 28fff431..3a57833b 100644 --- a/tests/test_intro_skipper.py +++ b/tests/test_media_segments.py @@ -4,45 +4,9 @@ from __future__ import division, absolute_import, print_function, unicode_litera import pytest -class TestIntroSkipperSegmentParsing: - - def test_parse_intro_skipper_response(self): - response = { - "Introduction": { - "EpisodeId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", - "Start": 42.5, - "End": 122.0 - }, - "Credits": { - "EpisodeId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", - "Start": 2458.0, - "End": 2520.0 - } - } - assert "Introduction" in response - assert "Credits" in response - assert response["Introduction"]["Start"] == 42.5 - assert response["Introduction"]["End"] == 122.0 - - def test_parse_empty_response(self): - response = {} - assert len(response) == 0 - - def test_parse_partial_response(self): - response = { - "Introduction": { - "EpisodeId": "test-id", - "Start": 10.0, - "End": 60.0 - } - } - assert "Introduction" in response - assert "Credits" not in response - - class TestMediaSegmentsConversion: - def test_convert_media_segments_to_intro_skipper_format(self): + def test_convert_media_segments_response(self): media_segments_response = { "Items": [ {