diff --git a/resources/lib/ReadEmbyDB.py b/resources/lib/ReadEmbyDB.py index 1e888325..584a0bd5 100644 --- a/resources/lib/ReadEmbyDB.py +++ b/resources/lib/ReadEmbyDB.py @@ -5,22 +5,17 @@ import xbmc import xbmcgui import xbmcaddon -import json from DownloadUtils import DownloadUtils addon = xbmcaddon.Addon(id='plugin.video.emby') class ReadEmbyDB(): + def getMovies(self, id, fullinfo = False, fullSync = True, itemList = []): + result = None - - WINDOW = xbmcgui.Window(10000) - username = WINDOW.getProperty('currUser') - userid = WINDOW.getProperty('userId%s' % username) - server = WINDOW.getProperty('server%s' % username) - - downloadUtils = DownloadUtils() + doUtils = DownloadUtils() if fullSync: sortstring = "&SortBy=SortName" @@ -32,35 +27,31 @@ class ReadEmbyDB(): sortstring = "&Limit=20&SortBy=DateCreated" if fullinfo: - url = "%s/mediabrowser/Users/%s/items?ParentId=%s%s&Fields=Path,Genres,SortName,Studios,Writer,ProductionYear,Taglines,CommunityRating,OfficialRating,CumulativeRunTimeTicks,Metascore,AirTime,DateCreated,MediaStreams,People,Overview&Recursive=true&SortOrder=Descending&IncludeItemTypes=Movie&CollapseBoxSetItems=false&format=json&ImageTypeLimit=1" % (server, userid, id, sortstring) + url = "{server}/mediabrowser/Users/{UserId}/items?ParentId=%s%s&Fields=Path,Genres,SortName,Studios,Writer,ProductionYear,Taglines,CommunityRating,OfficialRating,CumulativeRunTimeTicks,Metascore,AirTime,DateCreated,MediaStreams,People,Overview&Recursive=true&SortOrder=Descending&IncludeItemTypes=Movie&CollapseBoxSetItems=false&format=json&ImageTypeLimit=1" % (id, sortstring) else: - url = "%s/mediabrowser/Users/%s/items?ParentId=%s%s&Fields=CumulativeRunTimeTicks&Recursive=true&SortOrder=Descending&IncludeItemTypes=Movie&CollapseBoxSetItems=false&format=json&ImageTypeLimit=1" % (server, userid, id, sortstring) + url = "{server}/mediabrowser/Users/{UserId}/items?ParentId=%s%s&Fields=CumulativeRunTimeTicks&Recursive=true&SortOrder=Descending&IncludeItemTypes=Movie&CollapseBoxSetItems=false&format=json&ImageTypeLimit=1" % (id, sortstring) - jsonData = downloadUtils.downloadUrl(url, suppress=False, popup=0) - if jsonData != None and jsonData != "": - result = json.loads(jsonData) - if(result.has_key('Items')): - result = result['Items'] + jsonData = doUtils.downloadUrl(url) + if (jsonData == ""): + return result + + if (jsonData[u'Items'] != ""): + result = jsonData[u'Items'] # work around for now until ParetnId and Id work together - if(result != None and len(result) > 0 and len(itemList) > 0): + if (result != None and len(result) > 0 and len(itemList) > 0): newResult = [] for item in result: - if(item.get("Id") in itemList): + if (item[u'Id'] in itemList): newResult.append(item) result = newResult return result def getMusicVideos(self, fullinfo = False, fullSync = True): + result = None - - WINDOW = xbmcgui.Window(10000) - username = WINDOW.getProperty('currUser') - userid = WINDOW.getProperty('userId%s' % username) - server = WINDOW.getProperty('server%s' % username) - - downloadUtils = DownloadUtils() + doUtils = DownloadUtils() if not fullSync: sortstring = "&Limit=20&SortBy=DateCreated" @@ -68,276 +59,227 @@ class ReadEmbyDB(): sortstring = "&SortBy=SortName" if fullinfo: - url = "%s/mediabrowser/Users/%s/items?%s&Fields=Path,Genres,SortName,Studios,Writer,ProductionYear,Taglines,CommunityRating,OfficialRating,CumulativeRunTimeTicks,Metascore,AirTime,DateCreated,MediaStreams,People,Overview&Recursive=true&SortOrder=Descending&IncludeItemTypes=MusicVideo&format=json&ImageTypeLimit=1" % (server, userid, sortstring) + url = "{server}/mediabrowser/Users/{UserId}/items?%s&Fields=Path,Genres,SortName,Studios,Writer,ProductionYear,Taglines,CommunityRating,OfficialRating,CumulativeRunTimeTicks,Metascore,AirTime,DateCreated,MediaStreams,People,Overview&Recursive=true&SortOrder=Descending&IncludeItemTypes=MusicVideo&format=json&ImageTypeLimit=1" % sortstring else: - url = "%s/mediabrowser/Users/%s/items?%s&Fields=CumulativeRunTimeTicks&Recursive=true&SortOrder=Descending&IncludeItemTypes=MusicVideo&CollapseBoxSetItems=false&format=json&ImageTypeLimit=1" % (server, userid, sortstring) + url = "{server}/mediabrowser/Users/{UserId}/items?%s&Fields=CumulativeRunTimeTicks&Recursive=true&SortOrder=Descending&IncludeItemTypes=MusicVideo&CollapseBoxSetItems=false&format=json&ImageTypeLimit=1" % sortstring - jsonData = downloadUtils.downloadUrl(url, suppress=False, popup=0) - if jsonData != None and jsonData != "": - result = json.loads(jsonData) - if(result.has_key('Items')): - result = result['Items'] + jsonData = doUtils.downloadUrl(url) + if (jsonData == ""): + return result + + if (jsonData[u'Items'] != ""): + result = jsonData[u'Items'] return result def getItem(self, id): + result = None - - WINDOW = xbmcgui.Window(10000) - username = WINDOW.getProperty('currUser') - userid = WINDOW.getProperty('userId%s' % username) - server = WINDOW.getProperty('server%s' % username) - - downloadUtils = DownloadUtils() + doUtils = DownloadUtils() - url = "%s/mediabrowser/Users/%s/Items/%s?format=json&ImageTypeLimit=1" % (server, userid, id) - jsonData = downloadUtils.downloadUrl(url, suppress=False, popup=1 ) - if jsonData != None and jsonData != "": - result = json.loads(jsonData) + url = "{server}/mediabrowser/Users/{UserId}/Items/%s?format=json&ImageTypeLimit=1" % id + + jsonData = doUtils.downloadUrl(url) + if (jsonData != ""): + result = jsonData return result def getFullItem(self, id): + result = None - - WINDOW = xbmcgui.Window(10000) - username = WINDOW.getProperty('currUser') - userid = WINDOW.getProperty('userId%s' % username) - server = WINDOW.getProperty('server%s' % username) - - downloadUtils = DownloadUtils() + doUtils = DownloadUtils() - url = "%s/mediabrowser/Users/%s/Items/%s?format=json&Fields=Path,Genres,SortName,Studios,Writer,ProductionYear,Taglines,CommunityRating,OfficialRating,CumulativeRunTimeTicks,Metascore,AirTime,DateCreated,MediaStreams,People,Overview" % (server, userid, id) - jsonData = downloadUtils.downloadUrl(url, suppress=False, popup=1 ) - if jsonData != None and jsonData != "": - result = json.loads(jsonData) + url = "{server}/mediabrowser/Users/{UserId}/Items/%s?format=json&Fields=Path,Genres,SortName,Studios,Writer,ProductionYear,Taglines,CommunityRating,OfficialRating,CumulativeRunTimeTicks,Metascore,AirTime,DateCreated,MediaStreams,People,Overview" % id + + jsonData = doUtils.downloadUrl(url) + if (jsonData != ""): + result = jsonData return result def getTVShows(self, id, fullinfo = False, fullSync = False): + result = None - - WINDOW = xbmcgui.Window(10000) - username = WINDOW.getProperty('currUser') - userid = WINDOW.getProperty('userId%s' % username) - server = WINDOW.getProperty('server%s' % username) - - downloadUtils = DownloadUtils() + doUtils = DownloadUtils() if not fullSync: sortstring = "&Limit=20&SortBy=DateCreated" else: sortstring = "&SortBy=SortName" - if fullinfo: - url = "%s/mediabrowser/Users/%s/Items?ParentId=%s%s&Fields=Path,Genres,SortName,Studios,Writer,ProductionYear,Taglines,CommunityRating,OfficialRating,CumulativeRunTimeTicks,Metascore,AirTime,DateCreated,MediaStreams,People,Overview&Recursive=true&SortOrder=Descending&IncludeItemTypes=Series&format=json&ImageTypeLimit=1" % (server, userid, id, sortstring) + url = "{server}/mediabrowser/Users/{UserId}/Items?ParentId=%s%s&Fields=Path,Genres,SortName,Studios,Writer,ProductionYear,Taglines,CommunityRating,OfficialRating,CumulativeRunTimeTicks,Metascore,AirTime,DateCreated,MediaStreams,People,Overview&Recursive=true&SortOrder=Descending&IncludeItemTypes=Series&format=json&ImageTypeLimit=1" % (id, sortstring) else: - url = "%s/mediabrowser/Users/%s/Items?ParentId=%s%s&Fields=CumulativeRunTimeTicks&Recursive=true&SortOrder=Descending&IncludeItemTypes=Series&format=json&ImageTypeLimit=1" % (server, userid, id, sortstring) + url = "{server}/mediabrowser/Users/{UserId}/Items?ParentId=%s%s&Fields=CumulativeRunTimeTicks&Recursive=true&SortOrder=Descending&IncludeItemTypes=Series&format=json&ImageTypeLimit=1" % (id, sortstring) - jsonData = downloadUtils.downloadUrl(url, suppress=False, popup=0) - if jsonData != None and jsonData != "": - result = json.loads(jsonData) - if(result.has_key('Items')): - result = result['Items'] + jsonData = doUtils.downloadUrl(url) + if (jsonData == ""): + return result + + if (jsonData[u'Items'] != ""): + result = jsonData[u'Items'] return result def getTVShowSeasons(self, tvShowId): + result = None - - WINDOW = xbmcgui.Window(10000) - username = WINDOW.getProperty('currUser') - userid = WINDOW.getProperty('userId%s' % username) - server = WINDOW.getProperty('server%s' % username) - - downloadUtils = DownloadUtils() + doUtils = DownloadUtils() - url = "%s/Shows/%s/Seasons?UserId=%s&format=json&ImageTypeLimit=1" % (server, tvShowId, userid) + url = "{server}/Shows/%s/Seasons?UserId={UserId}&format=json&ImageTypeLimit=1" % tvShowId - jsonData = downloadUtils.downloadUrl(url, suppress=False, popup=0) - if jsonData != None and jsonData != "": - result = json.loads(jsonData) - if(result.has_key('Items')): - result = result['Items'] + jsonData = doUtils.downloadUrl(url) + if (jsonData == ""): + return result + + if (jsonData[u'Items'] != ""): + result = jsonData[u'Items'] return result def getEpisodes(self, showId, fullinfo = False): + result = None - - WINDOW = xbmcgui.Window(10000) - username = WINDOW.getProperty('currUser') - userid = WINDOW.getProperty('userId%s' % username) - server = WINDOW.getProperty('server%s' % username) - - downloadUtils = DownloadUtils() + doUtils = DownloadUtils() if fullinfo: - url = "%s/mediabrowser/Users/%s/Items?ParentId=%s&IsVirtualUnaired=false&IsMissing=False&SortBy=SortName&Fields=Path,Genres,SortName,Studios,Writer,ProductionYear,Taglines,CommunityRating,OfficialRating,CumulativeRunTimeTicks,Metascore,AirTime,DateCreated,MediaStreams,People,Overview&Recursive=true&SortOrder=Ascending&IncludeItemTypes=Episode&format=json&ImageTypeLimit=1" % (server, userid, showId) + url = "{server}/mediabrowser/Users/{UserId}/Items?ParentId=%s&IsVirtualUnaired=false&IsMissing=False&SortBy=SortName&Fields=Path,Genres,SortName,Studios,Writer,ProductionYear,Taglines,CommunityRating,OfficialRating,CumulativeRunTimeTicks,Metascore,AirTime,DateCreated,MediaStreams,People,Overview&Recursive=true&SortOrder=Ascending&IncludeItemTypes=Episode&format=json&ImageTypeLimit=1" % showId else: - url = "%s/mediabrowser/Users/%s/Items?ParentId=%s&IsVirtualUnaired=false&IsMissing=False&SortBy=SortName&Fields=Name,SortName,CumulativeRunTimeTicks&Recursive=true&SortOrder=Ascending&IncludeItemTypes=Episode&format=json&ImageTypeLimit=1" % (server, userid, showId) + url = "{server}/mediabrowser/Users/{UserId}/Items?ParentId=%s&IsVirtualUnaired=false&IsMissing=False&SortBy=SortName&Fields=Name,SortName,CumulativeRunTimeTicks&Recursive=true&SortOrder=Ascending&IncludeItemTypes=Episode&format=json&ImageTypeLimit=1" % showId - jsonData = downloadUtils.downloadUrl(url, suppress=False, popup=0) - - if jsonData != None and jsonData != "": - result = json.loads(jsonData) - if(result.has_key('Items')): - result = result['Items'] + jsonData = doUtils.downloadUrl(url) + if (jsonData == ""): + return result + + if (jsonData[u'Items'] != ""): + result = jsonData[u'Items'] return result def getLatestEpisodes(self, fullinfo = False, itemList = []): + result = None - - WINDOW = xbmcgui.Window(10000) - username = WINDOW.getProperty('currUser') - userid = WINDOW.getProperty('userId%s' % username) - server = WINDOW.getProperty('server%s' % username) - - downloadUtils = DownloadUtils() + doUtils = DownloadUtils() limitString = "Limit=20&SortBy=DateCreated&" if(len(itemList) > 0): # if we want a certain list specify it limitString = "Ids=" + ",".join(itemList) + "&" if fullinfo: - url = "%s/mediabrowser/Users/%s/Items?%sIsVirtualUnaired=false&IsMissing=False&Fields=ParentId,Path,Genres,SortName,Studios,Writer,ProductionYear,Taglines,CommunityRating,OfficialRating,CumulativeRunTimeTicks,Metascore,AirTime,DateCreated,MediaStreams,People,Overview&Recursive=true&SortOrder=Descending&IncludeItemTypes=Episode&format=json&ImageTypeLimit=1" % (server, userid, limitString) + url = "{server}/mediabrowser/Users/{UserId}/Items?%sIsVirtualUnaired=false&IsMissing=False&Fields=ParentId,Path,Genres,SortName,Studios,Writer,ProductionYear,Taglines,CommunityRating,OfficialRating,CumulativeRunTimeTicks,Metascore,AirTime,DateCreated,MediaStreams,People,Overview&Recursive=true&SortOrder=Descending&IncludeItemTypes=Episode&format=json&ImageTypeLimit=1" % limitString else: - url = "%s/mediabrowser/Users/%s/Items?%sIsVirtualUnaired=false&IsMissing=False&Fields=ParentId,Name,SortName,CumulativeRunTimeTicks&Recursive=true&SortOrder=Descending&IncludeItemTypes=Episode&format=json&ImageTypeLimit=1" % (server, userid, limitString) + url = "{server}/mediabrowser/Users/{UserId}/Items?%sIsVirtualUnaired=false&IsMissing=False&Fields=ParentId,Name,SortName,CumulativeRunTimeTicks&Recursive=true&SortOrder=Descending&IncludeItemTypes=Episode&format=json&ImageTypeLimit=1" % limitString - jsonData = downloadUtils.downloadUrl(url, suppress=False, popup=0) - - if jsonData != None and jsonData != "": - result = json.loads(jsonData) - if(result.has_key('Items')): - result = result['Items'] + jsonData = doUtils.downloadUrl(url) + if (jsonData == ""): + return result + + if (jsonData[u'Items'] != ""): + result = jsonData[u'Items'] return result def getCollections(self, type): #Build a list of the user views - WINDOW = xbmcgui.Window(10000) - username = WINDOW.getProperty('currUser') - userid = WINDOW.getProperty('userId%s' % username) - server = WINDOW.getProperty('server%s' % username) - downloadUtils = DownloadUtils() try: - url = "%s/mediabrowser/Users/%s/Items/Root?format=json" % (server, userid) - jsonData = downloadUtils.downloadUrl(url) + url = "{server}/mediabrowser/Users/{UserId}/Items/Root?format=json" + result = downloadUtils.downloadUrl(url) except Exception, msg: - error = "Get connect : " + str(msg) - xbmc.log (error) + error = "Can't connect: %s" % msg + xbmc.log(error) return [] - if(jsonData == ""): + if (result == ""): return [] - - result = json.loads(jsonData) + + parentid = result[u'Id'] - parentid = result.get("Id") - - htmlpath = "%s/mediabrowser/Users/%s/items?ParentId=%s&Sortby=SortName&format=json" % (server, userid, parentid) - jsonData = downloadUtils.downloadUrl(htmlpath) + url = "{server}/mediabrowser/Users/{UserId}/items?ParentId=%s&Sortby=SortName&format=json" % parentid + result = downloadUtils.downloadUrl(url) collections=[] - if(jsonData == ""): + if (result == ""): return [] - result = json.loads(jsonData) - result = result.get("Items") + result = result[u'Items'] for item in result: - if(item.get("RecursiveItemCount") != 0): - Temp = item.get("Name") - Name = Temp.encode('utf-8') - section = item.get("CollectionType") - itemtype = item.get("CollectionType") + if (item[u'RecursiveItemCount'] != 0): + Name = item[u'Name'] + itemtype = item[u'CollectionType'] if itemtype == None or itemtype == "": itemtype = "movies" # User may not have declared the type - if itemtype == type and item.get("Name") != "Collections": - collections.append( {'title' : item.get("Name"), - 'type' : itemtype, - 'id' : item.get("Id")}) + if itemtype == type and Name != "Collections": + collections.append({'title': Name, + 'type' : itemtype, + 'id' : item[u'Id']}) return collections def getViewCollections(self, type): #Build a list of the user views - WINDOW = xbmcgui.Window(10000) - username = WINDOW.getProperty('currUser') - userid = WINDOW.getProperty('userId%s' % username) - server = WINDOW.getProperty('server%s' % username) - - viewsUrl = "%s/mediabrowser/Users/%s/Views?format=json&ImageTypeLimit=1" % (server, userid) - jsonData = DownloadUtils().downloadUrl(viewsUrl, suppress=False, popup=0 ) + doUtils = DownloadUtils() + + viewsUrl = "{server}/mediabrowser/Users/{UserId}/Views?format=json&ImageTypeLimit=1" + jsonData = doUtils.downloadUrl(viewsUrl) collections=[] - if(jsonData != ""): - views = json.loads(jsonData) - views = views.get("Items") + if (jsonData != ""): + views = views[u'Items'] for view in views: - if view.get("Type") == 'UserView': # Need to grab the real main node - newViewsUrl = "%s/mediabrowser/Users/%s/items?ParentId=%s&SortBy=SortName&SortOrder=Ascending&format=json&ImageTypeLimit=1" % (server, userid, view.get("Id")) - jsonData = DownloadUtils().downloadUrl(newViewsUrl, suppress=False, popup=0 ) - if(jsonData != ""): - newViews = json.loads(jsonData) - newViews = newViews.get("Items") + if (view[u'Type'] == 'UserView'): # Need to grab the real main node + newViewsUrl = "{server}/mediabrowser/Users/{UserId}/items?ParentId=%s&SortBy=SortName&SortOrder=Ascending&format=json&ImageTypeLimit=1" % view[u'Id'] + jsonData = doUtils.downloadUrl(newViewsUrl) + if (jsonData != ""): + newViews = newViews[u'Items'] for newView in newViews: # There are multiple nodes in here like 'Latest', 'NextUp' - below we grab the full node. - if newView.get("CollectionType") == "MovieMovies" or newView.get("CollectionType") == "TvShowSeries": + if newView[u'CollectionType'] == "MovieMovies" or newView[u'CollectionType'] == "TvShowSeries": view=newView - if(view.get("ChildCount") != 0): - Name =(view.get("Name")) + if (view[u'ChildCount'] != 0): + Name = view[u'Name'] - total = str(view.get("ChildCount")) - type = view.get("CollectionType") + total = str(view[u'ChildCount']) + type = view[u'CollectionType'] if type == None: type = "None" # User may not have declared the type if type == type: - collections.append( {'title' : Name, - 'type' : type, - 'id' : view.get("Id")}) + collections.append({'title': Name, + 'type' : type, + 'id' : view[u'Id']}) return collections def getBoxSets(self): + result = None + doUtils = DownloadUtils() - WINDOW = xbmcgui.Window(10000) - username = WINDOW.getProperty('currUser') - userid = WINDOW.getProperty('userId%s' % username) - server = WINDOW.getProperty('server%s' % username) + url = "{server}/mediabrowser/Users/{UserId}/Items?SortBy=SortName&IsVirtualUnaired=false&IsMissing=False&Fields=Name,SortName,CumulativeRunTimeTicks&Recursive=true&SortOrder=Ascending&IncludeItemTypes=BoxSet&format=json&ImageTypeLimit=1" - downloadUtils = DownloadUtils() - - url = "%s/mediabrowser/Users/%s/Items?SortBy=SortName&IsVirtualUnaired=false&IsMissing=False&Fields=Name,SortName,CumulativeRunTimeTicks&Recursive=true&SortOrder=Ascending&IncludeItemTypes=BoxSet&format=json&ImageTypeLimit=1" % (server, userid) - - jsonData = downloadUtils.downloadUrl(url, suppress=False, popup=0) - - if jsonData != None and jsonData != "": - result = json.loads(jsonData) - if(result.has_key('Items')): - result = result['Items'] + jsonData = doUtils.downloadUrl(url) + if (jsonData == ""): + return result + + if (jsonData[u'Items'] != ""): + result = jsonData[u'Items'] + return result def getMoviesInBoxSet(self,boxsetId): + result = None + doUtils = DownloadUtils() - WINDOW = xbmcgui.Window(10000) - username = WINDOW.getProperty('currUser') - userid = WINDOW.getProperty('userId%s' % username) - server = WINDOW.getProperty('server%s' % username) + url = "{server}/mediabrowser/Users/{UserId}/Items?ParentId=%s&Fields=ItemCounts&format=json&ImageTypeLimit=1" % boxsetId - downloadUtils = DownloadUtils() - - url = "%s/mediabrowser/Users/%s/Items?ParentId=%s&Fields=ItemCounts&format=json&ImageTypeLimit=1" % (server, userid, boxsetId) - - jsonData = downloadUtils.downloadUrl(url, suppress=False, popup=0) - - if jsonData != None and jsonData != "": - result = json.loads(jsonData) - if(result.has_key('Items')): - result = result['Items'] + jsonData = doUtils.downloadUrl(url) + if (jsonData == ""): + return result + + if (jsonData[u'Items'] != ""): + result = jsonData[u'Items'] + return result