Пример #1
0
        public R <Image> GetThumbnail(PlayResource playResource)
        {
            if (!WebWrapper.DownloadString(out string response,
                                           new Uri($"https://www.googleapis.com/youtube/v3/videos?part=snippet&id={playResource.BaseData.ResourceId}&key={data.ApiKey}")))
            {
                return("No connection");
            }
            var parsed = Util.Serializer.Deserialize <JSON_PlaylistItems>(response);

            var   imgurl    = new Uri(parsed.items[0].snippet.thumbnails.medium.url);
            Image img       = null;
            var   resresult = WebWrapper.GetResponse(imgurl, (webresp) =>
            {
                using (var stream = webresp.GetResponseStream())
                {
                    img = Image.FromStream(stream);
                }
            });

            if (resresult != ValidateCode.Ok)
            {
                return("Error while reading image");
            }
            return(img);
        }
Пример #2
0
        public R <Stream, LocalStr> GetThumbnail(ResolveContext _, PlayResource playResource)
        {
            byte[] rawImgData;

            if (playResource is MediaPlayResource mediaPlayResource)
            {
                rawImgData = mediaPlayResource.Image;
            }
            else
            {
                var uri    = new Uri(playResource.PlayUri);
                var result = GetStreamFromUriUnsafe(uri);
                if (!result)
                {
                    return(result.Error);
                }

                using (var stream = result.Value)
                {
                    rawImgData = AudioTagReader.GetData(stream)?.Picture;
                }
            }

            if (rawImgData is null)
            {
                return(new LocalStr(strings.error_media_image_not_found));
            }

            return(new MemoryStream(rawImgData));
        }
Пример #3
0
        public R <Image> GetThumbnail(PlayResource playResource)
        {
            var uri    = new Uri(playResource.PlayUri);
            var result = GetStreamFromUriUnsafe(uri);

            if (!result)
            {
                return(result.Error);
            }

            using (var stream = result.Value)
            {
                var data = AudioTagReader.GetImage(stream);
                if (data == null)
                {
                    return("No image found");
                }

                using (var memStream = new MemoryStream(data))
                {
                    try
                    {
                        return(new Bitmap(memStream));
                    }
                    catch (ArgumentException)
                    {
                        return("Inavlid image data");
                    }
                }
            }
        }
        public R <Stream, LocalStr> GetThumbnail(PlayResource playResource)
        {
            var uri = new Uri($"https://api.soundcloud.com/tracks/{playResource.BaseData.ResourceId}?client_id={SoundcloudClientId}");

            if (!WebWrapper.DownloadString(out string jsonResponse, uri))
            {
                return(new LocalStr(strings.error_net_no_connection));
            }

            var parsedDict = ParseJson(jsonResponse);

            if (parsedDict is null)
            {
                return(new LocalStr(strings.error_media_internal_missing + " (parsedDict)"));
            }

            var imgUrl = parsedDict.TryCast <string>("artwork_url").OkOr(null);

            if (imgUrl is null)
            {
                return(new LocalStr(strings.error_media_internal_missing + " (artwork_url)"));
            }

            // t500x500: 500px×500px
            // crop    : 400px×400px
            // t300x300: 300px×300px
            // large   : 100px×100px
            imgUrl = imgUrl.Replace("-large", "-t300x300");

            var imgurl = new Uri(imgUrl);

            return(WebWrapper.GetResponseUnsafe(imgurl));
        }
Пример #5
0
        public async Task GetThumbnail(ResolveContext _, PlayResource playResource, Func <Stream, Task> action)
        {
            byte[]? rawImgData;

            if (playResource is MediaPlayResource mediaPlayResource)
            {
                rawImgData = mediaPlayResource.Image;
            }
            else
            {
                var uri = new Uri(playResource.PlayUri);

                if (uri.IsWeb())
                {
                    rawImgData = await WebWrapper.Request(uri)
                                 .ToAction(async response => AudioTagReader.GetData(await response.Content.ReadAsStreamAsync())?.Picture);
                }
                else if (uri.IsFile())
                {
                    rawImgData = AudioTagReader.GetData(File.OpenRead(uri.LocalPath))?.Picture;
                }
                else
                {
                    throw Error.LocalStr(strings.error_media_invalid_uri);
                }
            }

            if (rawImgData is null)
            {
                throw Error.LocalStr(strings.error_media_image_not_found);
            }

            await action(new MemoryStream(rawImgData));
        }
Пример #6
0
 public R <Image> GetThumbnail(PlayResource playResource)
 {
     if (allFacories.TryGetValue(playResource.BaseData.AudioType, out var factory) &&
         factory is IThumbnailFactory thumbFactory)
     {
         return(thumbFactory.GetThumbnail(playResource));
     }
     return("No matching thumbnail factory found");
 }
Пример #7
0
        public R <Stream, LocalStr> GetThumbnail(ResolveContext ctx, PlayResource playResource)
        {
            var urlOption = GetThumbnailUrl(ctx, playResource);

            if (!urlOption.Ok)
            {
                return(urlOption.Error);
            }

            return(WebWrapper.GetResponseUnsafe(urlOption.Value));
        }
Пример #8
0
        public R <Image> GetThumbnail(PlayResource playResource)
        {
            var uri = new Uri($"https://api.soundcloud.com/tracks/{playResource.BaseData.ResourceId}?client_id={SoundcloudClientId}");

            if (!WebWrapper.DownloadString(out string jsonResponse, uri))
            {
                return("Error or no response by soundcloud");
            }

            var parsedDict = ParseJson(jsonResponse);

            if (parsedDict == null)
            {
                return("Empty or missing response parts (parsedDict)");
            }

            var imgUrl = parsedDict.TryCast <string>("artwork_url").OkOr(null);

            if (imgUrl == null)
            {
                return("Empty or missing response parts (artwork_url)");
            }

            // t500x500: 500px×500px
            // crop    : 400px×400px
            // t300x300: 300px×300px
            // large   : 100px×100px
            imgUrl = imgUrl.Replace("-large", "-t300x300");

            var   imgurl    = new Uri(imgUrl);
            Image img       = null;
            var   resresult = WebWrapper.GetResponse(imgurl, (webresp) =>
            {
                using (var stream = webresp.GetResponseStream())
                {
                    if (stream != null)
                    {
                        img = Image.FromStream(stream);
                    }
                }
            });

            if (resresult != ValidateCode.Ok)
            {
                return("Error while reading image");
            }
            return(img);
        }
Пример #9
0
        public R <Stream, LocalStr> GetThumbnail(PlayResource playResource)
        {
            if (!WebWrapper.DownloadString(out string response,
                                           new Uri($"https://www.googleapis.com/youtube/v3/videos?part=snippet&id={playResource.BaseData.ResourceId}&key={YoutubeProjectId}")))
            {
                return(new LocalStr(strings.error_net_no_connection));
            }
            var parsed = JsonConvert.DeserializeObject <JsonPlaylistItems>(response);

            // default: 120px/ 90px
            // medium : 320px/180px
            // high   : 480px/360px
            var imgurl = new Uri(parsed.items[0].snippet.thumbnails.medium.url);

            return(WebWrapper.GetResponseUnsafe(imgurl));
        }
Пример #10
0
        public R <Stream, LocalStr> GetThumbnail(PlayResource playResource)
        {
            string artId;

            if (playResource is BandcampPlayResource bandcampPlayResource)
            {
                artId = bandcampPlayResource.ArtId;
            }
            else
            {
                var result = DownloadEmbeddedSite(playResource.BaseData.ResourceId);
                if (!result.Ok)
                {
                    return(result.Error);
                }
                var webSite = result.Value;

                artId = GetTrackArtId(webSite);
            }

            if (string.IsNullOrEmpty(artId))
            {
                return(new LocalStr(strings.error_media_image_not_found));
            }

            //  1 : 1600px/1600px
            //  2 :  350px/ 350px
            //  3 :  100px/ 100px / full digital discography
            //  4 :  300px/ 300px
            //  5 :  700px/ 700px
            //  6 :  100px/ 100px
            //  7 :  150px/ 150px / discography
            //  8 :  124px/ 127px
            //  9 :  210px/ 210px / suggestion
            // 10 : 1200px/1200px / main banner
            // 11 :  172px/ 172px
            // 12 :  138px/ 138px
            // 13 :  380px/ 380px
            // 14 :  368px/ 368px
            // 15 :  135px/ 135px
            // 16 :  700px/ 700px
            // 42 :   50px/  50px / supporter
            var imgurl = new Uri($"https://f4.bcbits.com/img/a{artId}_4.jpg");

            return(WebWrapper.GetResponseUnsafe(imgurl));
        }
Пример #11
0
        public R <Uri, LocalStr> GetThumbnailUrl(ResolveContext ctx, PlayResource playResource)
        {
            var trackId = SpotifyApi.UriToTrackId(playResource.BaseData.ResourceId);

            if (!trackId.Ok)
            {
                return(trackId.Error);
            }

            var response = api.Request(() => api.Client.Tracks.Get(trackId.Value));

            if (!response.Ok)
            {
                return(response.Error);
            }

            return(new Uri(response.Value.Album.Images.OrderByDescending(item => item.Height).ToList()[0].Url));
        }
Пример #12
0
        public async Task GetThumbnail(ResolveContext _, PlayResource playResource, Func <Stream, Task> action)
        {
            var thumb = await WebWrapper
                        .Request($"https://api.soundcloud.com/tracks/{playResource.AudioResource.ResourceId}?client_id={SoundcloudClientId}")
                        .AsJson <JsonTumbnailMinimal>();

            if (thumb is null)
            {
                throw Error.LocalStr(strings.error_media_internal_missing + " (thumb)");
            }
            if (thumb.artwork_url is null)
            {
                throw Error.LocalStr(strings.error_media_internal_missing + " (artwork_url)");
            }

            // t500x500: 500px×500px
            // crop    : 400px×400px
            // t300x300: 300px×300px
            // large   : 100px×100px
            await WebWrapper.Request(thumb.artwork_url.Replace("-large", "-t300x300")).ToStream(action);
        }
Пример #13
0
        public R <Image> GetThumbnail(PlayResource playResource)
        {
            byte[] rawImgData;

            if (playResource is MediaPlayResource mediaPlayResource)
            {
                rawImgData = mediaPlayResource.Image;
            }
            else
            {
                var uri    = new Uri(playResource.PlayUri);
                var result = GetStreamFromUriUnsafe(uri);
                if (!result)
                {
                    return(result.Error);
                }

                using (var stream = result.Value)
                {
                    rawImgData = AudioTagReader.GetData(stream)?.Picture;
                }
            }

            if (rawImgData == null)
            {
                return("No image found");
            }

            using (var memStream = new MemoryStream(rawImgData))
            {
                try
                {
                    return(new Bitmap(memStream));
                }
                catch (ArgumentException)
                {
                    return("Inavlid image data");
                }
            }
        }
Пример #14
0
        public async Task GetThumbnail(ResolveContext _, PlayResource playResource, Func <Stream, Task> action)
        {
            string?artId = null;

            if (playResource is BandcampPlayResource bandcampPlayResource)
            {
                artId = bandcampPlayResource.ArtId;
            }
            if (artId is null)
            {
                var webSite = await DownloadEmbeddedSite(playResource.AudioResource.ResourceId);

                artId = GetTrackArtId(webSite);
            }

            if (string.IsNullOrEmpty(artId))
            {
                throw Error.LocalStr(strings.error_media_image_not_found);
            }

            //  1 : 1600px/1600px
            //  2 :  350px/ 350px
            //  3 :  100px/ 100px / full digital discography
            //  4 :  300px/ 300px
            //  5 :  700px/ 700px
            //  6 :  100px/ 100px
            //  7 :  150px/ 150px / discography
            //  8 :  124px/ 127px
            //  9 :  210px/ 210px / suggestion
            // 10 : 1200px/1200px / main banner
            // 11 :  172px/ 172px
            // 12 :  138px/ 138px
            // 13 :  380px/ 380px
            // 14 :  368px/ 368px
            // 15 :  135px/ 135px
            // 16 :  700px/ 700px
            // 42 :   50px/  50px / supporter
            await WebWrapper.Request($"https://f4.bcbits.com/img/a{artId}_4.jpg").ToStream(action);
        }
Пример #15
0
 public R <Uri, LocalStr> GetThumbnailUrl(ResolveContext ctx, PlayResource playResource)
 {
     throw new NotImplementedException();
 }
Пример #16
0
        public R <Image> GetThumbnail(PlayResource playResource)
        {
            string artId;

            if (playResource is BandcampPlayResource bandcampPlayResource)
            {
                artId = bandcampPlayResource.ArtId;
            }
            else
            {
                var result = DownloadEmbeddedSite(playResource.BaseData.ResourceId);
                if (!result.Ok)
                {
                    return(result.Error);
                }
                var webSite = result.Value;

                artId = GetTrackArtId(webSite);
            }

            if (string.IsNullOrEmpty(artId))
            {
                return("No image found");
            }

            //  1 : 1600px/1600px
            //  2 :  350px/ 350px
            //  3 :  100px/ 100px / full digital discography
            //  4 :  300px/ 300px
            //  5 :  700px/ 700px
            //  6 :  100px/ 100px
            //  7 :  150px/ 150px / discography
            //  8 :  124px/ 127px
            //  9 :  210px/ 210px / suggestion
            // 10 : 1200px/1200px / main banner
            // 11 :  172px/ 172px
            // 12 :  138px/ 138px
            // 13 :  380px/ 380px
            // 14 :  368px/ 368px
            // 15 :  135px/ 135px
            // 16 :  700px/ 700px
            // 42 :   50px/  50px / supporter
            var   imgurl    = new Uri($"https://f4.bcbits.com/img/a{artId}_4.jpg");
            Image img       = null;
            var   resresult = WebWrapper.GetResponse(imgurl, (webresp) =>
            {
                using (var stream = webresp.GetResponseStream())
                {
                    if (stream != null)
                    {
                        img = Image.FromStream(stream);
                    }
                }
            });

            if (resresult != ValidateCode.Ok)
            {
                return("Error while reading image");
            }
            return(img);
        }
Пример #17
0
 public Task GetThumbnail(PlayResource playResource, Func <Stream, Task> action) => Resolver.GetThumbnail(this, playResource, action);
Пример #18
0
 public R <Stream, LocalStr> GetThumbnail(PlayResource playResource) => Resolver.GetThumbnail(this, playResource);
Пример #19
0
 public R <Uri, LocalStr> GetThumbnailUrl(PlayResource playResource) => Resolver.GetThumbnailUrl(this, playResource);