feat: decouple segment checking from playback reporting

This commit is contained in:
Anton Suta 2026-03-23 20:11:14 +00:00 committed by CeruleanRed
commit 7773d47a4c
2 changed files with 44 additions and 3 deletions

View file

@ -13,6 +13,7 @@ from .helper import translate, api, window, settings, dialog, event, JSONRPC
from .jellyfin import Jellyfin
from .helper import LazyLogger
from .helper.utils import translate_path
from .segments import SegmentChecker
#################################################################################################
@ -28,9 +29,12 @@ class Player(xbmc.Player):
skip_segments = {}
skip_prompted = set()
skip_dialog = None
segment_checker = None
def __init__(self):
xbmc.Player.__init__(self)
self.segment_checker = SegmentChecker(player=self)
self.segment_checker.start()
def get_playing_file(self):
try:
@ -357,9 +361,6 @@ class Player(xbmc.Player):
if window("jellyfin.external.bool"):
return
if settings("mediaSegmentsEnabled.bool"):
self.check_skip_segments(item, item["CurrentPosition"])
if not report:
previous = item["CurrentPosition"]
@ -431,6 +432,9 @@ class Player(xbmc.Player):
if not self.played:
return
if self.segment_checker:
self.segment_checker.stop()
LOG.info("Played info: %s", self.played)
for file in self.played:

37
jellyfin_kodi/segments.py Normal file
View file

@ -0,0 +1,37 @@
from __future__ import division, absolute_import, print_function, unicode_literals
import threading
import time
from .helper import LazyLogger, settings
LOG = LazyLogger(__name__)
class SegmentChecker(threading.Thread):
stop_thread = False
def __init__(self, player):
self.player = player
threading.Thread.__init__(self)
def stop(self):
self.stop_thread = True
def run(self):
LOG.info("--->[ segment checker ]")
while not self.stop_thread:
try:
if settings("mediaSegmentsEnabled.bool"):
current_file = self.player.get_playing_file()
item = self.player.get_file_info(current_file)
current_pos = int(self.player.getTime())
self.player.check_skip_segments(item, current_pos)
except Exception as e:
LOG.error("Error in segment checker loop: %s", e)
time.sleep(0.2)
LOG.info("---<[ segment checker ]")