diff --git a/data/interfaces/default/stream_data.html b/data/interfaces/default/stream_data.html index 3165723c..bd2ffb2a 100644 --- a/data/interfaces/default/stream_data.html +++ b/data/interfaces/default/stream_data.html @@ -218,6 +218,13 @@ DOCUMENTATION :: END ${data['stream_audio_channels']} ${data['audio_channels']} + % if data['stream_audio_language'] != '': + + Language + ${data['stream_audio_language']} + ${data['audio_language']} + + % endif % if data['subtitles'] == 1: diff --git a/plexpy/__init__.py b/plexpy/__init__.py index 139d656a..ee7600f7 100644 --- a/plexpy/__init__.py +++ b/plexpy/__init__.py @@ -613,13 +613,13 @@ def dbcheck(): 'video_codec TEXT, video_bitrate INTEGER, video_resolution TEXT, video_width INTEGER, video_height INTEGER, ' 'video_framerate TEXT, video_scan_type TEXT, video_full_resolution TEXT, ' 'video_dynamic_range TEXT, aspect_ratio TEXT, ' - 'audio_codec TEXT, audio_bitrate INTEGER, audio_channels INTEGER, subtitle_codec TEXT, ' + 'audio_codec TEXT, audio_bitrate INTEGER, audio_channels INTEGER, audio_language TEXT, subtitle_codec TEXT, ' 'stream_bitrate INTEGER, stream_video_resolution TEXT, quality_profile TEXT, ' 'stream_container_decision TEXT, stream_container TEXT, ' 'stream_video_decision TEXT, stream_video_codec TEXT, stream_video_bitrate INTEGER, stream_video_width INTEGER, ' 'stream_video_height INTEGER, stream_video_framerate TEXT, stream_video_scan_type TEXT, stream_video_full_resolution TEXT, ' 'stream_video_dynamic_range TEXT, ' - 'stream_audio_decision TEXT, stream_audio_codec TEXT, stream_audio_bitrate INTEGER, stream_audio_channels INTEGER, ' + 'stream_audio_decision TEXT, stream_audio_codec TEXT, stream_audio_bitrate INTEGER, stream_audio_channels INTEGER, stream_audio_language TEXT, ' 'subtitles INTEGER, stream_subtitle_decision TEXT, stream_subtitle_codec TEXT, ' 'transcode_protocol TEXT, transcode_container TEXT, ' 'transcode_video_codec TEXT, transcode_audio_codec TEXT, transcode_audio_channels INTEGER,' @@ -656,7 +656,7 @@ def dbcheck(): 'container TEXT, bitrate INTEGER, width INTEGER, height INTEGER, video_bitrate INTEGER, video_bit_depth INTEGER, ' 'video_codec TEXT, video_codec_level TEXT, video_width INTEGER, video_height INTEGER, video_resolution TEXT, ' 'video_framerate TEXT, video_scan_type TEXT, video_full_resolution TEXT, video_dynamic_range TEXT, aspect_ratio TEXT, ' - 'audio_bitrate INTEGER, audio_codec TEXT, audio_channels INTEGER, transcode_protocol TEXT, ' + 'audio_bitrate INTEGER, audio_codec TEXT, audio_channels INTEGER, audio_language TEXT, transcode_protocol TEXT, ' 'transcode_container TEXT, transcode_video_codec TEXT, transcode_audio_codec TEXT, ' 'transcode_audio_channels INTEGER, transcode_width INTEGER, transcode_height INTEGER, ' 'transcode_hw_requested INTEGER, transcode_hw_full_pipeline INTEGER, ' @@ -666,7 +666,7 @@ def dbcheck(): 'stream_video_decision TEXT, stream_video_bitrate INTEGER, stream_video_codec TEXT, stream_video_codec_level TEXT, ' 'stream_video_bit_depth INTEGER, stream_video_height INTEGER, stream_video_width INTEGER, stream_video_resolution TEXT, ' 'stream_video_framerate TEXT, stream_video_scan_type TEXT, stream_video_full_resolution TEXT, stream_video_dynamic_range TEXT, ' - 'stream_audio_decision TEXT, stream_audio_codec TEXT, stream_audio_bitrate INTEGER, stream_audio_channels INTEGER, ' + 'stream_audio_decision TEXT, stream_audio_codec TEXT, stream_audio_bitrate INTEGER, stream_audio_channels INTEGER, stream_audio_language TEXT, ' 'stream_subtitle_decision TEXT, stream_subtitle_codec TEXT, stream_subtitle_container TEXT, stream_subtitle_forced INTEGER, ' 'subtitles INTEGER, subtitle_codec TEXT, synced_version INTEGER, synced_version_profile TEXT, ' 'optimized_version INTEGER, optimized_version_profile TEXT, optimized_version_title TEXT)' @@ -1324,6 +1324,18 @@ def dbcheck(): 'ALTER TABLE sessions ADD COLUMN initial_stream INTEGER DEFAULT 1' ) + # Upgrade sessions table from earlier versions + try: + c_db.execute('SELECT audio_language FROM sessions') + except sqlite3.OperationalError: + logger.debug(u"Altering database. Updating database table sessions.") + c_db.execute( + 'ALTER TABLE sessions ADD COLUMN audio_language TEXT' + ) + c_db.execute( + 'ALTER TABLE sessions ADD COLUMN stream_audio_language TEXT' + ) + # Upgrade session_history table from earlier versions try: c_db.execute('SELECT reference_id FROM session_history') @@ -1711,7 +1723,19 @@ def dbcheck(): 'UPDATE session_history_media_info SET stream_video_dynamic_range = "SDR" ' 'WHERE video_dynamic_range = "SDR" AND stream_video_dynamic_range = "HDR"' ) - + + # Upgrade session_history_media_info table from earlier versions + try: + c_db.execute('SELECT audio_language FROM session_history_media_info') + except sqlite3.OperationalError: + logger.debug("Altering database. Updating database table session_history_media_info.") + c_db.execute( + 'ALTER TABLE session_history_media_info ADD COLUMN audio_language TEXT ' + ) + c_db.execute( + 'ALTER TABLE session_history_media_info ADD COLUMN stream_audio_language TEXT ' + ) + # Upgrade users table from earlier versions try: c_db.execute('SELECT do_notify FROM users') diff --git a/plexpy/activity_processor.py b/plexpy/activity_processor.py index 53cebc0e..9ab7771c 100644 --- a/plexpy/activity_processor.py +++ b/plexpy/activity_processor.py @@ -99,6 +99,7 @@ class ActivityProcessor(object): 'audio_codec': session.get('audio_codec', ''), 'audio_bitrate': session.get('audio_bitrate', ''), 'audio_channels': session.get('audio_channels', ''), + 'audio_language': session.get('audio_language', ''), 'subtitle_codec': session.get('subtitle_codec', ''), 'transcode_protocol': session.get('transcode_protocol', ''), 'transcode_container': session.get('transcode_container', ''), @@ -132,6 +133,7 @@ class ActivityProcessor(object): 'stream_audio_codec': session.get('stream_audio_codec', ''), 'stream_audio_bitrate': session.get('stream_audio_bitrate', ''), 'stream_audio_channels': session.get('stream_audio_channels', ''), + 'stream_audio_language': session.get('stream_audio_language', ''), 'stream_subtitle_decision': session.get('stream_subtitle_decision', ''), 'stream_subtitle_codec': session.get('stream_subtitle_codec', ''), 'subtitles': session.get('subtitles', 0), @@ -416,6 +418,7 @@ class ActivityProcessor(object): 'audio_codec': session['audio_codec'], 'audio_bitrate': session['audio_bitrate'], 'audio_channels': session['audio_channels'], + 'audio_language': session['audio_language'], 'subtitle_codec': session['subtitle_codec'], 'transcode_protocol': session['transcode_protocol'], 'transcode_container': session['transcode_container'], @@ -451,6 +454,7 @@ class ActivityProcessor(object): 'stream_audio_codec': session['stream_audio_codec'], 'stream_audio_bitrate': session['stream_audio_bitrate'], 'stream_audio_channels': session['stream_audio_channels'], + 'stream_audio_language': session['stream_audio_language'], 'stream_subtitle_decision': session['stream_subtitle_decision'], 'stream_subtitle_codec': session['stream_subtitle_codec'], 'stream_subtitle_container': session['stream_subtitle_container'], diff --git a/plexpy/datafactory.py b/plexpy/datafactory.py index 9b617a83..b3484e83 100644 --- a/plexpy/datafactory.py +++ b/plexpy/datafactory.py @@ -957,11 +957,11 @@ class DataFactory(object): 'synced_version, synced_version_profile, ' \ 'container, video_codec, video_bitrate, video_width, video_height, video_framerate, ' \ 'video_dynamic_range, aspect_ratio, ' \ - 'audio_codec, audio_bitrate, audio_channels, subtitle_codec, ' \ + 'audio_codec, audio_bitrate, audio_channels, audio_language, subtitle_codec, ' \ 'stream_bitrate, stream_video_full_resolution, quality_profile, stream_container_decision, stream_container, ' \ 'stream_video_decision, stream_video_codec, stream_video_bitrate, stream_video_width, stream_video_height, ' \ 'stream_video_framerate, stream_video_dynamic_range, ' \ - 'stream_audio_decision, stream_audio_codec, stream_audio_bitrate, stream_audio_channels, ' \ + 'stream_audio_decision, stream_audio_codec, stream_audio_bitrate, stream_audio_channels, stream_audio_language, ' \ 'subtitles, stream_subtitle_decision, stream_subtitle_codec, ' \ 'transcode_hw_decoding, transcode_hw_encoding, ' \ 'video_decision, audio_decision, transcode_decision, width, height, container, ' \ @@ -979,11 +979,11 @@ class DataFactory(object): 'synced_version, synced_version_profile, ' \ 'container, video_codec, video_bitrate, video_width, video_height, video_framerate, ' \ 'video_dynamic_range, aspect_ratio, ' \ - 'audio_codec, audio_bitrate, audio_channels, subtitle_codec, ' \ + 'audio_codec, audio_bitrate, audio_channels, audio_language, subtitle_codec, ' \ 'stream_bitrate, stream_video_full_resolution, quality_profile, stream_container_decision, stream_container, ' \ 'stream_video_decision, stream_video_codec, stream_video_bitrate, stream_video_width, stream_video_height, ' \ 'stream_video_framerate, stream_video_dynamic_range, ' \ - 'stream_audio_decision, stream_audio_codec, stream_audio_bitrate, stream_audio_channels, ' \ + 'stream_audio_decision, stream_audio_codec, stream_audio_bitrate, stream_audio_channels, stream_audio_language, ' \ 'subtitles, stream_subtitle_decision, stream_subtitle_codec, ' \ 'transcode_hw_decoding, transcode_hw_encoding, ' \ 'video_decision, audio_decision, transcode_decision, width, height, container, ' \ @@ -1034,6 +1034,7 @@ class DataFactory(object): 'audio_codec': item['audio_codec'], 'audio_bitrate': item['audio_bitrate'], 'audio_channels': item['audio_channels'], + 'audio_language': item['audio_language'], 'subtitle_codec': item['subtitle_codec'], 'stream_bitrate': item['stream_bitrate'], 'stream_video_full_resolution': item['stream_video_full_resolution'], @@ -1051,6 +1052,7 @@ class DataFactory(object): 'stream_audio_codec': item['stream_audio_codec'], 'stream_audio_bitrate': item['stream_audio_bitrate'], 'stream_audio_channels': item['stream_audio_channels'], + 'stream_audio_language': item['stream_audio_language'], 'subtitles': item['subtitles'], 'stream_subtitle_decision': item['stream_subtitle_decision'], 'stream_subtitle_codec': item['stream_subtitle_codec'], diff --git a/plexpy/webserve.py b/plexpy/webserve.py index 615d1685..aa41c870 100644 --- a/plexpy/webserve.py +++ b/plexpy/webserve.py @@ -1998,6 +1998,7 @@ class WebInterface(object): {"aspect_ratio": "2.35", "audio_bitrate": 231, "audio_channels": 6, + "audio_language": "English", "audio_codec": "aac", "audio_decision": "transcode", "bitrate": 2731, @@ -2013,6 +2014,7 @@ class WebInterface(object): "quality_profile": "1.5 Mbps 480p", "stream_audio_bitrate": 203, "stream_audio_channels": 2, + "stream_audio_language": "English", "stream_audio_codec": "aac", "stream_audio_decision": "transcode", "stream_bitrate": 730,