From 615d1e2a53c9079e6b13789cbaa0410d9039f435 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Wed, 19 Aug 2015 02:12:58 -0400 Subject: [PATCH] update detail page --- MediaBrowser.Controller/LiveTv/ProgramInfo.cs | 17 +++- MediaBrowser.Dlna/Didl/DidlBuilder.cs | 13 +++ .../LiveTv/Listings/SchedulesDirect.cs | 84 +++++++++---------- .../LiveTv/LiveTvManager.cs | 26 +----- 4 files changed, 75 insertions(+), 65 deletions(-) diff --git a/MediaBrowser.Controller/LiveTv/ProgramInfo.cs b/MediaBrowser.Controller/LiveTv/ProgramInfo.cs index 3f8fc639f1..467264e7ab 100644 --- a/MediaBrowser.Controller/LiveTv/ProgramInfo.cs +++ b/MediaBrowser.Controller/LiveTv/ProgramInfo.cs @@ -33,6 +33,11 @@ namespace MediaBrowser.Controller.LiveTv /// /// The overview. public string Overview { get; set; } + /// + /// Gets or sets the short overview. + /// + /// The short overview. + public string ShortOverview { get; set; } /// /// The start date of the program, in UTC. @@ -165,7 +170,17 @@ namespace MediaBrowser.Controller.LiveTv /// /// The show identifier. public string ShowId { get; set; } - + /// + /// Gets or sets the season number. + /// + /// The season number. + public int? SeasonNumber { get; set; } + /// + /// Gets or sets the episode number. + /// + /// The episode number. + public int? EpisodeNumber { get; set; } + public ProgramInfo() { Genres = new List(); diff --git a/MediaBrowser.Dlna/Didl/DidlBuilder.cs b/MediaBrowser.Dlna/Didl/DidlBuilder.cs index 25514f1dca..390f442670 100644 --- a/MediaBrowser.Dlna/Didl/DidlBuilder.cs +++ b/MediaBrowser.Dlna/Didl/DidlBuilder.cs @@ -193,6 +193,9 @@ namespace MediaBrowser.Dlna.Didl if (string.Equals(subtitleMode, "CaptionInfoEx", StringComparison.OrdinalIgnoreCase)) { + // http://192.168.1.3:9999/video.srt + // http://192.168.1.3:9999/video.srt + //var res = container.OwnerDocument.CreateElement("SEC", "CaptionInfoEx"); //res.InnerText = info.Url; @@ -201,6 +204,16 @@ namespace MediaBrowser.Dlna.Didl //res.SetAttribute("type", info.Format.ToLower()); //container.AppendChild(res); } + else if (string.Equals(subtitleMode, "smi", StringComparison.OrdinalIgnoreCase)) + { + var res = container.OwnerDocument.CreateElement(string.Empty, "res", NS_DIDL); + + res.InnerText = info.Url; + + res.SetAttribute("protocolInfo", "http-get:*:smi/caption:*"); + + container.AppendChild(res); + } else { var res = container.OwnerDocument.CreateElement(string.Empty, "res", NS_DIDL); diff --git a/MediaBrowser.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs b/MediaBrowser.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs index c536d0e83f..230a797756 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs @@ -132,6 +132,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings { StreamReader innerReader = new StreamReader(innerResponse.Content); responseString = innerReader.ReadToEnd(); + var programDetails = _jsonSerializer.DeserializeFromString>( responseString); @@ -142,10 +143,10 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings var schedules = dailySchedules.SelectMany(d => d.programs); foreach (ScheduleDirect.Program schedule in schedules) { - _logger.Debug("Proccesing Schedule for statio ID " + stationID + - " which corresponds to channel " + channelNumber + " and program id " + - schedule.programID + " which says it has images? " + - programDict[schedule.programID].hasImageArtwork); + //_logger.Debug("Proccesing Schedule for statio ID " + stationID + + // " which corresponds to channel " + channelNumber + " and program id " + + // schedule.programID + " which says it has images? " + + // programDict[schedule.programID].hasImageArtwork); var imageIndex = images.FindIndex(i => i.programID == schedule.programID.Substring(0, 10)); if (imageIndex > -1) @@ -244,7 +245,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings CultureInfo.InvariantCulture); DateTime endAt = startAt.AddSeconds(programInfo.duration); ProgramAudio audioType = ProgramAudio.Stereo; - bool hdtv = false; + bool repeat = (programInfo.@new == null); string newID = programInfo.programID + "T" + startAt.Ticks + "C" + channel; @@ -268,43 +269,17 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings } } - if ((programInfo.videoProperties != null)) - { - hdtv = programInfo.videoProperties.Exists(item => item == "hdtv"); - } - - string desc = ""; - if (details.descriptions != null) - { - if (details.descriptions.description1000 != null) - { - desc = details.descriptions.description1000[0].description; - } - else if (details.descriptions.description100 != null) - { - desc = details.descriptions.description100[0].description; - } - } - ScheduleDirect.Gracenote gracenote; string episodeTitle = null; - if (details.metadata != null) - { - gracenote = details.metadata.Find(x => x.Gracenote != null).Gracenote; - if ((details.showType ?? "No ShowType") == "Series") - { - episodeTitle = "Season: " + gracenote.season + " Episode: " + gracenote.episode; - } - } if (details.episodeTitle150 != null) { - episodeTitle = ((episodeTitle ?? string.Empty) + " " + details.episodeTitle150).Trim(); + episodeTitle = details.episodeTitle150; } - var imageLink = ""; + string imageUrl = null; if (details.hasImageArtwork) { - imageLink = details.images; + imageUrl = details.images; } var showType = details.showType ?? string.Empty; @@ -313,7 +288,6 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings { ChannelId = channel, Id = newID, - Overview = desc, StartDate = startAt, EndDate = endAt, Name = details.titles[0].title120 ?? "Unkown", @@ -321,23 +295,48 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings CommunityRating = null, EpisodeTitle = episodeTitle, Audio = audioType, - IsHD = hdtv, IsRepeat = repeat, IsSeries = showType.IndexOf("series", StringComparison.OrdinalIgnoreCase) != -1, - ImageUrl = imageLink, + ImageUrl = imageUrl, HasImage = details.hasImageArtwork, - IsNews = false, - IsKids = false, + IsKids = string.Equals(details.audience, "children", StringComparison.OrdinalIgnoreCase), IsSports = showType.IndexOf("sports", StringComparison.OrdinalIgnoreCase) != -1, - IsLive = false, IsMovie = showType.IndexOf("movie", StringComparison.OrdinalIgnoreCase) != -1 || showType.IndexOf("film", StringComparison.OrdinalIgnoreCase) != -1, - IsPremiere = false, ShowId = programInfo.programID }; + if (programInfo.videoProperties != null) + { + info.IsHD = programInfo.videoProperties.Contains("hdtv", StringComparer.OrdinalIgnoreCase); + } + + if (details.contentRating != null && details.contentRating.Count > 0) + { + info.OfficialRating = details.contentRating[0].code.Replace("TV", "TV-").Replace("--", "-"); + } + + if (details.descriptions != null) + { + if (details.descriptions.description1000 != null) + { + info.Overview = details.descriptions.description1000[0].description; + } + else if (details.descriptions.description100 != null) + { + info.ShortOverview = details.descriptions.description100[0].description; + } + } + if (info.IsSeries) { info.SeriesId = programInfo.programID.Substring(0, 10); + + if (details.metadata != null) + { + var gracenote = details.metadata.Find(x => x.Gracenote != null).Gracenote; + info.SeasonNumber = gracenote.season; + info.EpisodeNumber = gracenote.episode; + } } if (!string.IsNullOrWhiteSpace(details.originalAirDate)) @@ -349,8 +348,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings { info.Genres = details.genres.Where(g => !string.IsNullOrWhiteSpace(g)).ToList(); info.IsNews = details.genres.Contains("news", StringComparer.OrdinalIgnoreCase); - info.IsKids = false; } + return info; } @@ -888,6 +887,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings public class ProgramDetails { + public string audience { get; set; } public string programID { get; set; } public List titles { get; set; } public EventDetails eventDetails { get; set; } diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs index 4c44f5c3b5..26007f1451 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs @@ -632,6 +632,9 @@ namespace MediaBrowser.Server.Implementations.LiveTv item.ProductionYear = info.ProductionYear; item.PremiereDate = item.PremiereDate ?? info.OriginalAirDate; + item.IndexNumber = info.EpisodeNumber; + item.ParentIndexNumber = info.SeasonNumber; + if (isNew) { await _libraryManager.CreateItem(item, cancellationToken).ConfigureAwait(false); @@ -641,24 +644,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv await _libraryManager.UpdateItem(item, ItemUpdateType.MetadataImport, cancellationToken).ConfigureAwait(false); } - var maxStartDate = DateTime.UtcNow.AddDays(3); - - _providerManager.QueueRefresh(item.Id, new MetadataRefreshOptions - { - ImageRefreshMode = info.StartDate <= maxStartDate ? ImageRefreshMode.Default : ImageRefreshMode.ValidationOnly - }); + _providerManager.QueueRefresh(item.Id, new MetadataRefreshOptions()); return item; } - private void RefreshIfNeeded(LiveTvProgram program) - { - if (_refreshedPrograms.TryAdd(program.Id, program.Id)) - { - _providerManager.QueueRefresh(program.Id, new MetadataRefreshOptions()); - } - } - private async Task<Guid> CreateRecordingRecord(RecordingInfo info, string serviceName, CancellationToken cancellationToken) { var isNew = false; @@ -763,8 +753,6 @@ namespace MediaBrowser.Server.Implementations.LiveTv { var program = GetInternalProgram(id); - RefreshIfNeeded(program); - var dto = _dtoService.GetBaseItemDto(program, new DtoOptions(), user); await AddRecordingInfo(new[] { dto }, cancellationToken).ConfigureAwait(false); @@ -832,7 +820,6 @@ namespace MediaBrowser.Server.Implementations.LiveTv var returnArray = returnPrograms .Select(i => { - RefreshIfNeeded(i); return _dtoService.GetBaseItemDto(i, options, user); }) .ToArray(); @@ -907,11 +894,6 @@ namespace MediaBrowser.Server.Implementations.LiveTv var returnArray = programList.ToArray(); - foreach (var program in returnArray) - { - RefreshIfNeeded(program); - } - var result = new QueryResult<LiveTvProgram> { Items = returnArray,