import xbmc import xbmcgui import xbmcaddon import xbmcvfs import json import random import sys ADDON = xbmcaddon.Addon() CWD = ADDON.getAddonInfo('path').decode('utf-8') #CWD = ADDON.getAddonInfo('path') # for kodi 19 def list_programs(cinematic_path): dirs, files = xbmcvfs.listdir(cinematic_path) programs = {} for filename in files: if filename.endswith('.json'): filehandle = xbmcvfs.File(cinematic_path + filename) program_json = filehandle.read() filehandle.close() program_data = json.loads(program_json) programs[program_data['name']] = filename return programs def show_dialog(programs): entries = programs.keys() dialog = xbmcgui.Dialog() ret = dialog.select('Cinematic: Select a program', entries) del dialog return programs[entries[ret]] def files_from_dir(count, location): dirs, files = xbmcvfs.listdir(location) files = random.sample(files, count) for i in range(len(files)): files[i] = location + files[i] return files def trailers_from_net(count, genre, rating): files = [] for i in range(count): files.append("TODO: find trailer %d" % i) return files def conduct_program(program_file, feature): filehandle = xbmcvfs.File(program_file) program_json = filehandle.read() filehandle.close() program_data = json.loads(program_json) program = [] for item in program_data['items']: settings = item['settings'] if settings['source'] == 'file': entry = {'type': 'video', 'data': settings['location']} program.append(entry) elif settings['source'] == 'dir': for location in files_from_dir(settings['count'], settings['location']): entry = {'type': 'video', 'data': location} program.append(entry) elif settings['source'] == 'trailer': genre = 'TODO: find feature genre' rating = 'TODO: find feature rating' for location in trailers_from_net(settings['count'], genre, rating): entry = {'type': 'video', 'data': location} program.append(entry) elif settings['source'] == 'feature': entry = {'type': 'video', 'data': feature['file']} program.append(entry) return program def get_feature(movieid): query = '{"jsonrpc": "2.0", "method": "VideoLibrary.GetMovieDetails", "params": {"movieid": %s, "properties": ["file", "mpaa", "genre"]}, "id": "1"}' % movieid json_response = xbmc.executeJSONRPC(query) response = json.loads(json_response) feature = { 'label': response['result']['moviedetails']['label'], 'file': response['result']['moviedetails']['file'], 'mpaa': response['result']['moviedetails']['mpaa'], 'genre': response['result']['moviedetails']['genre'] } return feature if __name__ == '__main__': for arg in sys.argv[1:]: (name, value) = arg.split('=') if name == 'dbid': movieid = int(value) cinematic_path = ADDON.getSettingString('cinematic_path') feature = get_feature(movieid) print(feature) programs = list_programs(cinematic_path) program_file = cinematic_path + show_dialog(programs) program = conduct_program(program_file, feature) print('=== playlist') for entry in program: print(" * [%s] -- %s" % (entry['type'], entry['data']))