jellyfin-kodi/resources/lib/ReadKodiDB.py

244 lines
11 KiB
Python
Raw Normal View History

2015-03-17 18:41:26 +00:00
#################################################################################################
# ReadKodiDB
#################################################################################################
import xbmc
import xbmcgui
import xbmcaddon
import json
import os
import Utils as utils
2015-03-17 18:41:26 +00:00
#sleepval is used to throttle the calls to the xbmc json API
sleepVal = 15
2015-03-17 18:41:26 +00:00
class ReadKodiDB():
2015-03-17 18:41:26 +00:00
def getKodiMovie(self, id):
#returns a single movie from Kodi db selected on MB item ID
xbmc.sleep(sleepVal)
json_response = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "VideoLibrary.GetMovies", "params": { "properties" : ["art", "rating", "thumbnail", "fanart", "resume", "runtime", "year", "genre", "cast", "trailer", "country", "studio", "set", "imdbnumber", "mpaa", "tagline", "plotoutline","plot", "sorttitle", "director", "lastplayed", "writer", "playcount", "tag", "file"], "sort": { "order": "ascending", "method": "label", "ignorearticle": true } }, "id": "libMovies"}')
2015-03-17 18:41:26 +00:00
jsonobject = json.loads(json_response.decode('utf-8','replace'))
movie = None
if(jsonobject.has_key('result')):
result = jsonobject['result']
if(result.has_key('movies')):
movies = result['movies']
movie = movies[0]
for item in movies:
if id in item["file"]:
movie = item
break
2015-03-17 18:41:26 +00:00
return movie
def getEmbyIdByKodiId(self, kodiid, type):
embyId = None
connection = utils.KodiSQL()
cursor = connection.cursor()
if type == "movie":
cursor.execute("SELECT embyId as embyId FROM movie WHERE idMovie = ?",(kodiid,))
if type == "episode":
cursor.execute("SELECT embyId as embyId FROM episode WHERE idEpisode = ?",(kodiid,))
if type == "musicvideo":
cursor.execute("SELECT embyId as embyId FROM musicvideo WHERE idMVideo = ?",(kodiid,))
if type == "tvshow":
cursor.execute("SELECT embyId as embyId FROM tvshow WHERE idShow = ?",(kodiid,))
result = cursor.fetchone()
cursor.close()
if result != None:
embyId = result[0]
return embyId
def getKodiMovies(self, connection, cursor):
#returns all movies in Kodi db
cursor.execute("SELECT idMovie, embyId, c00 FROM movie")
allmovies = cursor.fetchall()
#this will return a list with tuples of all items returned from the database
return allmovies
def getKodiMoviesIds(self,returnMB3Ids = False):
# returns a list of movieIds or MB3 Id's from all movies currently in the Kodi library
allKodiMovies = self.getKodiMovies(False)
if(allKodiMovies == None):
return list()
if(returnMB3Ids):
allKodiMovieIds = list(allKodiMovies.keys())
return allKodiMovieIds
else:
allKodiMovieIds = list()
for kodimovie in allKodiMovies.values():
id = str(kodimovie["movieid"])
allKodiMovieIds.append(id)
return allKodiMovieIds
def getKodiTvShowsIds(self,returnMB3Ids = False):
# returns a list of tvshowIds or MB3 Id's from all tvshows currently in the Kodi library
allKodiTvShows = self.getKodiTvShows(False)
if allKodiTvShows == None:
return list()
if(returnMB3Ids):
allKodiTvShowsIds = list(allKodiTvShows.keys())
return allKodiTvShowsIds
else:
allKodiTvShowsIds = list()
for kodishow in allKodiTvShows.values():
id = str(kodishow["tvshowid"])
allKodiTvShowsIds.append(id)
return allKodiTvShowsIds
def getKodiTvShows(self, connection, cursor):
cursor.execute("SELECT idShow, embyId, c00 FROM tvshow")
allshows = cursor.fetchall()
#this will return a list with tuples of all items returned from the database
return allshows
2015-03-17 18:41:26 +00:00
def getKodiTVShow(self, id):
xbmc.sleep(sleepVal)
2015-04-04 21:48:02 +00:00
json_response = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "VideoLibrary.GetTVShows", "params": { "properties": ["art", "genre", "plot", "mpaa", "cast", "studio", "sorttitle", "title", "originaltitle", "imdbnumber", "year", "lastplayed", "premiered", "rating", "thumbnail", "playcount", "file", "fanart", "tag"], "sort": { "order": "ascending", "method": "label", "ignorearticle": true } }, "id": "libTvShows"}')
2015-03-17 18:41:26 +00:00
jsonobject = json.loads(json_response.decode('utf-8','replace'))
tvshow = None
if(jsonobject.has_key('result')):
result = jsonobject['result']
if(result.has_key('tvshows')):
tvshows = result['tvshows']
for show in tvshows:
if show["imdbnumber"] == id:
tvshow = show
break
2015-03-17 18:41:26 +00:00
return tvshow
def getKodiEpisodes(self, connection, cursor, showid):
cursor.execute("SELECT idEpisode, embyId, c00 FROM episode WHERE idShow = ?", (showid,))
allepisodes = cursor.fetchall()
#this will return a list with tuples of all items returned from the database
return allepisodes
2015-03-17 18:41:26 +00:00
2015-03-21 11:33:59 +00:00
def getKodiEpisodeByMbItem(self, episodeid, tvshowid):
2015-03-17 18:41:26 +00:00
episode = None
2015-03-21 11:33:59 +00:00
tvshow = self.getKodiTVShow(tvshowid)
if tvshow != None:
2015-03-24 20:03:07 +00:00
json_response = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "VideoLibrary.GetEpisodes", "params": {"tvshowid": ' + str(tvshow['tvshowid']) + ', "properties": ["playcount","season", "resume", "episode", "lastplayed", "uniqueid", "file"], "sort": {"method": "episode"}}, "id": 1}')
2015-03-21 11:33:59 +00:00
jsonobject = json.loads(json_response.decode('utf-8','replace'))
if(jsonobject.has_key('result')):
result = jsonobject['result']
if(result.has_key('episodes')):
episodes = result['episodes']
for ep in episodes:
if ep["uniqueid"]["unknown"] == episodeid:
episode = ep
break
2015-03-17 18:41:26 +00:00
return episode
2015-03-21 13:31:30 +00:00
2015-04-18 08:02:47 +00:00
def getKodiEpisodeByMbItemEx(self, id):
connection = utils.KodiSQL()
cursor = connection.cursor()
cursor.execute("SELECT idEpisode FROM episode WHERE c20 = ?", (id,))
result = cursor.fetchone()
kodiId = None
if result != None:
kodiId = result[0]
cursor.close()
episode = None
if(kodiId != None):
print "Kodi Episode ID : " + str(kodiId)
json_response = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "VideoLibrary.GetEpisodeDetails", "params": {"episodeid": %d, "properties": ["playcount", "season", "resume", "episode", "lastplayed", "uniqueid", "file"]}, "id": 1}' %kodiId)
#json_response = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "VideoLibrary.GetEpisodeDetails", "params": {"episodeid": ' + str(kodiId) + ', "properties": ["playcount", "season", "resume", "episode", "lastplayed", "uniqueid", "file"], "sort": {"method": "episode"}}, "id": 1}')
jsonobject = json.loads(json_response.decode('utf-8','replace'))
print "Kodi_Item: " + str(jsonobject)
if(jsonobject.has_key("result")):
result = jsonobject["result"]
if(result.has_key("episodedetails")):
episode = result["episodedetails"]
return episode
2015-03-21 13:31:30 +00:00
def getKodiMusicVideo(self, id):
#returns a single musicvideo from Kodi db selected on MB item ID
xbmc.sleep(sleepVal)
#get the mediabrowser ID from DB
connection = utils.KodiSQL()
cursor = connection.cursor()
cursor.execute("SELECT idMVideo as musicvideoid FROM musicvideo WHERE c23 = ?",(id,))
result = cursor.fetchone()
musicvideoid = None
if result != None:
musicvideoid = result[0]
cursor.close()
2015-04-18 08:02:47 +00:00
musicvideo = None
if musicvideoid != None:
json_response = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "VideoLibrary.GetMusicVideosDetails", "params": { "musicvideoid": ' + musicvideoid + ', "properties" : ["art", "thumbnail", "fanart", "resume", "runtime", "year", "genre", "studio", "artist", "album", "track","plot", "director", "playcount", "lastplayed", "tag", "file"], "sort": { "order": "ascending", "method": "label", "ignorearticle": true } }, "id": "libMusicVideos"}')
jsonobject = json.loads(json_response.decode('utf-8','replace'))
musicvideo = None
if(jsonobject.has_key('result')):
result = jsonobject['result']
if(result.has_key('musicvideodetails')):
musicvideo = result['musicvideodetails']
2015-03-21 13:31:30 +00:00
return musicvideo
def getKodiMusicVideos(self,fullInfo = False):
#returns all musicvideos in Kodi db inserted by MB
xbmc.sleep(sleepVal)
if fullInfo:
json_response = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "VideoLibrary.GetMusicVideos", "params": { "properties" : ["art", "thumbnail", "fanart", "resume", "runtime", "year", "genre", "studio", "artist", "album", "track", "lastplayed", "plot", "director", "playcount", "tag", "file"] }, "id": "libMusicVideos"}')
2015-03-21 13:31:30 +00:00
else:
json_response = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "VideoLibrary.GetMusicVideos", "params": { "properties" : ["resume", "playcount", "lastplayed", "file", "track"] }, "id": "libMusicVideos"}')
2015-03-21 13:31:30 +00:00
jsonobject = json.loads(json_response.decode('utf-8','replace'))
musicvideos = None
if(jsonobject.has_key('result')):
result = jsonobject['result']
if(result.has_key('musicvideos')):
musicvideos = result['musicvideos']
kodiMusicVideoMap = None
if(musicvideos != None and len(musicvideos) > 0):
kodiMusicVideoMap = {}
connection = utils.KodiSQL()
cursor = connection.cursor()
2015-03-21 13:31:30 +00:00
for kodivideo in musicvideos:
cursor.execute("SELECT c23 as MBid FROM musicvideo WHERE idMVideo = ?",(kodivideo["musicvideoid"],))
result = cursor.fetchone()
if result != None:
key = result[0]
kodiMusicVideoMap[key] = kodivideo
cursor.close()
2015-03-21 13:31:30 +00:00
return kodiMusicVideoMap
def getKodiMusicVideoIds(self,returnMB3Ids = False):
# returns a list of movieIds or MB3 Id's from all movies currently in the Kodi library
allKodiMusicVideos = self.getKodiMusicVideos(False)
if(allKodiMusicVideos == None):
return list()
if(returnMB3Ids):
allKodiMusicVideoIds = list(allKodiMusicVideos.keys())
return allKodiMusicVideoIds
else:
allKodiMusicVideoIds = list()
for kodivideo in allKodiMusicVideos.values():
id = str(kodivideo["musicvideoid"])
allKodiMusicVideoIds.append(id)
return allKodiMusicVideoIds