Пример #1
0
 def get_images(self, uris):
     if type(uris) in {str, unicode}:
         uris = [uris]
     # Add bluetooth image to BT URIs
     images = {}
     for uri in uris:
         if uri.startswith(BTPlayerUri.BT_SONG):
             images[uri] = [models.Image(**ICON_BT)]
         elif uri.startswith(BTPlayerUri.BT_DEVICE):
             # TODO: Different images per device type (phone, pc, etc)
             images[uri] = [models.Image(**ICON_BT)]
         elif uri == BTPlayerUri.BT_SCAN:
             images[uri] = [models.Image(**ICON_BT)]
         else:
             images[uri] = []
     return images
Пример #2
0
 def get_images(self, uris):
     result = {}
     for uri in uris:
         image_uris = set()
         try:
             track = self.lookup_pandora_track(uri)
             if track.is_ad is True:
                 image_uri = track.image_url
             else:
                 image_uri = track.album_art_url
             if image_uri:
                 image_uris.update([image_uri])
         except (TypeError, KeyError):
             pandora_uri = PandoraUri.factory(uri)
             if isinstance(pandora_uri, TrackUri):
                 # Could not find the track as expected - exception.
                 logger.exception(
                     "Failed to lookup image for Pandora URI '{}'.".format(
                         uri))
             else:
                 # Lookup
                 logger.warning(
                     "No images available for Pandora URIs of type '{}'.".
                     format(pandora_uri.uri_type))
             pass
         result[uri] = [models.Image(uri=u) for u in image_uris]
     return result
Пример #3
0
def test_images(rss):
    assert dict(rss.images()) == {
        'podcast+http://www.example.com/everything.xml': [
            models.Image(uri='http://example.com/everything/Podcast.jpg')
        ],
        'podcast+http://www.example.com/everything.xml#episode3': [
            models.Image(uri='http://example.com/everything/Episode3.jpg')
        ],
        'podcast+http://www.example.com/everything.xml#episode2': [
            models.Image(uri='http://example.com/everything/Episode2.jpg')
        ],
        ('podcast+http://www.example.com/everything.xml'
         '#http://example.com/everything/Episode1.mp3'): [
            models.Image(uri='http://example.com/everything/Podcast.jpg')
        ]
    }
Пример #4
0
 def get_image(self, item_id):
     url = f'{self.hostname}/Items/{item_id}/Images/Primary'
     # Verify if image exists instead of returning bad URLs
     image = self.http.head(item_id, url)
     if image:
         return models.Image(uri=url, )
     else:
         return []
Пример #5
0
def test_images(backend, server, items):
    with mock.patch.object(backend, "client") as m:
        m.servers.return_value = Future.fromvalue([server])
        m.server.return_value = Future.fromvalue(server)
        m.search.return_value = Future.fromvalue([items, False])
        assert backend.library.get_images(item["URI"] for item in items) == {
            items[0]["URI"]: (models.Image(uri=items[0]["AlbumArtURL"]), ),
            items[1]["URI"]: tuple(),
        }
Пример #6
0
    def test_default_get_images_impl_falls_back_to_album_image(self):
        album = models.Album(images=['imageuri'])
        track = models.Track(uri='trackuri', album=album)

        library = dummy_backend.DummyLibraryProvider(backend=None)
        library.dummy_library.append(track)

        expected = {'trackuri': [models.Image(uri='imageuri')]}
        self.assertEqual(library.get_images(['trackuri']), expected)
Пример #7
0
    def get_images(self, uris):
        result = dict()

        for uri in uris:
            _, kind, id = uri.split(":", 2)
            if kind == "track":
                track = self._track_cache.get(uri)
                if track is None:
                    continue
                artwork_uri = "https://" + track.artwork.replace(
                    "%%", "400x400")
                result[uri] = [models.Image(uri=artwork_uri)]
            if kind == "playlist":
                pass
        return result
Пример #8
0
    def get_images(self, uris):
        """
        See :meth:`mopidy.core.LibraryController.get_images`.

        *MAY be implemented by subclass.*

        Default implementation will simply call lookup and try and use the
        album art for any tracks returned. Most extensions should replace this
        with something smarter or simply return an empty dictionary.
        """
        result = {}
        for uri in uris:
            image_uris = set()
            for track in self.lookup(uri):
                if track.album and track.album.images:
                    image_uris.update(track.album.images)
            result[uri] = [models.Image(uri=u) for u in image_uris]
        return result
Пример #9
0
    def get_images(self, uris):
        result = {}
        for uri in uris:
            image_uris = set()
            try:
                image_uri = None
                pandora_uri = PandoraUri.factory(uri)

                logger.info("Retrieving images for Pandora {} {}...".format(
                    pandora_uri.uri_type, pandora_uri.uri))

                if isinstance(pandora_uri, AdItemUri) or isinstance(
                        pandora_uri, TrackUri):
                    track = self.lookup_pandora_track(uri)
                    if track.is_ad is True:
                        image_uri = track.image_url
                    else:
                        image_uri = track.album_art_url
                elif isinstance(pandora_uri, StationUri):
                    # GenreStations don't appear to have artwork available via the
                    # json API
                    if not isinstance(pandora_uri, GenreStationUri):
                        station = self.backend.api.get_station(
                            pandora_uri.station_id)
                        image_uri = station.art_url
                else:
                    # Lookup
                    logger.warning(
                        "No images available for Pandora URIs of type '{}'.".
                        format(pandora_uri.uri_type))

                if image_uri:
                    image_uris.update(
                        [image_uri.replace("http://", "https://", 1)])
            except (TypeError, KeyError):
                pandora_uri = PandoraUri.factory(uri)
                if isinstance(pandora_uri, TrackUri):
                    # Could not find the track as expected - exception.
                    logger.exception(
                        "Failed to lookup image for Pandora URI '{}'.".format(
                            uri))

            result[uri] = [models.Image(uri=u) for u in image_uris]
        return result
Пример #10
0
    def get_images(self, uris):
        """
        Lookup the images for the given URIs.

        The default implementation will simply call :meth:`lookup` and
        try and use the album art for any tracks returned. Most local
        libraries should replace this with something smarter or simply
        return an empty dictionary.

        :param list uris: list of URIs to find images for
        :rtype: {uri: tuple of :class:`mopidy.models.Image`}
        """
        result = {}
        for uri in uris:
            image_uris = set()
            tracks = self.lookup(uri)
            # local libraries may return single track
            if isinstance(tracks, models.Track):
                tracks = [tracks]
            for track in tracks:
                if track.album and track.album.images:
                    image_uris.update(track.album.images)
            result[uri] = [models.Image(uri=u) for u in image_uris]
        return result
Пример #11
0
def images(obj):
    if 'AlbumArtURL' in obj:
        return obj['URI'], [models.Image(uri=obj['AlbumArtURL'])]
    else:
        return obj['URI'], []
Пример #12
0
def _translate_image(i):
    return models.Image(uri=i['url'], height=i['height'], width=i['width'])
Пример #13
0
            "format": "VBR MP3",
            "track": "01",
        },
        {
            "name": "cover.jpg",
            "format": "JPEG"
        },
    ],
    "metadata": {
        "identifier": "album",
        "title": "Album",
        "mediatype": "audio"
    },
}

IMAGES = [models.Image(uri=URL)]


def test_root_images(library, client_mock):
    results = library.get_images(["internetarchive:"])
    client_mock.getitem.assert_not_called()
    assert results == {}


def test_album_images(library, client_mock):
    client_mock.getitem.return_value = ITEM
    client_mock.geturl.return_value = URL
    results = library.get_images(["internetarchive:album"])
    client_mock.getitem.assert_called_once_with("album")
    assert results == {"internetarchive:album": IMAGES}
Пример #14
0
def _translate_image(i):
    return models.Image(uri=i["url"], height=i["height"], width=i["width"])
Пример #15
0
def _new_image(id, id_type):
    return models.Image(
        uri=f"http://images.osl.wimpmusic.com/im/im?w=512&h=512&{id_type}={id}",
        width=512,
        height=512,
    )
Пример #16
0
def images(obj):
    if "AlbumArtURL" in obj:
        return obj["URI"], [models.Image(uri=str(obj["AlbumArtURL"]))]
    else:
        return obj["URI"], []
Пример #17
0
 def __image(cls, etree):
     elem = etree.find(cls.ITUNES_PREFIX + 'image')
     if elem is not None:
         return models.Image(uri=elem.get('href'))
     else:
         return None