Esempio n. 1
0
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()
Esempio n. 2
0
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")
Esempio n. 3
0
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)
Esempio n. 4
0
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)
Esempio n. 5
0
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'
                  )))
Esempio n. 6
0
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')))
Esempio n. 7
0
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')))
Esempio n. 8
0
def PlaylistReload():
	build_channel_map()
	try:
		LoadPlaylist(Dict['groups'], Dict['streams'])
	except:
		Log.Info('No other playlists provided.')
Esempio n. 9
0
def PlaylistReload():
    build_channel_map()
    if Prefs['playlist'] != '':
        LoadPlaylist(Dict['groups'], Dict['streams'])