From f02c3260273a09f465c4e7a97d8b90f0f6909734 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 8 May 2014 16:09:53 -0400 Subject: Removed guids from the model project --- .../Dto/DtoService.cs | 23 +++++++++++----------- 1 file changed, 11 insertions(+), 12 deletions(-) (limited to 'MediaBrowser.Server.Implementations/Dto') diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs index c88cefdb36..8a0d4ca49b 100644 --- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs +++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs @@ -326,7 +326,7 @@ namespace MediaBrowser.Server.Implementations.Dto /// /// The item. /// List{System.String}. - private List GetBackdropImageTags(BaseItem item) + private List GetBackdropImageTags(BaseItem item) { return GetCacheTags(item, ImageType.Backdrop).ToList(); } @@ -336,26 +336,25 @@ namespace MediaBrowser.Server.Implementations.Dto /// /// The item. /// List{Guid}. - private List GetScreenshotImageTags(BaseItem item) + private List GetScreenshotImageTags(BaseItem item) { var hasScreenshots = item as IHasScreenshots; if (hasScreenshots == null) { - return new List(); + return new List(); } return GetCacheTags(item, ImageType.Screenshot).ToList(); } - private IEnumerable GetCacheTags(BaseItem item, ImageType type) + private IEnumerable GetCacheTags(BaseItem item, ImageType type) { return item.GetImages(type) .Select(p => GetImageCacheTag(item, p)) - .Where(i => i.HasValue) - .Select(i => i.Value) + .Where(i => i != null) .ToList(); } - private Guid? GetImageCacheTag(BaseItem item, ImageType type) + private string GetImageCacheTag(BaseItem item, ImageType type) { try { @@ -368,7 +367,7 @@ namespace MediaBrowser.Server.Implementations.Dto } } - private Guid? GetImageCacheTag(BaseItem item, ItemImageInfo image) + private string GetImageCacheTag(BaseItem item, ItemImageInfo image) { try { @@ -677,7 +676,7 @@ namespace MediaBrowser.Server.Implementations.Dto dto.Genres = item.Genres; } - dto.ImageTags = new Dictionary(); + dto.ImageTags = new Dictionary(); // Prevent implicitly captured closure var currentItem = item; @@ -685,9 +684,9 @@ namespace MediaBrowser.Server.Implementations.Dto { var tag = GetImageCacheTag(item, image); - if (tag.HasValue) + if (tag != null) { - dto.ImageTags[image.Type] = tag.Value; + dto.ImageTags[image.Type] = tag; } } @@ -1216,7 +1215,7 @@ namespace MediaBrowser.Server.Implementations.Dto } } - var bitrate = i.TotalBitrate ?? + var bitrate = i.TotalBitrate ?? info.MediaStreams.Where(m => m.Type != MediaStreamType.Subtitle && !string.Equals(m.Codec, "mjpeg", StringComparison.OrdinalIgnoreCase)) .Select(m => m.BitRate ?? 0) .Sum(); -- cgit v1.2.3 From b9a2af1fd523e22f387e3130bf68b09e4369600f Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 9 May 2014 19:08:08 -0400 Subject: added media stream helpers --- .../ScheduledTasksWebSocketListener.cs | 22 +----- MediaBrowser.Model/Dlna/DeviceProfile.cs | 82 +++++++++++++++------ MediaBrowser.Model/Dlna/StreamBuilder.cs | 84 +++++++++------------- MediaBrowser.Model/Dlna/StreamInfo.cs | 15 +--- MediaBrowser.Model/Dto/MediaSourceInfo.cs | 56 +++++++++++++-- .../Dto/DtoService.cs | 2 +- .../Localization/Server/server.json | 2 +- 7 files changed, 149 insertions(+), 114 deletions(-) (limited to 'MediaBrowser.Server.Implementations/Dto') diff --git a/MediaBrowser.Api/ScheduledTasks/ScheduledTasksWebSocketListener.cs b/MediaBrowser.Api/ScheduledTasks/ScheduledTasksWebSocketListener.cs index 0d3f5dfcdf..c143635bfa 100644 --- a/MediaBrowser.Api/ScheduledTasks/ScheduledTasksWebSocketListener.cs +++ b/MediaBrowser.Api/ScheduledTasks/ScheduledTasksWebSocketListener.cs @@ -39,8 +39,6 @@ namespace MediaBrowser.Api.ScheduledTasks TaskManager = taskManager; } - private bool _lastResponseHadTasksRunning = true; - /// /// Gets the data to send. /// @@ -48,25 +46,7 @@ namespace MediaBrowser.Api.ScheduledTasks /// Task{IEnumerable{TaskInfo}}. protected override Task> GetDataToSend(object state) { - var tasks = TaskManager.ScheduledTasks.ToList(); - - var anyRunning = tasks.Any(i => i.State != TaskState.Idle); - - if (anyRunning) - { - _lastResponseHadTasksRunning = true; - } - else - { - if (!_lastResponseHadTasksRunning) - { - return Task.FromResult>(null); - } - - _lastResponseHadTasksRunning = false; - } - - return Task.FromResult(tasks + return Task.FromResult(TaskManager.ScheduledTasks .OrderBy(i => i.Name) .Select(ScheduledTaskHelpers.GetTaskInfo) .Where(i => !i.IsHidden)); diff --git a/MediaBrowser.Model/Dlna/DeviceProfile.cs b/MediaBrowser.Model/Dlna/DeviceProfile.cs index 9f599f3e33..42ba5840cf 100644 --- a/MediaBrowser.Model/Dlna/DeviceProfile.cs +++ b/MediaBrowser.Model/Dlna/DeviceProfile.cs @@ -220,27 +220,39 @@ namespace MediaBrowser.Model.Dlna { container = (container ?? string.Empty).TrimStart('.'); - return ResponseProfiles.FirstOrDefault(i => + foreach (var i in ResponseProfiles) { if (i.Type != DlnaProfileType.Photo) { - return false; + continue; } List containers = i.GetContainers(); if (containers.Count > 0 && !containers.Contains(container, StringComparer.OrdinalIgnoreCase)) { - return false; + continue; } ConditionProcessor conditionProcessor = new ConditionProcessor(); + + var anyOff = false; foreach (ProfileCondition c in i.Conditions) { - if (!conditionProcessor.IsImageConditionSatisfied(c, width, height)) - return false; + if (!conditionProcessor.IsImageConditionSatisfied(c, width, height)) + { + anyOff = true; + break; + } + } + + if (anyOff) + { + continue; } - return true; - }); + + return i; + } + return null; } public ResponseProfile GetVideoMediaProfile(string container, @@ -260,66 +272,90 @@ namespace MediaBrowser.Model.Dlna { container = (container ?? string.Empty).TrimStart('.'); - return ResponseProfiles.FirstOrDefault(i => + foreach (var i in ResponseProfiles) { if (i.Type != DlnaProfileType.Video) { - return false; + continue; } List containers = i.GetContainers(); if (containers.Count > 0 && !containers.Contains(container, StringComparer.OrdinalIgnoreCase)) { - return false; + continue; } List audioCodecs = i.GetAudioCodecs(); if (audioCodecs.Count > 0 && !audioCodecs.Contains(audioCodec ?? string.Empty, StringComparer.OrdinalIgnoreCase)) { - return false; + continue; } List videoCodecs = i.GetVideoCodecs(); if (videoCodecs.Count > 0 && !videoCodecs.Contains(videoCodec ?? string.Empty, StringComparer.OrdinalIgnoreCase)) { - return false; + continue; } ConditionProcessor conditionProcessor = new ConditionProcessor(); + + var anyOff = false; foreach (ProfileCondition c in i.Conditions) { - if (!conditionProcessor.IsVideoConditionSatisfied(c, audioBitrate, audioChannels, width, height, bitDepth, videoBitrate, videoProfile, videoLevel, videoFramerate, packetLength, timestamp)) - return false; + if (!conditionProcessor.IsVideoConditionSatisfied(c, audioBitrate, audioChannels, width, height, bitDepth, videoBitrate, videoProfile, videoLevel, videoFramerate, packetLength, timestamp)) + { + anyOff = true; + break; + } + } + + if (anyOff) + { + continue; } - return true; - }); + + return i; + } + return null; } public ResponseProfile GetPhotoMediaProfile(string container, int? width, int? height) { container = (container ?? string.Empty).TrimStart('.'); - return ResponseProfiles.FirstOrDefault(i => + foreach (var i in ResponseProfiles) { if (i.Type != DlnaProfileType.Photo) { - return false; + continue; } List containers = i.GetContainers().ToList(); if (containers.Count > 0 && !containers.Contains(container, StringComparer.OrdinalIgnoreCase)) { - return false; + continue; } ConditionProcessor conditionProcessor = new ConditionProcessor(); + + var anyOff = false; foreach (ProfileCondition c in i.Conditions) { - if (!conditionProcessor.IsImageConditionSatisfied(c, width, height)) - return false; + if (!conditionProcessor.IsImageConditionSatisfied(c, width, height)) + { + anyOff = true; + break; + } + } + + if (anyOff) + { + continue; } - return true; - }); + + return i; + } + return null; } } } diff --git a/MediaBrowser.Model/Dlna/StreamBuilder.cs b/MediaBrowser.Model/Dlna/StreamBuilder.cs index d87fbb1096..48356ef924 100644 --- a/MediaBrowser.Model/Dlna/StreamBuilder.cs +++ b/MediaBrowser.Model/Dlna/StreamBuilder.cs @@ -109,15 +109,7 @@ namespace MediaBrowser.Model.Dlna int? maxBitrateSetting = options.MaxBitrate ?? options.Profile.MaxBitrate; - MediaStream audioStream = null; - foreach (MediaStream i in item.MediaStreams) - { - if (i.Type == MediaStreamType.Audio) - { - audioStream = i; - break; - } - } + MediaStream audioStream = item.DefaultAudioStream; // Honor the max bitrate setting if (IsAudioEligibleForDirectPlay(item, maxBitrateSetting)) @@ -191,11 +183,20 @@ namespace MediaBrowser.Model.Dlna playlistItem.AudioCodec = transcodingProfile.AudioCodec; playlistItem.Protocol = transcodingProfile.Protocol; - List audioTranscodingConditions = options.Profile.CodecProfiles - .Where(i => i.Type == CodecType.Audio && i.ContainsCodec(transcodingProfile.AudioCodec)) - .Take(1) - .SelectMany(i => i.Conditions) - .ToList(); + List audioCodecProfiles = new List(); + foreach (CodecProfile i in options.Profile.CodecProfiles) + { + if (i.Type == CodecType.Audio && i.ContainsCodec(transcodingProfile.AudioCodec)) + { + audioCodecProfiles.Add(i); + } + + if (audioCodecProfiles.Count >= 1) break; + } + + List audioTranscodingConditions = new List(); + foreach (CodecProfile i in audioCodecProfiles) + audioTranscodingConditions.AddRange(i.Conditions); ApplyTranscodingConditions(playlistItem, audioTranscodingConditions); @@ -229,25 +230,8 @@ namespace MediaBrowser.Model.Dlna RunTimeTicks = item.RunTimeTicks }; - MediaStream audioStream = null; - foreach (MediaStream i in item.MediaStreams) - { - if (i.Type == MediaStreamType.Audio) - { - audioStream = i; - break; - } - } - - MediaStream videoStream = null; - foreach (MediaStream i in item.MediaStreams) - { - if (i.Type == MediaStreamType.Video) - { - videoStream = i; - break; - } - } + MediaStream audioStream = item.DefaultAudioStream; + MediaStream videoStream = item.VideoStream; int? maxBitrateSetting = options.MaxBitrate ?? options.Profile.MaxBitrate; @@ -288,18 +272,26 @@ namespace MediaBrowser.Model.Dlna playlistItem.AudioStreamIndex = options.AudioStreamIndex; playlistItem.SubtitleStreamIndex = options.SubtitleStreamIndex; - IEnumerable videoTranscodingConditions = options.Profile.CodecProfiles - .Where(i => i.Type == CodecType.Video && i.ContainsCodec(transcodingProfile.VideoCodec)) - .Take(1) - .SelectMany(i => i.Conditions); - + List videoTranscodingConditions = new List(); + foreach (CodecProfile i in options.Profile.CodecProfiles) + { + if (i.Type == CodecType.Video && i.ContainsCodec(transcodingProfile.VideoCodec)) + { + videoTranscodingConditions.AddRange(i.Conditions); + break; + } + } ApplyTranscodingConditions(playlistItem, videoTranscodingConditions); - IEnumerable audioTranscodingConditions = options.Profile.CodecProfiles - .Where(i => i.Type == CodecType.VideoAudio && i.ContainsCodec(transcodingProfile.AudioCodec)) - .Take(1) - .SelectMany(i => i.Conditions); - + List audioTranscodingConditions = new List(); + foreach (CodecProfile i in options.Profile.CodecProfiles) + { + if (i.Type == CodecType.VideoAudio && i.ContainsCodec(transcodingProfile.AudioCodec)) + { + audioTranscodingConditions.AddRange(i.Conditions); + break; + } + } ApplyTranscodingConditions(playlistItem, audioTranscodingConditions); // Honor requested max channels @@ -453,12 +445,6 @@ namespace MediaBrowser.Model.Dlna return false; } - if (options.AudioStreamIndex.HasValue && - item.MediaStreams.Count(i => i.Type == MediaStreamType.Audio) > 1) - { - return false; - } - return IsAudioEligibleForDirectPlay(item, maxBitrate); } diff --git a/MediaBrowser.Model/Dlna/StreamInfo.cs b/MediaBrowser.Model/Dlna/StreamInfo.cs index ba30059504..e4ec0d8539 100644 --- a/MediaBrowser.Model/Dlna/StreamInfo.cs +++ b/MediaBrowser.Model/Dlna/StreamInfo.cs @@ -143,13 +143,7 @@ namespace MediaBrowser.Model.Dlna return null; } - foreach (MediaStream stream in MediaSource.MediaStreams) - { - if (stream.Type == MediaStreamType.Audio) - return stream; - } - - return null; + return MediaSource.DefaultAudioStream; } return null; @@ -165,12 +159,7 @@ namespace MediaBrowser.Model.Dlna { if (MediaSource != null) { - foreach (MediaStream i in MediaSource.MediaStreams) - { - if (i.Type == MediaStreamType.Video && (i.Codec ?? string.Empty).IndexOf("jpeg", StringComparison.OrdinalIgnoreCase) == -1) - return i; - } - return null; + return MediaSource.VideoStream; } return null; diff --git a/MediaBrowser.Model/Dto/MediaSourceInfo.cs b/MediaBrowser.Model/Dto/MediaSourceInfo.cs index 2e94f4f0c8..4fe5863339 100644 --- a/MediaBrowser.Model/Dto/MediaSourceInfo.cs +++ b/MediaBrowser.Model/Dto/MediaSourceInfo.cs @@ -1,4 +1,6 @@ -using MediaBrowser.Model.Entities; +using System; +using System.Runtime.Serialization; +using MediaBrowser.Model.Entities; using MediaBrowser.Model.MediaInfo; using System.Collections.Generic; @@ -14,9 +16,9 @@ namespace MediaBrowser.Model.Dto public long? Size { get; set; } public LocationType LocationType { get; set; } - + public string Name { get; set; } - + public long? RunTimeTicks { get; set; } public VideoType? VideoType { get; set; } @@ -24,19 +26,61 @@ namespace MediaBrowser.Model.Dto public IsoType? IsoType { get; set; } public Video3DFormat? Video3DFormat { get; set; } - + public List MediaStreams { get; set; } public List Formats { get; set; } - + public int? Bitrate { get; set; } public TransportStreamTimestamp? Timestamp { get; set; } - + public MediaSourceInfo() { Formats = new List(); MediaStreams = new List(); } + + [IgnoreDataMember] + public MediaStream DefaultAudioStream + { + get + { + foreach (MediaStream i in MediaStreams) + { + if (i.Type == MediaStreamType.Audio && i.IsDefault) + { + return i; + } + } + + foreach (MediaStream i in MediaStreams) + { + if (i.Type == MediaStreamType.Audio) + { + return i; + } + } + + return null; + } + } + + [IgnoreDataMember] + public MediaStream VideoStream + { + get + { + foreach (MediaStream i in MediaStreams) + { + if (i.Type == MediaStreamType.Video && (i.Codec ?? string.Empty).IndexOf("jpeg", StringComparison.OrdinalIgnoreCase) == -1) + { + return i; + } + } + + return null; + } + } } } diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs index 8a0d4ca49b..1da0b3db9b 100644 --- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs +++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs @@ -1165,7 +1165,7 @@ namespace MediaBrowser.Server.Implementations.Dto }).ThenBy(i => i.Video3DFormat.HasValue ? 1 : 0) .ThenByDescending(i => { - var stream = i.MediaStreams.FirstOrDefault(m => m.Type == MediaStreamType.Video); + var stream = i.VideoStream; return stream == null || stream.Width == null ? 0 : stream.Width.Value; }) diff --git a/MediaBrowser.Server.Implementations/Localization/Server/server.json b/MediaBrowser.Server.Implementations/Localization/Server/server.json index 1c58f3e327..9ad5c77c10 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/server.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/server.json @@ -741,6 +741,6 @@ "LabelSeasonNumber": "Season number", "LabelEpisodeNumber": "Episode number", "LabelEndingEpisodeNumber": "Ending episode number", - "HeaderTypeText": "Type Text", + "HeaderTypeText": "Enter Text", "LabelTypeText": "Text" } \ No newline at end of file -- cgit v1.2.3 From 62ffe2c59dd18c58f69275dab55e66020966def8 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 11 May 2014 01:11:53 -0400 Subject: web client backdrops --- MediaBrowser.Model/Dto/BaseItemDto.cs | 6 ------ MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs | 2 +- MediaBrowser.Server.Implementations/Dto/DtoService.cs | 8 -------- .../Localization/Server/server.json | 3 +++ MediaBrowser.WebDashboard/Api/DashboardService.cs | 1 + .../MediaBrowser.WebDashboard.csproj | 18 ++++++++++++++++++ 6 files changed, 23 insertions(+), 15 deletions(-) (limited to 'MediaBrowser.Server.Implementations/Dto') diff --git a/MediaBrowser.Model/Dto/BaseItemDto.cs b/MediaBrowser.Model/Dto/BaseItemDto.cs index f2434afe3a..c469d97d62 100644 --- a/MediaBrowser.Model/Dto/BaseItemDto.cs +++ b/MediaBrowser.Model/Dto/BaseItemDto.cs @@ -325,12 +325,6 @@ namespace MediaBrowser.Model.Dto /// The user data. public UserItemDataDto UserData { get; set; } - /// - /// Gets or sets the recently added item count. - /// - /// The recently added item count. - public int? RecentlyAddedItemCount { get; set; } - /// /// Gets or sets the played percentage. /// diff --git a/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs b/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs index e1857ca600..47a441a4d6 100644 --- a/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs +++ b/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs @@ -413,7 +413,7 @@ namespace MediaBrowser.Providers.MediaInfo { get { - return new[] { ".srt", ".ssa", ".ass" }; + return new[] { ".srt", ".ssa", ".ass", ".sub" }; } } diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs index 1da0b3db9b..97a0ee7038 100644 --- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs +++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs @@ -1419,7 +1419,6 @@ namespace MediaBrowser.Server.Implementations.Dto /// Task. private void SetSpecialCounts(Folder folder, User user, BaseItemDto dto, List fields) { - var rcentlyAddedItemCount = 0; var recursiveItemCount = 0; var unplayed = 0; long runtime = 0; @@ -1456,12 +1455,6 @@ namespace MediaBrowser.Server.Implementations.Dto recursiveItemCount++; - // Check is recently added - //if (child.IsRecentlyAdded()) - //{ - // rcentlyAddedItemCount++; - //} - var isUnplayed = true; // Incrememt totalPercentPlayed @@ -1490,7 +1483,6 @@ namespace MediaBrowser.Server.Implementations.Dto } dto.RecursiveItemCount = recursiveItemCount; - dto.RecentlyAddedItemCount = rcentlyAddedItemCount; dto.RecursiveUnplayedItemCount = unplayed; if (recursiveItemCount > 0) diff --git a/MediaBrowser.Server.Implementations/Localization/Server/server.json b/MediaBrowser.Server.Implementations/Localization/Server/server.json index 9ad5c77c10..258d7bff22 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/server.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/server.json @@ -285,10 +285,13 @@ "PasswordLocalhostMessage": "Passwords are not required when logging in from localhost.", "TabGuide": "Guide", "TabChannels": "Channels", + "TabCollections": "Collections", "HeaderChannels": "Channels", "TabRecordings": "Recordings", "TabScheduled": "Scheduled", "TabSeries": "Series", + "TabFavorites": "Favorites", + "TabMyLibrary": "My Library", "ButtonCancelRecording": "Cancel Recording", "HeaderPrePostPadding": "Pre/Post Padding", "LabelPrePaddingMinutes": "Pre-padding minutes:", diff --git a/MediaBrowser.WebDashboard/Api/DashboardService.cs b/MediaBrowser.WebDashboard/Api/DashboardService.cs index 58a0c84b0f..e551a6e6b9 100644 --- a/MediaBrowser.WebDashboard/Api/DashboardService.cs +++ b/MediaBrowser.WebDashboard/Api/DashboardService.cs @@ -518,6 +518,7 @@ namespace MediaBrowser.WebDashboard.Api "mediacontroller.js", "chromecast.js", "contextmenu.js", + "backdrops.js", "mediaplayer.js", "mediaplayer-video.js", diff --git a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj index ac9d700fab..64ff1cf152 100644 --- a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj +++ b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj @@ -166,6 +166,18 @@ PreserveNewest + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + PreserveNewest @@ -253,6 +265,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest @@ -565,6 +580,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest -- cgit v1.2.3 From 0d605b8672ece5129e833a2e9cde11a8aaf1b62a Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 11 May 2014 18:38:10 -0400 Subject: update subtitle interface --- .../Chapters/ChapterResponse.cs | 19 ++++++++++ .../Chapters/ChapterSearchRequest.cs | 29 +++++++++++++++ .../Chapters/IChapterProvider.cs | 39 ++++++++++++++++++++ .../MediaBrowser.Controller.csproj | 6 ++++ .../Providers/VideoContentType.cs | 19 ++++++++++ .../Subtitles/ISubtitleProvider.cs | 42 ++-------------------- .../Subtitles/SubtitleResponse.cs | 11 ++++++ .../Subtitles/SubtitleSearchRequest.cs | 29 +++++++++++++++ .../MediaBrowser.Model.Portable.csproj | 6 ++++ .../MediaBrowser.Model.net35.csproj | 6 ++++ MediaBrowser.Model/Chapters/RemoteChapterInfo.cs | 18 ++++++++++ MediaBrowser.Model/Chapters/RemoteChapterResult.cs | 36 +++++++++++++++++++ MediaBrowser.Model/Dto/BaseItemPerson.cs | 9 +++-- MediaBrowser.Model/MediaBrowser.Model.csproj | 2 ++ .../MediaInfo/SubtitleDownloader.cs | 9 ++--- .../Subtitles/OpenSubtitleDownloader.cs | 19 +++++----- .../Subtitles/SubtitleManager.cs | 12 ++++--- .../Dto/DtoService.cs | 1 + MediaBrowser.WebDashboard/Api/DashboardService.cs | 1 - .../MediaBrowser.WebDashboard.csproj | 3 -- 20 files changed, 253 insertions(+), 63 deletions(-) create mode 100644 MediaBrowser.Controller/Chapters/ChapterResponse.cs create mode 100644 MediaBrowser.Controller/Chapters/ChapterSearchRequest.cs create mode 100644 MediaBrowser.Controller/Chapters/IChapterProvider.cs create mode 100644 MediaBrowser.Controller/Providers/VideoContentType.cs create mode 100644 MediaBrowser.Controller/Subtitles/SubtitleResponse.cs create mode 100644 MediaBrowser.Controller/Subtitles/SubtitleSearchRequest.cs create mode 100644 MediaBrowser.Model/Chapters/RemoteChapterInfo.cs create mode 100644 MediaBrowser.Model/Chapters/RemoteChapterResult.cs (limited to 'MediaBrowser.Server.Implementations/Dto') diff --git a/MediaBrowser.Controller/Chapters/ChapterResponse.cs b/MediaBrowser.Controller/Chapters/ChapterResponse.cs new file mode 100644 index 0000000000..3c1b8ed079 --- /dev/null +++ b/MediaBrowser.Controller/Chapters/ChapterResponse.cs @@ -0,0 +1,19 @@ +using MediaBrowser.Model.Chapters; +using System.Collections.Generic; + +namespace MediaBrowser.Controller.Chapters +{ + public class ChapterResponse + { + /// + /// Gets or sets the chapters. + /// + /// The chapters. + public List Chapters { get; set; } + + public ChapterResponse() + { + Chapters = new List(); + } + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Chapters/ChapterSearchRequest.cs b/MediaBrowser.Controller/Chapters/ChapterSearchRequest.cs new file mode 100644 index 0000000000..9a53d68ea8 --- /dev/null +++ b/MediaBrowser.Controller/Chapters/ChapterSearchRequest.cs @@ -0,0 +1,29 @@ +using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Entities; +using System; +using System.Collections.Generic; + +namespace MediaBrowser.Controller.Chapters +{ + public class ChapterSearchRequest : IHasProviderIds + { + public string Language { get; set; } + + public VideoContentType ContentType { get; set; } + + public string MediaPath { get; set; } + public string SeriesName { get; set; } + public string Name { get; set; } + public int? IndexNumber { get; set; } + public int? IndexNumberEnd { get; set; } + public int? ParentIndexNumber { get; set; } + public int? ProductionYear { get; set; } + public long? RuntimeTicks { get; set; } + public Dictionary ProviderIds { get; set; } + + public ChapterSearchRequest() + { + ProviderIds = new Dictionary(StringComparer.OrdinalIgnoreCase); + } + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Chapters/IChapterProvider.cs b/MediaBrowser.Controller/Chapters/IChapterProvider.cs new file mode 100644 index 0000000000..a7505347b8 --- /dev/null +++ b/MediaBrowser.Controller/Chapters/IChapterProvider.cs @@ -0,0 +1,39 @@ +using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Chapters; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; + +namespace MediaBrowser.Controller.Chapters +{ + public interface IChapterProvider + { + /// + /// Gets the name. + /// + /// The name. + string Name { get; } + + /// + /// Gets the supported media types. + /// + /// The supported media types. + IEnumerable SupportedMediaTypes { get; } + + /// + /// Searches the specified request. + /// + /// The request. + /// The cancellation token. + /// Task{IEnumerable{RemoteChapterResult}}. + Task> Search(ChapterSearchRequest request, CancellationToken cancellationToken); + + /// + /// Gets the chapters. + /// + /// The identifier. + /// The cancellation token. + /// Task{ChapterResponse}. + Task GetChapters(string id, CancellationToken cancellationToken); + } +} diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index 6a7557e3a5..c7c4c5b5f6 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -77,6 +77,9 @@ + + + @@ -191,6 +194,7 @@ + @@ -269,6 +273,8 @@ + + diff --git a/MediaBrowser.Controller/Providers/VideoContentType.cs b/MediaBrowser.Controller/Providers/VideoContentType.cs new file mode 100644 index 0000000000..903c77612e --- /dev/null +++ b/MediaBrowser.Controller/Providers/VideoContentType.cs @@ -0,0 +1,19 @@ + +namespace MediaBrowser.Controller.Providers +{ + /// + /// Enum VideoContentType + /// + public enum VideoContentType + { + /// + /// The episode + /// + Episode = 0, + + /// + /// The movie + /// + Movie = 1 + } +} diff --git a/MediaBrowser.Controller/Subtitles/ISubtitleProvider.cs b/MediaBrowser.Controller/Subtitles/ISubtitleProvider.cs index 1409b7d503..dceea0cc69 100644 --- a/MediaBrowser.Controller/Subtitles/ISubtitleProvider.cs +++ b/MediaBrowser.Controller/Subtitles/ISubtitleProvider.cs @@ -1,8 +1,6 @@ -using MediaBrowser.Model.Entities; +using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Providers; -using System; using System.Collections.Generic; -using System.IO; using System.Threading; using System.Threading.Tasks; @@ -20,7 +18,7 @@ namespace MediaBrowser.Controller.Subtitles /// Gets the supported media types. /// /// The supported media types. - IEnumerable SupportedMediaTypes { get; } + IEnumerable SupportedMediaTypes { get; } /// /// Searches the subtitles. @@ -28,7 +26,7 @@ namespace MediaBrowser.Controller.Subtitles /// The request. /// The cancellation token. /// Task{IEnumerable{RemoteSubtitleInfo}}. - Task> SearchSubtitles(SubtitleSearchRequest request, CancellationToken cancellationToken); + Task> Search(SubtitleSearchRequest request, CancellationToken cancellationToken); /// /// Gets the subtitles. @@ -38,38 +36,4 @@ namespace MediaBrowser.Controller.Subtitles /// Task{SubtitleResponse}. Task GetSubtitles(string id, CancellationToken cancellationToken); } - - public enum SubtitleMediaType - { - Episode = 0, - Movie = 1 - } - - public class SubtitleResponse - { - public string Language { get; set; } - public string Format { get; set; } - public Stream Stream { get; set; } - } - - public class SubtitleSearchRequest : IHasProviderIds - { - public string Language { get; set; } - - public SubtitleMediaType ContentType { get; set; } - - public string MediaPath { get; set; } - public string SeriesName { get; set; } - public string Name { get; set; } - public int? IndexNumber { get; set; } - public int? IndexNumberEnd { get; set; } - public int? ParentIndexNumber { get; set; } - public int? ProductionYear { get; set; } - public Dictionary ProviderIds { get; set; } - - public SubtitleSearchRequest() - { - ProviderIds = new Dictionary(StringComparer.OrdinalIgnoreCase); - } - } } diff --git a/MediaBrowser.Controller/Subtitles/SubtitleResponse.cs b/MediaBrowser.Controller/Subtitles/SubtitleResponse.cs new file mode 100644 index 0000000000..69e92c1f58 --- /dev/null +++ b/MediaBrowser.Controller/Subtitles/SubtitleResponse.cs @@ -0,0 +1,11 @@ +using System.IO; + +namespace MediaBrowser.Controller.Subtitles +{ + public class SubtitleResponse + { + public string Language { get; set; } + public string Format { get; set; } + public Stream Stream { get; set; } + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Subtitles/SubtitleSearchRequest.cs b/MediaBrowser.Controller/Subtitles/SubtitleSearchRequest.cs new file mode 100644 index 0000000000..e833871298 --- /dev/null +++ b/MediaBrowser.Controller/Subtitles/SubtitleSearchRequest.cs @@ -0,0 +1,29 @@ +using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Entities; +using System; +using System.Collections.Generic; + +namespace MediaBrowser.Controller.Subtitles +{ + public class SubtitleSearchRequest : IHasProviderIds + { + public string Language { get; set; } + + public VideoContentType ContentType { get; set; } + + public string MediaPath { get; set; } + public string SeriesName { get; set; } + public string Name { get; set; } + public int? IndexNumber { get; set; } + public int? IndexNumberEnd { get; set; } + public int? ParentIndexNumber { get; set; } + public int? ProductionYear { get; set; } + public long? RuntimeTicks { get; set; } + public Dictionary ProviderIds { get; set; } + + public SubtitleSearchRequest() + { + ProviderIds = new Dictionary(StringComparer.OrdinalIgnoreCase); + } + } +} \ No newline at end of file diff --git a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj index 57d2657962..ef59f88789 100644 --- a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj +++ b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj @@ -83,6 +83,12 @@ Channels\ChannelQuery.cs + + Chapters\RemoteChapterInfo.cs + + + Chapters\RemoteChapterResult.cs + Configuration\BaseApplicationConfiguration.cs diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj index 318a26b7c5..38ca640197 100644 --- a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj +++ b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj @@ -70,6 +70,12 @@ Channels\ChannelQuery.cs + + Chapters\RemoteChapterInfo.cs + + + Chapters\RemoteChapterResult.cs + Configuration\BaseApplicationConfiguration.cs diff --git a/MediaBrowser.Model/Chapters/RemoteChapterInfo.cs b/MediaBrowser.Model/Chapters/RemoteChapterInfo.cs new file mode 100644 index 0000000000..f2674c8424 --- /dev/null +++ b/MediaBrowser.Model/Chapters/RemoteChapterInfo.cs @@ -0,0 +1,18 @@ + +namespace MediaBrowser.Model.Chapters +{ + public class RemoteChapterInfo + { + /// + /// Gets or sets the start position ticks. + /// + /// The start position ticks. + public long StartPositionTicks { get; set; } + + /// + /// Gets or sets the name. + /// + /// The name. + public string Name { get; set; } + } +} diff --git a/MediaBrowser.Model/Chapters/RemoteChapterResult.cs b/MediaBrowser.Model/Chapters/RemoteChapterResult.cs new file mode 100644 index 0000000000..5c58e5e7b7 --- /dev/null +++ b/MediaBrowser.Model/Chapters/RemoteChapterResult.cs @@ -0,0 +1,36 @@ + +namespace MediaBrowser.Model.Chapters +{ + public class RemoteChapterResult + { + /// + /// Gets or sets the identifier. + /// + /// The identifier. + public string Id { get; set; } + + /// + /// Gets or sets the run time ticks. + /// + /// The run time ticks. + public long? RunTimeTicks { get; set; } + + /// + /// Gets or sets the name. + /// + /// The name. + public string Name { get; set; } + + /// + /// Gets or sets the community rating. + /// + /// The community rating. + public float? CommunityRating { get; set; } + + /// + /// Gets or sets the chapter count. + /// + /// The chapter count. + public int? ChapterCount { get; set; } + } +} diff --git a/MediaBrowser.Model/Dto/BaseItemPerson.cs b/MediaBrowser.Model/Dto/BaseItemPerson.cs index 376ba239d0..b8393f4447 100644 --- a/MediaBrowser.Model/Dto/BaseItemPerson.cs +++ b/MediaBrowser.Model/Dto/BaseItemPerson.cs @@ -1,5 +1,4 @@ -using System; -using System.ComponentModel; +using System.ComponentModel; using System.Diagnostics; using System.Runtime.Serialization; @@ -17,6 +16,12 @@ namespace MediaBrowser.Model.Dto /// The name. public string Name { get; set; } + /// + /// Gets or sets the identifier. + /// + /// The identifier. + public string Id { get; set; } + /// /// Gets or sets the role. /// diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index 748e5f0a82..2c714f8315 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -61,6 +61,8 @@ + + diff --git a/MediaBrowser.Providers/MediaInfo/SubtitleDownloader.cs b/MediaBrowser.Providers/MediaInfo/SubtitleDownloader.cs index af0f91d0b7..cf14cfadc2 100644 --- a/MediaBrowser.Providers/MediaInfo/SubtitleDownloader.cs +++ b/MediaBrowser.Providers/MediaInfo/SubtitleDownloader.cs @@ -1,6 +1,7 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.TV; +using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Subtitles; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; @@ -37,15 +38,15 @@ namespace MediaBrowser.Providers.MediaInfo return new List(); } - SubtitleMediaType mediaType; + VideoContentType mediaType; if (video is Episode) { - mediaType = SubtitleMediaType.Episode; + mediaType = VideoContentType.Episode; } else if (video is Movie) { - mediaType = SubtitleMediaType.Movie; + mediaType = VideoContentType.Movie; } else { @@ -82,7 +83,7 @@ namespace MediaBrowser.Providers.MediaInfo bool skipIfGraphicalSubtitlesPresent, bool skipIfAudioTrackMatches, string language, - SubtitleMediaType mediaType, + VideoContentType mediaType, CancellationToken cancellationToken) { // There's already subtitles for this language diff --git a/MediaBrowser.Providers/Subtitles/OpenSubtitleDownloader.cs b/MediaBrowser.Providers/Subtitles/OpenSubtitleDownloader.cs index 79a301dd39..5b951e0c27 100644 --- a/MediaBrowser.Providers/Subtitles/OpenSubtitleDownloader.cs +++ b/MediaBrowser.Providers/Subtitles/OpenSubtitleDownloader.cs @@ -1,6 +1,7 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Net; using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Security; using MediaBrowser.Controller.Subtitles; using MediaBrowser.Model.Configuration; @@ -72,17 +73,17 @@ namespace MediaBrowser.Providers.Subtitles get { return "Open Subtitles"; } } - public IEnumerable SupportedMediaTypes + public IEnumerable SupportedMediaTypes { get { if (string.IsNullOrWhiteSpace(_config.Configuration.SubtitleOptions.OpenSubtitlesUsername) || string.IsNullOrWhiteSpace(_config.Configuration.SubtitleOptions.OpenSubtitlesPasswordHash)) { - return new SubtitleMediaType[] { }; + return new VideoContentType[] { }; } - return new[] { SubtitleMediaType.Episode, SubtitleMediaType.Movie }; + return new[] { VideoContentType.Episode, VideoContentType.Movie }; } } @@ -163,21 +164,21 @@ namespace MediaBrowser.Providers.Subtitles _lastLogin = DateTime.UtcNow; } - public async Task> SearchSubtitles(SubtitleSearchRequest request, CancellationToken cancellationToken) + public async Task> Search(SubtitleSearchRequest request, CancellationToken cancellationToken) { var imdbIdText = request.GetProviderId(MetadataProviders.Imdb); long imdbId = 0; switch (request.ContentType) { - case SubtitleMediaType.Episode: + case VideoContentType.Episode: if (!request.IndexNumber.HasValue || !request.ParentIndexNumber.HasValue || string.IsNullOrEmpty(request.SeriesName)) { _logger.Debug("Episode information missing"); return new List(); } break; - case SubtitleMediaType.Movie: + case VideoContentType.Movie: if (string.IsNullOrEmpty(request.Name)) { _logger.Debug("Movie name missing"); @@ -206,8 +207,8 @@ namespace MediaBrowser.Providers.Subtitles var hash = Utilities.ComputeHash(request.MediaPath); var fileInfo = new FileInfo(request.MediaPath); var movieByteSize = fileInfo.Length; - var searchImdbId = request.ContentType == SubtitleMediaType.Movie ? imdbId.ToString(_usCulture) : ""; - var subtitleSearchParameters = request.ContentType == SubtitleMediaType.Episode + var searchImdbId = request.ContentType == VideoContentType.Movie ? imdbId.ToString(_usCulture) : ""; + var subtitleSearchParameters = request.ContentType == VideoContentType.Episode ? new List { new SubtitleSearchParameters(subLanguageId, query: request.SeriesName, @@ -234,7 +235,7 @@ namespace MediaBrowser.Providers.Subtitles Predicate mediaFilter = x => - request.ContentType == SubtitleMediaType.Episode + request.ContentType == VideoContentType.Episode ? !string.IsNullOrEmpty(x.SeriesSeason) && !string.IsNullOrEmpty(x.SeriesEpisode) && int.Parse(x.SeriesSeason, _usCulture) == request.ParentIndexNumber && int.Parse(x.SeriesEpisode, _usCulture) == request.IndexNumber diff --git a/MediaBrowser.Providers/Subtitles/SubtitleManager.cs b/MediaBrowser.Providers/Subtitles/SubtitleManager.cs index 6951e8bd08..2d5445653e 100644 --- a/MediaBrowser.Providers/Subtitles/SubtitleManager.cs +++ b/MediaBrowser.Providers/Subtitles/SubtitleManager.cs @@ -3,6 +3,7 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Subtitles; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; @@ -45,7 +46,7 @@ namespace MediaBrowser.Providers.Subtitles { try { - return await i.SearchSubtitles(request, cancellationToken).ConfigureAwait(false); + return await i.Search(request, cancellationToken).ConfigureAwait(false); } catch (Exception ex) { @@ -99,15 +100,15 @@ namespace MediaBrowser.Providers.Subtitles return Task.FromResult>(new List()); } - SubtitleMediaType mediaType; + VideoContentType mediaType; if (video is Episode) { - mediaType = SubtitleMediaType.Episode; + mediaType = VideoContentType.Episode; } else if (video is Movie) { - mediaType = SubtitleMediaType.Movie; + mediaType = VideoContentType.Movie; } else { @@ -124,7 +125,8 @@ namespace MediaBrowser.Providers.Subtitles Name = video.Name, ParentIndexNumber = video.ParentIndexNumber, ProductionYear = video.ProductionYear, - ProviderIds = video.ProviderIds + ProviderIds = video.ProviderIds, + RuntimeTicks = video.RunTimeTicks }; var episode = video as Episode; diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs index 97a0ee7038..4bcbfaf95c 100644 --- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs +++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs @@ -429,6 +429,7 @@ namespace MediaBrowser.Server.Implementations.Dto if (dictionary.TryGetValue(person.Name, out entity)) { baseItemPerson.PrimaryImageTag = GetImageCacheTag(entity, ImageType.Primary); + baseItemPerson.Id = entity.Id.ToString("N"); } dto.People[i] = baseItemPerson; diff --git a/MediaBrowser.WebDashboard/Api/DashboardService.cs b/MediaBrowser.WebDashboard/Api/DashboardService.cs index e551a6e6b9..047758f0d0 100644 --- a/MediaBrowser.WebDashboard/Api/DashboardService.cs +++ b/MediaBrowser.WebDashboard/Api/DashboardService.cs @@ -517,7 +517,6 @@ namespace MediaBrowser.WebDashboard.Api "librarymenu.js", "mediacontroller.js", "chromecast.js", - "contextmenu.js", "backdrops.js", "mediaplayer.js", diff --git a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj index 64ff1cf152..a6a9183e1d 100644 --- a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj +++ b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj @@ -592,9 +592,6 @@ PreserveNewest - - PreserveNewest - PreserveNewest -- cgit v1.2.3