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); }
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()); }
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); }
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()); } }
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); }
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); }
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); }
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; }
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); } }