def install(): if control.conditional_visibility('System.Platform.Linux') and not ( path.exists(control.transPath(xbmc_path)) or path.exists(control.transPath(home_path))): control.okDialog(heading='AliveGR', line1=control.lang(30323)) return False elif path.exists(control.transPath(xbmc_path)) or path.exists( control.transPath(home_path)): return True elif control.kodi_version() >= 18.0 and not control.condVisibility( 'System.HasAddon(pvr.iptvsimple)'): control.execute('InstallAddon(pvr.iptvsimple)') return True elif control.condVisibility('System.HasAddon(pvr.iptvsimple)'): return 'enabled' else: return False
def techno_choices(self, url): self.list = cache.get(youtube.youtube(key=thgiliwt(api_keys['api_key']), replace_url=replace_url).playlist, 12, url) if self.list is None: return for i in self.list: i['label'] = i.pop('title') # process stupid descriptions/comments put up by uploaders on labels i['label'] = re.sub(r'PREMIERE ?:|\(full version\)\.mp4|\(?(?:Un)?Official.*\)? ?(?:HD)?|\[?HD (?:108|72)0p\]?', '', i['label'], flags=re.IGNORECASE) for count, i in list(enumerate(self.list, start=1)): if '–' in i['label']: sep = '–' elif ':' in i['label'] and not '-' in i['label']: sep = ':' elif '-' in i['label']: sep = '-' else: sep = ' ' artist, separator, title = i['label'].partition(sep) if '&' in artist: artists_separator = '&' elif ',' in artist: artists_separator = ',' elif 'feat.' in artist: artists_separator = 'feat.' elif 'feat' in artist: artists_separator = 'feat' elif 'Feat' in artist: artists_separator = 'Feat' else: artists_separator = None if artists_separator: artist = [a.strip() for a in artist.split(artists_separator)] on_label = ' / '.join(artist) else: on_label = artist.strip() artist = [artist.strip()] i.update( { 'action': 'play', 'isFolder': 'False', 'title': title, 'label': ' '.join([on_label, separator , title]), 'album': control.lang(30292), 'fanart': 'https://i.ytimg.com/vi/vtjL9IeowUs/maxresdefault.jpg', 'tracknumber': count, 'count': count, 'artist': artist } ) if control.setting('audio_only') == 'true' and control.condVisibility('Window.IsVisible(music)'): i['artist'] = on_label control.sortmethods('tracknum', mask='%A') directory.add(self.list, content=self.content, infotype=self.infotype, argv=self.argv)
def enable_iptv(): xbmc_path = control.join('special://xbmc', 'addons', 'pvr.iptvsimple') home_path = control.join('special://home', 'addons', 'pvr.iptvsimple') if control.condVisibility('Pvr.HasTVChannels') and ( path.exists(control.transPath(xbmc_path)) or path.exists(control.transPath(home_path)) ) and control.addon_details('pvr.iptvsimple').get('enabled'): control.infoDialog(message=control.lang(30407), time=4000) elif not path.exists(control.join(iptv_folder, 'settings.xml')): control.infoDialog(message=control.lang(30409), time=4000) else: if control.yesnoDialog(line1=control.lang(30406)): control.enable_addon('pvr.iptvsimple') if control.infoLabel( 'System.AddonVersion(xbmc.python)') == '2.24.0': control.execute('StartPVRManager')
def yt_setup(): def wizard(): control.addon('plugin.video.youtube').setSetting( 'kodion.setup_wizard', 'false') control.addon('plugin.video.youtube').setSetting( 'youtube.language', 'el') control.addon('plugin.video.youtube').setSetting( 'youtube.region', 'GR') control.infoDialog(message=control.lang(30402), time=3000) def yt_mpd(): control.addon('plugin.video.youtube').setSetting( 'kodion.video.quality.mpd', 'true') control.addon('plugin.video.youtube').setSetting( 'kodion.mpd.videos', 'true') control.addon('plugin.video.youtube').setSetting( 'kodion.mpd.live_streams', 'true') control.infoDialog(message=control.lang(30402), time=3000) ######################################################################################################################## if control.yesnoDialog(line1=control.lang(30132)): wizard() if control.condVisibility( 'System.HasAddon(inputstream.adaptive)') and control.yesnoDialog( line1=control.lang(30287)): yt_mpd()
def yt_setup(): def seq(): control.addon('plugin.video.youtube').setSetting('youtube.api.enable', api_keys['enablement']) control.addon('plugin.video.youtube').setSetting('youtube.api.id', api_keys['id']) control.addon('plugin.video.youtube').setSetting('youtube.api.key', thgiliwt(api_keys['api_key'])) control.addon('plugin.video.youtube').setSetting('youtube.api.secret', api_keys['secret']) control.infoDialog(message=control.lang(30402), time=3000) def wizard(): control.addon('plugin.video.youtube').setSetting('kodion.setup_wizard', 'false') control.addon('plugin.video.youtube').setSetting('youtube.language', 'el') control.addon('plugin.video.youtube').setSetting('youtube.region', 'GR') control.infoDialog(message=control.lang(30402), time=3000) def yt_mpd(): control.addon('plugin.video.youtube').setSetting('kodion.video.quality.mpd', 'true') control.addon('plugin.video.youtube').setSetting('kodion.mpd.videos', 'true') control.addon('plugin.video.youtube').setSetting('kodion.mpd.live_streams', 'true') control.infoDialog(message=control.lang(30402), time=3000) ######################################################################################################################## def process(): if control.addon('plugin.video.youtube').getSetting('youtube.api.enable') == 'true': if control.yesnoDialog(line1=control.lang(30069), line2=control.lang(30022), line3=''): seq() else: control.infoDialog(message=control.lang(30029), time=3000) else: if control.yesnoDialog(line1=control.lang(30070), line2=control.lang(30022), line3=''): seq() else: control.infoDialog(message=control.lang(30029), time=3000) ######################################################################################################################## process() if control.yesnoDialog(line1=control.lang(30132), line2='', line3=''): wizard() else: pass if control.condVisibility('System.HasAddon(inputstream.adaptive)') and control.yesnoDialog(line1=control.lang(30287), line2='', line3=''): yt_mpd() else: pass
def prevent_failure(): for i in range(0, 500): if control.condVisibility('Window.IsActive(busydialog)'): control.sleep(100) else: control.execute('Dialog.Close(all,true)') break
def music_list(self, url): html = client.request(url) try: html = html.decode('utf-8') except Exception: pass if 'albumlist' in html: artist = [client.parseDOM(html, 'h4')[0].partition(' <a')[0]] else: artist = None if control.setting('audio_only') == 'true' and control.condVisibility('Window.IsVisible(music)') and artist is not None: artist = ''.join(artist) if 'songlist' in html: songlist = client.parseDOM(html, 'div', attrs={'class': 'songlist'})[0] items = client.parseDOM(songlist, 'li') elif 'albumlist' in html: albumlist = client.parseDOM(html, 'div', attrs={'class': 'albumlist'})[0] items = client.parseDOM(albumlist, 'li') else: artistlist = client.parseDOM(html, 'div', attrs={'class': 'artistlist'})[0] items = client.parseDOM(artistlist, 'li') if 'icon/music' in html: icon = client.parseDOM(html, 'img', attrs={'class': 'img-responsive'}, ret='src')[-1] icon = urljoin(gm.GM_BASE, icon) else: icon = iconname('music') for item in items: title = client.parseDOM(item, 'a')[0] link = client.parseDOM(item, 'a', ret='href')[0] link = urljoin(gm.GM_BASE, link) if 'gapi.client.setApiKey' in html: if CACHE_DEBUG: link = gm.source_maker(url)['links'][0] else: link = cache.get(gm.source_maker, 48, url)['links'][0] data = {'title': title, 'url': link, 'image': icon} if artist: data.update({'artist': artist}) self.list.append(data) return self.list
def wrapper(url): if url.endswith('/live'): url = generic(url) if not url: return streams = youtube_resolver.resolve(url) try: addon_enabled = control.addon_details('inputstream.adaptive').get( 'enabled') except KeyError: addon_enabled = False if not addon_enabled: streams = [s for s in streams if 'dash' not in s['title'].lower()] if control.condVisibility('Window.IsVisible(music)') and control.setting( 'audio_only') == 'true': audio_choices = [ u for u in streams if 'dash/audio' in u and 'dash/video' not in u ] if control.setting('yt_quality_picker') == '0': resolved = audio_choices[0]['url'] else: qualities = [i['title'] for i in audio_choices] urls = [i['url'] for i in audio_choices] links = list(zip(qualities, urls)) resolved = stream_picker(links) return resolved elif control.setting('yt_quality_picker') == '1': qualities = [i['title'] for i in streams] urls = [i['url'] for i in streams] links = list(zip(qualities, urls)) resolved = stream_picker(links) return resolved else: resolved = streams[0]['url'] return resolved
def pair(link): link = unquote_plus(link) if condVisibility('system.platform.android'): from tulip.control import android_activity android_activity(link) else: import webbrowser webbrowser.open(link)
def kids(self): self.data = [{ 'title': control.lang(30078), 'url': 'plugin://plugin.video.AliveGR/?action=kids_live', 'icon': iconname('kids_live') }, { 'title': control.lang(30074), 'url': '{0}?action={1}'.format(self.sysaddon, 'cartoon_collection'), 'icon': iconname('cartoon_collection') }, { 'title': control.lang(30075), 'url': '{0}?action={1}'.format(self.sysaddon, 'educational'), 'icon': iconname('educational') }, { 'title': control.lang(30076), 'url': '{0}?action={1}'.format(self.sysaddon, 'kids_songs'), 'icon': iconname('kids_songs') }] try: if control.condVisibility('System.HasAddon({0})'.format(sdik)): extended = [ dict((k, control.lang(v) if (k == 'title') else v) for k, v in item.items()) for item in extension.kids_indexer ] extended = [ dict((k, iconname(v) if (k == 'icon') else v) for k, v in item.items()) for item in extended ] self.data = [self.data[0]] + extended + self.data[1:] except: pass for item in self.data: li = control.item(label=item['title']) li.setArt({ 'icon': item['icon'], 'fanart': control.addonInfo('fanart') }) self.list.append((item['url'], li, True)) control.addItems(self.syshandle, self.list) control.directory(self.syshandle)
def wrapper(url): if replace_url: result = re.sub( r'''https?://(?:[0-9A-Z-]+\.)?(?:(youtu\.be|youtube(?:-nocookie)?\.com)/?\S*?[^\w\s-])([\w-]{11})(?=[^\w-]|$)(?![?=&+%\w.-]*(?:['"][^<>]*>|</a>))[?=&+%\w.-]*''', yt_prefix + r'\2', url, flags=re.I ) if url != result: return result streams = youtube_resolver.resolve(url) try: addon_enabled = control.addon_details('inputstream.adaptive').get('enabled') except KeyError: addon_enabled = False if not addon_enabled: streams = [s for s in streams if 'dash' not in s['title'].lower()] if control.condVisibility('Window.IsVisible(music)') and control.setting('audio_only') == 'true': audio_choices = [u for u in streams if 'dash/audio' in u and 'dash/video' not in u] if control.setting('yt_quality_picker') == '0': resolved = audio_choices[0]['url'] else: qualities = [i['title'] for i in audio_choices] urls = [i['url'] for i in audio_choices] resolved = stream_picker(qualities, urls) return resolved elif control.setting('yt_quality_picker') == '1': qualities = [i['title'] for i in streams] urls = [i['url'] for i in streams] resolved = stream_picker(qualities, urls) return resolved else: resolved = streams[0]['url'] return resolved
def __init__(self): self.list = [] self.data = [] self.mgreekz_id = 'https://www.youtube.com/channel/UClMj1LyMRBMu_TG1B1BirqQ/' self.mgreekz_id = self.mgreekz_id.replace( 'https://www.youtube.com/channel', '{0}/channel'.format(YT_ADDON)) if control.setting('audio_only') == 'true' and control.condVisibility( 'Window.IsVisible(music)'): self.content = 'songs' self.infotype = 'music' else: self.content = 'musicvideos' self.infotype = 'video'
def enable_proxy_module(): if control.condVisibility('System.HasAddon(service.streamlink.proxy)'): control.infoDialog(control.lang(30143)) else: if control.infoLabel('System.AddonVersion(xbmc.python)') == '2.24.0': control.execute('RunPlugin(plugin://service.streamlink.proxy/)') else: control.execute('InstallAddon(service.streamlink.proxy)')
def __init__(self, argv): self.list = []; self.data = [] self.mgreekz_id = 'UClMj1LyMRBMu_TG1B1BirqQ' self.mgreekz_url = 'http://mad.tv/' self.rythmos_url = 'https://www.rythmosfm.gr/' self.plus_url = 'http://plusradio.gr/top20' self.radiopolis_url_gr = 'http://www.radiopolis.gr/elliniko-radio-polis-top-20/' self.radiopolis_url_other = 'http://www.radiopolis.gr/to-kseno-polis-top-20/' self.rythmos_top20_url = urljoin(self.rythmos_url, 'community/top20/') if control.setting('audio_only') == 'true' and control.condVisibility('Window.IsVisible(music)'): self.content = 'songs' self.infotype = 'music' else: self.content = 'musicvideos' self.infotype = 'video' self.argv = argv
def activate_other_addon(url, query=None): if not url.startswith('plugin://'): url = ''.join(['plugin://', url, '/']) parsed = urlparse(url) if not control.condVisibility('System.HasAddon({0})'.format( parsed.netloc)): control.execute('InstallAddon({0})'.format(parsed.netloc)) params = dict(parse_qsl(parsed.query)) action = params.get('action') url = params.get('url') directory.run_builtin(addon_id=parsed.netloc, action=action, url=url, content_type=query)
def _mgreekz_top10(self): from youtube_requests import get_search html = client.request(self.mgreekz_url) spotify_playlist_url = client.parseDOM(html, 'iframe', ret='src')[0] spotify_html = client.request(spotify_playlist_url) spotify_object = client.parseDOM(spotify_html, 'script', attrs={'id': 'resource', 'type': 'application/json'})[0] json_object = json.loads(spotify_object) comment = plot = json_object.get('description') tracks = json_object.get('tracks').get('items') for track in tracks: song = track.get('track') title = song.get('name') artists = on_label = [i['name'] for i in song.get('artists')] if control.setting('audio_only') == 'true' and control.condVisibility('Window.IsVisible(music)'): artists = ' / '.join(artists) search = get_search(q=title + ' ' + 'official', search_type='video')[0] vid = search['id']['videoId'] link = yt_url + vid image = thumb_maker(link.rpartition('/' if 'youtu.be' in link else '=')[2]) self.list.append( { 'label': title + ' - ' + ' & '.join(on_label), 'url': link, 'album': 'Mad Greek Top 10', 'image': image, 'artist': artists, 'comment': comment, 'plot': plot, 'title': title } ) return self.list
def log_upload(): exists = control.condVisibility('System.HasAddon(script.kodi.loguploader)') addon_path = control.transPath(control.join('special://', 'home', 'addons', 'script.kodi.loguploader')) if not exists: if path.exists(addon_path): control.enable_addon('script.kodi.loguploader') else: control.execute('InstallAddon(script.kodi.loguploader)') while not path.exists(addon_path): control.sleep(1000) else: control.execute('RunScript(script.kodi.loguploader)') else: control.execute('RunScript(script.kodi.loguploader)')
def top50_list(self, url): self.list = self._top50(url) if self.list is None: log_debug('Developer\'s picks section failed to load') return 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({ 'action': 'play', 'isFolder': 'False', 'cm': [add_to_playlist, clear_playlist], 'album': control.lang(30269), 'fanart': 'https://i.ytimg.com/vi/vtjL9IeowUs/maxresdefault.jpg', 'tracknumber': count, 'code': count, 'artist': [item['label'].partition(' - ')[0]] }) if control.setting( 'audio_only') == 'true' and control.condVisibility( 'Window.IsVisible(music)'): item['artist'] = item['artist'][0] control.sortmethods('tracknum', mask='%A') directory.add(self.list, content=self.content, infotype=self.infotype)
def pvr_client(query='false'): control.execute('Dialog.Close(all)') if control.condVisibility('Pvr.HasTVChannels'): if query is None or query == 'false': selection = control.selectDialog([control.lang(30001), control.lang(30014)]) if selection == 0: control.execute('ActivateWindow(TVChannels)') elif selection == 1: control.execute('ActivateWindow(TVGuide)') elif query == 'true': control.execute('ActivateWindow(TVGuide)') else: control.infoDialog(message=control.lang(30065))
def music_list(self, url): html = client.request(url) if 'albumlist' in html: artist = [client.parseDOM(html, 'h4')[0].partition(' <a')[0]] else: artist = None if control.setting('audio_only') == 'true' and control.condVisibility('Window.IsVisible(music)') and artist is not None: artist = ''.join(artist) if 'songlist' in html: songlist = client.parseDOM(html, 'div', attrs={'class': 'songlist'})[0] items = client.parseDOM(songlist, 'li') elif 'albumlist' in html: albumlist = client.parseDOM(html, 'div', attrs={'class': 'albumlist'})[0] items = client.parseDOM(albumlist, 'li') else: artistlist = client.parseDOM(html, 'div', attrs={'class': 'artistlist'})[0] items = client.parseDOM(artistlist, 'li') if 'icon/music' in html: icon = client.parseDOM(html, 'img', attrs={'class': 'img-responsive'}, ret='src')[-1] icon = urljoin(gm.base_link, icon) else: icon = iconname('music') for item in items: title = client.parseDOM(item, 'a')[0] link = client.parseDOM(item, 'a', ret='href')[0] link = urljoin(gm.base_link, link) data = {'title': title, 'url': link, 'image': icon, 'artist': artist} self.list.append(data) return 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)
def live_tv(self, zapping=False, query=None): if control.setting('live_tv_mode') == '1' and query is None: zapping = True if control.setting('debug') == 'false': live_data = cache.get(self.live, 8) else: live_data = cache.get(self.live, int(control.setting('cache_period'))) self.list = live_data[0] if self.list is None: log_debug('Live channels list did not load successfully') return if zapping and control.setting('live_group_switcher') != '0': value = int(control.setting('live_group_switcher')) - 1 group = str(live_groups.values()[value]) self.list = [item for item in self.list if item['group'] == group] elif control.setting('show_live_switcher') == 'true': if control.setting('live_group') != 'ALL' and query is None: self.list = [ item for item in self.list if item['group'] == control.setting('live_group') ] elif not zapping: if control.setting('live_group_switcher') != '0' and query is None: value = int(control.setting('live_group_switcher')) - 1 group = str(live_groups.values()[value]) self.list = [ item for item in self.list if item['group'] == group ] if control.setting('show_alt') == 'false': self.list = [ item for item in self.list if not any([ 'BUP' in item['title'], re.search(r'\(\d\)', item['title']) ]) ] year = datetime.now().year for count, item in list(enumerate(self.list, start=1)): item.update({ 'action': 'play_resolved' if zapping and control.setting('preresolve_streams') == 'true' else 'play', 'isFolder': 'False', 'year': year, 'duration': None, 'code': str(count) }) for item in self.list: # 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)}} if not zapping: r_and_c_cm = { 'title': 30082, 'query': { 'action': 'refresh_and_clear' } } else: r_and_c_cm = None pvr_client_cm = { 'title': 30084, 'query': { 'action': 'pvr_client', 'query': 'true' } } if item['website'] != 'None': web_cm = { 'title': 30316, 'query': { 'action': 'open_link', 'url': item['website'] } } else: web_cm = None if control.condVisibility('Pvr.HasTVChannels'): item.update({'cm': [r_and_c_cm, pvr_client_cm, web_cm]}) else: item.update({'cm': [r_and_c_cm, web_cm]}) if control.setting( 'show_live_switcher') == 'true' and zapping is False: switch = { 'title': control.lang(30047).format( control.lang(30048) if control.setting('live_group') == 'ALL' else control.lang(int(control.setting('live_group')) )), 'image': iconname('switcher'), 'action': 'live_switcher', 'plot': control.lang(30034) + '\n' + control.lang(30035) + live_data[2], 'isFolder': 'False', 'isPlayable': 'False' } self.list.insert(0, switch) if control.setting('preresolve_streams') == 'true': from resources.lib.modules.player import conditionals pd = control.progressDialogGB pd.create(control.name()) for item in self.list: try: percent = control.per_cent(int(item['code']), len(self.list)) pd.update(percent) item.update( {'url': conditionals(item['url'], params=self.params)}) except Exception as e: log_debug('Failed to resolve ' + item['title'] + ' , reason: ' + repr(e)) continue pd.update(100) pd.close() if query: self.list = [i for i in self.list if query in i['title'].lower()] return self.list if not zapping: control.sortmethods('production_code') control.sortmethods('title') control.sortmethods('genre') directory.add(self.list, content='movies', argv=self.argv, as_playlist=zapping, progress=len(self.list) >= 100)
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 external_links(self): self.data = [{ 'title': control.lang(30030), 'icon': control.addonInfo('icon'), 'url': 'https://farosonair.com/' }, { 'title': control.lang(30031), 'icon': control.addonInfo('icon'), 'url': 'https://farosonair.com/category/farosnews/' }, { 'title': control.lang(30028), 'icon': 'facebook.png', 'url': 'https://www.facebook.com/farosonair' }, { 'title': control.lang(30029), 'icon': 'instagram.png', 'url': 'https://www.instagram.com/farosonair16/' }, { 'title': control.lang(30026), 'icon': 'twitter.png', 'url': 'https://twitter.com/faros_on_air' }, { 'title': control.lang(30027), 'icon': 'youtube_sub.png', 'url': 'https://www.youtube.com/channel/UCfU04d4DbqpyotwfgxRS6EQ?sub_confirmation=1' }] for i in self.data: i.update({'action': 'open_website'}) if control.setting('external_action') == 'false': links = [i['url'] for i in self.data] titles = [i['title'] for i in self.data] choice = control.selectDialog(titles) if choice >= 0: if control.condVisibility('System.Platform.Android'): from resources.lib.helpers import android_activity android_activity(links[choice]) else: import webbrowser webbrowser.open(links[choice]) else: pass else: for i in self.data: if i['icon'] != control.addonInfo('icon'): image = control.join(control.addonPath, 'resources', 'media', i['icon']) else: image = control.addonInfo('icon') li = control.item(label=i['title']) li.setArt({ 'poster': image, 'thumb': image, 'fanart': control.addonInfo('fanart') }) li.setInfo('video', {'title': i['title']}) url = '{0}?action={1}&url={2}'.format(sysaddon, i['action'], i['url']) self.list.append((url, li, False)) control.addItems(syshandle, self.list) control.directory(syshandle)
def _top20(self, url): from youtube_requests import get_search cookie = client.request(url, close=False, output='cookie') html = client.request(url, cookie=cookie) if url == self.rythmos_top20_url: attributes = {'class': 'va-title'} elif url == self.plus_url: attributes = {'class': 'element element-itemname first last'} elif url == self.radiopolis_url_gr or url == self.radiopolis_url_other: attributes = {'class': 'thetopdata'} items = client.parseDOM( html, 'td' if 'radiopolis' in url else 'div', attrs=attributes ) year = str(datetime.now().year) for item in items: if url == self.rythmos_top20_url: label = client.parseDOM(item, 'span', attrs={'class': 'toptitle'})[0] label = client.replaceHTMLCodes(label) label = re.sub('\s? ?-\s? ?', ' - ', label) image = client.parseDOM(item, 'img', ret='src')[0] image = image.replace(' ', '%20') title = label.partition(' - ')[2] if control.setting('audio_only') == 'true' and control.condVisibility('Window.IsVisible(music)'): artist = label.partition(' - ')[0] else: artist = [label.partition(' - ')[0]] elif url == self.plus_url: label = item.partition('.')[2].strip() title = label.partition('-')[2] if control.setting('audio_only') == 'true' and control.condVisibility('Window.IsVisible(music)'): artist = label.partition('-')[0] else: artist = [label.partition('-')[0]] elif url == self.radiopolis_url_gr or url == self.radiopolis_url_other: a_href = client.parseDOM(item, 'a') a_href = ' - '.join(a_href) if len(a_href) == 2 else a_href[0] label = client.stripTags(a_href.replace('\"', '').replace('&', '&').replace('\n', ' - ')) title = label.partition(' - ')[2] if control.setting('audio_only') == 'true' and control.condVisibility('Window.IsVisible(music)'): artist = label.partition(' - ')[0] else: artist = [label.partition(' - ')[0]] if any([url == self.rythmos_top20_url, url == self.plus_url]): search = get_search(q=title + ' ' + 'official', search_type='video')[0] description = search['snippet']['description'] year = search['snippet']['publishedAt'][:4] vid = search['id']['videoId'] image = search['snippet']['thumbnails']['default']['url'] link = yt_url + vid elif url == self.radiopolis_url_gr or url == self.radiopolis_url_other: links = client.parseDOM(item, 'a', ret='href') link = links[1] if len(links) == 2 else links[0] image = thumb_maker(link.rpartition('/' if 'youtu.be' in link else '=')[2]) description = None self.list.append( { 'label': label, 'url': link, 'image': image, 'title': title, 'artist': artist, 'plot': description, 'year': int(year) } ) return self.list
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 bool_skin_setting(setting_id): return bool( control.condVisibility('Skin.HasSetting({0})'.format(setting_id)))
def visible_window(window_id): boolean = control.condVisibility('Window.IsVisible({0})'.format(window_id)) return boolean
the Free Software Foundation, either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. ''' from tulip import control from resources.lib.modules.themes import iconname from resources.lib.modules.constants import yt_addon, sdik try: if control.condVisibility('System.HasAddon({0})'.format(sdik)): import sys sys.path.extend([ control.join( control.addon(id=sdik).getAddonInfo('path'), 'resources', 'lib') ]) import extension except Exception: pass class Indexer: def __init__(self, argv): self.list = []
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)