Пример #1
0
        public static async Task GetSeriesInfo(TvDbWrapper api, string seriesPath, bool includeSeasons = false)
        {
            //first get series data
            var seriesId = SeriesIOHelper.GetSeriesIdFromFile(seriesPath);

            await GetSeriesInfo(api, seriesPath, seriesId, includeSeasons).ConfigureAwait(false);
        }
Пример #2
0
        private static string GetEpisodeXml(SeriesBase series, Episode episode, IEnumerable <string> bannerImages)
        {
            var metadata = new EpisodeMetadata();

            var m = new Movie
            {
                Title       = episode.EpisodeName,
                Season      = episode.SeasonNumber.Value,
                Episode     = episode.EpisodeNumber.Value,
                Year        = episode.FirstAired.Year,
                Rating      = episode.Rating,
                Plot        = series.Overview,
                EpisodePlot = episode.Overview,
                MPAA        = series.ContentRating,
                Runtime     = series.Runtime.Value,
                genres      = SeriesIOHelper.ToArray(series.Genre),
                Director    = episode.Director,
                Credits     = episode.Writer
            };
            var cast = series.Actors.Length > 0
                ? series.Actors
                : episode.GuestStars;

            m.cast  = SeriesIOHelper.ToArray(cast);
            m.image = bannerImages.ToArray();

            metadata.Movie = m;
            return(metadata.AsXml());
        }
Пример #3
0
        public static async Task GetEpisodeMetadata(TvDbWrapper api, string seasonPath)
        {
            var parent   = new DirectoryInfo(seasonPath).Parent;
            var seriesId = SeriesIOHelper.GetSeriesIdFromFile(parent.FullName);

            await GetEpisodeMetadata(api, seriesId, seasonPath).ConfigureAwait(false);
        }
Пример #4
0
        private void CtxExplore_Click(object sender, EventArgs e)
        {
            var tag = tvwFolder.SelectedNode.Tag;

            if (tag is not null && Directory.Exists(tag.ToString()))
            {
                SeriesIOHelper.Launch("explorer.exe", tag.ToString().DoubleQuote());
            }
        }
Пример #5
0
        private async Task RenameEpisodes()
        {
            var folder       = tvwFolder.SelectedNode.Tag.ToString();
            var seriesFolder = new DirectoryInfo(folder).Parent.FullName;
            var seriesName   = SeriesIOHelper.GetSeriesMetadata(seriesFolder).Series.Title;

            await SeasonHelper.RenameFiles(api : _tvdb, seriesName : seriesName, seasonPath : folder);

            LoadAllFiles(folder);
        }
Пример #6
0
        public static async Task <IEnumerable <Episode> > GetEpisodes(TvDbWrapper api, string seasonPath)
        {
            var parent   = new DirectoryInfo(seasonPath).Parent;
            var seriesId = SeriesIOHelper.GetSeriesIdFromFile(parent.FullName);
            var fullRec  = await api.GetSeriesFullRecord(seriesId).ConfigureAwait(false);

            var seasonName = new DirectoryInfo(seasonPath).Name;
            var seasonNo   = seasonName.Split(" ".ToCharArray())[1];

            var seasonEpisodes = fullRec.Episodes.Where(ep => ep.CombinedSeason == seasonNo);

            return(seasonEpisodes);
        }
Пример #7
0
        private async Task <bool> RenameEpisodesUI()
        {
            using var renamer = new EpisodeRenameForm();
            var folder   = tvwFolder.SelectedNode.Tag.ToString();
            var episodes = await SeasonHelper.GetEpisodes(_tvdb, folder);

            var seriesFolder = new DirectoryInfo(folder).Parent.FullName;
            var seriesName   = SeriesIOHelper.GetSeriesMetadata(seriesFolder).Series.Title;

            renamer.ShowDialog(seriesName, folder, episodes);
            LoadAllFiles(folder);
            return(renamer.GetSeasonData);
        }
Пример #8
0
        public SeriesMetadata(SeriesBase series)
        {
            var s = new Series
            {
                Title     = series.SeriesName,
                genres    = SeriesIOHelper.ToArray(series.Genre),
                Premiered = series.FirstAired?.ToString(Constants.DATE_FMT),
                Year      = series.FirstAired.HasValue ? series.FirstAired.Value.Year : DateTime.Today.Year,
                Rating    = double.Parse(series.RatingString ?? "0") * 10,
                Status    = series.Status,
                MPAA      = series.MPAA,
                TvdbId    = series.Id.ToString(),
                Runtime   = series.Runtime.Value,
                Plot      = series.Overview,
                cast      = SeriesIOHelper.ToArray(series.Actors)
            };

            Series = s;
        }
Пример #9
0
        public static async Task GetEpisodeMetadata(TvDbWrapper api, SeriesFull fullRec, string seasonPath, IEnumerable <Banner> banners, string seasonNo)
        {
            var thumbs       = GetExistingEpisodeThumbs(seasonPath);
            var bannerImages = api.BannerImages(banners, BannerType.season);

            var seasonEpisodes = fullRec.Episodes.Where(ep => ep.CombinedSeason == seasonNo);

            if (!seasonEpisodes.Any())
            {
                return;
            }

            var bytesSaved = 0;

            foreach (var key in thumbs.Keys)
            {
                //key sample : C:\BT\Series\Ray Donovan\Season 5\Ray Donovan.S05E06.Shelley Duvall.mkv
                var episodeNo = SeriesIOHelper.GetSeasonEpisodeFromName(key);
                //resolve episode from seasonEpisodes
                var episode         = seasonEpisodes.First(ep => ep.EpisodeNumber == episodeNo);
                var episodeFileName = episode.FileName;

                // thumbnails
                if (thumbs[key]?.Length == 0 && !string.IsNullOrEmpty(episodeFileName))
                {
                    //get banner TVDB filename
                    //get image using filename
                    var data = await api.GetImage(episodeFileName).ConfigureAwait(false);

                    if (data?.Length > 0)
                    {
                        var reduced = ImageHelper.ReduceImageSize(data);

                        if (reduced?.Length > 0)
                        {
                            bytesSaved += data.Length - reduced.Length;
                            //save image using episode name
                            var newExtension = Path.GetExtension(episodeFileName);
                            var imgFile      = Path.ChangeExtension(key, newExtension);
                            await File.WriteAllBytesAsync(imgFile, reduced).ConfigureAwait(false);
                        }
                    }
                }

                // xml content
                var xmlPath = Path.ChangeExtension(key, Constants.CONTENT_EXTENSION);
                if (!File.Exists(xmlPath))
                {
                    var xml = GetEpisodeXml(fullRec.Series, episode, bannerImages);
                    await File.WriteAllTextAsync(xmlPath, xml).ConfigureAwait(false);
                }
            }
            Debug.WriteLine($"Total bytes saved on episode images: {bytesSaved}");

            //get season thumb
            var seasonThumb = Path.Combine(seasonPath, Constants.SERIES_SEASON_THUMB);

            if (File.Exists(seasonThumb) && new FileInfo(seasonThumb).Length == 0) //if the save operation failed previously, the file would have been created without content
            {
                File.Delete(seasonThumb);
            }

            if (!File.Exists(seasonPath))
            {
                var epi          = seasonEpisodes.First();
                var seasonBanner = banners.ToList().Find(banner => banner.BannerType == "season" && banner.Season == epi.CombinedSeason);
                if (seasonBanner is not null)
                {
                    var img = await api.GetImage(seasonBanner.BannerPath).ConfigureAwait(false) ?? await api.GetImage(seasonBanner.ThumbnailPath).ConfigureAwait(false);

                    if (img is not null)
                    {
                        var reduced = ImageHelper.ReduceImageSize(img);
                        await File.WriteAllBytesAsync(seasonThumb, reduced).ConfigureAwait(false);
                    }
                }
            }

            //get View.xml
            var viewFile = Path.Combine(seasonPath, Constants.SEASON_VIEW);

            if (!File.Exists(viewFile))
            {
                await api.WriteSeasonViewXml(viewFile).ConfigureAwait(false);
            }
        }