#!/usr/bin/python # coding: utf-8 ######################## import routing from xbmcgui import ListItem from xbmcplugin import * from datetime import date from resources.lib.helper import * from resources.lib.tmdb import * from resources.lib.trakt import * from resources.lib.localdb import * from resources.lib.nextaired import * ######################## INDEX_MENU = { 'discover': { 'name': 'The Movie DB - ' + ADDON.getLocalizedString(32049), 'route': 'discover', 'folder': True, 'menu': [ { 'name': ADDON.getLocalizedString(32050), 'call': 'movie'}, { 'name': ADDON.getLocalizedString(32051), 'call': 'tv' }, { 'name': ADDON.getLocalizedString(32057), 'call': 'person' } ] }, 'movie': { 'name': 'The Movie DB - ' + xbmc.getLocalizedString(342), 'route': 'movie_listing', 'folder': True, 'menu': [ { 'name': ADDON.getLocalizedString(32042), 'call': 'trending' }, { 'name': ADDON.getLocalizedString(32029), 'call': 'top_rated' }, { 'name': ADDON.getLocalizedString(32030), 'call': 'now_playing' }, { 'name': ADDON.getLocalizedString(32031), 'call': 'upcoming' }, { 'name': ADDON.getLocalizedString(32032), 'call': 'popular' }, ] }, 'tv': { 'name': 'The Movie DB - ' + xbmc.getLocalizedString(20343), 'route': 'tv_listing', 'folder': True, 'menu': [ { 'name': ADDON.getLocalizedString(32043), 'call': 'trending' }, { 'name': ADDON.getLocalizedString(32033), 'call': 'top_rated' }, { 'name': ADDON.getLocalizedString(32034), 'call': 'popular' }, { 'name': ADDON.getLocalizedString(32035), 'call': 'airing_today' }, { 'name': ADDON.getLocalizedString(32036), 'call': 'on_the_air' } ] }, 'nextaired': { 'name': 'Trakt.tv - ' + ADDON.getLocalizedString(32059), 'route': 'nextaired', 'folder': True, 'menu': [ { 'name': ADDON.getLocalizedString(32058), 'day': 'week' }, { 'name': xbmc.getLocalizedString(33006), 'day': 'today' }, ], 'days': [ xbmc.getLocalizedString(11), xbmc.getLocalizedString(12), xbmc.getLocalizedString(13), xbmc.getLocalizedString(14), xbmc.getLocalizedString(15), xbmc.getLocalizedString(16), xbmc.getLocalizedString(17) ] }, 'search': { 'name': xbmc.getLocalizedString(137), 'route': 'search', 'folder': False } } DISCOVER_INDEX = { 'movie': [ { 'name': ADDON.getLocalizedString(32050), 'option': 'all' }, { 'name': ADDON.getLocalizedString(32052), 'option': 'year', 'param': 'year' }, { 'name': ADDON.getLocalizedString(32053), 'option': 'genre', 'param': 'with_genres' }, ], 'tv': [ { 'name': ADDON.getLocalizedString(32051), 'option': 'all' }, { 'name': ADDON.getLocalizedString(32054), 'option': 'year', 'parmam': 'first_air_date_year' }, { 'name': ADDON.getLocalizedString(32055), 'option': 'genre', 'param': 'with_genres' } ] } DEFAULT_ART = { 'icon': 'DefaultFolder.png', 'thumb': 'special://home/addons/script.embuary.info/resources/icon.png' } ######################## plugin = routing.Plugin() # entrypoint @plugin.route('/') def index(): for i in ['discover', 'movie', 'tv', 'nextaired', 'search']: item = INDEX_MENU[i] li_item = ListItem(item['name']) li_item.setArt(DEFAULT_ART) xbmcplugin.addDirectoryItem(plugin.handle, plugin.url_for(eval(item['route'])), li_item, item['folder']) _sortmethods() xbmcplugin.endOfDirectory(plugin.handle) # actions @plugin.route('/info///') def dialog(call,idtype,tmdbid): if idtype == 'tmdb': execute('RunScript(script.embuary.info,call=%s,tmdb_id=%s)' % (call, tmdbid)) elif idtype == 'external': execute('RunScript(script.embuary.info,call=%s,external_id=%s)' % (call, tmdbid)) @plugin.route('/search') def search(): execute('RunScript(script.embuary.info)') # next aired @plugin.route('/nextaired') @plugin.route('/nextaired/') def nextaired(day=None): if not day: for i in INDEX_MENU['nextaired'].get('menu'): li_item = ListItem(i.get('name')) li_item.setArt(DEFAULT_ART) xbmcplugin.addDirectoryItem(plugin.handle, plugin.url_for(nextaired, i.get('day')), li_item, True) utc = arrow.utcnow() local_date = utc.to(TIMEZONE) kodi_locale = json_call('Settings.GetSettingValue', params={'setting': 'locale.language'}) kodi_locale = kodi_locale['result']['value'][-5:] for i in range(6): local_date = local_date.shift(days=1) translated_date = local_date.format(fmt='dddd, D. MMMM YYYY', locale=kodi_locale) tmp_day_str, tmp_day = date_weekday(local_date) li_item = ListItem(translated_date) li_item.setArt(DEFAULT_ART) xbmcplugin.addDirectoryItem(plugin.handle, plugin.url_for(nextaired, tmp_day), li_item, True) _category(category=INDEX_MENU['nextaired']['name']) else: _nextaired(day) _sortmethods() xbmcplugin.endOfDirectory(plugin.handle) def _nextaired(day): if day == 'today': day_str, day = date_weekday() next_aired = NextAired() next_aired_results = next_aired.get(str(day)) if day == 'week': next_aired_results = sort_dict(next_aired_results, 'airing') #log(next_aired_results,force=True,json=True) for i in next_aired_results: try: if day != 'week' and day is not None: label = '%s %sx%s. %s' % (i['showtitle'], i['season_number'], i['episode_number'], i['name']) else: kodi_date = date_format(i['airing']) label = '%s, %s: %s %sx%s. %s' % (i['weekday'], kodi_date, i['showtitle'], i['season_number'], i['episode_number'], i['name']) season = str(i.get('season_number', '')) episode = str(i.get('episode_number', '')) airing_date = i.get('airing', '') airing_time = i.get('airing_time', '') plot = i.get('overview') or xbmc.getLocalizedString(19055) overview = [date_format(airing_date) + ' ' + airing_time, plot] overview ='[CR]'.join(filter(None, overview)) thumb = IMAGEPATH + i.get('still_path') if i.get('still_path') else '' if not thumb: thumb = i['localart'].get('landscape') or i['localart'].get('fanart') or '' li_item = ListItem(label) li_item.setArt(i.get('localart')) li_item.setArt({'icon': 'DefaultVideo.png', 'thumb': thumb}) li_item.setInfo('video', {'title': i.get('name') or xbmc.getLocalizedString(13205), 'tvshowtitle': i.get('showtitle') or xbmc.getLocalizedString(13205), 'plot': overview, 'premiered': airing_date, 'season': season, 'episode': episode, 'status': i.get('status', ''), 'country': i.get('country', ''), 'studio': i.get('network', ''), 'duration': i.get('runtime', 0), 'mediatype': 'episode'} ) li_item.setProperty('AirDay', i['weekday']) li_item.setProperty('AirTime', airing_time) li_item.setProperty('IsPlayable', 'false') xbmcplugin.addDirectoryItem(plugin.handle, plugin.url_for(dialog, 'tv', 'tmdb', i['show_id']), li_item) except Exception as error: pass if day == 'week': category = INDEX_MENU['nextaired']['menu'][0]['name'] else: category = INDEX_MENU['nextaired']['days'][int(day)] _category(content='videos', category=category) # discover @plugin.route('/discover') @plugin.route('/discover/') @plugin.route('/discover//