Beispiel #1
0
        public static BitmapImage GetImage(PlayableBase track, DirectoryInfo di)
        {
            if (string.IsNullOrEmpty(track.Album))
            {
                return(null);
            }
            if (di.Exists)
            {
                // ReSharper disable once LoopCanBeConvertedToQuery
                foreach (var item in di.GetFiles("*.png"))
                {
                    if (GeneralHelper.EscapeFilename(track.Album).ToLower() == Path.GetFileNameWithoutExtension(item.FullName).ToLower())
                    {
                        return(new BitmapImage(new Uri(item.FullName)));
                    }
                }
            }

            return(null);
        }
Beispiel #2
0
        public async static Task <BitmapImage> GetImage(ImageQuality imagequality, bool saveimage, DirectoryInfo directory, PlayableBase track, bool trimtrackname, bool UseArtist = true)
        {
            string apikey = SensitiveInformation.LastfmAPIKey;

            string _title  = track.Title;
            string _artist = UseArtist ? track.Artist : string.Empty;

            if (trimtrackname)
            {
                _title = TrimTrackTitle(track.Title);
            }

            string url = Uri.EscapeUriString(string.Format("http://ws.audioscrobbler.com/2.0/?method=track.search&track={0}{1}&api_key={2}", GeneralHelper.EscapeTitleName(_title), !string.IsNullOrEmpty(_artist) ? "&artist=" + GeneralHelper.EscapeArtistName(_artist) : string.Empty, apikey));

            using (WebClient web = new WebClient()
            {
                Proxy = null
            })
            {
                string result = await web.DownloadStringTaskAsync(new Uri(url));

                using (StringReader sr = new StringReader(result))
                {
                    XmlSerializer xmls = new XmlSerializer(typeof(lfm));
                    var           item = (lfm)xmls.Deserialize(sr);
                    if (item.results.trackmatches.Length > 0)
                    {
                        var foundtrack = item.results.trackmatches[0];
                        url    = Uri.EscapeUriString(string.Format("http://ws.audioscrobbler.com/2.0/?method=track.getInfo&api_key={2}&track={0}&artist={1}", foundtrack.name, foundtrack.artist, apikey));
                        result = await web.DownloadStringTaskAsync(url);

                        using (StringReader srtrackinformation = new StringReader(result))
                        {
                            var trackinfo = (lfm)xmls.Deserialize(srtrackinformation);
                            if (trackinfo.track.album != null && trackinfo.track.album.image != null && trackinfo.track.album.image.Length > 0)
                            {
                                string imageurl = GetImageLink(trackinfo.track.album.image, imagequality);

                                if (imageurl != null && !imageurl.EndsWith("default_album_medium.png") && !imageurl.EndsWith("[unknown].png")) //We don't want the default album art
                                {
                                    BitmapImage img = await ImageHelper.DownloadImage(web, imageurl);

                                    string album;
                                    if (string.IsNullOrEmpty(trackinfo.track.album.title))
                                    {
                                        album = string.IsNullOrEmpty(track.Album) ? _title : track.Album;
                                    }
                                    else
                                    {
                                        album = trackinfo.track.album.title;
                                    }
                                    if (saveimage)
                                    {
                                        await ImageHelper.SaveImage(img, album, directory.FullName);
                                    }

                                    return(img);
                                }
                            }

                            if (directory.Exists)
                            {
                                foreach (var file in directory.GetFiles("*.png"))
                                {
                                    if (GeneralHelper.EscapeFilename(_artist).ToLower() == Path.GetFileNameWithoutExtension(file.FullName).ToLower())
                                    {
                                        var img = new BitmapImage(new Uri(file.FullName));
                                        img.Freeze();
                                        return(img);
                                    }
                                }
                            }

                            if (trackinfo.track.artist != null && !string.IsNullOrEmpty(trackinfo.track.artist.mbid))
                            {
                                url = string.Format("http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&mbid={0}&api_key={1}", trackinfo.track.artist.mbid, apikey);
                            }
                            else if (trackinfo.track.artist != null && !string.IsNullOrEmpty(trackinfo.track.artist.name))
                            {
                                url = string.Format("http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&artist={0}&api_key={1}", trackinfo.track.artist.name, apikey);
                            }
                            else if (!string.IsNullOrEmpty(_artist))
                            {
                                url = string.Format("http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&artist={0}&autocorrect=1&api_key={1}", _artist, apikey);
                            }

                            if (string.IsNullOrEmpty(url))
                            {
                                return(null);
                            }
                            result = await web.DownloadStringTaskAsync(Uri.EscapeUriString(url));

                            using (StringReader srartist = new StringReader(result))
                            {
                                lfm artistinfo = (lfm)xmls.Deserialize(srartist);
                                if (artistinfo.artist != null && artistinfo.artist.image != null && artistinfo.artist.image.Length > 0)
                                {
                                    string imageurl = GetImageLink(artistinfo.artist.image, imagequality);
                                    if (imageurl == null)
                                    {
                                        return(null);
                                    }
                                    if (!imageurl.EndsWith("default_album_medium.png") && !imageurl.EndsWith("[unknown].png")) //We don't want the default album art
                                    {
                                        BitmapImage img = await ImageHelper.DownloadImage(web, imageurl);

                                        string artistname;
                                        if (string.IsNullOrEmpty(artistinfo.artist.name))
                                        {
                                            artistname = string.IsNullOrEmpty(_artist) ? track.Title : _artist;
                                        }
                                        else
                                        {
                                            artistname = artistinfo.artist.name;
                                        }
                                        if (saveimage)
                                        {
                                            await ImageHelper.SaveImage(img, artistname, directory.FullName);
                                        }

                                        return(img);
                                    }
                                }
                            }
                        }
                    }
                }
            }

            return(null);
        }