diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2016-11-26 19:40:15 -0500 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2016-11-26 19:40:15 -0500 |
| commit | 921ec9cd11b71171cb69fa538e9d1ec1f2ffbbd5 (patch) | |
| tree | 779a1bee9f1e8e4b1a715657f4cd3184b18945ba /Emby.Server.Implementations/LiveTv | |
| parent | d54c11fb747e3cf0369ddade42c93d7e795f5a4f (diff) | |
save additional info to recording nfo's
Diffstat (limited to 'Emby.Server.Implementations/LiveTv')
| -rw-r--r-- | Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs | 201 |
1 files changed, 175 insertions, 26 deletions
diff --git a/Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs b/Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs index 1fe5d87ce..36a4dc608 100644 --- a/Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs +++ b/Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs @@ -1601,6 +1601,14 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV { try { + var program = string.IsNullOrWhiteSpace(timer.ProgramId) ? null : _libraryManager.GetItemList(new InternalItemsQuery + { + IncludeItemTypes = new[] { typeof(LiveTvProgram).Name }, + Limit = 1, + ExternalId = timer.ProgramId + + }).FirstOrDefault(); + if (timer.IsSports) { AddGenre(timer.Genres, "Sports"); @@ -1615,14 +1623,37 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV AddGenre(timer.Genres, "News"); } + // dummy this up + if (program == null) + { + program = new LiveTvProgram + { + Name = timer.Name, + HomePageUrl = timer.HomePageUrl, + ShortOverview = timer.ShortOverview, + Overview = timer.Overview, + Genres = timer.Genres, + CommunityRating = timer.CommunityRating, + OfficialRating = timer.OfficialRating, + ProductionYear = timer.ProductionYear, + PremiereDate = timer.OriginalAirDate, + IndexNumber = timer.EpisodeNumber, + ParentIndexNumber = timer.SeasonNumber + }; + } + if (timer.IsProgramSeries) { - SaveSeriesNfo(timer, recordingPath, seriesPath); - SaveVideoNfo(timer, recordingPath, false); + SaveSeriesNfo(timer, seriesPath); + SaveVideoNfo(timer, recordingPath, program, false); } else if (!timer.IsMovie || timer.IsSports || timer.IsNews) { - SaveVideoNfo(timer, recordingPath, true); + SaveVideoNfo(timer, recordingPath, program, true); + } + else + { + SaveVideoNfo(timer, recordingPath, program, false); } } catch (Exception ex) @@ -1631,7 +1662,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV } } - private void SaveSeriesNfo(TimerInfo timer, string recordingPath, string seriesPath) + private void SaveSeriesNfo(TimerInfo timer, string seriesPath) { var nfoPath = Path.Combine(seriesPath, "tvshow.nfo"); @@ -1676,7 +1707,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV } public const string DateAddedFormat = "yyyy-MM-dd HH:mm:ss"; - private void SaveVideoNfo(TimerInfo timer, string recordingPath, bool lockData) + private void SaveVideoNfo(TimerInfo timer, string recordingPath, BaseItem item, bool lockData) { var nfoPath = Path.ChangeExtension(recordingPath, ".nfo"); @@ -1694,6 +1725,8 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV CloseOutput = false }; + var options = _config.GetNfoConfiguration(); + using (XmlWriter writer = XmlWriter.Create(stream, settings)) { writer.WriteStartDocument(true); @@ -1707,45 +1740,64 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV writer.WriteElementString("title", timer.EpisodeTitle); } - if (timer.OriginalAirDate.HasValue) + if (item.PremiereDate.HasValue) { - var formatString = _config.GetNfoConfiguration().ReleaseDateFormat; + var formatString = options.ReleaseDateFormat; - writer.WriteElementString("aired", timer.OriginalAirDate.Value.ToLocalTime().ToString(formatString)); + writer.WriteElementString("aired", item.PremiereDate.Value.ToLocalTime().ToString(formatString)); } - if (timer.EpisodeNumber.HasValue) + if (item.IndexNumber.HasValue) { - writer.WriteElementString("episode", timer.EpisodeNumber.Value.ToString(CultureInfo.InvariantCulture)); + writer.WriteElementString("episode", item.IndexNumber.Value.ToString(CultureInfo.InvariantCulture)); } - if (timer.SeasonNumber.HasValue) + if (item.ParentIndexNumber.HasValue) { - writer.WriteElementString("season", timer.SeasonNumber.Value.ToString(CultureInfo.InvariantCulture)); + writer.WriteElementString("season", item.ParentIndexNumber.Value.ToString(CultureInfo.InvariantCulture)); } } else { writer.WriteStartElement("movie"); - if (!string.IsNullOrWhiteSpace(timer.Name)) + if (!string.IsNullOrWhiteSpace(item.Name)) + { + writer.WriteElementString("title", item.Name); + } + + if (!string.IsNullOrWhiteSpace(item.OriginalTitle)) + { + writer.WriteElementString("originaltitle", item.OriginalTitle); + } + + if (item.PremiereDate.HasValue) { - writer.WriteElementString("title", timer.Name); + var formatString = options.ReleaseDateFormat; + + writer.WriteElementString("premiered", item.PremiereDate.Value.ToLocalTime().ToString(formatString)); + writer.WriteElementString("releasedate", item.PremiereDate.Value.ToLocalTime().ToString(formatString)); } } writer.WriteElementString("dateadded", DateTime.UtcNow.ToLocalTime().ToString(DateAddedFormat)); - if (timer.ProductionYear.HasValue) + if (item.ProductionYear.HasValue) { - writer.WriteElementString("year", timer.ProductionYear.Value.ToString(CultureInfo.InvariantCulture)); + writer.WriteElementString("year", item.ProductionYear.Value.ToString(CultureInfo.InvariantCulture)); } - if (!string.IsNullOrEmpty(timer.OfficialRating)) + + if (!string.IsNullOrEmpty(item.OfficialRating)) { - writer.WriteElementString("mpaa", timer.OfficialRating); + writer.WriteElementString("mpaa", item.OfficialRating); } - var overview = (timer.Overview ?? string.Empty) + if (!string.IsNullOrEmpty(item.OfficialRatingDescription)) + { + writer.WriteElementString("mpaadescription", item.OfficialRatingDescription); + } + + var overview = (item.Overview ?? string.Empty) .StripHtml() .Replace(""", "'"); @@ -1756,24 +1808,116 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV writer.WriteElementString("lockdata", true.ToString().ToLower()); } - if (timer.CommunityRating.HasValue) + if (item.CommunityRating.HasValue) { - writer.WriteElementString("rating", timer.CommunityRating.Value.ToString(CultureInfo.InvariantCulture)); + writer.WriteElementString("rating", item.CommunityRating.Value.ToString(CultureInfo.InvariantCulture)); } - foreach (var genre in timer.Genres) + foreach (var genre in item.Genres) { writer.WriteElementString("genre", genre); } - if (!string.IsNullOrWhiteSpace(timer.ShortOverview)) + if (!string.IsNullOrWhiteSpace(item.ShortOverview)) { - writer.WriteElementString("outline", timer.ShortOverview); + writer.WriteElementString("outline", item.ShortOverview); } - if (!string.IsNullOrWhiteSpace(timer.HomePageUrl)) + if (!string.IsNullOrWhiteSpace(item.HomePageUrl)) + { + writer.WriteElementString("website", item.HomePageUrl); + } + + var people = item.Id == Guid.Empty ? new List<PersonInfo>() : _libraryManager.GetPeople(item); + + var directors = people + .Where(i => IsPersonType(i, PersonType.Director)) + .Select(i => i.Name) + .ToList(); + + foreach (var person in directors) { - writer.WriteElementString("website", timer.HomePageUrl); + writer.WriteElementString("director", person); + } + + var writers = people + .Where(i => IsPersonType(i, PersonType.Writer)) + .Select(i => i.Name) + .Distinct(StringComparer.OrdinalIgnoreCase) + .ToList(); + + foreach (var person in writers) + { + writer.WriteElementString("writer", person); + } + + foreach (var person in writers) + { + writer.WriteElementString("credits", person); + } + + var rt = item.GetProviderId(MetadataProviders.RottenTomatoes); + + if (!string.IsNullOrEmpty(rt)) + { + writer.WriteElementString("rottentomatoesid", rt); + } + + var tmdbCollection = item.GetProviderId(MetadataProviders.TmdbCollection); + + if (!string.IsNullOrEmpty(tmdbCollection)) + { + writer.WriteElementString("collectionnumber", tmdbCollection); + } + + var imdb = item.GetProviderId(MetadataProviders.Imdb); + if (!string.IsNullOrEmpty(imdb)) + { + if (item is Series) + { + writer.WriteElementString("imdb_id", imdb); + } + else + { + writer.WriteElementString("imdbid", imdb); + } + } + + var tvdb = item.GetProviderId(MetadataProviders.Tvdb); + if (!string.IsNullOrEmpty(tvdb)) + { + writer.WriteElementString("tvdbid", tvdb); + } + + var tmdb = item.GetProviderId(MetadataProviders.Tmdb); + if (!string.IsNullOrEmpty(tmdb)) + { + writer.WriteElementString("tmdbid", tmdb); + } + + if (item.CriticRating.HasValue) + { + writer.WriteElementString("criticrating", item.CriticRating.Value.ToString(CultureInfo.InvariantCulture)); + } + + if (!string.IsNullOrEmpty(item.CriticRatingSummary)) + { + writer.WriteElementString("criticratingsummary", item.CriticRatingSummary); + } + + if (!string.IsNullOrWhiteSpace(item.Tagline)) + { + writer.WriteElementString("tagline", item.Tagline); + } + + foreach (var studio in item.Studios) + { + writer.WriteElementString("studio", studio); + } + + if (item.VoteCount.HasValue) + { + writer.WriteElementString("votes", item.VoteCount.Value.ToString(CultureInfo.InvariantCulture)); } writer.WriteEndElement(); @@ -1782,6 +1926,11 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV } } + private static bool IsPersonType(PersonInfo person, string type) + { + return string.Equals(person.Type, type, StringComparison.OrdinalIgnoreCase) || string.Equals(person.Role, type, StringComparison.OrdinalIgnoreCase); + } + private void AddGenre(List<string> genres, string genre) { if (!genres.Contains(genre, StringComparer.OrdinalIgnoreCase)) |
