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,