예제 #1
0
            /// <summary>
            /// return true if success.
            /// </summary>
            /// <returns></returns>
            public async Task <bool> GenerateAsync(DataCenter dataCenter, ICoverParent source)
            {
                var video = (JryVideoInfo)source;

                if (video.DoubanId == null)
                {
                    return(false);
                }

                return(await Task.Run(async() =>
                {
                    var builder = CoverBuilder.CreateVideo(video);
                    var requests = (await DoubanHelper.TryGetMovieInfoAsync(video.DoubanId))?.GetMovieCoverRequest().ToArray();
                    if (requests == null)
                    {
                        return false;
                    }
                    if (requests.Length == 0)
                    {
                        return false;
                    }
                    builder.Requests.AddRange(requests);
                    return await this.manager.BuildCoverAsync(builder);
                }));
            }
예제 #2
0
            private async Task <bool> TryAutoAddCoverAsync(DataCenter dataCenter, TheTVDBClient client, RemoteId removeId, VideoRole role)
            {
                var theTVDBId = await client.TryGetTheTVDBSeriesIdByRemoteIdAsync(removeId);

                if (theTVDBId == null)
                {
                    return(false);
                }
                var actor = await dataCenter.ArtistManager.FindAsync(role.ActorId);

                if (actor == null)
                {
                    return(false);
                }
                var actors = (await client.GetActorsBySeriesIdAsync(theTVDBId)).ToArray();

                actors = actors.Where(z => z.Id == actor.TheTVDBId).ToArray();
                if (actors.Length != 1)
                {
                    return(false);
                }
                if (!actors[0].HasBanner)
                {
                    return(false);
                }
                var url     = actors[0].BuildUrl(client);
                var builder = CoverBuilder.CreateRole(role);

                builder.Uri.Add(url);
                return(await dataCenter.CoverManager.BuildCoverAsync(builder));
            }
예제 #3
0
        public Task <bool> BuildCoverAsync(CoverBuilder builder)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            Task <bool> task;

            lock (this.downloaders)
            {
                task = this.downloaders.GetValueOrDefault(builder.Id);
                if (task == null)
                {
                    if (builder.Requests.Count + builder.Uri.Count == 0)
                    {
                        return(Task.FromResult(false));
                    }
                    task = Task.Run(async() =>
                    {
                        foreach (var request in builder.Requests.Concat(builder.Uri
                                                                        .Select(WebRequest.CreateHttp)
                                                                        .As2().Ignore <Exception>()))
                        {
                            var result = await request.GetResultAsBytesAsync();
                            if (!result.IsSuccess)
                            {
                                continue;
                            }
                            var cover     = builder.Build(result.Result);
                            cover.Version = Upgrader <JryCover> .MaxVersion;
                            if (await this.InsertOrUpdateAsync(cover))
                            {
                                return(true);
                            }
                        }
                        return(false);
                    });
                    this.downloaders[builder.Id] = task;
                }
            }
            return(task);
        }
예제 #4
0
            /// <summary>
            /// return true if success.
            /// </summary>
            /// <param name="dataCenter"></param>
            /// <param name="source"></param>
            /// <returns></returns>
            public async Task <bool> GenerateAsync(DataCenter dataCenter, ICoverParent source)
            {
                var item     = (Artist)source;
                var doubanId = item.DoubanId;

                if (string.IsNullOrWhiteSpace(doubanId))
                {
                    return(false);
                }
                var info = await DoubanHelper.TryGetArtistInfoAsync(doubanId);

                if (info == null)
                {
                    return(false);
                }
                var url          = info.GetLargeImageUrl();
                var coverBuilder = CoverBuilder.CreateArtist(item);

                coverBuilder.Uri.Add(url);
                return(await dataCenter.CoverManager.BuildCoverAsync(coverBuilder));
            }
예제 #5
0
            public async Task <bool?> StartSelect(Window window)
            {
                var parameters = new List <RemoteId>();

                var imdbId = this.videoViewer.InfoView.Source.GetValidImdbId();

                if (imdbId != null)
                {
                    parameters.Add(new RemoteId(RemoteIdType.Imdb, imdbId));
                }

                var theTVDBId = this.videoViewer.InfoView.SeriesView.Source.TheTVDBId;

                if (!theTVDBId.IsNullOrWhiteSpace())
                {
                    parameters.Add(new RemoteId(RemoteIdType.TheTVDB, theTVDBId));
                }

                imdbId = this.videoViewer.InfoView.SeriesView.Source.GetValidImdbId();
                if (imdbId != null)
                {
                    parameters.Add(new RemoteId(RemoteIdType.Imdb, imdbId));
                }

                var url = WebImageSelectorWindow.StartSelectFanartByImdbId(window,
                                                                           this.videoViewer.InfoView.Source.Index.ToString(), parameters.ToArray());

                if (string.IsNullOrWhiteSpace(url))
                {
                    return(null);
                }
                var builder = CoverBuilder.CreateBackground(this.videoViewer.InfoView.Source);

                builder.Uri.Add(url);
                await this.GetManagers().CoverManager.BuildCoverAsync(builder);

                this.RefreshProperties();
                return(false);
            }
예제 #6
0
            private async Task <bool> AutoGenerateCoverOverTheTVDBIdAsync(TheTVDBClient client, string theTVDBId, string index)
            {
                if (theTVDBId.IsNullOrWhiteSpace())
                {
                    return(false);
                }

                return(await Task.Run(async() =>
                {
                    var array = (await client.GetBannersBySeriesIdAsync(theTVDBId)).ToArray();
                    var urls = array.Where(z => z.Season == index).RandomSort()
                               .Concat(array.Where(z => z.Season != index).RandomSort())
                               .Where(banner => banner.BannerType == BannerType.Fanart)
                               .Select(z => z.BuildUrl(client))
                               .ToArray();
                    if (urls.Length == 0)
                    {
                        return false;
                    }
                    var builder = CoverBuilder.CreateBackground(this.source.InfoView.Source);
                    builder.Uri.AddRange(urls);
                    return await this.coverManager.BuildCoverAsync(builder);
                }));
            }