Fix for not detecting external subtitle language
This commit is contained in:
parent
0b7c9dc820
commit
04dfd78a9b
2 changed files with 50 additions and 12 deletions
|
@ -43,7 +43,7 @@ from os import path as os_path
|
||||||
|
|
||||||
import xbmcgui
|
import xbmcgui
|
||||||
from xbmc import sleep, executebuiltin
|
from xbmc import sleep, executebuiltin
|
||||||
from xbmcvfs import exists
|
from xbmcvfs import exists, mkdirs
|
||||||
|
|
||||||
import clientinfo as client
|
import clientinfo as client
|
||||||
from downloadutils import DownloadUtils
|
from downloadutils import DownloadUtils
|
||||||
|
@ -2301,24 +2301,58 @@ class API():
|
||||||
return
|
return
|
||||||
kodiindex = 0
|
kodiindex = 0
|
||||||
for stream in mediastreams:
|
for stream in mediastreams:
|
||||||
index = stream.attrib['id']
|
|
||||||
# Since plex returns all possible tracks together, have to pull
|
# Since plex returns all possible tracks together, have to pull
|
||||||
# only external subtitles.
|
# only external subtitles - only for these a 'key' exists
|
||||||
|
if stream.attrib.get('streamType') != "3":
|
||||||
|
# Not a subtitle
|
||||||
|
continue
|
||||||
|
# Only set for additional external subtitles NOT lying beside video
|
||||||
key = stream.attrib.get('key')
|
key = stream.attrib.get('key')
|
||||||
# IsTextSubtitleStream if true, is available to download from plex.
|
# Only set for dedicated subtitle files lying beside video
|
||||||
if stream.attrib.get('streamType') == "3" and key:
|
# ext = stream.attrib.get('format')
|
||||||
# Direct stream
|
if key:
|
||||||
url = ("%s%s" % (self.server, key))
|
# We do know the language - temporarily download
|
||||||
url = self.addPlexCredentialsToUrl(url)
|
if stream.attrib.get('languageCode') is not None:
|
||||||
|
path = self.__download_external_subtitles(
|
||||||
|
"{server}%s" % key,
|
||||||
|
"subtitle.%s.%s" % (stream.attrib['languageCode'],
|
||||||
|
stream.attrib['codec']))
|
||||||
|
# We don't know the language - no need to download
|
||||||
|
else:
|
||||||
|
path = self.addPlexCredentialsToUrl(
|
||||||
|
"%s%s" % (self.server, key))
|
||||||
# map external subtitles for mapping
|
# map external subtitles for mapping
|
||||||
mapping[kodiindex] = index
|
mapping[kodiindex] = stream.attrib['id']
|
||||||
externalsubs.append(url)
|
externalsubs.append(path)
|
||||||
kodiindex += 1
|
kodiindex += 1
|
||||||
mapping = dumps(mapping)
|
mapping = dumps(mapping)
|
||||||
window('plex_%s.indexMapping' % playurl, value=mapping)
|
window('plex_%s.indexMapping' % playurl, value=mapping)
|
||||||
log.info('Found external subs: %s' % externalsubs)
|
log.info('Found external subs: %s' % externalsubs)
|
||||||
return externalsubs
|
return externalsubs
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def __download_external_subtitles(url, filename):
|
||||||
|
"""
|
||||||
|
One cannot pass the subtitle language for ListItems. Workaround; will
|
||||||
|
download the subtitle at url to the Kodi PKC directory in a temp dir
|
||||||
|
|
||||||
|
Returns the path to the downloaded subtitle or None
|
||||||
|
"""
|
||||||
|
if not exists(v.EXTERNAL_SUBTITLE_TEMP_PATH):
|
||||||
|
mkdirs(v.EXTERNAL_SUBTITLE_TEMP_PATH)
|
||||||
|
path = os_path.join(v.EXTERNAL_SUBTITLE_TEMP_PATH, filename)
|
||||||
|
r = DownloadUtils().downloadUrl(url, return_response=True)
|
||||||
|
try:
|
||||||
|
r.status_code
|
||||||
|
except AttributeError:
|
||||||
|
log.error('Could not temporarily download subtitle %s' % url)
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
r.encoding = 'utf-8'
|
||||||
|
with open(path, 'wb') as f:
|
||||||
|
f.write(r.content)
|
||||||
|
return path
|
||||||
|
|
||||||
def GetKodiPremierDate(self):
|
def GetKodiPremierDate(self):
|
||||||
"""
|
"""
|
||||||
Takes Plex' originallyAvailableAt of the form "yyyy-mm-dd" and returns
|
Takes Plex' originallyAvailableAt of the form "yyyy-mm-dd" and returns
|
||||||
|
@ -2601,6 +2635,7 @@ class API():
|
||||||
|
|
||||||
# Append external subtitles to stream
|
# Append external subtitles to stream
|
||||||
playmethod = window('%s.playmethod' % plexitem)
|
playmethod = window('%s.playmethod' % plexitem)
|
||||||
|
# Direct play automatically appends external
|
||||||
|
# BUT: Plex may add additional subtitles NOT
|
||||||
if playmethod in ("DirectStream", "DirectPlay"):
|
if playmethod in ("DirectStream", "DirectPlay"):
|
||||||
subtitles = self.externalSubs(playurl)
|
listitem.setSubtitles(self.externalSubs(playurl))
|
||||||
listitem.setSubtitles(subtitles)
|
|
||||||
|
|
|
@ -95,6 +95,9 @@ DB_TEXTURE_PATH = tryDecode(xbmc.translatePath(
|
||||||
|
|
||||||
DB_PLEX_PATH = tryDecode(xbmc.translatePath("special://database/plex.db"))
|
DB_PLEX_PATH = tryDecode(xbmc.translatePath("special://database/plex.db"))
|
||||||
|
|
||||||
|
EXTERNAL_SUBTITLE_TEMP_PATH = tryDecode(xbmc.translatePath(
|
||||||
|
"special://profile/addon_data/%s/temp/" % ADDON_ID))
|
||||||
|
|
||||||
|
|
||||||
# Multiply Plex time by this factor to receive Kodi time
|
# Multiply Plex time by this factor to receive Kodi time
|
||||||
PLEX_TO_KODI_TIMEFACTOR = 1.0 / 1000.0
|
PLEX_TO_KODI_TIMEFACTOR = 1.0 / 1000.0
|
||||||
|
|
Loading…
Reference in a new issue