diff options
Diffstat (limited to 'MediaBrowser.Dlna/PlayTo/PlayToController.cs')
| -rw-r--r-- | MediaBrowser.Dlna/PlayTo/PlayToController.cs | 76 |
1 files changed, 42 insertions, 34 deletions
diff --git a/MediaBrowser.Dlna/PlayTo/PlayToController.cs b/MediaBrowser.Dlna/PlayTo/PlayToController.cs index bef3f6d0e8..1989c437aa 100644 --- a/MediaBrowser.Dlna/PlayTo/PlayToController.cs +++ b/MediaBrowser.Dlna/PlayTo/PlayToController.cs @@ -2,6 +2,7 @@ using MediaBrowser.Controller.Drawing; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.Localization; using MediaBrowser.Controller.Persistence; using MediaBrowser.Controller.Session; using MediaBrowser.Dlna.Didl; @@ -33,6 +34,7 @@ namespace MediaBrowser.Dlna.PlayTo private readonly IUserManager _userManager; private readonly IImageProcessor _imageProcessor; private readonly IUserDataManager _userDataManager; + private readonly ILocalizationManager _localization; private readonly DeviceDiscovery _deviceDiscovery; private readonly string _serverAddress; @@ -52,7 +54,7 @@ namespace MediaBrowser.Dlna.PlayTo private Timer _updateTimer; - public PlayToController(SessionInfo session, ISessionManager sessionManager, IItemRepository itemRepository, ILibraryManager libraryManager, ILogger logger, IDlnaManager dlnaManager, IUserManager userManager, IImageProcessor imageProcessor, string serverAddress, DeviceDiscovery deviceDiscovery, IUserDataManager userDataManager) + public PlayToController(SessionInfo session, ISessionManager sessionManager, IItemRepository itemRepository, ILibraryManager libraryManager, ILogger logger, IDlnaManager dlnaManager, IUserManager userManager, IImageProcessor imageProcessor, string serverAddress, DeviceDiscovery deviceDiscovery, IUserDataManager userDataManager, ILocalizationManager localization) { _session = session; _itemRepository = itemRepository; @@ -64,6 +66,7 @@ namespace MediaBrowser.Dlna.PlayTo _serverAddress = serverAddress; _deviceDiscovery = deviceDiscovery; _userDataManager = userDataManager; + _localization = localization; _logger = logger; } @@ -136,16 +139,21 @@ namespace MediaBrowser.Dlna.PlayTo try { var streamInfo = StreamParams.ParseFromUrl(e.OldMediaInfo.Url, _libraryManager); - var progress = GetProgressInfo(e.OldMediaInfo, streamInfo); + if (streamInfo.Item != null) + { + var progress = GetProgressInfo(e.OldMediaInfo, streamInfo); - var positionTicks = progress.PositionTicks; + var positionTicks = progress.PositionTicks; - ReportPlaybackStopped(e.OldMediaInfo, streamInfo, positionTicks); + ReportPlaybackStopped(e.OldMediaInfo, streamInfo, positionTicks); + } streamInfo = StreamParams.ParseFromUrl(e.NewMediaInfo.Url, _libraryManager); - progress = GetProgressInfo(e.NewMediaInfo, streamInfo); + if (streamInfo.Item == null) return; + + var newItemProgress = GetProgressInfo(e.NewMediaInfo, streamInfo); - await _sessionManager.OnPlaybackStart(progress).ConfigureAwait(false); + await _sessionManager.OnPlaybackStart(newItemProgress).ConfigureAwait(false); } catch (Exception ex) { @@ -158,6 +166,9 @@ namespace MediaBrowser.Dlna.PlayTo try { var streamInfo = StreamParams.ParseFromUrl(e.MediaInfo.Url, _libraryManager); + + if (streamInfo.Item == null) return; + var progress = GetProgressInfo(e.MediaInfo, streamInfo); var positionTicks = progress.PositionTicks; @@ -216,9 +227,14 @@ namespace MediaBrowser.Dlna.PlayTo { try { - var info = GetProgressInfo(e.MediaInfo); + var info = StreamParams.ParseFromUrl(e.MediaInfo.Url, _libraryManager); + + if (info.Item != null) + { + var progress = GetProgressInfo(e.MediaInfo, info); - await _sessionManager.OnPlaybackStart(info).ConfigureAwait(false); + await _sessionManager.OnPlaybackStart(progress).ConfigureAwait(false); + } } catch (Exception ex) { @@ -230,9 +246,14 @@ namespace MediaBrowser.Dlna.PlayTo { try { - var info = GetProgressInfo(e.MediaInfo); + var info = StreamParams.ParseFromUrl(e.MediaInfo.Url, _libraryManager); + + if (info.Item != null) + { + var progress = GetProgressInfo(e.MediaInfo, info); - await _sessionManager.OnPlaybackProgress(info).ConfigureAwait(false); + await _sessionManager.OnPlaybackProgress(progress).ConfigureAwait(false); + } } catch (Exception ex) { @@ -240,13 +261,6 @@ namespace MediaBrowser.Dlna.PlayTo } } - private PlaybackStartInfo GetProgressInfo(uBaseObject mediaInfo) - { - var info = StreamParams.ParseFromUrl(mediaInfo.Url, _libraryManager); - - return GetProgressInfo(mediaInfo, info); - } - private PlaybackStartInfo GetProgressInfo(uBaseObject mediaInfo, StreamParams info) { var ticks = _device.Position.Ticks; @@ -438,19 +452,9 @@ namespace MediaBrowser.Dlna.PlayTo private void AddItemFromId(Guid id, List<BaseItem> list) { var item = _libraryManager.GetItemById(id); - if (item.IsFolder) - { - foreach (var childId in _itemRepository.GetChildren(item.Id)) - { - AddItemFromId(childId, list); - } - } - else + if (item.MediaType == MediaType.Audio || item.MediaType == MediaType.Video) { - if (item.MediaType == MediaType.Audio || item.MediaType == MediaType.Video) - { - list.Add(item); - } + list.Add(item); } } @@ -476,7 +480,8 @@ namespace MediaBrowser.Dlna.PlayTo playlistItem.StreamUrl = playlistItem.StreamInfo.ToUrl(serverAddress); - var itemXml = new DidlBuilder(profile, user, _imageProcessor, serverAddress, _userDataManager).GetItemDidl(item, _session.DeviceId, new Filter(), playlistItem.StreamInfo); + var itemXml = new DidlBuilder(profile, user, _imageProcessor, serverAddress, _userDataManager, _localization) + .GetItemDidl(item, null, _session.DeviceId, new Filter(), playlistItem.StreamInfo); playlistItem.Didl = itemXml; @@ -522,6 +527,7 @@ namespace MediaBrowser.Dlna.PlayTo streamInfo.TargetPacketLength, streamInfo.TranscodeSeekInfo, streamInfo.IsTargetAnamorphic, + streamInfo.IsTargetCabac, streamInfo.TargetRefFrames); return list.FirstOrDefault(); @@ -732,10 +738,10 @@ namespace MediaBrowser.Dlna.PlayTo if (media != null) { var info = StreamParams.ParseFromUrl(media.Url, _libraryManager); - var progress = GetProgressInfo(media, info); if (info.Item != null) { + var progress = GetProgressInfo(media, info); var newPosition = progress.PositionTicks ?? 0; var user = _session.UserId.HasValue ? _userManager.GetUserById(_session.UserId.Value) : null; @@ -758,10 +764,10 @@ namespace MediaBrowser.Dlna.PlayTo if (media != null) { var info = StreamParams.ParseFromUrl(media.Url, _libraryManager); - var progress = GetProgressInfo(media, info); if (info.Item != null) { + var progress = GetProgressInfo(media, info); var newPosition = progress.PositionTicks ?? 0; var user = _session.UserId.HasValue ? _userManager.GetUserById(_session.UserId.Value) : null; @@ -825,7 +831,9 @@ namespace MediaBrowser.Dlna.PlayTo ItemId = GetItemId(url) }; - if (string.IsNullOrWhiteSpace(request.ItemId)) + Guid parsedId; + + if (string.IsNullOrWhiteSpace(request.ItemId) || !Guid.TryParse(request.ItemId, out parsedId)) { return request; } @@ -878,7 +886,7 @@ namespace MediaBrowser.Dlna.PlayTo request.Item = string.IsNullOrWhiteSpace(request.ItemId) ? null - : libraryManager.GetItemById(new Guid(request.ItemId)); + : libraryManager.GetItemById(parsedId); var hasMediaSources = request.Item as IHasMediaSources; |
