def ListGroups(page=1): if not Dict['groups']: LoadPlaylist() if not Dict['groups']: return ObjectContainer( title1=unicode(L('Error')), header=unicode(L('Error')), message=unicode( L('Provided playlist files are invalid, missing or empty, check the log file for more information' ))) groups = Dict['groups'] groups_list = groups.values() use_groups = False for group in groups_list: if group['title'] not in [ unicode(L('All')), unicode(L('No category')) ]: use_groups = True break if use_groups: if Prefs['sort_groups']: # Natural sort (http://stackoverflow.com/a/16090640) groups_list.sort(key=lambda d: [ int(t) if t.isdigit() else t.lower() for t in re.split('(\d+)', d['title'].lower()) ]) else: groups_list.sort(key=lambda d: d['order']) oc = ObjectContainer(title1=unicode(L('View playlist'))) oc.add( DirectoryObject(key=Callback(ListItems, group=unicode(L('All'))), title=unicode(L('All')))) for group in groups_list: if group['title'] not in [ unicode(L('All')), unicode(L('No category')) ]: thumb = GetImage(group['thumb'], default='icon-folder.png', title=group['title']) art = GetImage(group['art'], default='art-default.png') oc.add( DirectoryObject(key=Callback(ListItems, group=group['title']), title=group['title'], thumb=thumb, art=art)) if unicode(L('No category')) in groups.keys(): oc.add( DirectoryObject(key=Callback(ListItems, group=unicode(L('No category'))), title=unicode(L('No category')))) return oc else: return ListItems()
def ListItems(group, page = 1): if not Dict['streams']: LoadPlaylist() if not Dict['streams']: return ObjectContainer(header = "Error", message = "Provided playlist files are invalid, missing or empty, check the log file for more information") streams = Dict['streams'] items_list = streams.get(group, dict()).values() # Sort if Prefs['sort_lists']: # Natural sort (http://stackoverflow.com/a/16090640) items_list.sort(key = lambda dict: [int(t) if t.isdigit() else t.lower() for t in re.split('(\d+)', dict['title'].lower())]) else: items_list.sort(key = lambda dict: dict['order']) # Number of items per page try: items_per_page = int(Prefs['items_per_page']) except: items_per_page = 40 items_list_range = items_list[page * items_per_page - items_per_page : page * items_per_page] oc = ObjectContainer(title1 = group) for item in items_list_range: oc.add( CreateVideoClipObject( url = item['url'], title = item['title'], thumb = GetImage(item['thumb'], 'icon-tv.png'), art = GetImage(item['art'], 'art-default.jpg'), summary = GetSummary(item['id'], item['name'], item['title'], unicode(L("No description available"))), c_audio_codec = item['audio_codec'] if item['audio_codec'] else None, c_video_codec = item['video_codec'] if item['video_codec'] else None, c_container = item['container'] if item['container'] else None, c_protocol = item['protocol'] if item['protocol'] else None, optimized_for_streaming = item['optimized_for_streaming'] in ['y', 'yes', 't', 'true', 'on', '1'] if item['optimized_for_streaming'] else Prefs['optimized_for_streaming'], include_container = False ) ) if len(items_list) > page * items_per_page: oc.add( NextPageObject( key = Callback(ListItems, group = group, page = page + 1), thumb = R('icon-next.png') ) ) if len(oc) > 0: return oc else: return ObjectContainer(header = "Empty", message = "There are no more items available")
def Start(): ObjectContainer.title1 = NAME ObjectContainer.art = R('art-default.jpg') DirectoryObject.thumb = R('icon-folder.png') DirectoryObject.art = R('art-default.jpg') VideoClipObject.thumb = R('icon-tv.jpg') VideoClipObject.art = R('art-default.jpg') if Prefs['m3u_reload_time'] == 'never' or not Dict['groups'] or not Dict['streams']: LoadPlaylist() Thread.Create(PlaylistReloader) Thread.Create(GuideReloader)
def Start(): ObjectContainer.title1 = NAME ObjectContainer.art = R('art-default.jpg') DirectoryObject.thumb = R('icon-folder.png') DirectoryObject.art = R('art-default.jpg') InputDirectoryObject.thumb = R('icon-search.png') InputDirectoryObject.art = R('art-default.jpg') VideoClipObject.thumb = R('icon-tv.png') VideoClipObject.art = R('art-default.jpg') SetAvailableLanguages({'en', 'fr', 'ru', 'it'}) # in case something went wrong last run (#122) Dict['playlist_loading_in_progress'] = False Dict['guide_loading_in_progress'] = False if Prefs['m3u_reload_time'] == 'on start' or not Dict['groups'] or not Dict['streams']: LoadPlaylist() Thread.Create(PlaylistReloader) Thread.Create(GuideReloader)
def ReloadPlaylist(): if Dict['playlist_loading_in_progress']: return ObjectContainer( title1=unicode(L('Warning')), header=unicode(L('Warning')), message=unicode( L('Playlist is reloading in the background, please wait'))) LoadPlaylist() if Dict['groups']: return ObjectContainer(title1=unicode(L('Success')), header=unicode(L('Success')), message=unicode( L('Playlist reloaded successfully'))) else: return ObjectContainer( title1=unicode(L('Error')), header=unicode(L('Error')), message=unicode( L('Provided playlist files are invalid, missing or empty, check the log file for more information' )))
def ListItems(group=unicode('All'), query='', page=1): if not Dict['streams']: LoadPlaylist() if not Dict['streams']: return ObjectContainer( title1=unicode(L('Error')), header=unicode(L('Error')), message=unicode( L('Provided playlist files are invalid, missing or empty, check the log file for more information' ))) group = unicode( group ) # Plex loses unicode formating when passing string between @route procedures if string is not a part of a @route streams = Dict['streams'] items_list = streams.get(group, dict()).values() # Filter if query: raw_items_list = items_list ql = query.lower() items_list = filter(lambda d: ql in d['title'].lower(), items_list) guide = Dict['guide'] if guide: current_datetime = Datetime.Now() try: guide_hours = int(Prefs['guide_hours']) except: guide_hours = 8 crop_time = current_datetime + Datetime.Delta(hours=guide_hours) for key in guide.keys(): # crop anything outside of our window first to limit the second search shows = filter( lambda d: d['start'] <= crop_time and d['stop'] > current_datetime, guide[key].values()) # now look for matches in the result set shows = filter(lambda d: ql in d['title'].lower(), shows) for show in shows: items_list = items_list + filter( lambda d: show['channel_id'] == d['id'], raw_items_list) # Sort if Prefs['sort_lists']: # Natural sort (http://stackoverflow.com/a/16090640) items_list.sort(key=lambda d: [ int(t) if t.isdigit() else t.lower() for t in re.split('(\d+)', d['title'].lower()) ]) else: items_list.sort(key=lambda d: d['order']) # Number of items per page try: items_per_page = int(Prefs['items_per_page']) except: items_per_page = 40 items_list_range = items_list[page * items_per_page - items_per_page:page * items_per_page] oc = ObjectContainer(title1=unicode(L('Search')) if query else group) for item in items_list_range: oc.add( CreateVideoClipObject( url=item['url'], title=item['title'], thumb=GetImage(item['thumb'], default='icon-tv.png', id=item['id'], name=item['name'], title=item['title']), art=GetImage(item['art'], default='art-default.jpg'), summary=GetSummary(item['id'], item['name'], item['title'], unicode(L('No description available'))), c_audio_codec=item['audio_codec'] if item['audio_codec'] else Prefs['audio_codec'] if Prefs['audio_codec'] else None, c_video_codec=item['video_codec'] if item['video_codec'] else Prefs['video_codec'] if Prefs['video_codec'] else None, c_container=item['container'] if item['container'] else Prefs['container'] if Prefs['container'] else None, c_protocol=item['protocol'] if item['protocol'] else Prefs['protocol'] if Prefs['protocol'] else None, c_user_agent=item.get('user_agent') if item.get('user_agent') else Prefs['user_agent'] if Prefs['user_agent'] else None, optimized_for_streaming=item['optimized_for_streaming'] in [ 'y', 'yes', 't', 'true', 'on', '1' ] if item['optimized_for_streaming'] else Prefs['optimized_for_streaming'], include_container=False)) if len(items_list) > page * items_per_page: oc.add( NextPageObject(key=Callback(ListItems, group=group, query=query, page=page + 1), thumb=R('icon-next.png'))) if len(oc) > 0: return oc else: return ObjectContainer(title1=unicode(L('Search')), header=unicode(L('Search')), message=unicode(L('No items were found')))
def ListItems(group=unicode('All'), query='', page=1): if not Dict['streams']: LoadPlaylist() if not Dict['streams']: return ObjectContainer( title1=unicode(L('Error')), header=unicode(L('Error')), message=unicode( L('Provided playlist files are invalid, missing or empty, check the log file for more information' ))) group = unicode( group ) # Plex loses unicode formating when passing string between @route procedures if string is not a part of a @route streams = Dict['streams'] items_list = streams.get(group, dict()).values() # Filter if query: items_list = filter(lambda d: query.lower() in d['title'].lower(), items_list) # Sort if Prefs['sort_lists']: # Natural sort (http://stackoverflow.com/a/16090640) items_list.sort(key=lambda d: [ int(t) if t.isdigit() else t.lower() for t in re.split('(\d+)', d['title'].lower()) ]) else: items_list.sort(key=lambda d: d['order']) # Number of items per page try: items_per_page = int(Prefs['items_per_page']) except: items_per_page = 40 items_list_range = items_list[page * items_per_page - items_per_page:page * items_per_page] oc = ObjectContainer(title1=unicode(L('Search')) if query else group) for item in items_list_range: oc.add( CreateVideoClipObject( url=item['url'], title=item['title'], thumb=GetImage(item['thumb'], default='icon-tv.png', id=item['id'], name=item['name'], title=item['title']), art=GetImage(item['art'], default='art-default.jpg'), summary=GetSummary(item['id'], item['name'], item['title'], unicode(L('No description available'))), c_audio_codec=item['audio_codec'] if item['audio_codec'] else None, c_video_codec=item['video_codec'] if item['video_codec'] else None, c_container=item['container'] if item['container'] else None, c_protocol=item['protocol'] if item['protocol'] else None, optimized_for_streaming=item['optimized_for_streaming'] in [ 'y', 'yes', 't', 'true', 'on', '1' ] if item['optimized_for_streaming'] else Prefs['optimized_for_streaming'], include_container=False)) if len(items_list) > page * items_per_page: oc.add( NextPageObject(key=Callback(ListItems, group=group, query=query, page=page + 1), thumb=R('icon-next.png'))) if len(oc) > 0: return oc else: return ObjectContainer(title1=unicode(L('Search')), header=unicode(L('Search')), message=unicode(L('No items were found')))
def PlaylistReload(): build_channel_map() try: LoadPlaylist(Dict['groups'], Dict['streams']) except: Log.Info('No other playlists provided.')
def PlaylistReload(): build_channel_map() if Prefs['playlist'] != '': LoadPlaylist(Dict['groups'], Dict['streams'])