mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-08-14 02:26:58 -07:00
Fix handling of clips in activity pane.
Start standardising variable names in templates.
This commit is contained in:
parent
b4f1bddc02
commit
c770c90d76
7 changed files with 188 additions and 124 deletions
|
@ -347,8 +347,12 @@ def convert_xml_to_dict(xml):
|
|||
|
||||
|
||||
def get_percent(value1, value2):
|
||||
value1 = cast_to_float(value1)
|
||||
value2 = cast_to_float(value2)
|
||||
|
||||
if value1.isdigit() and value2.isdigit():
|
||||
value1 = cast_to_float(value1)
|
||||
value2 = cast_to_float(value2)
|
||||
else:
|
||||
return 0
|
||||
|
||||
if value1 != 0 and value2 != 0:
|
||||
percent = (value1 / value2) * 100
|
||||
|
|
|
@ -634,11 +634,17 @@ class PlexWatch(object):
|
|||
for a in xml_head:
|
||||
grandparent_thumb = self.get_xml_attr(a, 'grandparentThumb')
|
||||
|
||||
row = {'orig_title': item[0],
|
||||
row = {'title': item[0],
|
||||
'total_plays': item[1],
|
||||
'users_watched': '',
|
||||
'rating_key': item[2],
|
||||
'last_play': item[3],
|
||||
'grandparent_thumb': grandparent_thumb
|
||||
'grandparent_thumb': grandparent_thumb,
|
||||
'thumb': '',
|
||||
'user': '',
|
||||
'friendly_name': '',
|
||||
'platform_type': '',
|
||||
'platform': ''
|
||||
}
|
||||
top_tv.append(row)
|
||||
|
||||
|
@ -679,12 +685,17 @@ class PlexWatch(object):
|
|||
for a in xml_head:
|
||||
grandparent_thumb = self.get_xml_attr(a, 'grandparentThumb')
|
||||
|
||||
row = {'orig_title': item[0],
|
||||
row = {'title': item[0],
|
||||
'users_watched': item[1],
|
||||
'rating_key': item[2],
|
||||
'last_play': item[3],
|
||||
'total_plays': item[5],
|
||||
'grandparent_thumb': grandparent_thumb
|
||||
'grandparent_thumb': grandparent_thumb,
|
||||
'thumb': '',
|
||||
'user': '',
|
||||
'friendly_name': '',
|
||||
'platform_type': '',
|
||||
'platform': ''
|
||||
}
|
||||
popular_tv.append(row)
|
||||
|
||||
|
@ -720,7 +731,13 @@ class PlexWatch(object):
|
|||
'friendly_name': item[1],
|
||||
'total_plays': item[2],
|
||||
'last_play': item[3],
|
||||
'thumb': user_thumb
|
||||
'thumb': user_thumb,
|
||||
'grandparent_thumb': '',
|
||||
'users_watched': '',
|
||||
'rating_key': '',
|
||||
'title': '',
|
||||
'platform_type': '',
|
||||
'platform': ''
|
||||
}
|
||||
top_users.append(row)
|
||||
|
||||
|
@ -762,7 +779,14 @@ class PlexWatch(object):
|
|||
row = {'platform': item[0],
|
||||
'total_plays': item[1],
|
||||
'last_play': item[2],
|
||||
'platform_type': platform_type
|
||||
'platform_type': platform_type,
|
||||
'title': '',
|
||||
'thumb': '',
|
||||
'grandparent_thumb': '',
|
||||
'users_watched': '',
|
||||
'rating_key': '',
|
||||
'user': '',
|
||||
'friendly_name': ''
|
||||
}
|
||||
top_platform.append(row)
|
||||
|
||||
|
|
|
@ -409,17 +409,22 @@ class PmsConnect(object):
|
|||
|
||||
if metadata_type == 'show':
|
||||
metadata = {'type': metadata_type,
|
||||
'ratingKey': self.get_xml_attr(metadata_main, 'ratingKey'),
|
||||
'rating_key': self.get_xml_attr(metadata_main, 'ratingKey'),
|
||||
'grandparent_title': self.get_xml_attr(metadata_main, 'grandparentTitle'),
|
||||
'parent_index': self.get_xml_attr(metadata_main, 'parentIndex'),
|
||||
'parent_title': self.get_xml_attr(metadata_main, 'parentTitle'),
|
||||
'index': self.get_xml_attr(metadata_main, 'index'),
|
||||
'studio': self.get_xml_attr(metadata_main, 'studio'),
|
||||
'title': self.get_xml_attr(metadata_main, 'title'),
|
||||
'contentRating': self.get_xml_attr(metadata_main, 'contentRating'),
|
||||
'content_rating': self.get_xml_attr(metadata_main, 'contentRating'),
|
||||
'summary': self.get_xml_attr(metadata_main, 'summary'),
|
||||
'rating': self.get_xml_attr(metadata_main, 'rating'),
|
||||
'duration': helpers.convert_milliseconds_to_minutes(self.get_xml_attr(metadata_main, 'duration')),
|
||||
'year': self.get_xml_attr(metadata_main, 'year'),
|
||||
'thumb': self.get_xml_attr(metadata_main, 'thumb'),
|
||||
'parent_thumb': self.get_xml_attr(metadata_main, 'parentThumb'),
|
||||
'art': self.get_xml_attr(metadata_main, 'art'),
|
||||
'originallyAvailableAt': self.get_xml_attr(metadata_main, 'originallyAvailableAt'),
|
||||
'originally_available_at': self.get_xml_attr(metadata_main, 'originallyAvailableAt'),
|
||||
'writers': writers,
|
||||
'directors': directors,
|
||||
'genres': genres,
|
||||
|
@ -428,19 +433,22 @@ class PmsConnect(object):
|
|||
metadata_list = {'metadata': metadata}
|
||||
elif metadata_type == 'episode':
|
||||
metadata = {'type': metadata_type,
|
||||
'ratingKey': self.get_xml_attr(metadata_main, 'ratingKey'),
|
||||
'grandparentTitle': self.get_xml_attr(metadata_main, 'grandparentTitle'),
|
||||
'parentIndex': self.get_xml_attr(metadata_main, 'parentIndex'),
|
||||
'rating_key': self.get_xml_attr(metadata_main, 'ratingKey'),
|
||||
'grandparent_title': self.get_xml_attr(metadata_main, 'grandparentTitle'),
|
||||
'parent_index': self.get_xml_attr(metadata_main, 'parentIndex'),
|
||||
'parent_title': self.get_xml_attr(metadata_main, 'parentTitle'),
|
||||
'index': self.get_xml_attr(metadata_main, 'index'),
|
||||
'studio': self.get_xml_attr(metadata_main, 'studio'),
|
||||
'title': self.get_xml_attr(metadata_main, 'title'),
|
||||
'contentRating': self.get_xml_attr(metadata_main, 'contentRating'),
|
||||
'content_rating': self.get_xml_attr(metadata_main, 'contentRating'),
|
||||
'summary': self.get_xml_attr(metadata_main, 'summary'),
|
||||
'rating': self.get_xml_attr(metadata_main, 'rating'),
|
||||
'duration': helpers.convert_milliseconds_to_minutes(self.get_xml_attr(metadata_main, 'duration')),
|
||||
'year': self.get_xml_attr(metadata_main, 'year'),
|
||||
'thumb': self.get_xml_attr(metadata_main, 'thumb'),
|
||||
'parentThumb': self.get_xml_attr(metadata_main, 'parentThumb'),
|
||||
'parent_thumb': self.get_xml_attr(metadata_main, 'parentThumb'),
|
||||
'art': self.get_xml_attr(metadata_main, 'art'),
|
||||
'originallyAvailableAt': self.get_xml_attr(metadata_main, 'originallyAvailableAt'),
|
||||
'originally_available_at': self.get_xml_attr(metadata_main, 'originallyAvailableAt'),
|
||||
'writers': writers,
|
||||
'directors': directors,
|
||||
'genres': genres,
|
||||
|
@ -449,17 +457,22 @@ class PmsConnect(object):
|
|||
metadata_list = {'metadata': metadata}
|
||||
elif metadata_type == 'movie':
|
||||
metadata = {'type': metadata_type,
|
||||
'ratingKey': self.get_xml_attr(metadata_main, 'ratingKey'),
|
||||
'rating_key': self.get_xml_attr(metadata_main, 'ratingKey'),
|
||||
'grandparent_title': self.get_xml_attr(metadata_main, 'grandparentTitle'),
|
||||
'parent_index': self.get_xml_attr(metadata_main, 'parentIndex'),
|
||||
'parent_title': self.get_xml_attr(metadata_main, 'parentTitle'),
|
||||
'index': self.get_xml_attr(metadata_main, 'index'),
|
||||
'studio': self.get_xml_attr(metadata_main, 'studio'),
|
||||
'title': self.get_xml_attr(metadata_main, 'title'),
|
||||
'contentRating': self.get_xml_attr(metadata_main, 'contentRating'),
|
||||
'content_rating': self.get_xml_attr(metadata_main, 'contentRating'),
|
||||
'summary': self.get_xml_attr(metadata_main, 'summary'),
|
||||
'rating': self.get_xml_attr(metadata_main, 'rating'),
|
||||
'duration': helpers.convert_milliseconds_to_minutes(self.get_xml_attr(metadata_main, 'duration')),
|
||||
'year': self.get_xml_attr(metadata_main, 'year'),
|
||||
'thumb': self.get_xml_attr(metadata_main, 'thumb'),
|
||||
'parent_thumb': self.get_xml_attr(metadata_main, 'parentThumb'),
|
||||
'art': self.get_xml_attr(metadata_main, 'art'),
|
||||
'originallyAvailableAt': self.get_xml_attr(metadata_main, 'originallyAvailableAt'),
|
||||
'originally_available_at': self.get_xml_attr(metadata_main, 'originallyAvailableAt'),
|
||||
'genres': genres,
|
||||
'actors': actors,
|
||||
'writers': writers,
|
||||
|
@ -470,16 +483,26 @@ class PmsConnect(object):
|
|||
parent_rating_key = self.get_xml_attr(metadata_main, 'parentRatingKey')
|
||||
show_details = self.get_metadata_details(parent_rating_key)
|
||||
metadata = {'type': metadata_type,
|
||||
'ratingKey': self.get_xml_attr(metadata_main, 'ratingKey'),
|
||||
'parentTitle': self.get_xml_attr(metadata_main, 'parentTitle'),
|
||||
'rating_key': self.get_xml_attr(metadata_main, 'ratingKey'),
|
||||
'grandparent_title': self.get_xml_attr(metadata_main, 'grandparentTitle'),
|
||||
'parent_index': self.get_xml_attr(metadata_main, 'parentIndex'),
|
||||
'parent_title': self.get_xml_attr(metadata_main, 'parentTitle'),
|
||||
'index': self.get_xml_attr(metadata_main, 'index'),
|
||||
'studio': self.get_xml_attr(metadata_main, 'studio'),
|
||||
'title': self.get_xml_attr(metadata_main, 'title'),
|
||||
'thumb': self.get_xml_attr(metadata_main, 'thumb'),
|
||||
'art': self.get_xml_attr(metadata_main, 'art'),
|
||||
'content_rating': self.get_xml_attr(metadata_main, 'contentRating'),
|
||||
'summary': show_details['metadata']['summary'],
|
||||
'studio': show_details['metadata']['studio'],
|
||||
'rating': self.get_xml_attr(metadata_main, 'rating'),
|
||||
'duration': show_details['metadata']['duration'],
|
||||
'contentRating': show_details['metadata']['contentRating']
|
||||
'year': self.get_xml_attr(metadata_main, 'year'),
|
||||
'thumb': self.get_xml_attr(metadata_main, 'thumb'),
|
||||
'parent_thumb': self.get_xml_attr(metadata_main, 'parentThumb'),
|
||||
'art': self.get_xml_attr(metadata_main, 'art'),
|
||||
'originally_available_at': self.get_xml_attr(metadata_main, 'originallyAvailableAt'),
|
||||
'genres': genres,
|
||||
'actors': actors,
|
||||
'writers': writers,
|
||||
'directors': directors
|
||||
}
|
||||
metadata_list = {'metadata': metadata}
|
||||
else:
|
||||
|
@ -580,29 +603,29 @@ class PmsConnect(object):
|
|||
duration = self.get_xml_attr(media_info, 'duration')
|
||||
progress = self.get_xml_attr(session, 'viewOffset')
|
||||
|
||||
session_output = {'sessionKey': self.get_xml_attr(session, 'sessionKey'),
|
||||
session_output = {'session_key': self.get_xml_attr(session, 'sessionKey'),
|
||||
'art': self.get_xml_attr(session, 'art'),
|
||||
'parentThumb': self.get_xml_attr(session, 'parentThumb'),
|
||||
'parent_thumb': self.get_xml_attr(session, 'parentThumb'),
|
||||
'thumb': self.get_xml_attr(session, 'thumb'),
|
||||
'user': self.get_xml_attr(session.getElementsByTagName('User')[0], 'title'),
|
||||
'friendly_name': plex_watch.get_user_friendly_name(
|
||||
self.get_xml_attr(session.getElementsByTagName('User')[0], 'title')),
|
||||
'player': self.get_xml_attr(session.getElementsByTagName('Player')[0], 'platform'),
|
||||
'state': self.get_xml_attr(session.getElementsByTagName('Player')[0], 'state'),
|
||||
'grandparentTitle': self.get_xml_attr(session, 'grandparentTitle'),
|
||||
'parentTitle': self.get_xml_attr(session, 'parentTitle'),
|
||||
'grandparent_title': self.get_xml_attr(session, 'grandparentTitle'),
|
||||
'parent_title': self.get_xml_attr(session, 'parentTitle'),
|
||||
'title': self.get_xml_attr(session, 'title'),
|
||||
'ratingKey': self.get_xml_attr(session, 'ratingKey'),
|
||||
'audioDecision': audio_decision,
|
||||
'audioChannels': audio_channels,
|
||||
'audioCodec': audio_codec,
|
||||
'videoDecision': '',
|
||||
'videoCodec': '',
|
||||
'rating_key': self.get_xml_attr(session, 'ratingKey'),
|
||||
'audio_decision': audio_decision,
|
||||
'audio_channels': audio_channels,
|
||||
'audio_codec': audio_codec,
|
||||
'video_decision': '',
|
||||
'video_codec': '',
|
||||
'height': '',
|
||||
'width': '',
|
||||
'duration': duration,
|
||||
'progress': progress,
|
||||
'progressPercent': str(helpers.get_percent(progress, duration)),
|
||||
'progress_percent': str(helpers.get_percent(progress, duration)),
|
||||
'type': 'track',
|
||||
'indexes': 0
|
||||
}
|
||||
|
@ -650,59 +673,86 @@ class PmsConnect(object):
|
|||
use_indexes = 0
|
||||
|
||||
if self.get_xml_attr(session, 'type') == 'episode':
|
||||
session_output = {'sessionKey': self.get_xml_attr(session, 'sessionKey'),
|
||||
session_output = {'session_key': self.get_xml_attr(session, 'sessionKey'),
|
||||
'art': self.get_xml_attr(session, 'art'),
|
||||
'parentThumb': self.get_xml_attr(session, 'parentThumb'),
|
||||
'parent_thumb': self.get_xml_attr(session, 'parentThumb'),
|
||||
'thumb': thumb,
|
||||
'user': self.get_xml_attr(session.getElementsByTagName('User')[0], 'title'),
|
||||
'friendly_name': plex_watch.get_user_friendly_name(
|
||||
self.get_xml_attr(session.getElementsByTagName('User')[0], 'title')),
|
||||
'player': self.get_xml_attr(session.getElementsByTagName('Player')[0], 'platform'),
|
||||
'state': self.get_xml_attr(session.getElementsByTagName('Player')[0], 'state'),
|
||||
'grandparentTitle': self.get_xml_attr(session, 'grandparentTitle'),
|
||||
'parentTitle': self.get_xml_attr(session, 'parentTitle'),
|
||||
'grandparent_title': self.get_xml_attr(session, 'grandparentTitle'),
|
||||
'parent_title': self.get_xml_attr(session, 'parentTitle'),
|
||||
'title': self.get_xml_attr(session, 'title'),
|
||||
'ratingKey': self.get_xml_attr(session, 'ratingKey'),
|
||||
'audioDecision': audio_decision,
|
||||
'audioChannels': audio_channels,
|
||||
'audioCodec': audio_codec,
|
||||
'videoDecision': video_decision,
|
||||
'videoCodec': video_codec,
|
||||
'rating_key': self.get_xml_attr(session, 'ratingKey'),
|
||||
'audio_decision': audio_decision,
|
||||
'audio_channels': audio_channels,
|
||||
'audio_codec': audio_codec,
|
||||
'video_decision': video_decision,
|
||||
'video_codec': video_codec,
|
||||
'height': height,
|
||||
'width': width,
|
||||
'duration': duration,
|
||||
'progress': progress,
|
||||
'progressPercent': str(helpers.get_percent(progress, duration)),
|
||||
'progress_percent': str(helpers.get_percent(progress, duration)),
|
||||
'type': self.get_xml_attr(session, 'type'),
|
||||
'indexes': use_indexes
|
||||
}
|
||||
elif self.get_xml_attr(session, 'type') == 'movie':
|
||||
session_output = {'sessionKey': self.get_xml_attr(session, 'sessionKey'),
|
||||
session_output = {'session_key': self.get_xml_attr(session, 'sessionKey'),
|
||||
'art': self.get_xml_attr(session, 'art'),
|
||||
'thumb': thumb,
|
||||
'parentThumb': self.get_xml_attr(session, 'parentThumb'),
|
||||
'parent_thumb': self.get_xml_attr(session, 'parentThumb'),
|
||||
'user': self.get_xml_attr(session.getElementsByTagName('User')[0], 'title'),
|
||||
'friendly_name': plex_watch.get_user_friendly_name(
|
||||
self.get_xml_attr(session.getElementsByTagName('User')[0], 'title')),
|
||||
'player': self.get_xml_attr(session.getElementsByTagName('Player')[0], 'platform'),
|
||||
'state': self.get_xml_attr(session.getElementsByTagName('Player')[0], 'state'),
|
||||
'grandparentTitle': self.get_xml_attr(session, 'grandparentTitle'),
|
||||
'parentTitle': self.get_xml_attr(session, 'parentTitle'),
|
||||
'grandparent_title': self.get_xml_attr(session, 'grandparentTitle'),
|
||||
'parent_title': self.get_xml_attr(session, 'parentTitle'),
|
||||
'title': self.get_xml_attr(session, 'title'),
|
||||
'ratingKey': self.get_xml_attr(session, 'ratingKey'),
|
||||
'audioDecision': audio_decision,
|
||||
'audioChannels': audio_channels,
|
||||
'audioCodec': audio_codec,
|
||||
'videoDecision': video_decision,
|
||||
'videoCodec': video_codec,
|
||||
'rating_key': self.get_xml_attr(session, 'ratingKey'),
|
||||
'audio_decision': audio_decision,
|
||||
'audio_channels': audio_channels,
|
||||
'audio_codec': audio_codec,
|
||||
'video_decision': video_decision,
|
||||
'video_codec': video_codec,
|
||||
'height': height,
|
||||
'width': width,
|
||||
'duration': duration,
|
||||
'progress': progress,
|
||||
'progressPercent': str(helpers.get_percent(progress, duration)),
|
||||
'progress_percent': str(helpers.get_percent(progress, duration)),
|
||||
'type': self.get_xml_attr(session, 'type'),
|
||||
'indexes': use_indexes
|
||||
}
|
||||
elif self.get_xml_attr(session, 'type') == 'clip':
|
||||
session_output = {'session_key': self.get_xml_attr(session, 'sessionKey'),
|
||||
'art': self.get_xml_attr(session, 'art'),
|
||||
'thumb': thumb,
|
||||
'parent_thumb': self.get_xml_attr(session, 'parentThumb'),
|
||||
'user': self.get_xml_attr(session.getElementsByTagName('User')[0], 'title'),
|
||||
'friendly_name': plex_watch.get_user_friendly_name(
|
||||
self.get_xml_attr(session.getElementsByTagName('User')[0], 'title')),
|
||||
'player': self.get_xml_attr(session.getElementsByTagName('Player')[0], 'platform'),
|
||||
'state': self.get_xml_attr(session.getElementsByTagName('Player')[0], 'state'),
|
||||
'grandparent_title': self.get_xml_attr(session, 'grandparentTitle'),
|
||||
'parent_title': self.get_xml_attr(session, 'parentTitle'),
|
||||
'title': self.get_xml_attr(session, 'title'),
|
||||
'rating_key': self.get_xml_attr(session, 'ratingKey'),
|
||||
'audio_decision': audio_decision,
|
||||
'audio_channels': audio_channels,
|
||||
'audio_codec': audio_codec,
|
||||
'video_decision': video_decision,
|
||||
'video_codec': video_codec,
|
||||
'height': height,
|
||||
'width': width,
|
||||
'duration': duration,
|
||||
'progress': progress,
|
||||
'progress_percent': str(helpers.get_percent(progress, duration)),
|
||||
'type': self.get_xml_attr(session, 'type'),
|
||||
'indexes': 0
|
||||
}
|
||||
else:
|
||||
logger.warn(u"No known stream types found in session list.")
|
||||
|
||||
|
@ -743,7 +793,7 @@ class PmsConnect(object):
|
|||
if a.getElementsByTagName('Video'):
|
||||
result_data = a.getElementsByTagName('Video')
|
||||
for result in result_data:
|
||||
episode_output = {'ratingKey': self.get_xml_attr(result, 'ratingKey'),
|
||||
episode_output = {'rating_key': self.get_xml_attr(result, 'ratingKey'),
|
||||
'index': self.get_xml_attr(result, 'index'),
|
||||
'title': self.get_xml_attr(result, 'title'),
|
||||
'thumb': self.get_xml_attr(result, 'thumb')
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue