diff options
Diffstat (limited to 'MediaBrowser.Server.Implementations/Session/SessionManager.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Session/SessionManager.cs | 69 |
1 files changed, 54 insertions, 15 deletions
diff --git a/MediaBrowser.Server.Implementations/Session/SessionManager.cs b/MediaBrowser.Server.Implementations/Session/SessionManager.cs index 5a800eae7..d2a047b42 100644 --- a/MediaBrowser.Server.Implementations/Session/SessionManager.cs +++ b/MediaBrowser.Server.Implementations/Session/SessionManager.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Common.Events; +using System.Globalization; +using MediaBrowser.Common.Events; using MediaBrowser.Common.Extensions; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Drawing; @@ -48,6 +49,7 @@ namespace MediaBrowser.Server.Implementations.Session private readonly IMusicManager _musicManager; private readonly IDtoService _dtoService; private readonly IImageProcessor _imageProcessor; + private readonly IItemRepository _itemRepo; /// <summary> /// Gets or sets the configuration manager. @@ -90,7 +92,7 @@ namespace MediaBrowser.Server.Implementations.Session /// <param name="logger">The logger.</param> /// <param name="userRepository">The user repository.</param> /// <param name="libraryManager">The library manager.</param> - public SessionManager(IUserDataManager userDataRepository, IServerConfigurationManager configurationManager, ILogger logger, IUserRepository userRepository, ILibraryManager libraryManager, IUserManager userManager, IMusicManager musicManager, IDtoService dtoService, IImageProcessor imageProcessor) + public SessionManager(IUserDataManager userDataRepository, IServerConfigurationManager configurationManager, ILogger logger, IUserRepository userRepository, ILibraryManager libraryManager, IUserManager userManager, IMusicManager musicManager, IDtoService dtoService, IImageProcessor imageProcessor, IItemRepository itemRepo) { _userDataRepository = userDataRepository; _configurationManager = configurationManager; @@ -101,6 +103,7 @@ namespace MediaBrowser.Server.Implementations.Session _musicManager = musicManager; _dtoService = dtoService; _imageProcessor = imageProcessor; + _itemRepo = itemRepo; } /// <summary> @@ -279,7 +282,18 @@ namespace MediaBrowser.Server.Implementations.Session if (!string.IsNullOrWhiteSpace(info.ItemId) && libraryItem != null) { - info.Item = GetItemInfo(libraryItem, runtimeTicks); + var current = session.NowPlayingItem; + + if (current == null || !string.Equals(current.Id, info.ItemId, StringComparison.OrdinalIgnoreCase)) + { + info.Item = GetItemInfo(libraryItem, libraryItem, info.MediaSourceId); + } + else + { + info.Item = current; + } + + info.Item.RunTimeTicks = runtimeTicks; } session.NowPlayingItem = info.Item; @@ -710,12 +724,20 @@ namespace MediaBrowser.Server.Implementations.Session public Task SendMessageCommand(string controllingSessionId, string sessionId, MessageCommand command, CancellationToken cancellationToken) { - var session = GetSessionForRemoteControl(sessionId); + var generalCommand = new GeneralCommand + { + Name = GeneralCommandType.DisplayMessage.ToString() + }; - var controllingSession = GetSession(controllingSessionId); - AssertCanControl(session, controllingSession); + generalCommand.Arguments["Header"] = command.Header; + generalCommand.Arguments["Text"] = command.Text; - return session.SessionController.SendMessageCommand(command, cancellationToken); + if (command.TimeoutMs.HasValue) + { + generalCommand.Arguments["TimeoutMs"] = command.TimeoutMs.Value.ToString(CultureInfo.InvariantCulture); + } + + return SendGeneralCommand(controllingSessionId, sessionId, generalCommand, cancellationToken); } public Task SendGeneralCommand(string controllingSessionId, string sessionId, GeneralCommand command, CancellationToken cancellationToken) @@ -1171,10 +1193,11 @@ namespace MediaBrowser.Server.Implementations.Session /// Converts a BaseItem to a BaseItemInfo /// </summary> /// <param name="item">The item.</param> - /// <param name="runtimeTicks">The now playing runtime ticks.</param> + /// <param name="chapterOwner">The chapter owner.</param> + /// <param name="mediaSourceId">The media source identifier.</param> /// <returns>BaseItemInfo.</returns> /// <exception cref="System.ArgumentNullException">item</exception> - private BaseItemInfo GetItemInfo(BaseItem item, long? runtimeTicks) + private BaseItemInfo GetItemInfo(BaseItem item, BaseItem chapterOwner, string mediaSourceId) { if (item == null) { @@ -1187,7 +1210,7 @@ namespace MediaBrowser.Server.Implementations.Session Name = item.Name, MediaType = item.MediaType, Type = item.GetClientTypeName(), - RunTimeTicks = runtimeTicks, + RunTimeTicks = item.RunTimeTicks, IndexNumber = item.IndexNumber, ParentIndexNumber = item.ParentIndexNumber, PremiereDate = item.PremiereDate, @@ -1195,7 +1218,7 @@ namespace MediaBrowser.Server.Implementations.Session }; info.PrimaryImageTag = GetImageCacheTag(item, ImageType.Primary); - if (info.PrimaryImageTag.HasValue) + if (info.PrimaryImageTag != null) { info.PrimaryImageItemId = GetDtoId(item); } @@ -1233,14 +1256,14 @@ namespace MediaBrowser.Server.Implementations.Session info.Album = audio.Album; info.Artists = audio.Artists; - if (!info.PrimaryImageTag.HasValue) + if (info.PrimaryImageTag == null) { var album = audio.Parents.OfType<MusicAlbum>().FirstOrDefault(); if (album != null && album.HasImage(ImageType.Primary)) { info.PrimaryImageTag = GetImageCacheTag(album, ImageType.Primary); - if (info.PrimaryImageTag.HasValue) + if (info.PrimaryImageTag != null) { info.PrimaryImageItemId = GetDtoId(album); } @@ -1322,10 +1345,26 @@ namespace MediaBrowser.Server.Implementations.Session info.LogoItemId = GetDtoId(logoItem); } + if (chapterOwner != null) + { + info.ChapterImagesItemId = chapterOwner.Id.ToString("N"); + + info.Chapters = _itemRepo.GetChapters(chapterOwner.Id).Select(i => _dtoService.GetChapterInfoDto(i, chapterOwner)).ToList(); + } + + if (!string.IsNullOrWhiteSpace(mediaSourceId)) + { + info.MediaStreams = _itemRepo.GetMediaStreams(new MediaStreamQuery + { + ItemId = new Guid(mediaSourceId) + + }).ToList(); + } + return info; } - private Guid? GetImageCacheTag(BaseItem item, ImageType type) + private string GetImageCacheTag(BaseItem item, ImageType type) { try { @@ -1347,7 +1386,7 @@ namespace MediaBrowser.Server.Implementations.Session { var item = _libraryManager.GetItemById(new Guid(itemId)); - var info = GetItemInfo(item, item.RunTimeTicks); + var info = GetItemInfo(item, null, null); ReportNowViewingItem(sessionId, info); } |
