Esempio n. 1
0
	def __init__(self, db, name, parent):
		Container.__init__(self, parent, convertString(name))
		self._db = db
		self.location = None
		self.item = None
		self.children = None
		self._child_count = -1
		self._default_mime = "audio/*"
		self._default_additionalInfo = "*"
Esempio n. 2
0
  def upnp_init(self):
    if self.server:
      self.server.connection_manager_server.set_variable(0, 'SourceProtocolInfo',
                                                         ['http-get:*:%s:*' % MPEG_MIME],
                                                         default=True)
    # root item
    root_item = Container(None, self.name)
    self.set_root_item(root_item)

    # 'Following' directory
    settings = self.config.get('Following', {})
    if self.access_token and settings.get('active') != 'no':
      games_dir = StreamsContainer(root_item,
                                   title=settings.get('name') or 'Following',
                                   streams_url='%s/streams/followed',
                                   limit=settings.get('limit', 25),
                                   oauth_token=self.access_token)
      root_item.add_child(games_dir)

    # 'Games' directory
    settings = self.config.get('TopGames', {})
    if settings.get('active') != 'no':
      games_dir = GamesContainer(root_item,
                                 title=settings.get('name', 'Top Games'),
                                 limit=settings.get('limit', 10),
                                 children_limit=settings.get('children_limit', 25))
      root_item.add_child(games_dir)

    # 'Top Streams' directory
    settings = self.config.get('TopStreams', {})
    if settings.get('active') != 'no':
      games_dir = StreamsContainer(root_item,
                                   title=settings.get('name', 'Top Streams'),
                                   limit=settings.get('limit', 25))
      root_item.add_child(games_dir)
Esempio n. 3
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()
 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()
Esempio n. 5
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()
Esempio n. 6
0
    def __init__(self, server, **kwargs):
        AbstractBackendStore.__init__(self, server, **kwargs)

        self.name = kwargs.get('name', 'iRadioStore')
        self.refresh = int(kwargs.get('refresh', 60)) * 60

        self.shoutcast_ws_url = self.config.get(
            'genrelist',
            SC_URL_GENRE_LIST.format(api_url=SC_API_URL, key=SC_KEY),
        )

        # set root item
        root_item = Container(None, self.name)
        self.set_root_item(root_item)

        # set root-level genre family containers and populate the genre_
        # parent_items dict from the family hierarchy information
        for family, genres in list(genre_families.items()):
            family_item = self.append_genre(root_item, family)
            if family_item is not None:
                self.genre_parent_items[family] = root_item
                for genre in genres:
                    self.genre_parent_items[genre] = family_item

        # retrieve asynchronously the list of genres from
        # the souhtcast server genres not already attached to
        # a family will be attached to the 'Misc' family
        self.retrieveGenreList_attemptCount = 0
        deferredRoot = self.retrieveGenreList()
Esempio n. 7
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)
Esempio n. 8
0
    def upnp_init(self):
        self.current_connection_id = None
        if self.server:
            self.server.connection_manager_server.set_variable(
                0,
                'SourceProtocolInfo', [
                    'rtsp-rtp-udp:*:video/mpeg:*', 'http-get:*:video/mpeg:*',
                    'rtsp-rtp-udp:*:audio/mpeg:*', 'http-get:*:audio/mpeg:*'
                ],
                default=True)

        rootItem = Container(None, self.name)
        self.set_root_item(rootItem)
        return self.retrievePlaylistItems(self.playlist_url, rootItem)
Esempio n. 9
0
    def __init__(self, server, **kwargs):
        AbstractBackendStore.__init__(self, server, **kwargs)

        self.name = kwargs.get('name', 'YAMJ')
        self.yamj_url = kwargs.get('yamj_url', 'http://localhost/yamj')
        self.jukebox_url = self.yamj_url + '/Jukebox/'
        self.refresh = int(kwargs.get('refresh', 60)) * 60

        self.nbMoviesPerFile = None

        rootItem = Container(None, self.name)
        self.set_root_item(rootItem)

        d = self.retrieveCategories(rootItem)
Esempio n. 10
0
    def extractAudioCdInfo(self):
        """ extract the CD info (album art + artist + tracks), and construct the UPnP items"""
        self.cdrom = DiscID.open(self.device_name)
        disc_id = DiscID.disc_id(self.cdrom)

        (query_status, query_info) = CDDB.query(disc_id)
        if query_status in (210, 211):
            query_info = query_info[0]
        (read_status, read_info) = CDDB.read(query_info['category'],
                                             query_info['disc_id'])

        #        print query_info['title']
        #        print disc_id[1]
        #        for i in range(disc_id[1]):
        #            print "Track %.02d: %s" % (i, read_info['TTITLE' + `i`])

        track_count = disc_id[1]
        disc_id = query_info['disc_id']
        self.disc_title = query_info['title'].encode('utf-8')
        tracks = {}
        for i in range(track_count):
            tracks[i +
                   1] = read_info['TTITLE' +
                                  ` i `].decode('ISO-8859-1').encode('utf-8')

        self.name = self.disc_title

        root_item = Container(None, self.disc_title)

        # we will sort the item by "track_number"
        def childs_sort(x, y):
            return cmp(x.track_number, y.track_number)

        root_item.sorting_method = childs_sort

        self.set_root_item(root_item)

        for number, title in tracks.items():
            item = TrackItem(self.device_name, number, "Unknown", title)
            external_id = "%s_%d" % (disc_id, number)
            root_item.add_child(item, external_id=external_id)

        self.info('Sharing audio CD %s' % self.disc_title)

        reactor.callLater(2, self.checkIfAudioCdStillPresent)
        self.init_completed()
Esempio n. 11
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)
Esempio n. 12
0
    def extractAudioCdInfo(self):
        '''
        extract the CD info (album art + artist + tracks),
        and construct the UPnP items
        '''
        self.cdrom = DiscID.open(self.device_name)
        disc_id = DiscID.disc_id(self.cdrom)

        (query_status, query_info) = CDDB.query(disc_id)
        if query_status in (210, 211):
            query_info = query_info[0]
        (read_status, read_info) = CDDB.read(query_info['category'],
                                             query_info['disc_id'])
        # print(query_info['title'])
        # print(disc_id[1])
        # for i in range(disc_id[1]):
        #    print(f'Track {i:.02d}: {read_info["TTITLE" + repr(i)]}')

        track_count = disc_id[1]
        disc_id = query_info['disc_id']
        self.disc_title = query_info['title'].encode('utf-8')
        tracks = {}
        for i in range(track_count):
            tracks[i + 1] = (read_info[f'TTITLE{repr(i)}'].decode(
                'ISO-8859-1').encode('utf-8'))

        self.name = self.disc_title

        root_item = Container(None, self.disc_title)
        root_item.sorting_method = 'track_number'
        self.set_root_item(root_item)

        for number, title in list(tracks.items()):
            item = TrackItem(self.device_name, number, 'Unknown', title)
            external_id = f'{disc_id}_{number:d}'
            root_item.add_child(item, external_id=external_id)

        self.info('Sharing audio CD %s', self.disc_title)

        reactor.callLater(2, self.checkIfAudioCdStillPresent)
        self.init_completed()
Esempio n. 13
0
    def init_container_structure(self):
        self.name = "Mbira"
        root_item = Container(None, self.name)
        self.set_root_item(root_item)

        self.albumsContainer = Container(root_item, "Albums")
        root_item.add_child(self.albumsContainer, external_id="Albums")

        self.allTracksContainer = Container(root_item, "All tracks")
        root_item.add_child(self.allTracksContainer, external_id="AllTracks")

        self.artistsContainer = Container(root_item, "Artists")
        root_item.add_child(self.artistsContainer, external_id="Artists")

        genresContainer = Container(root_item, "Genres")
        root_item.add_child(genresContainer, external_id="Genres")

        playlistsContainer = Container(root_item, "Playlists")
        root_item.add_child(playlistsContainer, external_id="Playlists")
Esempio n. 14
0
	def __init__(self, parent, title):
		Container.__init__(self, parent, title)
		self.service_number = 0
		self.item = None
		self.location = ""
		self.children = None
Esempio n. 15
0
    def __init__(self, server, **kwargs):
        AbstractBackendStore.__init__(self, server, **kwargs)

        self.name = kwargs.get('name', 'MiroGuide')

        self.language = kwargs.get('language', 'English')

        self.refresh = int(kwargs.get('refresh', 60)) * 60

        self.proxy_mode = kwargs.get('proxy_mode', 'redirect')
        self.cache_directory = kwargs.get('cache_directory', '/tmp/coherence-cache')
        try:
            if self.proxy_mode != 'redirect':
                os.mkdir(self.cache_directory)
        except:
            pass
        self.cache_maxsize = kwargs.get('cache_maxsize', 100000000)
        self.buffer_size = kwargs.get('buffer_size', 750000)

        rootItem = Container(None, self.name)
        self.set_root_item(rootItem)

        categoriesItem = Container(rootItem, "All by Categories")
        rootItem.add_child(categoriesItem)
        languagesItem = Container(rootItem, "All by Languages")
        rootItem.add_child(languagesItem)

        self.appendLanguage("Recent Videos", self.language, rootItem, sort='-age', count=15)
        self.appendLanguage("Top Rated", self.language, rootItem, sort='rating', count=15)
        self.appendLanguage("Most Popular", self.language, rootItem, sort='-popular', count=15)

        def gotError(error):
            print("ERROR: %s" % error)

        def gotCategories(result):
            if result is None:
                print("Unable to retrieve list of categories")
                return
            data, header = result
            categories = eval(data)  # FIXME add some checks to avoid code injection
            for category in categories:
                name = category['name'].encode('ascii', 'strict')
                category_url = category['url'].encode('ascii', 'strict')
                self.appendCategory(name, name, categoriesItem)

        categories_url = "https://www.miroguide.com/api/list_categories"
        d1 = utils.getPage(categories_url)
        d1.addCallbacks(gotCategories, gotError)

        def gotLanguages(result):
            if result is None:
                print("Unable to retrieve list of languages")
                return
            data, header = result
            languages = eval(data)  # FIXME add some checks to avoid code injection
            for language in languages:
                name = language['name'].encode('ascii', 'strict')
                language_url = language['url'].encode('ascii', 'strict')
                self.appendLanguage(name, name, languagesItem)

        languages_url = "https://www.miroguide.com/api/list_languages"
        d2 = utils.getPage(languages_url)
        d2.addCallbacks(gotLanguages, gotError)

        self.init_completed()
Esempio n. 16
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)
Esempio n. 17
0
 def __init__(self, parent, artist):
     Container.__init__(self, parent, artist[u"artist"][0])
     self.artist = artist
Esempio n. 18
0
 def __init__(self, parent, album):
     Container.__init__(self, parent, album[u"album"][0])
     self.album = album
Esempio n. 19
0
 def __init__(self, parent, album):
     Container.__init__(self, parent, album[u'album'][0])
     self.album = album
Esempio n. 20
0
 def __init__(self, parent, artist):
     Container.__init__(self, parent, artist[u'artist'][0])
     self.artist = artist