Beispiel #1
0
        public async Task SearchAsync()
        {
            try
            {
                if (_isBusy)
                {
                    return;
                }
                IsBusy = true;

                if (_type == ThumbnailType.Album)
                {
                    LoadData(
                        await AggreatedOnlineMetadata.GetAlbumsAsync(Album, Artist));
                }
                else
                {
                    LoadData(
                        await AggreatedOnlineMetadata.GetArtistsAsync(Artist));
                }
            }
            catch (Exception ex)
            {
                ResultText = string.Format(CommonSharedStrings.SearchError, ex.Message);
            }
            finally
            {
                IsBusy = false;
            }
        }
        public async Task TestGetAggreatedAlbumUrl()
        {
            var albumImage = await AggreatedOnlineMetadata.GetAlbumImageImageUrlAsync("Mylo Xyloto");

            // Groove
            Assert.AreEqual(false, string.IsNullOrEmpty(albumImage));

            // Apple Music
            albumImage = await AggreatedOnlineMetadata.GetAlbumImageImageUrlAsync("Start Dash");

            Assert.AreEqual(false, string.IsNullOrEmpty(albumImage));

            // Nobody
            albumImage = await AggreatedOnlineMetadata.GetAlbumImageImageUrlAsync("This album is absolutely not exist");

            Assert.AreEqual(true, string.IsNullOrEmpty(albumImage));
        }
        public async Task TestGetAggreatedMetadata()
        {
            var artistImage = await AggreatedOnlineMetadata.GetArtistImageUrlAsync("μ's");

            // Last.FM
            Assert.AreEqual(false, string.IsNullOrEmpty(artistImage));

            artistImage = await AggreatedOnlineMetadata.GetArtistImageUrlAsync("American Authors");

            // Groove
            Assert.AreEqual(false, string.IsNullOrEmpty(artistImage));

            // Nobody
            artistImage = await AggreatedOnlineMetadata.GetArtistImageUrlAsync("This artist is absolutely not exist");

            Assert.AreEqual(true, string.IsNullOrEmpty(artistImage));
        }
Beispiel #4
0
        private static async Task InternalFetchArtistAsync(string artist)
        {
            try
            {
                var searchResult = (await AggreatedOnlineMetadata.GetArtistsAsync(artist)).FirstOrDefault();

                if (searchResult != null)
                {
                    using (var client = new HttpClient())
                    {
                        using (var response = await client.GetAsync(searchResult.Thumbnail))
                        {
                            response.EnsureSuccessStatusCode();
                            response.Content.Headers.TryGetValues("Content-Length", out var ctlength);
                            var lengthValue = ctlength.FirstOrDefault();

                            if (lengthValue == null ||
                                !ulong.TryParse(lengthValue, out ulong length))
                            {
                                length = 0;
                            }

                            if (length <= 10 * 1024 * 1024)
                            {
                                var content = await response.Content.ReadAsByteArrayAsync();

                                if (content.Length >= (int)length)
                                {
                                    await ThumbnailManager.AddAsync(artist, content, true);

                                    return;
                                }
                            }
                        }
                    }
                }
            }
            catch { }
            await ThumbnailManager.AddAsync(artist, new byte[0], true);
        }
 public Task ProvisionAsync() => Task.Run(() =>
 {
     AggreatedOnlineMetadata.InitializeSettings();
 });
Beispiel #6
0
        private static async Task InternalFetchAlbumAsync(string artist, string album, string filePath, bool online)
        {
            if (filePath != null)
            {
                var file = await NativeMethods.GetStorageFileFromPathAsync(filePath);

                if (file != null)
                {
                    using (var coverStream = await CoverExtractor.GetCoverStreamFromFileAsync(file))
                    {
                        if (coverStream != null)
                        {
                            using (var sr = new BinaryReader(coverStream.AsStream()))
                            {
                                var content = sr.ReadBytes((int)coverStream.Size);
                                await ThumbnailManager.AddAsync(artist, album, content, true);

                                return;
                            }
                        }
                    }

                    // The file itself does not contain a cover image.
                    // Search in parent folder instead.
                    if (file is IStorageItem2)
                    {
                        var parent = await(file as IStorageItem2).GetParentAsync();
                        if (parent != null)
                        {
                            var f =
                                await parent.TryGetItemAsync(CommonSharedStrings.FolderJpg) as IStorageFile ??
                                await parent.TryGetItemAsync(CommonSharedStrings.CoverJpg) as IStorageFile ??
                                await parent.TryGetItemAsync(CommonSharedStrings.FolderPng) as IStorageFile ??
                                await parent.TryGetItemAsync(CommonSharedStrings.CoverPng) as IStorageFile;

                            if (f != null)
                            {
                                using (var s = await f.OpenReadAsync())
                                    using (var sr = new BinaryReader(s.AsStream()))
                                    {
                                        var content = sr.ReadBytes((int)s.Size);
                                        await ThumbnailManager.AddAsync(artist, album, content, true);

                                        return;
                                    }
                            }
                        }
                    }
                }
            }

            if (online && AggreatedOnlineMetadata.Availability)
            {
                // There is no cover image in the parent directory, or the parent directory cannot be retrieved.
                // Search online
                try
                {
                    var searchResult = (await AggreatedOnlineMetadata.GetAlbumsAsync(album, artist)).FirstOrDefault();

                    if (searchResult != null)
                    {
                        using (var client = new HttpClient())
                        {
                            using (var response = await client.GetAsync(searchResult.Thumbnail))
                            {
                                response.EnsureSuccessStatusCode();
                                response.Content.Headers.TryGetValues("Content-Length", out var ctlength);
                                var lengthValue = ctlength.FirstOrDefault();

                                if (lengthValue == null ||
                                    !ulong.TryParse(lengthValue, out ulong length))
                                {
                                    length = 0;
                                }

                                if (length <= 10 * 1024 * 1024)
                                {
                                    var content = await response.Content.ReadAsByteArrayAsync();

                                    if (content.Length >= (int)length)
                                    {
                                        await ThumbnailManager.AddAsync(artist, album, content, true);

                                        return;
                                    }
                                }
                            }
                        }
                    }
                }
                catch { }
                // Only write placeholder file when we don't have online results.
                await ThumbnailManager.AddAsync(artist, album, new byte[0], true);
            }
        }