示例#1
0
def login(**kwargs):
    singtel_tv_no = gui.input(_.SINGTEL_TV_NO).strip()
    if not singtel_tv_no:
        return

    identification_no = gui.input(_.IDENTIFICATION_NO).strip()
    if not identification_no:
        return

    api.login(singtel_tv_no, identification_no)
    gui.refresh()
示例#2
0
def login(**kwargs):
    username = gui.input(_.ASK_USERNAME, default=userdata.get('username', '')).strip()
    if not username:
        return

    userdata.set('username', username)

    password = gui.input(_.ASK_PASSWORD, hide_input=True).strip()
    if not password:
        return

    api.login(username=username, password=password)
    gui.refresh()
示例#3
0
def _email_password():
    username = gui.input(_.ASK_USERNAME, default=userdata.get('username',
                                                              '')).strip()
    if not username:
        return

    userdata.set('username', username)

    password = gui.input(_.ASK_PASSWORD, hide_input=True).strip()
    if not password:
        return

    api.login(username=username, password=password)

    return True
示例#4
0
def search(query=None, page=1, **kwargs):
    page = int(page)

    if not query:
        query = gui.input(_.SEARCH, default=userdata.get('search', '')).strip()
        if not query:
            return

        userdata.set('search', query)

    data = api.search(query=query, page=page)
    rows = data.get('item', [])
    page_number = data['paginationMetadata']['pageNumber']
    page_size = data['paginationMetadata']['pageSize']
    total_items = data['paginationMetadata'].get('totalCount', 0)
    total_pages = int(math.ceil(float(total_items) / page_size))

    folder = plugin.Folder(
        _(_.SEARCH_FOR, query=query, page=page_number,
          total_pages=total_pages))

    items = _process_items(rows)
    folder.add_items(items)

    if total_pages > page_number:
        folder.add_item(
            label=_(_.NEXT_PAGE,
                    next=page_number + 1,
                    total_pages=total_pages,
                    _bold=True),
            path=plugin.url_for(search, query=query, page=page_number + 1),
        )

    return folder
示例#5
0
def search(query=None, page=1, **kwargs):
    page  = int(page)

    if not query:
        query = gui.input(_.SEARCH, default=userdata.get('search', '')).strip()
        if not query:
            return

        userdata.set('search', query)

    folder = plugin.Folder(_(_.SEARCH_FOR, query=query))

    data = api.search(query, page=page)

    hits = [x['hit'] for x in data['hits']] if data['resultsType'] == 'real' else []
    items = _process_rows(hits)
    folder.add_items(items)

    if (data['meta']['page_size'] + data['meta']['offset']) < data['meta']['hits']:
        folder.add_item(
            label = _(_.NEXT_PAGE, page=page+1),
            path  = plugin.url_for(search, query=query, page=page+1),
            specialsort = 'bottom',
        )

    return folder
示例#6
0
    def select_name(self):
        name = gui.input(_.BTN_NAME, default=self.name or '')
        if not name:
            return False

        self.name = name
        return True
示例#7
0
def search(query=None, page=1, **kwargs):
    page = int(page)

    if not query:
        query = gui.input(_.SEARCH, default=userdata.get('search', '')).strip()
        if not query:
            return

        userdata.set('search', query)

    data = api.search(query=query, page=page)
    pages = data['pages']

    folder = plugin.Folder(
        _(_.SEARCH_FOR, query=query, page=page, total_pages=pages))

    items = _parse_contents(data.get('results', []))
    folder.add_items(items)

    if pages > page:
        folder.add_item(
            label=_(_.NEXT_PAGE, next=page + 1, total_pages=pages, _bold=True),
            path=plugin.url_for(search, query=query, page=page + 1),
        )

    return folder
示例#8
0
def search(query=None, page=1, **kwargs):
    page = int(page)

    if not query:
        query = gui.input(_.SEARCH, default=userdata.get('search', '')).strip()
        if not query:
            return

        userdata.set('search', query)

    folder = plugin.Folder(_(_.SEARCH_FOR, query=query))

    if page == 1:
        items = _parse_creators(api.creators(query=query))
        folder.add_items(items)

    data = api.videos(query=query,
                      page=page,
                      items_per_page=settings.getInt('page_size', 20))
    items = _parse_videos(data['response'])
    folder.add_items(items)

    if data['pagination']['pages'] > page:
        folder.add_item(
            label=_(_(_.NEXT_PAGE, page=page + 1), _bold=True),
            path=plugin.url_for(search, query=query, page=page + 1),
        )

    return folder
示例#9
0
    def select_hold_time(self):
        hold_time = gui.input(_.BTN_HOLD_TIME, default=str(self.hold_time))
        if not hold_time:
            return False

        self.hold_time = float(hold_time)
        return True
示例#10
0
def search(query=None, page=1, **kwargs):
    page  = int(page)
    limit = 50

    if not query:
        query = gui.input(_.SEARCH, default=userdata.get('search', '')).strip()
        if not query:
            return

        userdata.set('search', query)

    folder = plugin.Folder(_(_.SEARCH_FOR, query=query, page=page))

    data = api.search(query, page=page, limit=limit)

    items = _process_entries(data['entries'])
    folder.add_items(items)

    if len(data['entries']) == limit:
        folder.add_item(
            label = _(_.NEXT_PAGE, next=page+1, _bold=True),
            path  = plugin.url_for(search, query=query, page=page+1),
        )

    return folder
示例#11
0
    def select_when_held(self):
        when_held = gui.input(_.BTN_WHEN_HELD, default=self.when_held or '')
        if not when_held:
            return False

        self.when_held = when_held
        return True
示例#12
0
def search_channel(query=None, radio=0, page=1, **kwargs):
    radio  = int(radio)
    page   = int(page)

    if not query:
        query = gui.input(_.SEARCH, default=userdata.get('search', '')).strip()
        if not query:
            return

        userdata.set('search', query)

    folder = plugin.Folder(_(_.SEARCH_FOR, query=query))

    page_size = settings.getInt('page_size', 0)
    db_query  = Channel.channel_list(radio=radio, page=page, search=query, page_size=page_size)

    items = _process_channels(db_query)
    folder.add_items(items)

    if len(items) == page_size:
        folder.add_item(
            label = _(_.NEXT_PAGE, page=page+1, _bold=True),
            path  = plugin.url_for(search_channel, query=query, radio=radio, page=page+1),
        )

    return folder
示例#13
0
def _add_profile(taken_names, taken_avatars):
    ## PROFILE AVATAR ##
    options = [
        plugin.Item(label=_(_.RANDOM_AVATAR, _bold=True)),
    ]
    values = [
        ['_random', None],
    ]
    avatars = []
    unused = []

    for icon_set in api.profile_icons():
        for row in icon_set['icons']:
            icon_info = [icon_set['iconSet'], row['iconIndex']]

            values.append(icon_info)
            avatars.append(icon_info)

            if row['iconImage'] in taken_avatars:
                label = _(_.AVATAR_USED, label=icon_set['label'])
            else:
                label = icon_set['label']
                unused.append(icon_info)

            options.append(
                plugin.Item(label=label, art={'thumb': row['iconImage']}))

    index = gui.select(_.SELECT_AVATAR, options=options, useDetails=True)
    if index < 0:
        return

    avatar = values[index]
    if avatar[0] == '_random':
        avatar = random.choice(unused or avatars)

    ## PROFLE KIDS ##
    kids = gui.yes_no(_.KIDS_PROFILE_INFO, heading=_.KIDS_PROFILE)

    ## PROFILE NAME ##
    name = ''
    while True:
        name = gui.input(_.PROFILE_NAME, default=name).strip()
        if not name:
            return

        elif name.lower() in taken_names:
            gui.notification(_(_.PROFILE_NAME_TAKEN, name=name))

        else:
            break

    ## ADD PROFILE ##
    profile = api.add_profile(name,
                              icon_set=avatar[0],
                              icon_index=avatar[1],
                              kids=kids)
    if 'message' in profile:
        raise PluginError(profile['message'])

    _set_profile(profile)
示例#14
0
def search(**kwargs):
    query = gui.input(_.SEARCH, default=userdata.get('search', '')).strip()
    if not query:
        return

    userdata.set('search', query)

    folder = plugin.Folder(_(_.SEARCH_FOR, query=query))

    for row in api.search(query):
        item = plugin.Item(
            label=row['title'],
            art={'thumb': row['image'].get('LARGE')},
            info={},
        )

        if row['editorialItemType'] == 'Program':
            item.path = plugin.url_for(list_seasons, id=row['id'])
        elif row['editorialItemType'] == 'Video':
            item.path = plugin.url_for(play_video, id=row['id'])
            item.playable = True
        else:
            continue

        folder.add_items(item)

    return folder
示例#15
0
def search(query=None, page=1, **kwargs):
    page = int(page)

    if not query:
        query = gui.input(_.SEARCH, default=userdata.get('search', '')).strip()
        if not query:
            return
        userdata.set('search', query)

    data = api.filter_media('keyword', query, page=page)
    total_pages = int(data['paginator']['total_pages'])

    folder = plugin.Folder(
        _(_.SEARCH_FOR, query=query, page=page, total_pages=total_pages))

    for row in data['data']:
        item = _process_media(row)
        folder.add_items([item])

    if total_pages > page:
        folder.add_item(
            label=_(_.NEXT_PAGE, next_page=page + 1),
            path=plugin.url_for(search, query=query, page=page + 1),
        )

    return folder
示例#16
0
    def select_when_pressed(self):
        when_pressed = gui.input(_.BTN_WHEN_PRESSED,
                                 default=self.when_pressed or '')
        if not when_pressed:
            return False

        self.when_pressed = when_pressed
        return True
示例#17
0
    def select_when_released(self):
        when_released = gui.input(_.BTN_WHEN_RELEASED,
                                  default=self.when_released or '')
        if not when_released:
            return False

        self.when_released = when_released
        return True
示例#18
0
def install_xbian():
    password = gui.input(_.XBIAN_PASSWORD, default='raspberry')
    sudo_cmd = 'echo "{}" | sudo -S su -c "{{}}"'.format(password)

    try:
        install_debian(sudo_cmd, 'xbian')
    except Exception as e:
        log.exception(e)
        raise Error(_.XBIAN_ERROR)
示例#19
0
    def select_bounce_time(self):
        bounce_time = gui.input(
            _.BTN_BOUNCE_TIME,
            default=str(self.bounce_time) if self.bounce_time else '')
        if not bounce_time:
            return False

        self.bounce_time = float(bounce_time)
        return True
示例#20
0
def _add_profile(taken_names, taken_avatars):
    ## PROFILE AVATAR ##
    options = [plugin.Item(label=_(_.RANDOM_AVATAR, _bold=True)),]
    values  = ['_random',]
    avatars = {}
    unused  = []

    data = api.collection_by_slug('avatars', 'avatars')
    for container in data['containers']:
        if container['set']['contentClass'] == 'hidden':
            continue

        category = _get_text(container['set']['texts'], 'title', 'set')

        for row in container['set'].get('items', []):
            if row['images'][0]['url'] in taken_avatars:
                label = _(_.AVATAR_USED, label=category)
            else:
                label = category
                unused.append(row['avatarId'])

            options.append(plugin.Item(label=label, art={'thumb': row['images'][0]['url']}))
            values.append(row['avatarId'])
            avatars[row['avatarId']] = row['images'][0]['url']

    index = gui.select(_.SELECT_AVATAR, options=options, useDetails=True)
    if index < 0:
        return

    avatar = values[index]
    if avatar == '_random':
        avatar = random.choice(unused or avatars.keys())

    ## PROFLE KIDS ##
    kids = gui.yes_no(_.KIDS_PROFILE_INFO, heading=_.KIDS_PROFILE)

    ## PROFILE NAME ##
    name = ''
    while True:
        name = gui.input(_.PROFILE_NAME, default=name).strip()
        if not name:
            return

        elif name in taken_names:
            gui.notification(_(_.PROFILE_NAME_TAKEN, name=name))

        else:
            break

    profile = api.add_profile(name, kids=kids, avatar=avatar)
    profile['_avatar'] = avatars[avatar]

    if 'errors' in profile:
        raise PluginError(profile['errors'][0].get('description'))

    _set_profile(profile)
示例#21
0
def login(register=0, **kwargs):
    register = int(register)

    username = gui.input(_.ASK_USERNAME, default=userdata.get('username',
                                                              '')).strip()
    if not username:
        return

    userdata.set('username', username)

    password = gui.input(_.ASK_PASSWORD, hide_input=True).strip()
    if not password:
        return

    if register and gui.input(_.CONFIRM_PASSWORD,
                              hide_input=True).strip() != password:
        raise PluginError(_.PASSWORD_NOT_MATCH)

    api.login(username, password, register=register)
    gui.refresh()
示例#22
0
def search(**kwargs):
    query = gui.input(_.SEARCH, default=userdata.get('search', '')).strip()
    if not query:
        return

    userdata.set('search', query)

    folder = plugin.Folder(_(_.SEARCH_FOR, query=query))
    provider = _providers()[ALL]
    items = _get_channels(provider['channels'], query=query)
    folder.add_items(items)
    return folder
    def edit_logo(self, channel):
        self.fields['logo'] = self.fields.get('logo', channel.logo)
        new_value = gui.input('Channel Logo', default=self.fields['logo'])

        if new_value == channel.logo:
            self.fields.pop('logo')
        elif new_value:
            self.fields['logo'] = new_value
        else:
            return False

        return True
    def edit_epg_id(self, channel):
        self.fields['epg_id'] = self.fields.get('epg_id', channel.epg_id)
        new_id = gui.input('EPG ID', default=self.fields['epg_id'])

        if new_id == channel.epg_id:
            self.fields.pop('epg_id')
        elif new_id:
            self.fields['epg_id'] = new_id
        else:
            return False

        return True
    def edit_name(self, channel):
        self.fields['name'] = self.fields.get('name', channel.name)
        new_value = gui.input('Channel Name', default=self.fields['name'])

        if new_value == channel.name:
            self.fields.pop('name')
        elif new_value:
            self.fields['name'] = new_value
        else:
            return False

        return True
示例#26
0
def search(**kwargs):
    query = gui.input(_.SEARCH, default=userdata.get('search', '')).strip()
    if not query:
        return

    userdata.set('search', query)

    folder = plugin.Folder(_(_.SEARCH_FOR, query=query))
    rows = api.search(query)
    folder.add_items(_parse_rows(rows))

    return folder
示例#27
0
def _add_profile(taken_names, taken_avatars):
    ## PROFILE AVATAR ##
    options = [
        plugin.Item(label=_(_.RANDOM_AVATAR, _bold=True)),
    ]
    values = [
        '_random',
    ]
    avatars = []
    unused = []

    for avatar in api.profile_config()['avatars']:
        values.append(avatar['id'])
        avatars.append(avatar['id'])

        if avatar['id'] in taken_avatars:
            label = _(_.AVATAR_USED, _bold=True)
        else:
            label = _.AVATAR_NOT_USED
            unused.append(avatar['id'])

        options.append(
            plugin.Item(label=label, art={'thumb': _get_avatar(avatar['id'])}))

    index = gui.select(_.SELECT_AVATAR, options=options, useDetails=True)
    if index < 0:
        return

    avatar_id = values[index]
    if avatar_id == '_random':
        avatar_id = random.choice(unused or avatars)

    ## PROFILE NAME ##
    name = ''
    while True:
        name = gui.input(_.PROFILE_NAME, default=name).strip()
        if not name:
            return

        elif name.lower() in taken_names:
            gui.notification(_(_.PROFILE_NAME_TAKEN, name=name))

        else:
            break

    ## ADD PROFILE ##
    profile = api.add_profile(name, avatar_id)
    if 'message' in profile:
        raise PluginError(profile['message'])

    _set_profile(profile)
示例#28
0
def search(**kwargs):
    query = gui.input(_.SEARCH, default=userdata.get('search', '')).strip()
    if not query:
        return

    userdata.set('search', query)

    folder = plugin.Folder(_(_.SEARCH_FOR, query=query))

    stations = _filtered_stations()
    items = _process_stations(stations, query=query)
    folder.add_items(items)

    return folder
示例#29
0
def _set_profile(profile):
    pin = None
    if profile['attributes']['parentalControls']['isPinProtected']:
        pin = gui.input(_.ENTER_PIN, hide_input=True).strip()

    api.set_profile(profile, pin=pin)

    if settings.getBool('kid_lockdown', False) and profile['attributes']['kidsModeEnabled']:
        userdata.set('kid_lockdown', True)

    userdata.set('avatar', profile['_avatar'])
    userdata.set('profile', profile['profileName'])
    userdata.set('profile_id', profile['profileId'])
    gui.notification(_.PROFILE_ACTIVATED, heading=profile['profileName'], icon=profile['_avatar'])
    def edit_groups(self, channel):
        self.fields['groups'] = self.fields.get('groups', channel.groups)
        new_groups = gui.input('Channel Groups',
                               default=';'.join(self.fields['groups'])
                               if self.fields['groups'] else '').split(';')

        if new_groups == channel.groups:
            self.fields.pop('groups')
        elif new_groups:
            self.fields['groups'] = new_groups
        else:
            return False

        return True