mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-07-16 02:02:58 -07:00
Handle seeking through intro/credits markers
This commit is contained in:
parent
71bc063155
commit
97af214ac1
3 changed files with 44 additions and 38 deletions
|
@ -657,7 +657,7 @@ def dbcheck():
|
|||
'live INTEGER, live_uuid TEXT, channel_call_sign TEXT, channel_identifier TEXT, channel_thumb TEXT, '
|
||||
'secure INTEGER, relayed INTEGER, '
|
||||
'buffer_count INTEGER DEFAULT 0, buffer_last_triggered INTEGER, last_paused INTEGER, '
|
||||
'watched INTEGER DEFAULT 0, intro INTEGER DEFAULT 0, credits INTEGER DEFAULT 0, '
|
||||
'watched INTEGER DEFAULT 0, intro INTEGER DEFAULT 0, credits INTEGER DEFAULT 0, marker INTEGER DEFAULT 0, '
|
||||
'initial_stream INTEGER DEFAULT 1, write_attempts INTEGER DEFAULT 0, raw_stream_info TEXT, '
|
||||
'rating_key_websocket TEXT)'
|
||||
)
|
||||
|
@ -1417,6 +1417,15 @@ def dbcheck():
|
|||
'ALTER TABLE sessions ADD COLUMN credits INTEGER DEFAULT 0'
|
||||
)
|
||||
|
||||
# Upgrade sessions table from earlier versions
|
||||
try:
|
||||
c_db.execute('SELECT marker FROM sessions')
|
||||
except sqlite3.OperationalError:
|
||||
logger.debug(u"Altering database. Updating database table sessions.")
|
||||
c_db.execute(
|
||||
'ALTER TABLE sessions ADD COLUMN marker INTEGER DEFAULT 0'
|
||||
)
|
||||
|
||||
# Upgrade session_history table from earlier versions
|
||||
try:
|
||||
c_db.execute('SELECT reference_id FROM session_history')
|
||||
|
|
|
@ -250,16 +250,16 @@ class ActivityHandler(object):
|
|||
|
||||
self.put_notification('on_change')
|
||||
|
||||
def on_intro(self):
|
||||
def on_intro(self, marker):
|
||||
if self.get_live_session():
|
||||
logger.debug("Tautulli ActivityHandler :: Session %s intro marker reached." % str(self.get_session_key()))
|
||||
|
||||
self.put_notification('on_intro')
|
||||
self.put_notification('on_intro', marker=marker)
|
||||
|
||||
def on_credits(self):
|
||||
def on_credits(self, marker):
|
||||
if self.get_live_session():
|
||||
logger.debug("Tautulli ActivityHandler :: Session %s credits marker reached." % str(self.get_session_key()))
|
||||
self.put_notification('on_credits')
|
||||
self.put_notification('on_credits', marker=marker)
|
||||
|
||||
def on_watched(self):
|
||||
logger.debug("Tautulli ActivityHandler :: Session %s watched." % str(self.get_session_key()))
|
||||
|
@ -359,37 +359,33 @@ class ActivityHandler(object):
|
|||
# Monitor if the stream has reached the intro or credit marker offsets
|
||||
self.get_metadata()
|
||||
|
||||
intro_markers, credits_markers = [], []
|
||||
for marker in self.metadata['markers']:
|
||||
if marker['type'] == 'intro':
|
||||
intro_markers.append(marker)
|
||||
elif marker['type'] == 'credits':
|
||||
credits_markers.append(marker)
|
||||
|
||||
self._check_marker('intro', intro_markers)
|
||||
self._check_marker('credits', credits_markers)
|
||||
|
||||
def _check_marker(self, marker_type, markers):
|
||||
if self.db_session[marker_type] < len(markers):
|
||||
marker = markers[self.db_session[marker_type]]
|
||||
marker_flag = False
|
||||
|
||||
for marker_idx, marker in enumerate(self.metadata['markers'], start=1):
|
||||
# Websocket events only fire every 10 seconds
|
||||
# Check if the marker is within 10 seconds of the current viewOffset
|
||||
if marker['start_time_offset'] - 10000 <= self.timeline['viewOffset'] <= marker['end_time_offset']:
|
||||
set_func = getattr(self.ap, 'set_{}'.format(marker_type))
|
||||
callback_func = getattr(self, 'on_{}'.format(marker_type))
|
||||
marker_flag = True
|
||||
|
||||
set_func(session_key=self.get_session_key())
|
||||
if self.db_session['marker'] != marker_idx:
|
||||
self.ap.set_marker(session_key=self.get_session_key(), marker_idx=marker_idx, marker_type=marker['type'])
|
||||
callback_func = getattr(self, 'on_{}'.format(marker['type']))
|
||||
|
||||
if self.timeline['viewOffset'] < marker['start_time_offset']:
|
||||
# Schedule a callback for the exact offset of the marker
|
||||
schedule_callback(
|
||||
'session_key-{}-{}-{}'.format(self.get_session_key(), marker_type, self.db_session[marker_type]),
|
||||
func=callback_func,
|
||||
milliseconds=marker['start_time_offset'] - self.timeline['viewOffset']
|
||||
)
|
||||
else:
|
||||
callback_func()
|
||||
if self.timeline['viewOffset'] < marker['start_time_offset']:
|
||||
# Schedule a callback for the exact offset of the marker
|
||||
schedule_callback(
|
||||
'session_key-{}-marker-{}'.format(self.get_session_key(), marker_idx),
|
||||
func=callback_func,
|
||||
args=[marker],
|
||||
milliseconds=marker['start_time_offset'] - self.timeline['viewOffset']
|
||||
)
|
||||
else:
|
||||
callback_func(marker)
|
||||
|
||||
break
|
||||
|
||||
if not marker_flag:
|
||||
self.ap.set_marker(session_key=self.get_session_key(), marker_idx=0)
|
||||
|
||||
def check_watched(self):
|
||||
# Monitor if the stream has reached the watch percentage for notifications
|
||||
|
|
|
@ -660,15 +660,16 @@ class ActivityProcessor(object):
|
|||
self.db.action('UPDATE sessions SET write_attempts = ? WHERE session_key = ?',
|
||||
[session['write_attempts'] + 1, session_key])
|
||||
|
||||
def set_intro(self, session_key=None):
|
||||
self.db.action('UPDATE sessions SET intro = intro + 1 '
|
||||
def set_marker(self, session_key=None, marker_idx=None, marker_type=None):
|
||||
if marker_type == 'intro':
|
||||
args = [1, 0]
|
||||
elif marker_type == 'credits':
|
||||
args = [0, 1]
|
||||
else:
|
||||
args = [0, 0]
|
||||
self.db.action('UPDATE sessions SET intro = ?, credits = ?, marker = ? '
|
||||
'WHERE session_key = ?',
|
||||
[session_key])
|
||||
|
||||
def set_credits(self, session_key=None):
|
||||
self.db.action('UPDATE sessions SET credits = credits + 1 '
|
||||
'WHERE session_key = ?',
|
||||
[session_key])
|
||||
args + [marker_idx, session_key])
|
||||
|
||||
def set_watched(self, session_key=None):
|
||||
self.db.action('UPDATE sessions SET watched = ? '
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue