def append_genre(self, parent, genre): if genre in useless_genres: return None if synonym_genres.has_key(genre): same_genres = synonym_genres[genre] else: same_genres = [genre] title = genre.encode('utf-8') family_item = LazyContainer(parent, title, genre, self.refresh, self.retrieveItemsForGenre, genres=same_genres, per_page=1) # we will use a specific child items sorter # in order to get the sub-genre containers first def childs_sort(x, y): if x.__class__ == y.__class__: return cmp(x.name, y.name) # same class, we compare the names else: # the IRadioItem is deemed the lowest item class, # other classes are compared by name (as usual) if isinstance(x, IRadioItem): return 1 elif isinstance(y, IRadioItem): return -1 else: return cmp(x.name, y.name) family_item.sorting_method = childs_sort parent.add_child(family_item, external_id=genre) return family_item
def append_genre(self, parent, genre): if genre in useless_genres: return None if synonym_genres.has_key(genre): same_genres = synonym_genres[genre] else: same_genres = [genre] title = genre.encode('utf-8') family_item = LazyContainer(parent, title, genre, self.refresh, self.retrieveItemsForGenre, genres=same_genres, per_page=1) # we will use a specific child items sorter # in order to get the sub-genre containers first def childs_sort(x,y): if x.__class__ == y.__class__: return cmp(x.name,y.name) # same class, we compare the names else: # the IRadioItem is deemed the lowest item class, # other classes are compared by name (as usual) if isinstance(x, IRadioItem): return 1 elif isinstance(y, IRadioItem): return -1 else: return cmp(x.name,y.name) family_item.sorting_method = childs_sort parent.add_child(family_item, external_id=genre) return family_item
def __init__(self, server, **kwargs): AbstractBackendStore.__init__(self, server, **kwargs) self.name = kwargs.get('name', 'Picasa Web Albums') self.refresh = int(kwargs.get('refresh', 60)) * 60 self.login = kwargs.get('userid', kwargs.get('login', '')) self.password = kwargs.get('password', '') rootContainer = Container(None, self.name) self.set_root_item(rootContainer) self.AlbumsContainer = LazyContainer(rootContainer, 'My Albums', None, self.refresh, self.retrieveAlbums) rootContainer.add_child(self.AlbumsContainer) self.FeaturedContainer = LazyContainer( rootContainer, 'Featured photos', None, self.refresh, self.retrieveFeaturedPhotos, ) rootContainer.add_child(self.FeaturedContainer) self.init_completed()
def read_categories(data, parent_item, jukebox_url): for category in data.findall('category'): type = category.get('name') category_title = type if type != 'Other': category_title = f'By {category_title}' categoryItem = Container(parent_item, category_title) parent_item.add_child(categoryItem) for index in category.findall('./index'): name = index.get('name') first_filename = index.text root_name = first_filename[:-2] self.debug(f'adding index {type}:{name}') parent = categoryItem if type == 'Other': parent = parent_item indexItem = LazyContainer( parent, name, None, self.refresh, self.retrieveIndexMovies, per_page=1, name=name, root_name=root_name, ) parent.add_child(indexItem) self.init_completed()
def __init__(self, server, **kwargs): AbstractBackendStore.__init__(self, server, **kwargs) self.name = kwargs.get('name', 'radiotimeStore') self.refresh = int(kwargs.get('refresh', 60)) * 60 self.browse_url = self.config.get('browse_url', OPML_BROWSE_URL) self.partner_id = self.config.get('partner_id', 'TMe3Cn6v') self.username = self.config.get('username', None) self.locale = self.config.get('locale', 'en') self.serial = server.uuid if server else 'n/a' # construct URL for root menu if self.username is not None: identification_param = f'username={self.username}' else: identification_param = f'serial={self.serial}' formats_value = DEFAULT_FORMAT root_url = \ f'{self.browse_url}?partnerId={self.partner_id}&' \ f'{identification_param}&formats={formats_value}&' \ f'locale={self.locale}' # set root item root_item = LazyContainer(None, 'root', 'root', self.refresh, self.retrieveItemsForOPML, url=root_url) self.set_root_item(root_item) self.init_completed()
def read_categories(data, parent_item, jukebox_url): #nbMoviesPerFile = 1 #int(data.find('preferences/mjb.nbThumbnailsPerPage').text) #self.debug("YMAJ: Nb Movies per file = %s" % nbMoviesPerFile) for category in data.findall('category'): type = category.get('name') category_title = type if (type != 'Other'): category_title = "By %s" % category_title categoryItem = Container(parent_item, category_title) parent_item.add_child(categoryItem) for index in category.findall('./index'): name = index.get('name') first_filename = index.text root_name = first_filename[:-2] self.debug("adding index %s:%s" % (type, name)) parent = categoryItem if (type == 'Other'): parent = parent_item indexItem = LazyContainer(parent, name, None, self.refresh, self.retrieveIndexMovies, per_page=1, name=name, root_name=root_name) parent.add_child(indexItem) self.init_completed()
def __init__(self, server, **kwargs): AbstractBackendStore.__init__(self, server, **kwargs) self.name = kwargs.get('name', 'radiotimeStore') self.refresh = int(kwargs.get('refresh', 60)) * 60 self.browse_url = self.config.get('browse_url', OPML_BROWSE_URL) self.partner_id = self.config.get('partner_id', 'TMe3Cn6v') self.username = self.config.get('username', None) self.locale = self.config.get('locale', 'en') self.serial = server.uuid # construct URL for root menu if self.username is not None: identification_param = "username=%s" % self.username else: identification_param = "serial=%s" % self.serial formats_value = DEFAULT_FORMAT root_url = "%s?partnerId=%s&%s&formats=%s&locale=%s" % ( self.browse_url, self.partner_id, identification_param, formats_value, self.locale) # set root item root_item = LazyContainer(None, "root", "root", self.refresh, self.retrieveItemsForOPML, url=root_url) self.set_root_item(root_item) self.init_completed()
def readIndex(data): for index in data.findall('category/index'): current = index.get('current') if (current == "true"): currentIndex = index.get('currentIndex') lastIndex = index.get('lastIndex') if (currentIndex != lastIndex): parent.childrenRetrievingNeeded = True self.debug("%s: %s/%s", root_name, currentIndex, lastIndex) break movies = data.findall('movies/movie') if self.nbMoviesPerFile is None: self.nbMoviesPerFile = len(movies) for movie in movies: isSet = (movie.attrib['isSet'] == 'true') if isSet is True: # the movie corresponds to a set name = movie.find('./title').text index_name = movie.find('./baseFilename').text set_root_name = index_name[:-2] self.debug("adding set %s", name) indexItem = LazyContainer(parent, name, None, self.refresh, self.retrieveIndexMovies, per_page=1, name=name, root_name=set_root_name) parent.add_child(indexItem, set_root_name) else: # this is a real movie movie_id = "UNK" movie_id_xml = movie.find('./id') if movie_id_xml is not None: movie_id = movie_id_xml.text files = movie.findall('./files/file') if (len(files) == 1): url = files[0].find('./fileURL').text external_id = "%s/%s" % (movie_id, url) movieItem = MovieItem(movie, self) parent.add_child(movieItem, external_id) else: name = movie.find('./title').text if name is None or name == '': name = movie.find('./baseFilename').text season = movie.find('season').text if season is not None and season != '-1': name = "%s - season %s" % (name, season) container_item = Container(parent, name) parent.add_child(container_item, name) container_item.store = self for file in files: episodeIndex = file.attrib['firstPart'] episodeTitle = file.attrib['title'] if (episodeTitle == 'UNKNOWN'): title = "%s - %s" % (name, episodeIndex) else: title = "%s - %s " % (episodeIndex, episodeTitle) episodeUrl = file.find('./fileURL').text fileItem = MovieItem(movie, self, title=title, url=episodeUrl) file_external_id = "%s/%s" % (movie_id, episodeUrl) container_item.add_child(fileItem, file_external_id)
def appendChannel(self, name, channel_id, parent): item = LazyContainer(parent, name, channel_id, self.refresh, self.retrieveChannelItems, channel_id=channel_id) parent.add_child(item, external_id=channel_id)
def gotAlbums(albums): if albums is None: print("Unable to retrieve albums") return for album in albums.entry: title = album.title.text album_id = album.gphoto_id.text item = LazyContainer(parent, title, album_id, self.refresh, self.retrieveAlbumPhotos, album_id=album_id) parent.add_child(item, external_id=album_id)
def appendCategory(self, name, category_id, parent): item = LazyContainer(parent, name, category_id, self.refresh, self.retrieveChannels, filter="category", filter_value=category_id, per_page=100) parent.add_child(item, external_id=category_id)
def appendLanguage(self, name, language_id, parent, sort='name', count=0): item = LazyContainer(parent, name, language_id, self.refresh, self.retrieveChannels, filter="language", filter_value=language_id, per_page=100, sort=sort, count=count) parent.add_child(item, external_id=language_id)
def append_genre(self, parent, genre): if genre in useless_genres: return None if genre in synonym_genres: same_genres = synonym_genres[genre] else: same_genres = [genre] title = genre family_item = LazyContainer(parent, title, genre, self.refresh, self.retrieveItemsForGenre, genres=same_genres, per_page=1) # TODO: Use a specific get_child items sorter # in order to get the sub-genre containers first family_item.sorting_method = 'name' parent.add_child(family_item, external_id=genre) return family_item
def append_outline(parent, outline): type = outline.get('type') outline_url = outline.get('URL', None) if type is None: # This outline is just a classification item containing # other outline elements the corresponding item # will a static Container text = outline.get('text') key = outline.get('key') external_id = None if external_id is None and key is not None: external_id = f'{parent.external_id}_{key}' if external_id is None: external_id = outline_url item = Container(parent, text) item.external_id = external_id item.store = parent.store parent.add_child(item, external_id=external_id) sub_outlines = outline.findall('outline') for sub_outline in sub_outlines: append_outline(item, sub_outline) elif type == 'link': # the corresponding item will a self-populating Container text = outline.get('text') key = outline.get('key') guide_id = outline.get('guide_id') external_id = guide_id if external_id is None and key is not None: external_id = f'{parent.external_id}_{key}' if external_id is None: external_id = outline_url item = LazyContainer( parent, text, external_id, self.refresh, self.retrieveItemsForOPML, url=outline_url, ) parent.add_child(item, external_id=external_id) elif type == 'audio': item = RadiotimeAudioItem(outline) parent.add_child(item, external_id=item.preset_id)
def readIndex(data): for index in data.findall('category/index'): current = index.get('current') if current == 'true': currentIndex = index.get('currentIndex') lastIndex = index.get('lastIndex') if currentIndex != lastIndex: parent.childrenRetrievingNeeded = True self.debug(f'{root_name}: {currentIndex}/{lastIndex}') break movies = data.findall('movies/movie') if self.nbMoviesPerFile is None: self.nbMoviesPerFile = len(movies) for movie in movies: isSet = movie.attrib['isSet'] == 'true' if isSet is True: # the movie corresponds to a set name = movie.find('./title').text index_name = movie.find('./baseFilename').text set_root_name = index_name[:-2] self.debug(f'adding set {name}') indexItem = LazyContainer( parent, name, None, self.refresh, self.retrieveIndexMovies, per_page=1, name=name, root_name=set_root_name, ) parent.add_child(indexItem, set_root_name) else: # this is a real movie movie_id = 'UNK' movie_id_xml = movie.find('./id') if movie_id_xml is not None: movie_id = movie_id_xml.text files = movie.findall('./files/file') if len(files) == 1: url = files[0].find('./fileURL').text external_id = f'{movie_id}/{url}' movieItem = MovieItem(movie, self) parent.add_child(movieItem, external_id) else: name = movie.find('./title').text if name is None or name == '': name = movie.find('./baseFilename').text season = movie.find('season').text if season is not None and season != '-1': name = f'{name} - season {season}' container_item = Container(parent, name) parent.add_child(container_item, name) container_item.store = self for file in files: episodeIndex = file.attrib['firstPart'] episodeTitle = file.attrib['title'] if episodeTitle == 'UNKNOWN': title = f'{name} - {episodeIndex}' else: title = f'{episodeIndex} - {episodeTitle} ' episodeUrl = file.find('./fileURL').text fileItem = MovieItem(movie, self, title=title, url=episodeUrl) file_external_id = f'{movie_id}/{episodeUrl}' container_item.add_child(fileItem, file_external_id)