From 97dd5d9eb564697416f735b414e792743b478e27 Mon Sep 17 00:00:00 2001 From: Marcel van der Veldt Date: Tue, 5 May 2015 00:24:41 +0200 Subject: [PATCH] added getnextup node --- default.py | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/default.py b/default.py index cc6bc0bd..4680f867 100644 --- a/default.py +++ b/default.py @@ -22,6 +22,28 @@ from DownloadUtils import DownloadUtils from ReadEmbyDB import ReadEmbyDB from API import API +from PluginFunctions import PluginFunctions + + +def json_query( method, unplayed=False, properties=None, sort=False, query_filter=False, limit=False, params=False): + json_query = { "jsonrpc": "2.0", "id": 1, "method": method, "params": {} } + if properties is not None: + json_query["params"]["properties"] = properties + if limit is not None: + json_query["params"]["limits"] = {"end":limit if limit else 25} + if sort is not None: + json_query["params"]["sort"] = sort + if query_filter: + json_query["params"]["filter"] = query_filter + if params: + json_query["params"].update(params) + + json_string = json.dumps(json_query) + rv = xbmc.executeJSONRPC(json_string) + + return unicode(rv, 'utf-8', errors='ignore') + + try: params = utils.get_params(sys.argv[2]) mode = params['mode'] @@ -37,6 +59,64 @@ if mode == "play": item = PlaybackUtils().PLAY(result, setup="default") +elif "getnextup" in sys.argv[0]: + params = utils.get_params(sys.argv[2]) + tagname = params['tagname'] + xbmcplugin.setContent(int(sys.argv[1]), 'episodes') + # First we get a list of all the in-progress TV shows - filtered by tag + json_query_string = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "VideoLibrary.GetTVShows", "params": { "sort": { "order": "descending", "method": "lastplayed" }, "filter": {"and": [{"operator":"true", "field":"inprogress", "value":""}, {"operator": "contains", "field": "tag", "value": "%s"}]}, "properties": [ "title", "studio", "mpaa", "file", "art" ] }, "id": "libTvShows"}' %tagname) + print json_query_string + + json_result = json.loads(json_query_string) + # If we found any, find the oldest unwatched show for each one. + if json_result.has_key('result') and json_result['result'].has_key('tvshows'): + for item in json_result['result']['tvshows']: + json_query2 = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "VideoLibrary.GetEpisodes", "params": { "tvshowid": %d, "sort": {"method":"episode"}, "filter": {"field": "playcount", "operator": "lessthan", "value":"1"}, "properties": [ "title", "playcount", "season", "episode", "showtitle", "plot", "file", "rating", "resume", "tvshowid", "art", "streamdetails", "firstaired", "runtime", "writer", "dateadded", "lastplayed" ], "limits":{"end":1}}, "id": "1"}' %item['tvshowid']) + + if json_query2: + json_query2 = json.loads(json_query2) + if json_query2.has_key('result') and json_query2['result'].has_key('episodes'): + count = 0 + for item in json_query2['result']['episodes']: + episode = "%.2d" % float(item['episode']) + season = "%.2d" % float(item['season']) + episodeno = "s%se%s" %(season,episode) + watched = False + if item['playcount'] >= 1: + watched = True + plot = item['plot'] + liz = xbmcgui.ListItem(item['title']) + liz.setInfo( type="Video", infoLabels={ "Title": item['title'] }) + liz.setInfo( type="Video", infoLabels={ "Episode": item['episode'] }) + liz.setInfo( type="Video", infoLabels={ "Season": item['season'] }) + liz.setInfo( type="Video", infoLabels={ "Premiered": item['firstaired'] }) + liz.setInfo( type="Video", infoLabels={ "Plot": plot }) + liz.setInfo( type="Video", infoLabels={ "TVshowTitle": item['showtitle'] }) + liz.setInfo( type="Video", infoLabels={ "Rating": str(round(float(item['rating']),1)) }) + liz.setInfo( type="Video", infoLabels={ "Playcount": item['playcount'] }) + if "director" in item: + liz.setInfo( type="Video", infoLabels={ "Director": " / ".join(item['director']) }) + if "writer" in item: + liz.setInfo( type="Video", infoLabels={ "Writer": " / ".join(item['writer']) }) + if "cast" in item: + liz.setInfo( type="Video", infoLabels={ "Cast": cast[0] }) + liz.setInfo( type="Video", infoLabels={ "CastAndRole": cast[1] }) + liz.setProperty("episodeno", episodeno) + liz.setProperty("resumetime", str(item['resume']['position'])) + liz.setProperty("totaltime", str(item['resume']['total'])) + liz.setArt(item['art']) + liz.setThumbnailImage(item['art'].get('thumb','')) + liz.setIconImage('DefaultTVShows.png') + liz.setProperty("dbid", str(item['episodeid'])) + liz.setProperty("fanart_image", item['art'].get('tvshow.fanart','')) + for key, value in item['streamdetails'].iteritems(): + for stream in value: + liz.addStreamInfo( key, stream ) + + xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=item['file'], listitem=liz) + xbmcplugin.endOfDirectory(handle= int(sys.argv[1])) + + #get extrafanart for listitem - this will only be used for skins that actually call the listitem's path + fanart dir... elif "extrafanart" in sys.argv[0]: itemPath = ""