Fix Live TV roll over metadata caching

This commit is contained in:
JonnyWong16 2020-02-22 11:39:27 -08:00
commit 0ab93d7a7f
3 changed files with 16 additions and 18 deletions

View file

@ -68,9 +68,9 @@ class ActivityHandler(object):
return None return None
def get_live_session(self): def get_live_session(self, skip_cache=False):
pms_connect = pmsconnect.PmsConnect() pms_connect = pmsconnect.PmsConnect()
session_list = pms_connect.get_current_activity() session_list = pms_connect.get_current_activity(skip_cache=skip_cache)
if session_list: if session_list:
for session in session_list['sessions']: for session in session_list['sessions']:
@ -104,7 +104,7 @@ class ActivityHandler(object):
def on_start(self): def on_start(self):
if self.is_valid_session(): if self.is_valid_session():
session = self.get_live_session() session = self.get_live_session(skip_cache=True)
if not session: if not session:
return return
@ -282,8 +282,9 @@ class ActivityHandler(object):
last_guid = db_session['guid'] last_guid = db_session['guid']
this_guid = last_guid this_guid = last_guid
if db_session['live']: # Check guid for live TV metadata every 60 seconds
metadata = self.get_metadata() if db_session['live'] and int(time.time()) - db_session['stopped'] > 60:
metadata = self.get_metadata(skip_cache=True)
if metadata: if metadata:
this_guid = metadata['guid'] this_guid = metadata['guid']

View file

@ -294,7 +294,6 @@ _CONFIG_DEFINITIONS = {
'LOGGING_LIVE_TV': (int, 'Monitoring', 1), 'LOGGING_LIVE_TV': (int, 'Monitoring', 1),
'MAXMIND_LICENSE_KEY': (str, 'General', ''), 'MAXMIND_LICENSE_KEY': (str, 'General', ''),
'METADATA_CACHE_SECONDS': (int, 'Advanced', 1800), 'METADATA_CACHE_SECONDS': (int, 'Advanced', 1800),
'METADATA_LIVE_CACHE_SECONDS': (int, 'Advanced', 60),
'MOVIE_LOGGING_ENABLE': (int, 'Monitoring', 1), 'MOVIE_LOGGING_ENABLE': (int, 'Monitoring', 1),
'MOVIE_NOTIFY_ENABLE': (int, 'Monitoring', 0), 'MOVIE_NOTIFY_ENABLE': (int, 'Monitoring', 0),
'MOVIE_NOTIFY_ON_START': (int, 'Monitoring', 1), 'MOVIE_NOTIFY_ON_START': (int, 'Monitoring', 1),

View file

@ -597,12 +597,8 @@ class PmsConnect(object):
if metadata: if metadata:
_cache_time = metadata.pop('_cache_time', 0) _cache_time = metadata.pop('_cache_time', 0)
if metadata['live']:
cache_seconds = plexpy.CONFIG.METADATA_LIVE_CACHE_SECONDS
else:
cache_seconds = plexpy.CONFIG.METADATA_CACHE_SECONDS
# Return cached metadata if less than cache_seconds ago # Return cached metadata if less than cache_seconds ago
if return_cache or int(time.time()) - _cache_time <= cache_seconds: if return_cache or int(time.time()) - _cache_time <= plexpy.CONFIG.METADATA_CACHE_SECONDS:
return metadata return metadata
if rating_key: if rating_key:
@ -1510,7 +1506,7 @@ class PmsConnect(object):
return metadata_list return metadata_list
def get_current_activity(self): def get_current_activity(self, skip_cache=False):
""" """
Return processed and validated session list. Return processed and validated session list.
@ -1537,17 +1533,17 @@ class PmsConnect(object):
if a.getElementsByTagName('Track'): if a.getElementsByTagName('Track'):
session_data = a.getElementsByTagName('Track') session_data = a.getElementsByTagName('Track')
for session_ in session_data: for session_ in session_data:
session_output = self.get_session_each(session_) session_output = self.get_session_each(session_, skip_cache=skip_cache)
session_list.append(session_output) session_list.append(session_output)
if a.getElementsByTagName('Video'): if a.getElementsByTagName('Video'):
session_data = a.getElementsByTagName('Video') session_data = a.getElementsByTagName('Video')
for session_ in session_data: for session_ in session_data:
session_output = self.get_session_each(session_) session_output = self.get_session_each(session_, skip_cache=skip_cache)
session_list.append(session_output) session_list.append(session_output)
if a.getElementsByTagName('Photo'): if a.getElementsByTagName('Photo'):
session_data = a.getElementsByTagName('Photo') session_data = a.getElementsByTagName('Photo')
for session_ in session_data: for session_ in session_data:
session_output = self.get_session_each(session_) session_output = self.get_session_each(session_, skip_cache=skip_cache)
session_list.append(session_output) session_list.append(session_output)
session_list = sorted(session_list, key=lambda k: k['session_key']) session_list = sorted(session_list, key=lambda k: k['session_key'])
@ -1558,7 +1554,7 @@ class PmsConnect(object):
return output return output
def get_session_each(self, session=None): def get_session_each(self, session=None, skip_cache=False):
""" """
Return selected data from current sessions. Return selected data from current sessions.
This function processes and validates session data This function processes and validates session data
@ -1935,10 +1931,12 @@ class PmsConnect(object):
media_id = helpers.get_xml_attr(stream_media_info, 'id') media_id = helpers.get_xml_attr(stream_media_info, 'id')
part_id = helpers.get_xml_attr(stream_media_parts_info, 'id') part_id = helpers.get_xml_attr(stream_media_parts_info, 'id')
cache_key = None if skip_cache else session_key
if sync_id: if sync_id:
metadata_details = self.get_metadata_details(rating_key=rating_key, sync_id=sync_id, cache_key=session_key) metadata_details = self.get_metadata_details(rating_key=rating_key, sync_id=sync_id, cache_key=cache_key)
else: else:
metadata_details = self.get_metadata_details(rating_key=rating_key, cache_key=session_key) metadata_details = self.get_metadata_details(rating_key=rating_key, cache_key=cache_key)
# Get the media info, fallback to first item if match id is not found # Get the media info, fallback to first item if match id is not found
source_medias = metadata_details.pop('media_info', []) source_medias = metadata_details.pop('media_info', [])