def __init__(self, argv): self.list = [] self.addons = [{ 'title': 'E-RADIO ADDON', 'image': control.addonmedia('ERADIO.png', logos_id, theme='logos', media_subfolder=False), 'url': 'plugin.audio.eradio.gr' }, { 'title': 'EPT PLAYER RADIO STATIONS', 'image': control.addonmedia(addonid=art_id, theme='networks', icon='ert_fanart.jpg', media_subfolder=False), 'url': 'plugin.video.ert.gr', 'query': 'radios' }, { 'title': 'SOMAFM ADDON', 'image': 'https://alivegr.net/logos/SOMAFM.png', 'url': 'plugin.audio.somafm.com' }] self.argv = argv
def __init__(self): self.addons = [{ 'title': 'E-RADIO ADDON', 'image': control.addonmedia('ERADIO.png', LOGOS_ID, theme='logos', media_subfolder=False), 'url': 'plugin.audio.eradio.gr' }, { 'title': 'EPT PLAYER RADIO STATIONS', 'image': control.addonmedia(addonid=ART_ID, theme='networks', icon='ert_fanart.jpg', media_subfolder=False), 'url': 'plugin://plugin.video.ert.gr/?action=radios' }, { 'title': 'SOMAFM ADDON', 'image': 'https://alivegr.net/logos/SOMAFM.png', 'url': 'plugin.audio.somafm.com' }]
def radios(): images = [ ''.join([RADIO_LINK, i]) for i in [ '/wp-content/uploads/2016/06/proto.jpg', '/wp-content/uploads/2016/06/deytero.jpg', '/wp-content/uploads/2016/06/trito.jpg', '/wp-content/uploads/2016/06/kosmos.jpg', '/wp-content/uploads/2016/06/VoiceOgGreece.png', '/wp-content/uploads/2016/06/eraSport.jpg', '/wp-content/uploads/2016/06/958fm.jpg', '/wp-content/uploads/2016/06/102fm.jpg' ] ] names = [control.lang(n) for n in list(range(30028, 30036))] urls = [ ''.join([RADIO_STREAM, i]) for i in [ '/ert-proto', '/ert-deftero', '/ert-trito', '/ert-kosmos', '/ert-voiceofgreece', '/ert-erasport', '/ert-958fm', '/ert-102fm' ] ] _radios = map(lambda x, y, z: (x, y, z), names, images, urls) self_list = [] for title, image, link in _radios: self_list.append({ 'title': title, 'url': link, 'image': image, 'action': 'play', 'isFolder': 'False', 'fanart': control.addonmedia('radio_fanart.jpg') }) self_list.insert( 4, { 'title': 'Zeppelin Radio 106.1', 'action': 'play', 'isFolder': 'False', 'url': ''.join([RADIO_STREAM, '/ert-zeppelin']), 'image': 'https://i.imgur.com/ep3LptZ.jpg', 'fanart': control.addonmedia('zeppelin_bg.jpg') }) _district = { 'title': control.lang(30027), 'action': 'district', 'icon': 'district.jpg', 'fanart': control.addonmedia('radio_fanart.jpg') } self_list.append(_district) directory.add(self_list)
def play(self, url, query=None, resolved_mode=True): if url in [self.live_link_cy, self.live_link_gr]: title = 'Alpha' icon = control.icon() elif query: title = query icon = control.addonmedia('news.png') else: title = None icon = None stream = self.resolve(url) meta = {'title': title} dash = 'm3u8' in stream and control.kodi_version() >= 18.0 directory.resolve( url=stream, meta=meta, dash=dash, icon=icon, mimetype='application/vnd.apple.mpegurl' if '.m3u8' in stream else None, manifest_type='hls' if '.m3u8' in stream else None, resolved_mode=resolved_mode )
def mgreekz_top10(self): self.list = cache.get(self._mgreekz_top10, 24) if self.list is None: log_debug('Mad Greekz top 10 section failed to load') return for item in self.list: item.update({'action': 'play', 'isFolder': 'False'}) for count, item in list(enumerate(self.list, start=1)): add_to_playlist = {'title': 30226, 'query': {'action': 'add_to_playlist'}} clear_playlist = {'title': 30227, 'query': {'action': 'clear_playlist'}} item.update( { 'cm': [add_to_playlist, clear_playlist], 'album': control.lang(30127), 'fanart': control.addonmedia( addonid=art_id, theme='networks', icon='mgz_fanart.jpg', media_subfolder=False ), 'tracknumber': count, 'code': count } ) control.sortmethods('tracknum', mask='%A') directory.add(self.list, content=self.content, infotype=self.infotype, argv=self.argv)
def iconname(name): icon = control.addonmedia(addonid=art_id, theme=theme()[0], icon=name + theme()[1], media_subfolder=False) return icon
def channels(self): self.list = [ { 'title': control.lang(30021), 'url': self.ert1_link, 'icon': 'EPT1.png', 'fanart': control.addonmedia('EPT1_fanart.jpg') } , { 'title': control.lang(30022), 'url': self.ert2_link, 'icon': 'EPT2.png', 'fanart': control.addonmedia('EPT2_fanart.jpg') } , { 'title': control.lang(30023), 'url': self.ert3_link, 'icon': 'EPT3.png', 'fanart': control.addonmedia('EPT3_fanart.jpg') } , { 'title': control.lang(30024), 'url': self.ertw_link, 'icon': 'EPT_WORLD.png', 'fanart': control.addonmedia('EPT_WORLD_fanart.jpg') } , { 'title': control.lang(30041), 'url': self.erts_link, 'icon': 'EPT_SPORTS.png', 'fanart': control.addonmedia('EPT_SPORTS_fanart.jpg') } ] for i in self.list: i.update({'action': 'play', 'isFolder': 'False'}) directory.add(self.list, content='videos')
def category_list(url): if BASE_API_LINK in url: _json = client.request(url, output='json') list_of_lists = _json['sectionContents'] codename = parse_qs(split(url)[1])['pageCodename'][0] page = _json['pagination']['page'] total_pages = _json['pagination']['totalPages'] else: html = client.request(url) script = [ i for i in client.parseDOM(html, 'script') if 'INITIAL_STATE' in i ][0] script = re.sub(r'var _*?\w+_*? = ', '', script).partition(';</script>')[0] if script.endswith(';'): script = script[:-1] _json = json.loads(script) pages = _json['pages'] list_of_lists = [ i for i in list(pages['sectionsByCodename'].values()) if 'adman' not in i['sectionContentCodename'] ] codename = list(pages.keys())[-1] page = 1 total_pages = pages[codename]['totalPages'] next_url = GET_PAGE_CONTENT.format(page + 1, codename) self_list = [] for list_ in list_of_lists: title = list_['portalName'] section_codename = list_['sectionContentCodename'] if not list_['tilesIds']: continue url = LIST_OF_LISTS_LINK.format( title=quote(section_codename), pagecodename=codename, backurl=codename, sectioncodename=list_['sectionContentCodename']) data = {'title': title, 'url': url} if page < total_pages: data.update({ 'nextaction': 'categories', 'nextlabel': 30500, 'nexticon': control.addonmedia('next.jpg'), 'next': next_url }) self_list.append(data) return self_list
def listing(self, url): if control.setting('debug') == 'false': self.list = cache.get(self._listing, 6, url) else: self.list = self._listing(url) if self.list is None: return for i in self.list: if 'paidikes-tainies' in i['url'] or 'archeio' in i['url']: i.update({'action': 'play', 'isFolder': 'False'}) elif i.get('playable') == 'false': i.update({'action': 'listing'}) else: i.update({'action': 'play', 'isFolder': 'False'}) try: del i['playable'] except KeyError: pass bookmark = dict((k, v) for k, v in iteritems(i) if not k == 'next') bookmark['bookmark'] = i['url'] bookmark_cm = {'title': 30501, 'query': {'action': 'addBookmark', 'url': json.dumps(bookmark)}} if 'enimerosi-24' in url or 'meta_url' not in i: i.update({'cm': [bookmark_cm]}) else: info_cm = {'title': 30043, 'query': {'action': 'info', 'url': i['meta_url']}} i.update({'cm': [bookmark_cm, info_cm]}) if control.setting('pagination') == 'true': for i in self.list: i.update({'nextaction': 'listing', 'nextlabel': 30500, 'nexticon': control.addonmedia('next.jpg')}) if 'tainies' in url or 'seires' in url or 'docs' in url or 'pedika' in url: control.sortmethods() control.sortmethods('title') control.sortmethods('production_code') if 'tainies' in url: content = 'movies' elif 'category' in url or 'arxeio' in url and not 'enimerosi-24' in url: content = 'tvshows' else: content = 'videos' directory.add(self.list, content=content)
def district(): self_list = district_list() for i in self_list: i.update({ 'action': 'play', 'isFolder': 'False', 'fanart': control.addonmedia('radio_fanart.jpg') }) directory.add(self_list)
def radios(self): images = [ ''.join([self.radio_link, i]) for i in [ '/wp-content/uploads/2016/06/proto.jpg', '/wp-content/uploads/2016/06/deytero.jpg', '/wp-content/uploads/2016/06/trito.jpg', '/wp-content/uploads/2016/06/kosmos.jpg', '/wp-content/uploads/2016/06/VoiceOgGreece.png', '/wp-content/uploads/2016/06/eraSport.jpg', '/wp-content/uploads/2016/06/958fm.jpg', '/wp-content/uploads/2016/06/102fm.jpg' ] ] names = [control.lang(n) for n in list(range(30028, 30036))] urls = [ ''.join([self.radio_stream, i]) for i in [ '/ert-proto', '/ert-deftero', '/ert-trito', '/ert-kosmos', '/ert-voiceofgreece', '/ert-erasport', '/ert-958fm', '/ert-102fm' ] ] radios = map(lambda x, y, z: (x, y, z), names, images, urls) for title, image, link in radios: self.list.append( { 'title': title, 'url': link, 'image': image, 'action': 'play', 'isFolder': 'False', 'fanart': control.addonmedia('radio_fanart.jpg') } ) district = { 'title': control.lang(30027), 'action': 'district', 'icon': 'district.jpg', 'fanart': control.addonmedia('radio_fanart.jpg') } self.list.append(district) directory.add(self.list)
def radio_player(): lista = ['Radio Melodia Toronto', 'Canadian Ethnic Web Radio'] # selection = control.selectDialog(lista) # if selection == 0: listitem = control.item(label=lista[0]) listitem.setInfo('music', {'title': lista[0], 'genre': 'Greek Music'}) listitem.setArt({'icon': control.addonmedia('RADIO_MELODIA_TORONTO.png'), 'thumb': control.addonmedia('RADIO_MELODIA_TORONTO.png')}) control.player().play(item=variables.Melodia_url, listitem=listitem)
def district(self): if control.setting('debug') == 'false': self.list = cache.get(self.district_list, 96) else: self.list = self.district_list() if self.list is None: return for i in self.list: i.update({'action': 'play', 'isFolder': 'False', 'fanart': control.addonmedia('radio_fanart.jpg')}) directory.add(self.list)
def videos(url): self_list = video_list(url) for i in self_list: i.update( { 'action': 'play', 'isFolder': 'False', 'nextaction': 'videos', 'nexticon': control.addonmedia('next.jpg'), 'nextlabel': 30015 } ) bookmark = dict((k, v) for k, v in iteritems(i) if not k == 'next') bookmark['bookmark'] = i['url'] i.update({'cm': [{'title': 30501, 'query': {'action': 'addBookmark', 'url': json.dumps(bookmark)}}]}) directory.add(self_list)
def mgreekz_index(self): self.data = cache.get(youtube.youtube(key=thgiliwt(api_keys['api_key']), replace_url=replace_url).playlists, 48, self.mgreekz_id) for i in self.data: i.update( { 'action': 'mgreekz_list', 'fanart': control.addonmedia( addonid=art_id, theme='networks', icon='mgz_fanart.jpg', media_subfolder=False ) } ) for item in self.data: bookmark = dict((k, v) for k, v in iteritems(item) if not k == 'next') bookmark['bookmark'] = item['url'] bookmark_cm = {'title': 30080, 'query': {'action': 'addBookmark', 'url': json.dumps(bookmark)}} item.update({'cm': [bookmark_cm]}) self.list = sorted(self.data, key=lambda k: k['title'].lower()) directory.add(self.list, argv=self.argv)
def top20_list(self, url): self.list = cache.get(self._top20, 24, url) if self.list is None: log_debug('Top 20 list section failed to load') return if url == self.rythmos_top20_url: fanart = control.addonmedia( addonid=art_id, theme='networks', icon='rythmos_fanart.jpg', media_subfolder=False ) album = control.lang(30128) elif url == self.plus_url: fanart = 'https://i.imgur.com/G8koVR8.jpg' album = control.lang(30221) elif url == self.radiopolis_url_gr or url == self.radiopolis_url_other: fanart = 'https://i.ytimg.com/vi/tCupKdpHVx8/maxresdefault.jpg' album = control.lang(30222) else: fanart = control.addonInfo('fanart') album = 'AliveGR \'s Top Music' for count, item in list(enumerate(self.list, start=1)): add_to_playlist = {'title': 30226, 'query': {'action': 'add_to_playlist'}} clear_playlist = {'title': 30227, 'query': {'action': 'clear_playlist'}} item.update( { 'tracknumber': count, 'cm': [add_to_playlist, clear_playlist], 'album': album, 'fanart': fanart, 'action': 'play', 'isFolder': 'False', 'code': count } ) control.sortmethods('tracknum', mask='%A') directory.add(self.list, content=self.content, infotype=self.infotype, argv=self.argv)
def info(self): separator = '[CR]' if control.setting('wrap_labels') == '0' else ' ' try: disclaimer = control.addonInfo('disclaimer').decode('utf-8') except (UnicodeEncodeError, UnicodeDecodeError, AttributeError): disclaimer = control.addonInfo('disclaimer') self.list = [{ 'title': control.lang(30331), 'action': 'welcome', 'icon': control.addonInfo('icon'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30105), 'action': 'dmca', 'plot': disclaimer, 'icon': control.addonmedia(addonid=art_id, theme='icons', icon='dmca.png', media_subfolder=False), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30290), 'action': 'pp', 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30295), 'action': 'toggle_debug', 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30296), 'action': 'force', 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30260).format(separator), 'action': 'open_link', 'url': 'https://bitbucket.org/thgiliwt/plugin.video.alivegr/issues', 'plot': 'Git repo', 'icon': control.addonmedia(addonid=art_id, theme='icons', icon='bitbucket.png', media_subfolder=False), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30306).format(separator), 'action': 'open_link', 'url': 'https://www.facebook.com/alivegr/', 'plot': 'Facebook page', 'icon': control.addonmedia(addonid=art_id, theme='icons', icon='facebook.png', media_subfolder=False), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30259).format(separator), 'action': 'open_link', 'url': 'https://twitter.com/TwilightZer0', 'plot': 'RSS feed: https://twitrss.me/twitter_user_to_rss/?user=TwilightZer0', 'icon': control.addonmedia(addonid=art_id, theme='icons', icon='twitter.png', media_subfolder=False), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30256).format(separator, control.addonInfo('version')), 'action': 'force', 'plot': control.lang(30265), 'icon': control.addonInfo('icon'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30257).format( separator, control.addon('script.module.tulip').getAddonInfo('version')), 'action': 'force', 'plot': control.lang(30265), 'icon': control.addon('script.module.tulip').getAddonInfo('icon'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30294).format( separator, control.addon('script.module.streamlink.base').getAddonInfo( 'version')), 'action': 'force', 'image': control.addon('script.module.streamlink.base').getAddonInfo( 'icon'), 'plot': control.lang(30265), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30264).format( separator, control.addon('script.module.resolveurl').getAddonInfo( 'version')), 'action': 'force', 'plot': control.lang(30265), 'icon': control.addon('script.module.resolveurl').getAddonInfo('icon'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30258).format( separator, control.addon('xbmc.addon').getAddonInfo('version').rpartition( '.')[0]), 'action': 'system_info', 'plot': control.lang(30263), 'icon': control.addonmedia(addonid=art_id, theme='icons', icon='kodi.png', media_subfolder=False), 'isFolder': 'False', 'isPlayable': 'False' }] directory.add(self.list, content='movies', argv=self.argv)
def news(self): items = [{ 'title': control.lang(30230), 'icon': 'https://www.iconexperience.com/_img/v_collection_png/256x256/shadow/newspaper.png', 'url': '{0}?action=papers'.format(self.sysaddon), 'fanart': control.addonInfo('fanart') }, { 'title': control.lang(30118), 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='ert_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.ert.gr/?action=episodes&url=http%3a%2f%2fwebtv.ert.gr%2fcategory%2fkatigories%2feidiseis%2f', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='ert_fanart.jpg', media_subfolder=False) }, { 'title': control.lang(30119), 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='ant1_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.antenna.gr/?action=news', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='ant1_fanart.jpg', media_subfolder=False) }, { 'title': control.lang(30120), 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='star_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.star.gr/?action=news', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='star_fanart.jpg', media_subfolder=False) }, { 'title': control.lang(30122), 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='alpha_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.alphatv.gr/?action=news', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='alpha_fanart.jpg', media_subfolder=False) }, { 'title': control.lang(30121), 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='skai_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.skai.gr/?action=news', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='skai_fanart.jpg', media_subfolder=False) }, { 'title': 'Euronews', 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='euronews_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.euronews.com/?action=videos&url=%22methodName%22%3a%22content.getThemeDetails%22%2c%22params%22%3a%7b%22tId%22%3a%221%22%7d', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='euronews_fanart.jpg', media_subfolder=False) }] for item in items: list_item = control.item(label=item['title']) list_item.setArt({'icon': item['icon'], 'fanart': item['fanart']}) url = item['url'] isFolder = True self.list.append((url, list_item, isFolder)) control.addItems(self.syshandle, self.list) control.directory(self.syshandle)
def recursive_list_items(url): page = 1 if url.startswith('https'): if BASE_API_LINK not in url: html = client.request(url) script = [ i for i in client.parseDOM(html, 'script') if 'INITIAL_STATE' in i ][0] script = re.sub(r'var _*?\w+_*? = ', '', script).replace(';</script>', '') if script.endswith(';'): script = script[:-1] _json = json.loads(script) else: _json = client.request(url, output='json') if '/list' in url: codename = split(url)[1].partition('=')[2] total_pages = _json['pages']['sectionsByCodename'][codename][ 'totalPages'] page = _json['pages']['sectionsByCodename'][codename][ 'fetchedPage'] tiles = _json['pages']['sectionsByCodename'][codename]['tilesIds'] tiles_post_list = [{'id': i} for i in tiles] else: tiles = [] if 'GetSeriesDetails' in url: episode_groups = _json['episodeGroups'] for group in episode_groups: episodes = group['episodes'] for episode in episodes: codename = episode['id'] tiles.append(codename) tiles_post_list = [{'id': i} for i in tiles] total_pages = 1 else: codenames = list(_json['pages']['sectionsByCodename'].keys()) for codename in codenames: tiles_list = _json['pages']['sectionsByCodename'][ codename]['tilesIds'] tiles.extend(tiles_list) tiles_post_list = [{'id': i} for i in tiles] total_pages = 1 else: if url.startswith('{"platformCodename":"www"'): collection_json = json.loads(url) url = collection_json['orCollectionCodenames'] page = collection_json['page'] filter_tiles = client.request(FILTER_TILES, post=collection_post(url, page), output='json') total_pages = filter_tiles['pagination']['totalPages'] page = filter_tiles['pagination']['page'] tiles = filter_tiles['tiles'] tiles_post_list = [{'id': i['id']} for i in tiles] if total_pages > 1 and page < total_pages: page = page + 1 next_post = collection_post(url, page) else: next_post = None get_tiles = client.request(GET_TILES, post=tiles_post(tiles_post_list), output='json') tiles_list = get_tiles['tiles'] self_list = [] for tile in tiles_list: if tile['isRegionRestrictionEnabled'] and not geo_detect: continue title = tile['title'] if 'subtitle' in tile: title = ' - '.join([title, tile['subtitle']]) try: if tile.get('isEpisode'): try: season = ' '.join([ control.lang(30063), str(tile['season']['seasonNumber']) ]) except KeyError: season = None if not season: subtitle = ' '.join( [control.lang(30064), str(tile['episodeNumber'])]) else: try: subtitle = ''.join([ season, ', ', control.lang(30064), ' ', str(tile['episodeNumber']) ]) except KeyError: subtitle = tile['publishDate'].partition('T')[0] subtitle = '/'.join(subtitle.split('-')[::-1]) title = '[CR]'.join([title, subtitle]) except Exception: pass images = tile['images'] fanart = control.fanart() if len(images) == 1: image = images[0]['url'] else: image_list = [ [i['url'] for i in images if i['isMain']], [i['url'] for i in images if i['role'] == 'hbbtv-icon'], [i['url'] for i in images if i['role'] == 'photo'], [i['url'] for i in images if i['role'] == 'hbbtv-background'] ] image = images[0]['url'] for i in image_list: if i: image = i[0] break fanart_list = [[ i['url'] for i in images if i['role'] == 'photo-details' ], [i['url'] for i in images if i['role'] == 'hbbtv-background'], [ i['url'] for i in images if i['role'] == 'photo' and 'ertflix-background' in i['url'] ]] for f in fanart_list: if f and len(f) > 1: fanart = f[1] break elif f and len(f) == 1: fanart = f[0] break codename = tile['codename'] vid = tile['id'] plots = [ tile.get('description'), tile.get('shortDescription'), tile.get('tinyDescription'), tile.get('subtitle'), tile.get('subTitle') ] plot = control.lang(30014) for p in plots: if p: plot = client.stripTags(p) plot = client.replaceHTMLCodes(plot) break year = tile.get('year') if not year: try: year = int(tile.get('productionYears')[:4]) except Exception: year = 2021 if tile.get('hasPlayableStream') and not tile.get('type') == 'ser': url = VOD_LINK.format('-'.join([vid, codename])) else: url = GET_SERIES_DETAILS.format(vid) data = { 'title': title, 'image': image, 'fanart': fanart, 'url': url, 'plot': plot, 'year': year } if tile.get('durationSeconds'): data.update({'duration': tile.get('durationSeconds')}) if next_post: data.update({ 'next': next_post, 'nextaction': 'listing', 'nextlabel': 30500, 'nexticon': control.addonmedia('next.jpg') }) if tile.get('hasPlayableStream') and not tile.get('type') == 'ser': data.update({'action': 'play', 'isFolder': 'False'}) else: data.update({'action': 'listing'}) self_list.append(data) return self_list
def add(items, cacheToDisc=True, content=None, mediatype=None, infotype='video', argv=None, as_playlist=False, pd_heading=None, pd_message='', clear_first=True, progress=False, category=None): if argv is None: from tulip.init import sysaddon, syshandle else: sysaddon = argv[0] syshandle = int(argv[1]) if items is None or len(items) == 0: return # sysicon = control.join(control.addonInfo('path'), 'resources', 'media') sysimage = control.addonInfo('icon') sysfanart = control.addonInfo('fanart') if progress: pd = control.progressDialogGB pd.create(heading=control.name() if not pd_heading else pd_heading, message=pd_message) else: pd = None if as_playlist and clear_first: control.playlist(1 if infotype == 'video' else 0).clear() meta_tags = [ 'count', 'size', 'date', 'genre', 'country', 'year', 'episode', 'season', 'sortepisode', 'sortseason', 'episodeguide', 'showlink', 'top250', 'setid', 'tracknumber', 'rating', 'userrating', 'watched', 'playcount', 'overlay', 'cast', 'castandrole', 'director', 'mpaa', 'plot', 'plotoutline', 'title', 'originaltitle', 'sorttitle', 'duration', 'studio', 'tagline', 'writer', 'tvshowtitle', 'premiered', 'status', 'set', 'gameclient', 'setoverview', 'tag', 'imdbnumber', 'code', 'aired', 'credits', 'lastplayed', 'album', 'artist', 'votes', 'path', 'trailer', 'dateadded', 'mediatype', 'dbid', 'tracknumber', 'discnumber', 'lyrics', 'listeners', 'musicbrainztrackid', 'comment', 'picturepath', 'platform', 'genres', 'publisher', 'developer', 'overview' ] for c, i in list(enumerate(items)): try: if progress: p = control.per_cent(c, len(items)) pd.update(p) try: label = control.lang(i['title']).encode('utf-8') except Exception: label = i['title'] if 'label' in i and not i['label'] == '0': label = i['label'] if 'image' in i and not i['image'] == '0': image = i['image'] elif 'poster' in i and not i['poster'] == '0': image = i['poster'] elif 'icon' in i and not i['icon'] == '0': image = control.addonmedia(i['icon']) else: image = sysimage if 'banner' in i and not i['banner'] == '0': banner = i['banner'] elif 'fanart' in i and not i['fanart'] == '0': banner = i['fanart'] else: banner = image fanart = i['fanart'] if 'fanart' in i and not i[ 'fanart'] == '0' else sysfanart isFolder = False if 'isFolder' in i and not i[ 'isFolder'] == '0' else True try: is_play_boolean = i.get('isPlayable') in [ 'True', 'true', '1', 'yes', 'Yes' ] except Exception: is_play_boolean = False isPlayable = True if not isFolder and 'isPlayable' not in i else is_play_boolean if isPlayable: isFolder = False try: action = '{0}?action={1}'.format(sysaddon, i['action']) except KeyError: return try: url = 'url={0}'.format(quote_plus(i['url'])) except Exception: url = None try: title = 'title={0}'.format(quote_plus(i['title'])) except KeyError: try: title = 'title={0}'.format( quote_plus(i['title'].encode('utf-8'))) except KeyError: title = None except Exception: title = None try: icon = 'image={0}'.format(quote_plus(i['image'])) except KeyError: try: icon = 'image={0}'.format( quote_plus(i['image'].encode('utf-8'))) except KeyError: icon = None except Exception: icon = None try: name = 'name={0}'.format(quote_plus(i['name'])) except KeyError: try: name = 'name={0}'.format( quote_plus(i['name'].encode('utf-8'))) except KeyError: name = None except Exception: name = None try: year = 'year={0}'.format(quote_plus(i['year'])) except Exception: year = None try: plot = 'plot={0}'.format(quote_plus(i['plot'])) except KeyError: try: plot = 'plot={0}'.format( quote_plus(i['plot'].encode('utf-8'))) except KeyError: plot = None except Exception: plot = None try: genre = 'genre={0}'.format(quote_plus(i['genre'])) except KeyError: try: genre = 'genre={0}'.format( quote_plus(i['genre'].encode('utf-8'))) except KeyError: genre = None except Exception: genre = None try: dash = 'dash={0}'.format(quote_plus(i['dash'])) except Exception: dash = None try: query = 'query={0}'.format(quote_plus(i['query'])) except Exception: query = None parts = [ foo for foo in [ action, url, title, icon, name, year, plot, genre, dash, query ] if foo ] uri = '&'.join(parts) cm = [] menus = i['cm'] if 'cm' in i else [] for menu in menus: try: try: tmenu = control.lang(menu['title']).encode('utf-8') except Exception: tmenu = menu['title'] try: qmenu = urlencode(menu['query']) except Exception: qmenu = urlencode( dict((k, v.encode('utf-8')) for k, v in menu['query'].items())) cm.append( (tmenu, 'RunPlugin({0}?{1})'.format(sysaddon, qmenu))) except Exception: pass meta = dict((k, v) for k, v in iteritems(i) if k in meta_tags and (not v == '0' or v is None)) if mediatype is not None: meta['mediatype'] = mediatype item = control.item(label=label) item.setArt({ 'icon': image, 'thumb': image, 'poster': image, 'tvshow.poster': image, 'season.poster': image, 'banner': banner, 'tvshow.banner': banner, 'season.banner': banner, 'fanart': fanart }) item.addContextMenuItems(cm) item.setInfo( type=infotype if 'infotype' not in i else i['infotype'], infoLabels=meta) if isPlayable: if not i['action'] == 'pvr_client': item.setProperty('IsPlayable', 'true') else: item.setProperty('IsPlayable', 'false') if not i['action'] == 'pvr_client': if 'streaminfo' not in i and infotype == 'video': item.addStreamInfo(infotype, {'codec': 'h264'}) else: item.addStreamInfo(infotype, i.get('streaminfo')) if as_playlist and isPlayable: control.playlist(1 if infotype == 'video' else 0).add( url=uri, listitem=item, index=c) else: control.addItem(handle=syshandle, url=uri, listitem=item, isFolder=isFolder, totalItems=len(items)) except Exception as reason: log('Directory not added, reason of failure: ' + repr(reason)) if progress: pd.update(100) pd.close() if as_playlist: control.openPlaylist(1 if infotype == 'video' else 0) return try: i = items[0] if i['next'] == '': raise Exception() url = '{0}?action={1}&url={2}'.format(sysaddon, i['nextaction'], quote_plus(i['next'])) icon = i['nexticon'] if 'nexticon' in i else control.addonmedia( 'next.png') fanart = i['nextfanart'] if 'nextfanart' in i else sysfanart try: label = control.lang(i['nextlabel']).encode('utf-8') except Exception: label = 'Next' item = control.item(label=label) item.setArt({ 'icon': icon, 'thumb': icon, 'poster': icon, 'tvshow.poster': icon, 'season.poster': icon, 'banner': icon, 'tvshow.banner': icon, 'season.banner': icon, 'fanart': fanart }) control.addItem(handle=syshandle, url=url, listitem=item, isFolder=True, totalItems=len(items)) except Exception: pass if content is not None: control.content(syshandle, content) if category is not None: control.setcategory(syshandle, category) control.directory(syshandle, cacheToDisc=cacheToDisc)
def networks(self): networks = [{ 'title': 'EPT', 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='ert_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.ert.gr/', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='ert_fanart.jpg', media_subfolder=False) }, { 'title': 'ANT1', 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='ant1_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.antenna.gr/', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='ant1_fanart.jpg', media_subfolder=False) }, { 'title': 'STAR', 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='star_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.star.gr/', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='star_fanart.jpg', media_subfolder=False) }, { 'title': 'ALPHA', 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='alpha_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.alphatv.gr/', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='alpha_fanart.jpg', media_subfolder=False) }, { 'title': 'SKAI', 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='skai_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.skai.gr/', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='skai_fanart.jpg', media_subfolder=False) }, { 'title': 'EURONEWS', 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='euronews_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.euronews.com/', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='euronews_fanart.jpg', media_subfolder=False) }, { 'title': 'NOVASPORTS', 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='nova_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.novasports.gr/', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='nova_fanart.jpg', media_subfolder=False) }, { 'title': 'GREEK VOICE', 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='wzra48_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.greekvoice/', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='wzra48_fanart.jpg', media_subfolder=False) }, { 'title': 'TORONTO CHANNELS', 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='tc_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.Toronto-Channels/', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='tc_fanart.jpg', media_subfolder=False) }, { 'title': 'MONTREAL GREEK TV', 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='mg_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.montreal.greek-tv/', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='mgtv_fanart.jpg', media_subfolder=False) }, { 'title': 'FAROS ON AIR', 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='faros_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.faros.on-air/', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='faros_fanart.jpg', media_subfolder=False) }] for network in networks: list_item = control.item(label=network['title']) list_item.setArt({ 'icon': network['icon'], 'fanart': network['fanart'] }) url = network['url'] self.list.append((url, list_item, True)) control.addItems(self.syshandle, self.list) control.directory(self.syshandle)
def live(self): if control.setting('debug') == 'false': result = client.request(thgiliwt('=' + self.alivegr), headers={ 'User-Agent': 'AliveGR, version: ' + control.version() }) result = dexteni(b64decode(result)) else: if control.setting('local_remote') == '0': local = control.setting('live_local') with open(local) as xml: result = xml.read() xml.close() elif control.setting('local_remote') == '1': result = client.request(control.setting('live_remote')) else: result = client.request(thgiliwt('==' + self.alivegr)) result = dexteni(b64decode(result)) if control.setting('debug') == 'false': channels = client.parseDOM(result, 'channel', attrs={'enable': '1'}) else: channels = client.parseDOM(result, 'channel', attrs={'enable': '1|2'}) updated = client.parseDOM(result, 'channels', ret='updated')[0] for channel in channels: title = client.parseDOM(channel, 'name')[0] image = client.parseDOM(channel, 'logo')[0] if not image.startswith('http'): image = control.addonmedia(image, logos_id, theme='logos', media_subfolder=False) group = client.parseDOM(channel, 'group')[0] group = live_groups[group] url = client.parseDOM(channel, 'url')[0] website = client.parseDOM(channel, 'website')[0].replace('&', '&') info = client.parseDOM(channel, 'info')[0] if len(info) == 5 and info[:5].isdigit(): info = control.lang(int(info)) if ' - ' in info: if control.setting('lang_split') == '0': if 'Greek' in control.infoLabel('System.Language'): info = info.partition(' - ')[2] elif 'English' in control.infoLabel('System.Language'): info = info.partition(' - ')[0] else: info = info elif control.setting('lang_split') == '1': info = info.partition(' - ')[0] elif control.setting('lang_split') == '2': info = info.partition(' - ')[2] else: info = info data = ({ 'title': title, 'image': image, 'group': str(group), 'url': url, 'genre': control.lang(group), 'plot': info, 'website': website }) self.list.append(data) self.data.append(group) self.groups = list(OrderedDict.fromkeys(self.data)) return self.list, self.groups, updated
def menu(self): self.list = [ { 'title': control.lang(30170), 'action': 'music_live', 'image': iconname('monitor'), 'fanart': 'https://i.ytimg.com/vi/vtjL9IeowUs/maxresdefault.jpg' } , { 'title': control.lang(30124), 'action': 'gm_music', 'image': iconname('music'), 'fanart': 'https://cdn.allwallpaper.in/wallpapers/1280x720/1895/music-hd-1280x720-wallpaper.jpg' } , { 'title': control.lang(30126), 'action': 'mgreekz_index', 'image': 'https://pbs.twimg.com/profile_images/697098521527328772/VY8e_klm_400x400.png', 'fanart': control.addonmedia( addonid=art_id, theme='networks', icon='mgz_fanart.jpg', media_subfolder=False ) } , { 'title': control.lang(30127), 'action': 'mgreekz_top10', 'image': 'https://pbs.twimg.com/profile_images/697098521527328772/VY8e_klm_400x400.png', 'fanart': control.addonmedia( addonid=art_id, theme='networks', icon='mgz_fanart.jpg', media_subfolder=False ) } , { 'title': control.lang(30128), 'action': 'top20_list', 'url': self.rythmos_top20_url, 'image': 'https://is3-ssl.mzstatic.com/image/thumb/Purple62/v4/3e/a4/48/3ea44865-8cb2-5fec-be70-188a060b712c/source/256x256bb.jpg', 'fanart': control.addonmedia( addonid=art_id, theme='networks', icon='rythmos_fanart.jpg', media_subfolder=False ) } , { 'title': control.lang(30221), 'action': 'top20_list', 'url': self.plus_url, 'image': 'https://is5-ssl.mzstatic.com/image/thumb/Purple20/v4/e8/99/e8/e899e8ea-0df6-0f60-d66d-b82b8021e8af/source/256x256bb.jpg', 'fanart': 'https://i.imgur.com/G8koVR8.jpg' } , { 'title': control.lang(30222), 'action': 'top20_list', 'url': self.radiopolis_url_gr, 'image': 'http://www.radiopolis.gr/wp-content/uploads/2017/11/noimageavailable.jpg', 'fanart': 'https://i.ytimg.com/vi/tCupKdpHVx8/maxresdefault.jpg' } , { 'title': control.lang(30223), 'action': 'top20_list', 'url': self.radiopolis_url_other, 'image': 'http://www.radiopolis.gr/wp-content/uploads/2017/11/noimageavailable.jpg', 'fanart': 'https://i.ytimg.com/vi/tCupKdpHVx8/maxresdefault.jpg' } , { 'title': control.lang(30269), 'action': 'top50_list', 'url': 's1GeuATNw9GdvcXYy9Cdl5mLydWZ2lGbh9yL6MHc0RHa', 'image': control.addonInfo('icon'), 'fanart': 'https://i.ytimg.com/vi/vtjL9IeowUs/maxresdefault.jpg' } , { 'title': control.lang(30292), 'action': 'techno_choices', 'url': 'PLZF-_NNdxpb5s1vjh6YSMTyjjlfiZhgbp', 'image': control.addonInfo('icon'), 'fanart': 'https://i.ytimg.com/vi/vtjL9IeowUs/maxresdefault.jpg' } ] if control.condVisibility('Window.IsVisible(music)'): del self.list[0] log_debug('Music section loaded') directory.add(self.list, argv=self.argv)
def info(self): separator = '[CR]' if control.setting('wrap_labels') == '0' else ' ' try: disclaimer = control.addonInfo('disclaimer').decode('utf-8') except (UnicodeEncodeError, UnicodeDecodeError, AttributeError): disclaimer = control.addonInfo('disclaimer') self.list = [ { 'title': control.lang(30331), 'action': 'welcome', 'icon': control.addonInfo('icon'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30105), 'action': 'dmca', 'plot': disclaimer, 'icon': control.addonmedia(addonid=ART_ID, theme='icons', icon='dmca.png', media_subfolder=False), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30290), 'action': 'pp', 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': '[B]' + control.lang(30110) + '[/B]', 'action': 'changelog', 'icon': control.addonInfo('icon'), 'plot': changelog(get_text=True), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30295), 'action': 'toggle_debug', 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30341), 'action': 'kodi_log_upload', 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30296), 'action': 'force', 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30260).format(separator), 'action': 'open_link', 'url': SUPPORT, 'plot': 'Git repo', 'icon': control.addonmedia(addonid=ART_ID, theme='icons', icon='bitbucket.png', media_subfolder=False), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30141) + ': [COLOR cyan]' + PAYPAL + '[/COLOR]', 'action': 'open_link', 'url': PAYPAL, 'isFolder': 'False', 'isPlayable': 'False' } # , # { # 'title': control.lang(30142) + ': [COLOR cyan]' + PATREON + '[/COLOR]', # 'action': 'open_link', # 'url': PATREON, # 'isFolder': 'False', # 'isPlayable': 'False' # } , { 'title': control.lang(30256).format(separator, control.addonInfo('version')), 'action': 'force', 'plot': control.lang(30265), 'icon': control.addonInfo('icon'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30257).format( separator, control.addon('script.module.tulip').getAddonInfo( 'version')), 'action': 'force', 'plot': control.lang(30265), 'icon': control.addon('script.module.tulip').getAddonInfo('icon'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30264).format( separator, control.addon('script.module.resolveurl').getAddonInfo( 'version')), 'action': 'other_addon_settings', 'query': 'script.module.resolveurl', 'plot': control.lang(30265), 'icon': control.addon('script.module.resolveurl').getAddonInfo('icon'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30258).format(separator, control.kodi_version()), 'action': 'system_info', 'plot': control.lang(30263), 'icon': control.addonmedia(addonid=ART_ID, theme='icons', icon='kodi.png', media_subfolder=False), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30303).format( separator, '.'.join([ str(sys.version_info[0]), str(sys.version_info[1]), str(sys.version_info[2]) ])), 'action': 'system_info', 'plot': control.lang(30263), 'image': 'https://www.python.org/static/opengraph-icon-200x200.png', 'isFolder': 'False', 'isPlayable': 'False' } ] directory.add(self.list, content='movies')
def menu(self): self.list = [{ 'title': '[B]' + control.addonInfo('name') + ': ' + control.lang(30255) + '[/B]', 'action': 'info', 'icon': control.addonInfo('icon') }, { 'title': '[B]' + control.addonInfo('name') + ': ' + control.lang(30350) + '[/B]', 'action': 'toggle_alt', 'icon': iconname('monitor'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30011) + ': ' + control.lang(30003), 'action': 'openSettings', 'icon': iconname('settings'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30011) + ': ' + control.lang(30005), 'action': 'openSettings', 'query': '1.0', 'icon': iconname('settings'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30011) + ': ' + control.lang(30004), 'action': 'openSettings', 'query': '2.0', 'icon': iconname('monitor'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30011) + ': ' + control.lang(30138), 'action': 'openSettings', 'query': '3.0', 'icon': iconname('settings'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30011) + ': ' + control.lang(30017), 'action': 'openSettings', 'query': '4.0', 'icon': iconname('settings'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.addonInfo('name') + ': ' + control.lang(30115), 'action': 'openSettings', 'query': '5.0', 'icon': iconname('godmode'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.addonInfo('name') + ': ' + control.lang(30056), 'action': 'cache_clear', 'icon': iconname('empty'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.addonInfo('name') + ': ' + control.lang(30135), 'action': 'clear_bookmarks', 'icon': iconname('empty'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.addonInfo('name') + ': ' + control.lang(30134), 'action': 'reset_idx', 'icon': iconname('settings'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30320) + ': ' + control.lang(30272), 'action': 'input_stream_addons', 'icon': iconname('monitor') }, { 'title': control.lang(30319), 'action': 'global_settings', 'icon': control.addonmedia(addonid=ART_ID, theme='icons', icon='kodi.png', media_subfolder=False), 'isFolder': 'False', 'isPlayable': 'False' }] if control.condVisibility('Window.IsVisible(programs)'): for i in self.list: i.update( {'cm': [{ 'title': 30307, 'query': { 'action': 'root' } }]}) directory.add(self.list)
def menu(self): self.list = [{ 'title': control.lang(30170), 'action': 'music_live', 'image': iconname('monitor'), 'fanart': 'https://i.ytimg.com/vi/vtjL9IeowUs/maxresdefault.jpg' }, { 'title': control.lang(30124), 'action': 'gm_music', 'image': iconname('music'), 'fanart': 'https://cdn.allwallpaper.in/wallpapers/1280x720/1895/music-hd-1280x720-wallpaper.jpg' }, { 'title': control.lang(30126), 'action': 'mgreekz_index', 'image': 'https://pbs.twimg.com/profile_images/697098521527328772/VY8e_klm_400x400.png', 'fanart': control.addonmedia(addonid=ART_ID, theme='networks', icon='mgz_fanart.jpg', media_subfolder=False), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30269), 'action': 'top50_list', 'url': 's1GeuATNw9GdvcXYy9Cdl5mLydWZ2lGbh9yL6MHc0RHa', 'image': control.addonInfo('icon'), 'fanart': 'https://i.ytimg.com/vi/vtjL9IeowUs/maxresdefault.jpg' }, { 'title': control.lang(30292), 'action': 'techno_choices', 'url': 'PLZF-_NNdxpb5s1vjh6YSMTyjjlfiZhgbp', 'image': control.addonInfo('icon'), 'fanart': 'https://i.ytimg.com/vi/vtjL9IeowUs/maxresdefault.jpg' }] if control.condVisibility('Window.IsVisible(music)'): del self.list[0] directory.add(self.list)
from zlib import decompress from base64 import b64decode from os import path sysaddon = argv[0] syshandle = int(argv[1]) params = dict(parse_qsl(argv[2][1:])) action = params.get('action') url = params.get('url') lc = [ { 'title': 'Greek Voice', 'icon': control.addonmedia(addonid='resource.images.greekvoice.artwork', icon='GV1_icon.png'), 'url': 'http://wpso.com:1936/hls/wzra.m3u8', 'fanart': control.addonmedia(addonid='resource.images.greekvoice.artwork', icon='GV_TV1_fanart.jpg'), 'plot': u'Greek Voice 1' }, # { # 'title': 'Greek Voice 2', # 'icon': join(addonmedia, 'GV2_icon.png'), # 'url': 'http://stream.ssh101.com:1935/live/greekvoice/playlist.m3u8', # 'fanart': join(addonmedia, 'GV_TV2_fanart.jpg'), # 'plot': u'Greek Voice 2' # }
def menu(self): self.list = [{ 'title': control.addonInfo('name') + ': ' + control.lang(30255), 'action': 'info', 'icon': control.addonInfo('icon') }, { 'title': control.lang(30011) + ': ' + control.lang(30003), 'action': 'openSettings', 'icon': iconname('settings'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30011) + ': ' + control.lang(30005), 'action': 'openSettings', 'query': '1.0', 'icon': iconname('settings'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30011) + ': ' + control.lang(30004), 'action': 'openSettings', 'query': '2.0', 'icon': iconname('monitor'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30011) + ': ' + control.lang(30138), 'action': 'openSettings', 'query': '3.0', 'icon': iconname('settings'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30011) + ': ' + control.lang(30017), 'action': 'openSettings', 'query': '4.0', 'icon': iconname('settings'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.addonInfo('name') + ': ' + control.lang(30115), 'action': 'openSettings', 'query': '5.0', 'icon': iconname('godmode'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.addonInfo('name') + ': ' + control.lang(30056), 'action': 'cache_clear', 'icon': iconname('empty'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.addonInfo('name') + ': ' + control.lang(30135), 'action': 'purge_bookmarks', 'icon': iconname('empty'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.addonInfo('name') + ': ' + control.lang(30134), 'action': 'reset_idx', 'icon': iconname('settings'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.addonInfo('name') + ': ' + control.lang(30110), 'action': 'changelog', 'icon': control.addonInfo('icon'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30111), 'action': 'other_addon_settings', 'query': 'script.module.resolveurl', 'icon': control.addon(id='script.module.resolveurl').getAddonInfo('icon'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30319), 'action': 'global_settings', 'icon': control.addonmedia(addonid=art_id, theme='icons', icon='kodi.png', media_subfolder=False), 'isFolder': 'False', 'isPlayable': 'False' }] if float(control.addon('xbmc.addon').getAddonInfo('version') [:4]) >= 17.0: inputstream = { 'title': control.lang(30320) + ': ' + control.lang(30272), 'action': 'input_stream_addons', 'icon': iconname('monitor') } self.list.insert(6, inputstream) if control.condVisibility('Window.IsVisible(programs)'): for i in self.list: i.update( {'cm': [{ 'title': 30307, 'query': { 'action': 'root' } }]}) directory.add(self.list, argv=self.argv)
def news(self): items = [{ 'title': control.lang(30230), 'icon': 'https://www.iconexperience.com/_img/v_collection_png/256x256/shadow/newspaper.png', 'url': '{0}?action=papers'.format(sysaddon), 'fanart': control.addonInfo('fanart') }, { 'title': control.lang(30118), 'icon': control.addonmedia(addonid=ART_ID, theme='networks', icon='ert_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.ert.gr/?action=categories&url=https%3A%2F%2Fwww.ertflix.gr%2Fshow%2Fnews', 'fanart': control.addonmedia(addonid=ART_ID, theme='networks', icon='ert_fanart.jpg', media_subfolder=False) }, { 'title': control.lang(30119), 'icon': control.addonmedia(addonid=ART_ID, theme='networks', icon='ant1_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.antenna.gr/?action=videos&url=https%3a%2f%2fwww.ant1news.gr%2fvideos', 'fanart': control.addonmedia(addonid=ART_ID, theme='networks', icon='ant1_fanart.jpg', media_subfolder=False) }, { 'title': control.lang(30120), 'icon': control.addonmedia(addonid=ART_ID, theme='networks', icon='star_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.star.gr/?action=news', 'fanart': control.addonmedia(addonid=ART_ID, theme='networks', icon='star_fanart.jpg', media_subfolder=False) }, { 'title': control.lang(30122), 'icon': control.addonmedia(addonid=ART_ID, theme='networks', icon='alpha_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.alphatv.gr/?action=news&url=https%3a%2f%2fwww.alphatv.gr%2fnews', 'fanart': control.addonmedia(addonid=ART_ID, theme='networks', icon='alpha_fanart.jpg', media_subfolder=False) }, { 'title': control.lang(30121), 'icon': control.addonmedia(addonid=ART_ID, theme='networks', icon='skai_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.skai.gr/?action=news', 'fanart': control.addonmedia(addonid=ART_ID, theme='networks', icon='skai_fanart.jpg', media_subfolder=False) }] for item in items: list_item = control.item(label=item['title']) list_item.setArt({'icon': item['icon'], 'fanart': item['fanart']}) url = item['url'] isFolder = True if 'papers' not in item['url'] else False self.list.append((url, list_item, isFolder)) control.addItems(syshandle, self.list) control.directory(syshandle)
def main_menu(): menu = [] menu_items = [ { 'title': control.lang(30001), 'icon': control.addonmedia(addonid='resource.images.greekvoice.artwork', icon='television.png'), 'url': '{0}?action={1}'.format(sysaddon, 'live'), 'fanart': control.addonmedia(addonid='resource.images.greekvoice.artwork', icon='GV_TV2_fanart.jpg') }, { 'title': control.lang(30002), 'icon': control.addonmedia(addonid='resource.images.greekvoice.artwork', icon='radio.png'), 'url': '{0}?action={1}'.format(sysaddon, 'radio'), 'fanart': control.addonmedia(addonid='resource.images.greekvoice.artwork', icon='TILEMOUSIKI_fanart.jpg') }, { 'title': control.lang(30014), 'icon': control.addonmedia(addonid='resource.images.greekvoice.artwork', icon='GV_YT_icon.png'), 'url': 'plugin://plugin.video.youtube/channel/{0}/?addon_id={1}'.format( channel_id, control.addonInfo('id')), 'fanart': control.addonmedia(addonid='resource.images.greekvoice.artwork', icon='GV_TV2_fanart.jpg') } # , # { # 'title': control.lang(30004), # 'icon': control.addonmedia(addonid='resource.images.greekvoice.artwork', icon='settings.png'), # 'url': '{0}?action={1}'.format(sysaddon, 'settings'), # 'fanart': control.addonInfo('fanart') # } ] for item in menu_items: li = control.item(label=item['title']) li.setInfo('video', {'title': item['title']}) li.setArt({ 'fanart': item['fanart'], 'icon': item['icon'], 'thumb': item['icon'] }) _url = item['url'] if item['url'].endswith('settings'): _isFolder = False else: _isFolder = True menu.append((_url, li, _isFolder)) control.addItems(syshandle, menu) control.directory(syshandle)