Example #1
0
        public void GetTmdbPoster(CancellationToken cancellationToken, MyRecordingInfo recording)
        {
            cancellationToken.ThrowIfCancellationRequested();

            var pluginPath         = Plugin.Instance.ConfigurationFilePath.Remove(Plugin.Instance.ConfigurationFilePath.Length - 4);
            var localPoster        = Path.Combine(pluginPath, "recordingposters", String.Join("", recording.Name.Split(Path.GetInvalidFileNameChars())) + ".jpg");
            var localPosterMissing = Path.Combine(pluginPath, "recordingposters", String.Join("", recording.Name.Split(Path.GetInvalidFileNameChars())) + " [missing].jpg");

            if (!Directory.Exists(Path.Combine(pluginPath, "recordingposters")))
            {
                Directory.CreateDirectory(Path.Combine(pluginPath, "recordingposters"));
            }

            if (recording.IsMovie && !(File.Exists(localPoster) || File.Exists(localPosterMissing)))
            {
                try
                {
                    using (var tmdbMovieSearch = _httpClient.Get(new HttpRequestOptions()
                    {
                        Url = $"https://api.themoviedb.org/3/search/movie?api_key=9dbbec013a2d32baf38ccc58006cd991&query={recording.Name}" + $"&language={_serverConfigurationManager.Configuration.PreferredMetadataLanguage}",
                        CancellationToken = cancellationToken,
                        BufferContent = false,
                        EnableDefaultUserAgent = true,
                        AcceptHeader = "application/json",
                        EnableHttpCompression = true,
                        DecompressionMethod = CompressionMethod.Gzip
                    }).Result)
                    {
                        var movie = _json.DeserializeFromStream <TmdbMovieSearch>(tmdbMovieSearch);

                        if (movie.total_results > 0)
                        {
                            TmdbMovieResult tmdbMovieResult = movie.results.Find(x => x.title.Equals(recording.Name) || x.original_title.Contains(recording.EpisodeTitle)) ?? movie.results.First();

                            if (recording.Year.HasValue)
                            {
                                tmdbMovieResult = movie.results.Find(x => x.release_date.StartsWith(recording.Year.Value.ToString())) ?? movie.results.First();
                            }

                            var moviePoster = tmdbMovieResult.poster_path;

                            if (!String.IsNullOrEmpty(moviePoster))
                            {
                                using (WebClient client = new WebClient())
                                {
                                    client.DownloadFile(new Uri($"https://image.tmdb.org/t/p/w500{moviePoster}"), localPoster);
                                }
                            }
                            else
                            {
                                File.Create(localPosterMissing);
                            }
                        }
                        else
                        {
                            File.Create(localPosterMissing);
                        }
                    }
                }
                catch (WebException)
                {
                    Plugin.Logger.Info("Could not download poster for Movie Recording: {0}", recording.Name);
                }
            }

            if (recording.SeasonNumber.HasValue && recording.EpisodeNumber.HasValue && !(File.Exists(localPoster) || File.Exists(localPosterMissing)))
            {
                try
                {
                    using (var tmdbTvSearch = _httpClient.Get(new HttpRequestOptions()
                    {
                        Url = $"https://api.themoviedb.org/3/search/tv?api_key=9dbbec013a2d32baf38ccc58006cd991&query={recording.Name}" + $"&language={_serverConfigurationManager.Configuration.PreferredMetadataLanguage}",
                        CancellationToken = cancellationToken,
                        BufferContent = false,
                        EnableDefaultUserAgent = true,
                        AcceptHeader = "application/json",
                        EnableHttpCompression = true,
                        DecompressionMethod = CompressionMethod.Gzip
                    }).Result)
                    {
                        //var posterUrl = string.Empty;

                        //for (int i = 0; i < tvshow.results.Count; i++)
                        //{
                        //    TmdbTvResult tmdbTvResult = tvshow.results.ElementAt(i);
                        //
                        //    using (var tmdbEpisode = await _httpClient.Get(new HttpRequestOptions()
                        //    {
                        //        Url = $"https://api.themoviedb.org/3/tv/{tmdbTvResult.id}/season/{recording.SeasonNumber}/episode/{recording.EpisodeNumber}?api_key=9dbbec013a2d32baf38ccc58006cd991" + $"&language={_serverConfigurationManager.Configuration.UICulture}",
                        //        CancellationToken = cancellationToken,
                        //        BufferContent = false,
                        //        EnableDefaultUserAgent = true,
                        //        AcceptHeader = "application/json",
                        //        EnableHttpCompression = true,
                        //        DecompressionMethod = CompressionMethod.Gzip
                        //    }).ConfigureAwait(true))
                        //    {
                        //        var episode = _json.DeserializeFromStream<TmdbEpisodeResult>(tmdbEpisode);
                        //
                        //        if (episode.name == recording.EpisodeTitle)
                        //        {
                        //            posterUrl = $"https://image.tmdb.org/t/p/original{tmdbTvResult.poster_path}";
                        //            break;
                        //        }
                        //    }
                        //
                        //    Thread.Sleep(400);
                        //}

                        var tvshow = _json.DeserializeFromStream <TmdbTvSearch>(tmdbTvSearch);

                        if (tvshow.total_results > 0)
                        {
                            TmdbTvResult tmdbTvResult = tvshow.results.Find(x => x.name.Equals(recording.Name)) ?? tvshow.results.First();
                            var          tvPoster     = tmdbTvResult.poster_path;

                            if (!String.IsNullOrEmpty(tvPoster))
                            {
                                using (WebClient client = new WebClient())
                                {
                                    client.DownloadFile(new Uri($"https://image.tmdb.org/t/p/w500{tvPoster}"), localPoster);
                                }
                            }
                            else
                            {
                                File.Create(localPosterMissing);
                            }
                        }
                        else
                        {
                            File.Create(localPosterMissing);
                        }
                    }
                }
                catch (WebException)
                {
                    Plugin.Logger.Info("Could not download poster for TV Show Recording: {0}", recording.Name);
                }
            }
        }
Example #2
0
        public void GetTmdbImage(CancellationToken cancellationToken, MyRecordingInfo recording)
        {
            cancellationToken.ThrowIfCancellationRequested();

            var config            = Plugin.Instance.Configuration;
            var pluginPath        = Plugin.Instance.ConfigurationFilePath.Remove(Plugin.Instance.ConfigurationFilePath.Length - 4);
            var localImage        = Path.Combine(pluginPath, "recordingposters", String.Join("", recording.Name.Split(Path.GetInvalidFileNameChars())) + ".jpg");
            var localImageMissing = Path.Combine(pluginPath, "recordingposters", String.Join("", recording.Name.Split(Path.GetInvalidFileNameChars())) + " [missing].jpg");

            if (!Directory.Exists(Path.Combine(pluginPath, "recordingposters")))
            {
                Directory.CreateDirectory(Path.Combine(pluginPath, "recordingposters"));
            }

            if ((recording.IsMovie || (!recording.EpisodeNumber.HasValue && (recording.EndDate - recording.StartDate) > TimeSpan.FromMinutes(70))) && !(File.Exists(localImage) || File.Exists(localImageMissing)))
            {
                try
                {
                    using (var tmdbMovieSearch = _httpClient.Get(new HttpRequestOptions()
                    {
                        Url = $"https://api.themoviedb.org/3/search/movie?api_key=9dbbec013a2d32baf38ccc58006cd991&query={recording.MovieName}" + $"&language={_serverConfigurationManager.Configuration.PreferredMetadataLanguage}",
                        CancellationToken = cancellationToken,
                        BufferContent = false,
                        EnableDefaultUserAgent = true,
                        AcceptHeader = "application/json",
                        EnableHttpCompression = true,
                        DecompressionMethod = CompressionMethod.Gzip
                    }).Result)
                    {
                        var movie = _json.DeserializeFromStream <TmdbMovieSearch>(tmdbMovieSearch);

                        if (movie.total_results > 0)
                        {
                            TmdbMovieResult tmdbMovieResult = movie.results.Find(x => x.title.Equals(recording.MovieName) || x.original_title.Contains(recording.EpisodeTitle)) ?? movie.results.First();

                            if (recording.MovieYear.HasValue)
                            {
                                tmdbMovieResult = movie.results.Find(x => x.release_date.StartsWith(recording.MovieYear.Value.ToString())) ?? movie.results.First();
                            }

                            var moviePoster   = tmdbMovieResult.poster_path;
                            var movieBackdrop = tmdbMovieResult.backdrop_path;

                            if (config.RecGenreMapping)
                            {
                                if (!String.IsNullOrEmpty(moviePoster))
                                {
                                    using (WebClient client = new WebClient())
                                    {
                                        client.DownloadFile(new Uri($"https://image.tmdb.org/t/p/w500{moviePoster}"), localImage);
                                    }
                                }
                                else
                                {
                                    File.Create(localImageMissing);
                                }
                            }

                            if (!config.RecGenreMapping)
                            {
                                if (!String.IsNullOrEmpty(movieBackdrop))
                                {
                                    using (WebClient client = new WebClient())
                                    {
                                        client.DownloadFile(new Uri($"https://image.tmdb.org/t/p/w500{movieBackdrop}"), localImage);
                                    }
                                }
                                else
                                {
                                    File.Create(localImageMissing);
                                }
                            }
                        }
                        else
                        {
                            File.Create(localImageMissing);
                        }
                    }
                }
                catch (WebException)
                {
                    Plugin.Logger.Info("Could not download poster for Movie Recording: {0}", recording.Name);
                }
            }

            if ((recording.IsSeries || recording.EpisodeNumber.HasValue) && !(File.Exists(localImage) || File.Exists(localImageMissing)))
            {
                try
                {
                    using (var tmdbTvSearch = _httpClient.Get(new HttpRequestOptions()
                    {
                        Url = $"https://api.themoviedb.org/3/search/tv?api_key=9dbbec013a2d32baf38ccc58006cd991&query={recording.Name}" + $"&language={_serverConfigurationManager.Configuration.PreferredMetadataLanguage}",
                        CancellationToken = cancellationToken,
                        BufferContent = false,
                        EnableDefaultUserAgent = true,
                        AcceptHeader = "application/json",
                        EnableHttpCompression = true,
                        DecompressionMethod = CompressionMethod.Gzip
                    }).Result)
                    {
                        var tvshow = _json.DeserializeFromStream <TmdbTvSearch>(tmdbTvSearch);

                        if (tvshow.total_results > 0)
                        {
                            TmdbTvResult tmdbTvResult = tvshow.results.Find(x => x.name.Equals(recording.Name)) ?? tvshow.results.First();

                            var tvPoster   = tmdbTvResult.poster_path;
                            var tvBackdrop = tmdbTvResult.backdrop_path;

                            if (config.RecGenreMapping)
                            {
                                if (!String.IsNullOrEmpty(tvPoster))
                                {
                                    using (WebClient client = new WebClient())
                                    {
                                        client.DownloadFile(new Uri($"https://image.tmdb.org/t/p/w500{tvPoster}"), localImage);
                                    }
                                }
                                else
                                {
                                    File.Create(localImageMissing);
                                }
                            }

                            if (!config.RecGenreMapping)
                            {
                                if (!String.IsNullOrEmpty(tvBackdrop))
                                {
                                    using (WebClient client = new WebClient())
                                    {
                                        client.DownloadFile(new Uri($"https://image.tmdb.org/t/p/w500{tvBackdrop}"), localImage);
                                    }
                                }
                                else
                                {
                                    File.Create(localImageMissing);
                                }
                            }
                        }
                        else
                        {
                            File.Create(localImageMissing);
                        }
                    }
                }
                catch (WebException)
                {
                    Plugin.Logger.Info("Could not download poster for TV Show Recording: {0}", recording.Name);
                }
            }
        }