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
Exemple #3
0
    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()
Exemple #4
0
 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()
Exemple #5
0
    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()
Exemple #8
0
        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)
Exemple #9
0
 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)
Exemple #10
0
 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)
Exemple #11
0
 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)
Exemple #12
0
 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)
Exemple #13
0
    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
Exemple #14
0
        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)
Exemple #15
0
        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)