mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-07-16 02:02:58 -07:00
Fix matching of synced playback
This commit is contained in:
parent
3c55550702
commit
38ca4e37a6
4 changed files with 76 additions and 47 deletions
|
@ -559,27 +559,32 @@ class PmsConnect(object):
|
|||
|
||||
for a in xml_head:
|
||||
if a.getAttribute('size'):
|
||||
if a.getAttribute('size') != '1':
|
||||
if a.getAttribute('size') == '0':
|
||||
return metadata
|
||||
|
||||
if a.getElementsByTagName('Directory'):
|
||||
metadata_main = a.getElementsByTagName('Directory')[0]
|
||||
metadata_type = helpers.get_xml_attr(metadata_main, 'type')
|
||||
if metadata_type == 'photo':
|
||||
metadata_type = 'photo_album'
|
||||
metadata_main_list = a.getElementsByTagName('Directory')
|
||||
elif a.getElementsByTagName('Video'):
|
||||
metadata_main = a.getElementsByTagName('Video')[0]
|
||||
metadata_type = helpers.get_xml_attr(metadata_main, 'type')
|
||||
metadata_main_list = a.getElementsByTagName('Video')
|
||||
elif a.getElementsByTagName('Track'):
|
||||
metadata_main = a.getElementsByTagName('Track')[0]
|
||||
metadata_type = helpers.get_xml_attr(metadata_main, 'type')
|
||||
metadata_main_list = a.getElementsByTagName('Track')
|
||||
elif a.getElementsByTagName('Photo'):
|
||||
metadata_main = a.getElementsByTagName('Photo')[0]
|
||||
metadata_type = helpers.get_xml_attr(metadata_main, 'type')
|
||||
metadata_main_list = a.getElementsByTagName('Photo')
|
||||
else:
|
||||
logger.debug(u"Tautulli Pmsconnect :: Metadata failed")
|
||||
return {}
|
||||
|
||||
if sync_id and len(metadata_main_list) > 1:
|
||||
for metadata_main in metadata_main_list:
|
||||
if helpers.get_xml_attr(metadata_main, 'ratingKey') == rating_key:
|
||||
break
|
||||
else:
|
||||
metadata_main = metadata_main_list[0]
|
||||
|
||||
metadata_type = helpers.get_xml_attr(metadata_main, 'type')
|
||||
if metadata_type == 'photo':
|
||||
metadata_type = 'photo_album'
|
||||
|
||||
section_id = helpers.get_xml_attr(a, 'librarySectionID')
|
||||
library_name = helpers.get_xml_attr(a, 'librarySectionTitle')
|
||||
|
||||
|
@ -1386,7 +1391,7 @@ class PmsConnect(object):
|
|||
else:
|
||||
session_details = {'session_id': '',
|
||||
'bandwidth': '',
|
||||
'location': 'Unknown'
|
||||
'location': 'wan' if player_details['local'] == '0' else 'lan'
|
||||
}
|
||||
|
||||
# Get the transcode details
|
||||
|
@ -1459,16 +1464,24 @@ class PmsConnect(object):
|
|||
if media_type not in ('photo', 'clip') and not session.getElementsByTagName('Session') \
|
||||
and helpers.get_xml_attr(session, 'ratingKey').isdigit() and transcode_decision == 'direct play':
|
||||
plex_tv = plextv.PlexTV()
|
||||
parent_rating_key = helpers.get_xml_attr(session, 'parentRatingKey')
|
||||
grandparent_rating_key = helpers.get_xml_attr(session, 'grandparentRatingKey')
|
||||
|
||||
synced_items = plex_tv.get_synced_items(client_id_filter=player_details['machine_id'],
|
||||
rating_key_filter=rating_key)
|
||||
rating_key_filter=[rating_key, parent_rating_key, grandparent_rating_key])
|
||||
if synced_items:
|
||||
sync_id = synced_items[0]['sync_id']
|
||||
synced_item_details = synced_items[0]
|
||||
sync_id = synced_item_details['sync_id']
|
||||
synced_xml = self.get_sync_item(sync_id=sync_id, output_format='xml')
|
||||
synced_xml_head = synced_xml.getElementsByTagName('MediaContainer')
|
||||
if synced_xml_head[0].getElementsByTagName('Track'):
|
||||
synced_session_data = synced_xml_head[0].getElementsByTagName('Track')[0]
|
||||
synced_xml_items = synced_xml_head[0].getElementsByTagName('Track')
|
||||
elif synced_xml_head[0].getElementsByTagName('Video'):
|
||||
synced_session_data = synced_xml_head[0].getElementsByTagName('Video')[0]
|
||||
synced_xml_items = synced_xml_head[0].getElementsByTagName('Video')
|
||||
|
||||
for synced_session_data in synced_xml_items:
|
||||
if helpers.get_xml_attr(synced_session_data, 'ratingKey') == rating_key:
|
||||
break
|
||||
|
||||
# Figure out which version is being played
|
||||
if sync_id:
|
||||
|
@ -1661,7 +1674,7 @@ class PmsConnect(object):
|
|||
part_id = helpers.get_xml_attr(stream_media_parts_info, 'id')
|
||||
|
||||
if sync_id:
|
||||
metadata_details = self.get_metadata_details(sync_id=sync_id, cache_key=session_key)
|
||||
metadata_details = self.get_metadata_details(rating_key=rating_key, sync_id=sync_id, cache_key=session_key)
|
||||
else:
|
||||
metadata_details = self.get_metadata_details(rating_key=rating_key, cache_key=session_key)
|
||||
|
||||
|
@ -1735,49 +1748,55 @@ class PmsConnect(object):
|
|||
|
||||
# Get the quality profile
|
||||
if media_type in ('movie', 'episode', 'clip') and 'stream_bitrate' in stream_details:
|
||||
stream_bitrate = helpers.cast_to_int(stream_details['stream_bitrate'])
|
||||
source_bitrate = helpers.cast_to_int(source_media_details.get('bitrate'))
|
||||
|
||||
try:
|
||||
quailtiy_bitrate = min(b for b in common.VIDEO_QUALITY_PROFILES if stream_bitrate <= b <= source_bitrate)
|
||||
quality_profile = common.VIDEO_QUALITY_PROFILES[quailtiy_bitrate]
|
||||
except ValueError:
|
||||
if sync_id:
|
||||
quality_profile = 'Original'
|
||||
|
||||
if sync_id:
|
||||
synced_item_bitrate = helpers.cast_to_int(synced_item_details['video_bitrate'])
|
||||
try:
|
||||
synced_bitrate = min(b for b in common.VIDEO_QUALITY_PROFILES if source_bitrate <= b)
|
||||
synced_bitrate = max(b for b in common.VIDEO_QUALITY_PROFILES if b <= synced_item_bitrate)
|
||||
synced_version_profile = common.VIDEO_QUALITY_PROFILES[synced_bitrate]
|
||||
except ValueError:
|
||||
synced_version_profile = 'Original'
|
||||
else:
|
||||
synced_version_profile = ''
|
||||
|
||||
stream_bitrate = helpers.cast_to_int(stream_details['stream_bitrate'])
|
||||
source_bitrate = helpers.cast_to_int(source_media_details.get('bitrate'))
|
||||
try:
|
||||
quailtiy_bitrate = min(
|
||||
b for b in common.VIDEO_QUALITY_PROFILES if stream_bitrate <= b <= source_bitrate)
|
||||
quality_profile = common.VIDEO_QUALITY_PROFILES[quailtiy_bitrate]
|
||||
except ValueError:
|
||||
quality_profile = 'Original'
|
||||
|
||||
if stream_details['optimized_version']:
|
||||
optimized_version_profile = '{} Mbps {}'.format(round(source_bitrate / 1000.0, 1),
|
||||
plexpy.common.VIDEO_RESOLUTION_OVERRIDES.get(source_media_details['video_resolution'], source_media_details['video_resolution']))
|
||||
plexpy.common.VIDEO_RESOLUTION_OVERRIDES.get(source_media_details['video_resolution'],
|
||||
source_media_details['video_resolution']))
|
||||
else:
|
||||
optimized_version_profile = ''
|
||||
|
||||
elif media_type == 'track' and 'stream_bitrate' in stream_details:
|
||||
stream_bitrate = helpers.cast_to_int(stream_details['stream_bitrate'])
|
||||
source_bitrate = helpers.cast_to_int(source_media_details.get('bitrate'))
|
||||
|
||||
try:
|
||||
quailtiy_bitrate = min(b for b in common.AUDIO_QUALITY_PROFILES if stream_bitrate <= b <= source_bitrate)
|
||||
quality_profile = common.AUDIO_QUALITY_PROFILES[quailtiy_bitrate]
|
||||
except ValueError:
|
||||
if sync_id:
|
||||
quality_profile = 'Original'
|
||||
|
||||
if sync_id:
|
||||
synced_item_bitrate = helpers.cast_to_int(synced_item_details['audio_bitrate'])
|
||||
try:
|
||||
synced_bitrate = min(b for b in common.AUDIO_QUALITY_PROFILES if source_bitrate <= b)
|
||||
synced_bitrate = max(b for b in common.AUDIO_QUALITY_PROFILES if b <= synced_item_bitrate)
|
||||
synced_version_profile = common.AUDIO_QUALITY_PROFILES[synced_bitrate]
|
||||
except ValueError:
|
||||
synced_version_profile = 'Original'
|
||||
else:
|
||||
synced_version_profile = ''
|
||||
|
||||
stream_bitrate = helpers.cast_to_int(stream_details['stream_bitrate'])
|
||||
source_bitrate = helpers.cast_to_int(source_media_details.get('bitrate'))
|
||||
try:
|
||||
quailtiy_bitrate = min(b for b in common.AUDIO_QUALITY_PROFILES if stream_bitrate <= b <= source_bitrate)
|
||||
quality_profile = common.AUDIO_QUALITY_PROFILES[quailtiy_bitrate]
|
||||
except ValueError:
|
||||
quality_profile = 'Original'
|
||||
|
||||
optimized_version_profile = ''
|
||||
|
||||
elif media_type == 'photo':
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue