def bookmarks(self): self.list = bookmarks.get() if not self.list: na = [{'title': control.lang(30058), 'action': None}] directory.add(na) return for i in self.list: bookmark = dict((k, v) for k, v in iteritems(i) if not k == 'next') bookmark['delbookmark'] = i['url'] i.update({'cm': [{'title': 30502, 'query': {'action': 'deleteBookmark', 'url': json.dumps(bookmark)}}]}) control.sortmethods('title') if control.setting('bookmarks_clear_boolean') == 'true': clear_menu = { 'title': control.lang(30059), 'action': 'clear_bookmarks' } self.list.insert(0, clear_menu) directory.add(self.list, content='videos')
def radios(url): self_list = radios_list(url) if self_list is None: return if url == ALL_LINK: self_list.extend(_devpicks()) for i in self_list: i.update({'action': 'play', 'isFolder': 'False'}) 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) } }] }) control.sortmethods('title') directory.add(self_list, infotype='music')
def bookmarks(): self_list = _bookmarks.get() if not self_list: na = [{'title': control.lang(30007), 'action': None}] directory.add(na) return for i in self_list: bookmark = dict((k, v) for k, v in iteritems(i) if not k == 'next') bookmark['delbookmark'] = i['url'] i.update({ 'cm': [{ 'title': 30006, 'query': { 'action': 'deleteBookmark', 'url': json.dumps(bookmark) } }] }) control.sortmethods() control.sortmethods('title') directory.add(self_list, content='videos')
def live(): self_list = list_live_items() if self_list is None: return self_list = [dict(t) for t in {tuple(d.items()) for d in self_list}] for item in self_list: item.update({'action': 'play', 'isFolder': 'False'}) bookmark = dict((k, v) for k, v in iteritems(item) if not k == 'next') bookmark['delbookmark'] = item['url'] item.update({ 'cm': [{ 'title': 30004, 'query': { 'action': 'addBookmark', 'url': json.dumps(bookmark) } }] }) control.sortmethods() control.sortmethods('title') directory.add(self_list, content='videos')
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 index(self, url): if self.basecy_link in url: self.list = self.index_cy(url) elif self.basegr_link in url: self.list = self.index_gr(url) if not self.list: return for i in self.list: if 'action' not in i: i.update({'action': 'episodes'}) if 'next' in i: i.update({'nextaction': 'index'}) for i in self.list: 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)}}]}) if self.basegr_link in url: control.sortmethods('title') control.sortmethods() directory.add(self.list, content='videos')
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 search(): input_str = control.inputDialog() if not input_str: return items = radios_list(ALL_LINK) + _devpicks() if is_py3: titles = [strip_accents(i['title']) for i in items] matches = [ titles.index(t) for t, s in process.extract( strip_accents(input_str), titles, limit=10) if s >= 70 ] else: titles = [ strip_accents(i['title']).encode('unicode-escape') for i in items ] matches = [ titles.index(t) for t, s in process.extract(strip_accents( input_str).encode('unicode-escape'), titles, limit=10) if s >= 70 ] data = [] for m in matches: data.append(items[m]) if not data: control.infoDialog(30010) return else: for i in data: i.update({'action': 'play', 'isFolder': 'False'}) 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) } }] }) control.sortmethods('title') directory.add(data, infotype='music')
def archive(self): self.list = cache.get( youtube.youtube(key=self.yt_key).playlists, 12, self.yt_channel) if self.list is None: return for i in self.list: i['title'] = client.replaceHTMLCodes(i['title']) i.update({'action': 'episodes'}) bookmark = dict((k, v) for k, v in iteritems(i) if not k == 'next') bookmark['bookmark'] = i['url'] i.update({ 'cm': [{ 'title': 32501, 'query': { 'action': 'addBookmark', 'url': json.dumps(bookmark) } }] }) control.sortmethods('title') directory.add(self.list, content='videos')
def episodes(self, url): if CACHE_DEBUG: self.list = self.epeisodia(url) else: self.list = cache.get(self.epeisodia, 12, url) if self.list is None: log_debug( 'Episode section failed to load, try resetting indexer methods' ) return for item in self.list: item.update({'action': 'play', 'isFolder': 'False'}) for item in self.list: refresh_cm = {'title': 30054, 'query': {'action': 'refresh'}} item.update({'cm': [refresh_cm]}) if control.setting('episodes_reverse') == 'true': self.list = sorted( self.list, key=lambda k: k['group'] if k['group'] in ['1bynumber', '2bydate'] else k['title'], reverse=True)[::-1] else: self.list = sorted(self.list, key=lambda k: k['group']) if len(self.list) > int( control.setting('pagination_integer')) and control.setting( 'paginate_items') == 'true': try: pages = list_divider( self.list, int(control.setting('pagination_integer'))) self.list = pages[int(control.setting('page'))] reset = False except Exception: pages = list_divider( self.list, int(control.setting('pagination_integer'))) self.list = pages[0] reset = True self.list.insert(0, page_menu(len(pages), reset=reset)) control.sortmethods() # control.sortmethods('title') # control.sortmethods('year') directory.add(self.list, content='episodes')
def episodes(self, url, title=None, name=None, image=None): if self.basegr_link in url: self.list = self.episodes_list_gr(url, title) else: self.list = self.episodes_list_cy(url, name, image) if self.list is None: return if self.newscy_link == url: item = { 'title': control.lang(30021), 'action': 'enter_date', 'icon': 'selector.png', 'isFolder': 'False', 'isPlayable': 'False', 'next': self.list[0]['next'] } self.list.insert(0, item) for c, i in list(enumerate(self.list, 1)): if 'action' not in i: i.update({'action': 'play', 'isFolder': 'False', 'code': str(c)}) if 'next' in i: i.update({'nextaction': 'episodes'}) if control.setting('reverse') == 'true' and self.basegr_link in url: self.list = sorted(self.list, key=lambda k: int(k['code']), reverse=True) if len(self.list) > int(control.setting('pagination_integer')) and control.setting('paginate') == 'true': try: pages = utils.list_divider(self.list, int(control.setting('pagination_integer'))) self.list = pages[int(control.setting('page'))] reset = False except Exception: pages = utils.list_divider(self.list, int(control.setting('pagination_integer'))) self.list = pages[0] reset = True self.list.insert(0, self.page_menu(len(pages), reset=reset)) if self.basegr_link in url: control.sortmethods() control.sortmethods('production_code') directory.add(self.list, content='videos')
def stations(self): self.list = self.get_stations() if self.list is None: return self.list = sorted(self.list, key=lambda k: k['album'].lower()) for item in self.list: refresh = {'title': 30015, 'query': {'action': 'refresh'}} cache_clear = {'title': 30002, 'query': {'action': 'cache_clear'}} info_cm = {'title': 30020, 'query': {'action': 'info_cm'}} station_info = { 'title': 30016, 'query': { 'action': 'description', 'text': item['comment'] } } history = { 'title': 30017, 'query': { 'action': 'history', 'url': item['history'] } } if control.kodi_version() < 17.0: item.update({ 'cm': [refresh, cache_clear, history], 'action': 'play', 'isFolder': 'False' }) else: item.update({ 'cm': [refresh, cache_clear, history, station_info, info_cm], 'action': 'play', 'isFolder': 'False' }) for count, item in list(enumerate(self.list, start=1)): item.setdefault('tracknumber', count) control.sortmethods() control.sortmethods('album') control.sortmethods('genre') control.sortmethods('listeners') directory.add(self.list, infotype='music')
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 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 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 listing(self, url, post=None, get_listing=False): if CACHE_DEBUG: self.list = self.items_list(url, post) else: self.list = cache.get(self.items_list, 12, url, post) if self.list is None: log_debug( 'Listing section failed to load, try resetting indexer methods' ) return if url.startswith(MOVIES) and control.setting( 'show_cartoons') == 'false' and url != ''.join( [GM_BASE, 'movies.php?g=8&y=&l=&p=']): if CACHE_DEBUG: bl_urls = blacklister() else: bl_urls = cache.get(blacklister, 96) self.list = [i for i in self.list if i['url'] not in bl_urls] for item in self.list: if url.startswith((MOVIES, THEATER, SHORTFILMS, PERSON, SEARCH)) and item['url'].startswith( (MOVIES, THEATER, SHORTFILMS, PERSON)): item.update({'action': 'play', 'isFolder': 'False'}) elif url.startswith(SPORTS): item.update({'action': 'events'}) else: item.update({'action': 'episodes'}) 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) } } refresh_cm = {'title': 30054, 'query': {'action': 'refresh'}} item.update({'cm': [bookmark_cm, refresh_cm]}) if get_listing: return self.list if len(self.list) > int( control.setting('pagination_integer')) and control.setting( 'paginate_items') == 'true': if control.setting('sort_method') == '0': self.list.sort( key=lambda k: cleantitle.strip_accents(k['title'].lower()), reverse=control.setting('reverse_order') == 'true') elif control.setting('sort_method') == '1': self.list.sort( key=lambda k: k['year'], reverse=control.setting('reverse_order') == 'true') try: pages = list_divider( self.list, int(control.setting('pagination_integer'))) self.list = pages[int(control.setting('page'))] reset = False except Exception: pages = list_divider( self.list, int(control.setting('pagination_integer'))) self.list = pages[0] reset = True self.list.insert(0, page_menu(len(pages), reset=reset)) if control.setting('paginate_items') == 'false' or len( self.list) <= int(control.setting('pagination_integer')): control.sortmethods() control.sortmethods('title') control.sortmethods('year') if url.startswith((MOVIES, THEATER, SHORTFILMS)): directory.add(self.list, content='movies') else: directory.add(self.list, content='tvshows')
def main_menu(): if control.setting('show_root') == 'false' and not control.setting( 'local') and not control.setting('remote') and not control.setting( 'youtube_url'): return try: group_setting = control.setting('group').decode('utf-8') except Exception: group_setting = control.setting('group') root_menu = [{ 'title': control.lang(30011), 'image': control.join(control.addonPath, 'resources', 'media', 'settings.png'), 'action': 'settings' }] null = [{ 'title': control.lang(30013), 'image': control.join(control.addonPath, 'resources', 'media', 'null.png'), 'action': None }] if control.setting('show_root') == 'false': root_menu = [] null = [] if control.setting('show_switcher') == 'false': switcher_menu = [] else: switcher_menu = [{ 'title': control.lang(30015).format( control.lang(30016) if control.setting('group') == 'ALL' else group_setting), 'image': control.join(control.addonPath, 'resources', 'media', 'switcher.png'), 'action': 'switcher' }] if not control.setting('local') and not control.setting( 'remote') and not control.setting('youtube_url'): items = root_menu + null else: try: output = cache.get( constructor, int(control.setting('caching')) if int(control.setting('caching')) > 0 else 0) if not output: items = root_menu + null elif len(output) == 2: filtered = [ i for i in output[0] if any( i['group'] == selected for selected in [group_setting]) ] if not control.setting('group') == 'ALL' else output[0] items = root_menu + switcher_menu + filtered else: items = root_menu + output except Exception: items = root_menu + null for i in items: i.update({ 'cm': [{ 'title': 30012, 'query': { 'action': 'refresh' } }, { 'title': 30038, 'query': { 'action': 'settings' } }] }) control.sortmethods('production_code') control.sortmethods('title') try: if len(output) == 2: control.sortmethods('genre') except Exception: pass add(items)
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)