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()
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()
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
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
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
def select_name(self): name = gui.input(_.BTN_NAME, default=self.name or '') if not name: return False self.name = name return True
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
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
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
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
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
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
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)
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
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
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
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
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)
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
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)
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()
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
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
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)
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
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