diff options
| author | Tim Hobbs <jesus.tesh@gmail.com> | 2014-03-24 05:22:11 -0700 |
|---|---|---|
| committer | Tim Hobbs <jesus.tesh@gmail.com> | 2014-03-24 05:22:11 -0700 |
| commit | 543ce24c1051d10b32c0dae5277ee37c27daceae (patch) | |
| tree | a45f20a51af3842097e1ca98ff7653a6a8523675 /MediaBrowser.Server.Implementations | |
| parent | cf5e89d045c616db8a4e83beae0a38c94fcb3e42 (diff) | |
| parent | 9b294c8bc96b31f6c458cc47fa8d330be2df086a (diff) | |
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'MediaBrowser.Server.Implementations')
10 files changed, 157 insertions, 101 deletions
diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs index c94cdda84..66a9284d7 100644 --- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs +++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs @@ -127,7 +127,7 @@ namespace MediaBrowser.Server.Implementations.Dto public BaseItemDto GetItemByNameDto<T>(T item, List<ItemFields> fields, User user = null) where T : BaseItem, IItemByName { - var libraryItems = user != null ? user.RootFolder.GetRecursiveChildren(user) : + var libraryItems = user != null ? user.RootFolder.GetRecursiveChildren(user) : _libraryManager.RootFolder.RecursiveChildren; return GetItemByNameDto(item, fields, item.GetTaggedItems(libraryItems).ToList(), user); @@ -267,12 +267,14 @@ namespace MediaBrowser.Server.Implementations.Dto PlayableMediaTypes = session.PlayableMediaTypes, RemoteEndPoint = session.RemoteEndPoint, AdditionalUsers = session.AdditionalUsers, - SupportsFullscreenToggle = session.SupportsFullscreenToggle + SupportsFullscreenToggle = session.SupportsFullscreenToggle, + SupportsNavigationControl = session.SupportsNavigationControl, + SupportsOsdToggle = session.SupportsOsdToggle }; if (session.NowPlayingItem != null) { - dto.NowPlayingItem = GetBaseItemInfo(session.NowPlayingItem); + dto.NowPlayingItem = GetNowPlayingInfo(session.NowPlayingItem, session.NowPlayingMediaSourceId, session.NowPlayingRunTimeTicks); } if (session.UserId.HasValue) @@ -288,9 +290,11 @@ namespace MediaBrowser.Server.Implementations.Dto /// Converts a BaseItem to a BaseItemInfo /// </summary> /// <param name="item">The item.</param> + /// <param name="mediaSourceId">The media version identifier.</param> + /// <param name="nowPlayingRuntimeTicks">The now playing runtime ticks.</param> /// <returns>BaseItemInfo.</returns> /// <exception cref="System.ArgumentNullException">item</exception> - public BaseItemInfo GetBaseItemInfo(BaseItem item) + private BaseItemInfo GetNowPlayingInfo(BaseItem item, string mediaSourceId, long? nowPlayingRuntimeTicks) { if (item == null) { @@ -303,7 +307,8 @@ namespace MediaBrowser.Server.Implementations.Dto Name = item.Name, MediaType = item.MediaType, Type = item.GetClientTypeName(), - RunTimeTicks = item.RunTimeTicks + RunTimeTicks = nowPlayingRuntimeTicks, + MediaSourceId = mediaSourceId }; info.PrimaryImageTag = GetImageCacheTag(item, ImageType.Primary); @@ -735,7 +740,7 @@ namespace MediaBrowser.Server.Implementations.Dto if (fields.Contains(ItemFields.Settings)) { dto.LockedFields = item.LockedFields; - dto.LockData = item.DontFetchMeta; + dto.LockData = item.IsLocked; } var hasBudget = item as IHasBudget; @@ -1041,7 +1046,7 @@ namespace MediaBrowser.Server.Implementations.Dto { dto.IsPlaceHolder = supportsPlaceHolders.IsPlaceHolder; } - + // Add audio info var audio = item as Audio; if (audio != null) @@ -1058,8 +1063,8 @@ namespace MediaBrowser.Server.Implementations.Dto dto.AlbumPrimaryImageTag = GetImageCacheTag(albumParent, ImageType.Primary); } - dto.MediaVersions = GetMediaVersions(audio); - dto.MediaVersionCount = 1; + dto.MediaSources = GetMediaSources(audio); + dto.MediaSourceCount = 1; } var album = item as MusicAlbum; @@ -1090,22 +1095,20 @@ namespace MediaBrowser.Server.Implementations.Dto dto.IsHD = video.IsHD; dto.PartCount = video.AdditionalPartIds.Count + 1; - dto.MediaVersionCount = video.AlternateVersionCount + 1; + dto.MediaSourceCount = video.MediaSourceCount; - if (fields.Contains(ItemFields.MediaVersions)) + if (fields.Contains(ItemFields.MediaSources)) { - dto.MediaVersions = GetMediaVersions(video); + dto.MediaSources = GetMediaSources(video); } if (fields.Contains(ItemFields.Chapters)) { List<ChapterInfoDto> chapters; - if (dto.MediaVersions != null && dto.MediaVersions.Count > 0) + if (dto.MediaSources != null && dto.MediaSources.Count > 0) { - chapters = dto.MediaVersions.Where(i => i.IsPrimaryVersion) - .SelectMany(i => i.Chapters) - .ToList(); + chapters = _itemRepo.GetChapters(item.Id).Select(c => GetChapterInfoDto(c, item)).ToList(); } else { @@ -1127,9 +1130,9 @@ namespace MediaBrowser.Server.Implementations.Dto { List<MediaStream> mediaStreams; - if (dto.MediaVersions != null && dto.MediaVersions.Count > 0) + if (dto.MediaSources != null && dto.MediaSources.Count > 0) { - mediaStreams = dto.MediaVersions.Where(i => i.IsPrimaryVersion) + mediaStreams = dto.MediaSources.Where(i => new Guid(i.Id) == item.Id) .SelectMany(i => i.MediaStreams) .ToList(); } @@ -1264,11 +1267,11 @@ namespace MediaBrowser.Server.Implementations.Dto } } - private List<MediaVersionInfo> GetMediaVersions(Video item) + private List<MediaSourceInfo> GetMediaSources(Video item) { - var result = item.GetAlternateVersions().Select(i => GetVersionInfo(i, false)).ToList(); + var result = item.GetAlternateVersions().Select(GetVersionInfo).ToList(); - result.Add(GetVersionInfo(item, true)); + result.Add(GetVersionInfo(item)); return result.OrderBy(i => { @@ -1286,49 +1289,47 @@ namespace MediaBrowser.Server.Implementations.Dto return stream == null || stream.Width == null ? 0 : stream.Width.Value; }) - .ThenBy(i => i.IsPrimaryVersion ? 0 : 1) .ToList(); } - private List<MediaVersionInfo> GetMediaVersions(Audio item) + private List<MediaSourceInfo> GetMediaSources(Audio item) { - var result = new List<MediaVersionInfo>(); - - result.Add(GetVersionInfo(item, true)); + var result = new List<MediaSourceInfo> + { + GetVersionInfo(item, true) + }; return result; } - private MediaVersionInfo GetVersionInfo(Video i, bool isPrimary) + private MediaSourceInfo GetVersionInfo(Video i) { - return new MediaVersionInfo - { - Chapters = _itemRepo.GetChapters(i.Id).Select(c => GetChapterInfoDto(c, i)).ToList(), + var mediaStreams = _itemRepo.GetMediaStreams(new MediaStreamQuery { ItemId = i.Id }).ToList(); - ItemId = i.Id.ToString("N"), + return new MediaSourceInfo + { + Id = i.Id.ToString("N"), IsoType = i.IsoType, LocationType = i.LocationType, - MediaStreams = _itemRepo.GetMediaStreams(new MediaStreamQuery { ItemId = i.Id }).ToList(), - Name = GetAlternateVersionName(i), + MediaStreams = mediaStreams, + Name = GetMediaSourceName(i, mediaStreams), Path = GetMappedPath(i), RunTimeTicks = i.RunTimeTicks, Video3DFormat = i.Video3DFormat, - VideoType = i.VideoType, - IsPrimaryVersion = isPrimary + VideoType = i.VideoType }; } - private MediaVersionInfo GetVersionInfo(Audio i, bool isPrimary) + private MediaSourceInfo GetVersionInfo(Audio i, bool isPrimary) { - return new MediaVersionInfo + return new MediaSourceInfo { - ItemId = i.Id.ToString("N"), + Id = i.Id.ToString("N"), LocationType = i.LocationType, MediaStreams = _itemRepo.GetMediaStreams(new MediaStreamQuery { ItemId = i.Id }).ToList(), Name = i.Name, Path = GetMappedPath(i), - RunTimeTicks = i.RunTimeTicks, - IsPrimaryVersion = isPrimary + RunTimeTicks = i.RunTimeTicks }; } @@ -1351,32 +1352,29 @@ namespace MediaBrowser.Server.Implementations.Dto return path; } - private string GetAlternateVersionName(Video video) + private string GetMediaSourceName(Video video, List<MediaStream> mediaStreams) { - var name = ""; + var terms = new List<string>(); - var videoStream = video.GetDefaultVideoStream(); + var videoStream = mediaStreams.FirstOrDefault(i => i.Type == MediaStreamType.Video); + var audioStream = mediaStreams.FirstOrDefault(i => i.Type == MediaStreamType.Audio); if (video.Video3DFormat.HasValue) { - name = "3D " + name; - name = name.Trim(); + terms.Add("3D"); } if (video.VideoType == VideoType.BluRay) { - name = name + " " + "Bluray"; - name = name.Trim(); + terms.Add("Bluray"); } else if (video.VideoType == VideoType.Dvd) { - name = name + " " + "DVD"; - name = name.Trim(); + terms.Add("DVD"); } else if (video.VideoType == VideoType.HdDvd) { - name = name + " " + "HD-DVD"; - name = name.Trim(); + terms.Add("HD-DVD"); } else if (video.VideoType == VideoType.Iso) { @@ -1384,18 +1382,17 @@ namespace MediaBrowser.Server.Implementations.Dto { if (video.IsoType.Value == IsoType.BluRay) { - name = name + " " + "Bluray"; + terms.Add("Bluray"); } else if (video.IsoType.Value == IsoType.Dvd) { - name = name + " " + "DVD"; + terms.Add("DVD"); } } else { - name = name + " " + "ISO"; + terms.Add("ISO"); } - name = name.Trim(); } if (videoStream != null) @@ -1404,44 +1401,45 @@ namespace MediaBrowser.Server.Implementations.Dto { if (videoStream.Width.Value >= 3800) { - name = name + " " + "4K"; - name = name.Trim(); + terms.Add("4K"); } else if (videoStream.Width.Value >= 1900) { - name = name + " " + "1080P"; - name = name.Trim(); + terms.Add("1080P"); } else if (videoStream.Width.Value >= 1270) { - name = name + " " + "720P"; - name = name.Trim(); + terms.Add("720P"); } else if (videoStream.Width.Value >= 700) { - name = name + " " + "480p"; - name = name.Trim(); + terms.Add("480P"); } else { - name = name + " " + "SD"; - name = name.Trim(); + terms.Add("SD"); } } } if (videoStream != null && !string.IsNullOrWhiteSpace(videoStream.Codec)) { - name = name + " " + videoStream.Codec.ToUpper(); - name = name.Trim(); + terms.Add(videoStream.Codec.ToUpper()); } - if (string.IsNullOrWhiteSpace(name)) + if (audioStream != null) { - return video.Name; + var audioCodec = string.Equals(audioStream.Codec, "dca", StringComparison.OrdinalIgnoreCase) + ? audioStream.Profile + : audioStream.Codec; + + if (!string.IsNullOrEmpty(audioCodec)) + { + terms.Add(audioCodec.ToUpper()); + } } - return name; + return string.Join("/", terms.ToArray()); } private string GetMappedPath(string path) diff --git a/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs b/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs index 5d326f1ca..d44811886 100644 --- a/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs +++ b/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs @@ -180,7 +180,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization result.StatusMessage = string.Empty; return; } - + if (fileExists || otherDuplicatePaths.Count > 0) { result.Status = FileSortingStatus.SkippedExisting; @@ -453,24 +453,22 @@ namespace MediaBrowser.Server.Implementations.FileOrganization private bool IsSameEpisode(string sourcePath, string newPath) { + var sourceFileInfo = new FileInfo(sourcePath); + var destinationFileInfo = new FileInfo(newPath); - FileInfo sourceFileInfo = new FileInfo(sourcePath); - FileInfo destinationFileInfo = new FileInfo(newPath); - - try - { - if (sourceFileInfo.Length == destinationFileInfo.Length) - { - return true; - } - } - catch (FileNotFoundException) + try + { + if (sourceFileInfo.Length == destinationFileInfo.Length) { - return false; + return true; } - + } + catch (FileNotFoundException) + { return false; + } + return false; } } } diff --git a/MediaBrowser.Server.Implementations/FileOrganization/NameUtils.cs b/MediaBrowser.Server.Implementations/FileOrganization/NameUtils.cs index 23d0363cb..7f936791a 100644 --- a/MediaBrowser.Server.Implementations/FileOrganization/NameUtils.cs +++ b/MediaBrowser.Server.Implementations/FileOrganization/NameUtils.cs @@ -67,6 +67,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization .Replace("!", " ") .Replace("(", " ") .Replace(")", " ") + .Replace(":", " ") .Replace(",", " ") .Replace("-", " ") .Replace(" a ", String.Empty, StringComparison.OrdinalIgnoreCase) diff --git a/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs b/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs index 65bbb35ba..0a0b3f4bc 100644 --- a/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs +++ b/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs @@ -427,11 +427,11 @@ namespace MediaBrowser.Server.Implementations.IO { if (_updateTimer == null) { - _updateTimer = new Timer(TimerStopped, null, TimeSpan.FromSeconds(ConfigurationManager.Configuration.RealtimeWatcherDelay), TimeSpan.FromMilliseconds(-1)); + _updateTimer = new Timer(TimerStopped, null, TimeSpan.FromSeconds(ConfigurationManager.Configuration.RealtimeMonitorDelay), TimeSpan.FromMilliseconds(-1)); } else { - _updateTimer.Change(TimeSpan.FromSeconds(ConfigurationManager.Configuration.RealtimeWatcherDelay), TimeSpan.FromMilliseconds(-1)); + _updateTimer.Change(TimeSpan.FromSeconds(ConfigurationManager.Configuration.RealtimeMonitorDelay), TimeSpan.FromMilliseconds(-1)); } } } diff --git a/MediaBrowser.Server.Implementations/Library/ResolverHelper.cs b/MediaBrowser.Server.Implementations/Library/ResolverHelper.cs index ad2db5abb..3097495e3 100644 --- a/MediaBrowser.Server.Implementations/Library/ResolverHelper.cs +++ b/MediaBrowser.Server.Implementations/Library/ResolverHelper.cs @@ -47,7 +47,7 @@ namespace MediaBrowser.Server.Implementations.Library EnsureName(item, args); item.DontFetchMeta = item.Path.IndexOf("[dontfetchmeta]", StringComparison.OrdinalIgnoreCase) != -1 || - item.Parents.Any(i => i.DontFetchMeta); + item.Parents.Any(i => i.IsLocked); // Make sure DateCreated and DateModified have values EntityResolutionHelper.EnsureDates(fileSystem, item, args, true); diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs index d7b2b1321..13a1e8f16 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs @@ -190,7 +190,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies /// <param name="directoryService">The directory service.</param> /// <param name="supportMultiFileItems">if set to <c>true</c> [support multi file items].</param> /// <returns>Movie.</returns> - private T FindMovie<T>(string path, Folder parent, IEnumerable<FileSystemInfo> fileSystemEntries, IDirectoryService directoryService, bool supportMultiFileItems, bool supportsAlternateVersions) + private T FindMovie<T>(string path, Folder parent, IEnumerable<FileSystemInfo> fileSystemEntries, IDirectoryService directoryService, bool supportMultiFileItems, bool supportsMultipleSources) where T : Video, new() { var movies = new List<T>(); @@ -262,9 +262,9 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies return result; } } - if (supportsAlternateVersions) + if (supportsMultipleSources) { - var result = GetMovieWithAlternateVersions(movies); + var result = GetMovieWithMultipleSources(movies); if (result != null) { @@ -393,7 +393,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies return null; } - private T GetMovieWithAlternateVersions<T>(IEnumerable<T> movies) + private T GetMovieWithMultipleSources<T>(IEnumerable<T> movies) where T : Video, new() { var sortedMovies = movies.OrderBy(i => i.Path).ToList(); diff --git a/MediaBrowser.Server.Implementations/Roku/RokuControllerFactory.cs b/MediaBrowser.Server.Implementations/Roku/RokuControllerFactory.cs index 71f70421a..53f28e7ae 100644 --- a/MediaBrowser.Server.Implementations/Roku/RokuControllerFactory.cs +++ b/MediaBrowser.Server.Implementations/Roku/RokuControllerFactory.cs @@ -1,8 +1,10 @@ using MediaBrowser.Common.Net; using MediaBrowser.Controller; using MediaBrowser.Controller.Session; +using MediaBrowser.Model.Entities; using MediaBrowser.Model.Serialization; using System; +using System.Collections.Generic; namespace MediaBrowser.Server.Implementations.Roku { @@ -23,6 +25,9 @@ namespace MediaBrowser.Server.Implementations.Roku { if (string.Equals(session.Client, "roku", StringComparison.OrdinalIgnoreCase)) { + session.PlayableMediaTypes = new List<string> { MediaType.Video, MediaType.Audio }; + session.SupportsFullscreenToggle = false; + return new RokuSessionController(_httpClient, _json, _appHost, session); } diff --git a/MediaBrowser.Server.Implementations/Session/SessionManager.cs b/MediaBrowser.Server.Implementations/Session/SessionManager.cs index 1fb5af127..9d405a175 100644 --- a/MediaBrowser.Server.Implementations/Session/SessionManager.cs +++ b/MediaBrowser.Server.Implementations/Session/SessionManager.cs @@ -218,15 +218,29 @@ namespace MediaBrowser.Server.Implementations.Session /// </summary> /// <param name="session">The session.</param> /// <param name="item">The item.</param> + /// <param name="mediaSourceId">The media version identifier.</param> /// <param name="isPaused">if set to <c>true</c> [is paused].</param> + /// <param name="isMuted">if set to <c>true</c> [is muted].</param> /// <param name="currentPositionTicks">The current position ticks.</param> - private void UpdateNowPlayingItem(SessionInfo session, BaseItem item, bool isPaused, bool isMuted, long? currentPositionTicks = null) + private void UpdateNowPlayingItem(SessionInfo session, BaseItem item, string mediaSourceId, bool isPaused, bool isMuted, long? currentPositionTicks = null) { session.IsMuted = isMuted; session.IsPaused = isPaused; session.NowPlayingPositionTicks = currentPositionTicks; session.NowPlayingItem = item; session.LastActivityDate = DateTime.UtcNow; + session.NowPlayingMediaSourceId = mediaSourceId; + + if (string.IsNullOrWhiteSpace(mediaSourceId)) + { + session.NowPlayingRunTimeTicks = item.RunTimeTicks; + } + else + { + var version = _libraryManager.GetItemById(new Guid(mediaSourceId)); + + session.NowPlayingRunTimeTicks = version.RunTimeTicks; + } } /// <summary> @@ -246,6 +260,8 @@ namespace MediaBrowser.Server.Implementations.Session session.NowPlayingItem = null; session.NowPlayingPositionTicks = null; session.IsPaused = false; + session.NowPlayingRunTimeTicks = null; + session.NowPlayingMediaSourceId = null; } } @@ -352,7 +368,9 @@ namespace MediaBrowser.Server.Implementations.Session var item = info.Item; - UpdateNowPlayingItem(session, item, false, false); + var mediaSourceId = GetMediaSourceId(item, info.MediaSourceId); + + UpdateNowPlayingItem(session, item, mediaSourceId, false, false); session.CanSeek = info.CanSeek; session.QueueableMediaTypes = info.QueueableMediaTypes; @@ -371,7 +389,8 @@ namespace MediaBrowser.Server.Implementations.Session EventHelper.QueueEventIfNotNull(PlaybackStart, this, new PlaybackProgressEventArgs { Item = item, - Users = users + Users = users, + MediaSourceId = info.MediaSourceId }, _logger); } @@ -405,7 +424,7 @@ namespace MediaBrowser.Server.Implementations.Session /// <returns>Task.</returns> /// <exception cref="System.ArgumentNullException"></exception> /// <exception cref="System.ArgumentOutOfRangeException">positionTicks</exception> - public async Task OnPlaybackProgress(PlaybackProgressInfo info) + public async Task OnPlaybackProgress(Controller.Session.PlaybackProgressInfo info) { if (info == null) { @@ -419,7 +438,9 @@ namespace MediaBrowser.Server.Implementations.Session var session = Sessions.First(i => i.Id.Equals(info.SessionId)); - UpdateNowPlayingItem(session, info.Item, info.IsPaused, info.IsMuted, info.PositionTicks); + var mediaSourceId = GetMediaSourceId(info.Item, info.MediaSourceId); + + UpdateNowPlayingItem(session, info.Item, mediaSourceId, info.IsPaused, info.IsMuted, info.PositionTicks); var key = info.Item.GetUserDataKey(); @@ -434,7 +455,8 @@ namespace MediaBrowser.Server.Implementations.Session { Item = info.Item, Users = users, - PlaybackPositionTicks = info.PositionTicks + PlaybackPositionTicks = info.PositionTicks, + MediaSourceId = mediaSourceId }, _logger); } @@ -458,7 +480,7 @@ namespace MediaBrowser.Server.Implementations.Session /// <returns>Task.</returns> /// <exception cref="System.ArgumentNullException">info</exception> /// <exception cref="System.ArgumentOutOfRangeException">positionTicks</exception> - public async Task OnPlaybackStopped(PlaybackStopInfo info) + public async Task OnPlaybackStopped(Controller.Session.PlaybackStopInfo info) { if (info == null) { @@ -494,16 +516,32 @@ namespace MediaBrowser.Server.Implementations.Session playedToCompletion = await OnPlaybackStopped(user.Id, key, info.Item, info.PositionTicks).ConfigureAwait(false); } + var mediaSourceId = GetMediaSourceId(info.Item, info.MediaSourceId); + EventHelper.QueueEventIfNotNull(PlaybackStopped, this, new PlaybackStopEventArgs { Item = info.Item, Users = users, PlaybackPositionTicks = info.PositionTicks, - PlayedToCompletion = playedToCompletion + PlayedToCompletion = playedToCompletion, + MediaSourceId = mediaSourceId }, _logger); } + private string GetMediaSourceId(BaseItem item, string reportedMediaSourceId) + { + if (string.IsNullOrWhiteSpace(reportedMediaSourceId)) + { + if (item is Video || item is Audio) + { + reportedMediaSourceId = item.Id.ToString("N"); + } + } + + return reportedMediaSourceId; + } + private async Task<bool> OnPlaybackStopped(Guid userId, string userDataKey, BaseItem item, long? positionTicks) { var data = _userDataRepository.GetUserData(userId, userDataKey); @@ -899,6 +937,8 @@ namespace MediaBrowser.Server.Implementations.Session session.PlayableMediaTypes = capabilities.PlayableMediaTypes.ToList(); session.SupportsFullscreenToggle = capabilities.SupportsFullscreenToggle; + session.SupportsOsdToggle = capabilities.SupportsOsdToggle; + session.SupportsNavigationControl = capabilities.SupportsNavigationControl; } } }
\ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Session/SessionWebSocketListener.cs b/MediaBrowser.Server.Implementations/Session/SessionWebSocketListener.cs index e5fbc7d9f..fe32e2328 100644 --- a/MediaBrowser.Server.Implementations/Session/SessionWebSocketListener.cs +++ b/MediaBrowser.Server.Implementations/Session/SessionWebSocketListener.cs @@ -223,6 +223,11 @@ namespace MediaBrowser.Server.Implementations.Session QueueableMediaTypes = queueableMediaTypes.Split(',').ToList() }; + if (vals.Length > 3) + { + info.MediaSourceId = vals[3]; + } + _sessionManager.OnPlaybackStart(info); } } @@ -265,6 +270,11 @@ namespace MediaBrowser.Server.Implementations.Session SessionId = session.Id }; + if (vals.Length > 4) + { + info.MediaSourceId = vals[4]; + } + _sessionManager.OnPlaybackProgress(info); } } @@ -304,6 +314,11 @@ namespace MediaBrowser.Server.Implementations.Session SessionId = session.Id }; + if (vals.Length > 2) + { + info.MediaSourceId = vals[2]; + } + _sessionManager.OnPlaybackStopped(info); } } diff --git a/MediaBrowser.Server.Implementations/Sorting/AlphanumComparator.cs b/MediaBrowser.Server.Implementations/Sorting/AlphanumComparator.cs index 39a68b3f6..b76bf0a9c 100644 --- a/MediaBrowser.Server.Implementations/Sorting/AlphanumComparator.cs +++ b/MediaBrowser.Server.Implementations/Sorting/AlphanumComparator.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Text; namespace MediaBrowser.Server.Implementations.Sorting |
