Merge pull request #731 from GregoireDruant/master

Fix #539 "cast not available"
This commit is contained in:
Odd Stråbø 2024-03-25 00:43:55 +01:00 committed by GitHub
commit 890d54c821
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 75 additions and 8 deletions

View file

@ -71,6 +71,15 @@ class JellyfinDatabase():
except TypeError:
return
def get_episode_kodi_parent_path_id(self, *args):
try:
self.cursor.execute(QU.get_episode_kodi_parent_path_id, args)
return self.cursor.fetchone()[0]
except TypeError:
return
def get_full_item_by_kodi_id(self, *args):
try:

View file

@ -166,3 +166,17 @@ WHERE jellyfin_parent_id = ?
delete_version = """
DELETE FROM version
"""
get_episode_kodi_parent_path_id = """
SELECT sh.kodi_pathid
FROM jellyfin e
JOIN jellyfin s
ON e.parent_id = s.kodi_id
JOIN jellyfin sh
ON s.parent_id = sh.kodi_id
WHERE e.media_type = ?
AND s.media_type = ?
AND sh.media_type = ?
AND e.jellyfin_id = ?;
"""
get_episode_kodi_parent_path_id_obj = ["episode", "season", "tvshow", "{Id}"]

View file

@ -77,6 +77,9 @@ class Kodi(object):
except TypeError:
return
def update_path_parent_id(self, path_id, parent_path_id):
self.cursor.execute(QU.update_path_parent_id, (parent_path_id, path_id))
def update_path(self, *args):
self.cursor.execute(QU.update_path, args)

View file

@ -342,17 +342,22 @@ VALUES (?, ?, ?)
"""
add_episode = """
INSERT INTO episode(idEpisode, idFile, c00, c01, c03, c04, c05, c09, c10, c12, c13, c14,
idShow, c15, c16, idSeason)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
idShow, c15, c16, idSeason, c18, c19, c20)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
"""
add_episode_obj = ["{EpisodeId}", "{FileId}", "{Title}", "{Plot}", "{RatingId}", "{Writers}", "{Premiere}", "{Runtime}",
"{Directors}", "{Season}", "{Index}", "{Title}", "{ShowId}", "{AirsBeforeSeason}",
"{AirsBeforeEpisode}", "{SeasonId}"]
"{AirsBeforeEpisode}", "{SeasonId}", "{FullFilePath}", "{PathId}", "{Unique}"]
add_art = """
INSERT INTO art(media_id, media_type, type, url)
VALUES (?, ?, ?, ?)
"""
update_path_parent_id = """
UPDATE path
SET idParentPath = ?
where idPath = ?
"""
update_path = """
UPDATE path
@ -361,9 +366,11 @@ WHERE idPath = ?
"""
update_path_movie_obj = ["{Path}", "movies", "metadata.local", 1, "{PathId}"]
update_path_toptvshow_obj = ["{TopLevel}", "tvshows", "metadata.local", 1, "{TopPathId}"]
update_path_toptvshow_addon_obj = ["{TopLevel}", None, None, 1, "{TopPathId}"]
update_path_tvshow_obj = ["{Path}", None, None, 1, "{PathId}"]
update_path_episode_obj = ["{Path}", None, None, 1, "{PathId}"]
update_path_mvideo_obj = ["{Path}", "musicvideos", None, 1, "{PathId}"]
update_path_mvideo_obj = ["{Path}", "musicvideos", "metadata.local", 1, "{PathId}"]
update_file = """
UPDATE files
SET idPath = ?, strFilename = ?, dateAdded = ?
@ -483,12 +490,13 @@ WHERE idSeason = ?
update_episode = """
UPDATE episode
SET c00 = ?, c01 = ?, c03 = ?, c04 = ?, c05 = ?, c09 = ?, c10 = ?,
c12 = ?, c13 = ?, c14 = ?, c15 = ?, c16 = ?, idSeason = ?, idShow = ?
c12 = ?, c13 = ?, c14 = ?, c15 = ?, c16 = ?, idSeason = ?, idShow = ?,
c18 = ?, c19 = ?, c20 = ?
WHERE idEpisode = ?
"""
update_episode_obj = ["{Title}", "{Plot}", "{RatingId}", "{Writers}", "{Premiere}", "{Runtime}", "{Directors}",
"{Season}", "{Index}", "{Title}", "{AirsBeforeSeason}", "{AirsBeforeEpisode}", "{SeasonId}",
"{ShowId}", "{EpisodeId}"]
"{ShowId}", "{FullFilePath}", "{PathId}", "{Unique}", "{EpisodeId}"]
delete_path = """

View file

@ -169,7 +169,19 @@ class TVShows(KodiDb):
self.add_unique_id(*values(obj, QU.add_unique_id_tvshow_obj))
obj['TopPathId'] = self.add_path(obj['TopLevel'])
if self.direct_path:
# Normal way, we use the actual top path
self.update_path(*values(obj, QU.update_path_toptvshow_obj))
else:
# Hack to allow cast information in add-on mode
# We create a path on top of all others that holds mediaType and scrapper
self.update_path(*values(obj, QU.update_path_toptvshow_addon_obj))
temp_obj = dict()
temp_obj['TopLevel'] = 'plugin://plugin.video.jellyfin/'
temp_obj['TopPathId'] = self.add_path(temp_obj['TopLevel'])
self.update_path(*values(temp_obj, QU.update_path_toptvshow_obj))
self.update_path_parent_id(obj['TopPathId'], temp_obj['TopPathId'])
obj['PathId'] = self.add_path(*values(obj, QU.get_path_obj))
@ -177,6 +189,8 @@ class TVShows(KodiDb):
self.jellyfin_db.add_reference(*values(obj, QUEM.add_reference_tvshow_obj))
LOG.debug("ADD tvshow [%s/%s/%s] %s: %s", obj['TopPathId'], obj['PathId'], obj['ShowId'], obj['Title'], obj['Id'])
self.update_path_parent_id(obj['PathId'], obj['TopPathId'])
def tvshow_update(self, obj):
''' Update object to kodi.
@ -187,10 +201,14 @@ class TVShows(KodiDb):
obj['Unique'] = self.get_unique_id(*values(obj, QU.get_unique_id_tvshow_obj))
self.update_unique_id(*values(obj, QU.update_unique_id_tvshow_obj))
obj['TopPathId'] = self.get_path(obj['TopLevel'])
self.update(*values(obj, QU.update_tvshow_obj))
self.jellyfin_db.update_reference(*values(obj, QUEM.update_reference_obj))
LOG.debug("UPDATE tvshow [%s/%s] %s: %s", obj['PathId'], obj['ShowId'], obj['Title'], obj['Id'])
self.update_path_parent_id(obj['PathId'], obj['TopPathId'])
def get_path_filename(self, obj):
''' Get the path and build it into protocol://path
@ -200,6 +218,9 @@ class TVShows(KodiDb):
if '\\' in obj['Path']:
obj['Path'] = "%s\\" % obj['Path']
obj['TopLevel'] = "%s\\" % dirname(dirname(obj['Path']))
elif 'smb://' in obj['Path'] or 'nfs://' in obj['Path']:
obj['Path'] = "%s/" % obj['Path']
obj['TopLevel'] = "%s/" % dirname(dirname(obj['Path']))
else:
obj['Path'] = "%s/" % obj['Path']
obj['TopLevel'] = "plugin://plugin.video.jellyfin/"
@ -377,6 +398,12 @@ class TVShows(KodiDb):
return self.episode_add(obj)
self.jellyfin_db.add_reference(*values(obj, QUEM.add_reference_episode_obj))
parentPathId = self.jellyfin_db.get_episode_kodi_parent_path_id(*values(obj, QUEM.get_episode_kodi_parent_path_id_obj))
if obj['PathId'] != parentPathId:
LOG.debug("Setting episode pathParentId, episode %s, title %s, pathId %s, pathParentId %s", obj['Id'], obj['Title'], obj['PathId'], parentPathId)
self.update_path_parent_id(obj['PathId'], parentPathId)
LOG.debug("ADD episode [%s/%s] %s: %s", obj['PathId'], obj['FileId'], obj['Id'], obj['Title'])
def episode_update(self, obj):
@ -423,8 +450,13 @@ class TVShows(KodiDb):
obj['Filename'] = 'index.bdmv'
LOG.debug("Bluray directory %s", obj['Path'])
obj['FullFilePath'] = obj['Path'] + obj['Filename']
else:
obj['Path'] = "plugin://plugin.video.jellyfin/%s/" % obj['SeriesId']
# We need LibraryId
library = self.library or find_library(self.server, obj)
obj['LibraryId'] = library['Id']
obj['Path'] = "plugin://plugin.video.jellyfin/%s/%s/" % (obj['LibraryId'], obj['SeriesId'])
params = {
'filename': py2_encode(obj['Filename'], 'utf-8'),
'id': obj['Id'],
@ -432,6 +464,7 @@ class TVShows(KodiDb):
'mode': "play"
}
obj['Filename'] = "%s?%s" % (obj['Path'], urlencode(params))
obj['FullFilePath'] = obj['Filename']
def get_show_id(self, obj):
obj['ShowId'] = self.jellyfin_db.get_item_by_id(*values(obj, QUEM.get_item_series_obj))