Skip to content

Commit

Permalink
Merge pull request #731 from GregoireDruant/master
Browse files Browse the repository at this point in the history
Fix #539 "cast not available"
  • Loading branch information
oddstr13 authored Mar 24, 2024
2 parents eec6f5d + 68b3e8d commit 890d54c
Show file tree
Hide file tree
Showing 5 changed files with 75 additions and 8 deletions.
9 changes: 9 additions & 0 deletions jellyfin_kodi/database/jellyfin_db.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,15 @@ def get_item_by_kodi_id(self, *args):
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:
Expand Down
14 changes: 14 additions & 0 deletions jellyfin_kodi/database/queries.py
Original file line number Diff line number Diff line change
Expand Up @@ -166,3 +166,17 @@
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}"]
3 changes: 3 additions & 0 deletions jellyfin_kodi/objects/kodi/kodi.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,9 @@ def get_path(self, *args):
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)

Expand Down
20 changes: 14 additions & 6 deletions jellyfin_kodi/objects/kodi/queries.py
Original file line number Diff line number Diff line change
Expand Up @@ -342,17 +342,22 @@
"""
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
Expand All @@ -361,9 +366,11 @@
"""
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 = ?
Expand Down Expand Up @@ -483,12 +490,13 @@
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 = """
Expand Down
37 changes: 35 additions & 2 deletions jellyfin_kodi/objects/tvshows.py
Original file line number Diff line number Diff line change
Expand Up @@ -169,14 +169,28 @@ def tvshow_add(self, obj):
self.add_unique_id(*values(obj, QU.add_unique_id_tvshow_obj))

obj['TopPathId'] = self.add_path(obj['TopLevel'])
self.update_path(*values(obj, QU.update_path_toptvshow_obj))

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))

self.add(*values(obj, QU.add_tvshow_obj))
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.
Expand All @@ -187,10 +201,14 @@ def tvshow_update(self, obj):
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
Expand All @@ -200,6 +218,9 @@ def get_path_filename(self, obj):
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/"
Expand Down Expand Up @@ -377,6 +398,12 @@ def episode_add(self, obj):
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):
Expand Down Expand Up @@ -423,15 +450,21 @@ def get_episode_path_filename(self, obj):
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'],
'dbid': obj['EpisodeId'],
'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))
Expand Down

0 comments on commit 890d54c

Please sign in to comment.