diff --git a/MediaBrowser.Api/BaseApiService.cs b/MediaBrowser.Api/BaseApiService.cs index ca5b8b63a4..569e125302 100644 --- a/MediaBrowser.Api/BaseApiService.cs +++ b/MediaBrowser.Api/BaseApiService.cs @@ -88,9 +88,14 @@ namespace MediaBrowser.Api { var auth = AuthorizationRequestFilterAttribute.GetAuthorization(Request); - return sessionManager.Sessions.First(i => string.Equals(i.DeviceId, auth.DeviceId) && - string.Equals(i.Client, auth.Client) && - string.Equals(i.ApplicationVersion, auth.Version)); + var session = sessionManager.GetSession(auth.DeviceId, auth.Client, auth.Version); + + if (session == null) + { + throw new ArgumentException("Session not found."); + } + + return session; } /// diff --git a/MediaBrowser.Api/SessionsService.cs b/MediaBrowser.Api/SessionsService.cs index 4cb48e9fe8..36f1d65778 100644 --- a/MediaBrowser.Api/SessionsService.cs +++ b/MediaBrowser.Api/SessionsService.cs @@ -285,7 +285,7 @@ namespace MediaBrowser.Api SeekPositionTicks = request.SeekPositionTicks }; - var task = _sessionManager.SendPlaystateCommand(GetSession().Id, request.Id, command, CancellationToken.None); + var task = _sessionManager.SendPlaystateCommand(GetSession(_sessionManager).Id, request.Id, command, CancellationToken.None); Task.WaitAll(task); } @@ -303,7 +303,7 @@ namespace MediaBrowser.Api ItemType = request.ItemType }; - var task = _sessionManager.SendBrowseCommand(GetSession().Id, request.Id, command, CancellationToken.None); + var task = _sessionManager.SendBrowseCommand(GetSession(_sessionManager).Id, request.Id, command, CancellationToken.None); Task.WaitAll(task); } @@ -318,7 +318,7 @@ namespace MediaBrowser.Api if (Enum.TryParse(request.Command, true, out commandType)) { - var currentSession = GetSession(); + var currentSession = GetSession(_sessionManager); var command = new GeneralCommand { @@ -345,7 +345,7 @@ namespace MediaBrowser.Api Text = request.Text }; - var task = _sessionManager.SendMessageCommand(GetSession().Id, request.Id, command, CancellationToken.None); + var task = _sessionManager.SendMessageCommand(GetSession(_sessionManager).Id, request.Id, command, CancellationToken.None); Task.WaitAll(task); } @@ -364,14 +364,14 @@ namespace MediaBrowser.Api StartPositionTicks = request.StartPositionTicks }; - var task = _sessionManager.SendPlayCommand(GetSession().Id, request.Id, command, CancellationToken.None); + var task = _sessionManager.SendPlayCommand(GetSession(_sessionManager).Id, request.Id, command, CancellationToken.None); Task.WaitAll(task); } public void Post(SendGeneralCommand request) { - var currentSession = GetSession(); + var currentSession = GetSession(_sessionManager); var command = new GeneralCommand { @@ -386,7 +386,7 @@ namespace MediaBrowser.Api public void Post(SendFullGeneralCommand request) { - var currentSession = GetSession(); + var currentSession = GetSession(_sessionManager); request.ControllingUserId = currentSession.UserId.HasValue ? currentSession.UserId.Value.ToString("N") : null; @@ -409,7 +409,7 @@ namespace MediaBrowser.Api { if (string.IsNullOrWhiteSpace(request.Id)) { - request.Id = GetSession().Id; + request.Id = GetSession(_sessionManager).Id; } _sessionManager.ReportCapabilities(request.Id, new SessionCapabilities { @@ -422,14 +422,5 @@ namespace MediaBrowser.Api MessageCallbackUrl = request.MessageCallbackUrl }); } - - private SessionInfo GetSession() - { - var auth = AuthorizationRequestFilterAttribute.GetAuthorization(Request); - - return _sessionManager.Sessions.First(i => string.Equals(i.DeviceId, auth.DeviceId) && - string.Equals(i.Client, auth.Client) && - string.Equals(i.ApplicationVersion, auth.Version)); - } } } \ No newline at end of file diff --git a/MediaBrowser.Controller/Session/ISessionManager.cs b/MediaBrowser.Controller/Session/ISessionManager.cs index 8c2ece131f..74ad1b7ee6 100644 --- a/MediaBrowser.Controller/Session/ISessionManager.cs +++ b/MediaBrowser.Controller/Session/ISessionManager.cs @@ -239,5 +239,14 @@ namespace MediaBrowser.Controller.Session /// /// The device identifier. void ClearTranscodingInfo(string deviceId); + + /// + /// Gets the session. + /// + /// The device identifier. + /// The client. + /// The version. + /// SessionInfo. + SessionInfo GetSession(string deviceId, string client, string version); } } \ No newline at end of file diff --git a/MediaBrowser.Dlna/PlayTo/TransportCommands.cs b/MediaBrowser.Dlna/PlayTo/TransportCommands.cs index 2f2276a873..13b9b6b189 100644 --- a/MediaBrowser.Dlna/PlayTo/TransportCommands.cs +++ b/MediaBrowser.Dlna/PlayTo/TransportCommands.cs @@ -146,34 +146,6 @@ namespace MediaBrowser.Dlna.PlayTo return string.Format(CommandBase, action.Name, xmlNamesapce, stateString); } - public string BuildSearchPost(ServiceAction action, string xmlNamesapce, object value, string commandParameter = "") - { - var stateString = string.Empty; - - foreach (var arg in action.ArgumentList) - { - if (arg.Direction == "out") - continue; - - if (arg.Name == "ObjectID") - stateString += BuildArgumentXml(arg, value.ToString()); - else if (arg.Name == "Filter") - stateString += BuildArgumentXml(arg, "*"); - else if (arg.Name == "StartingIndex") - stateString += BuildArgumentXml(arg, "0"); - else if (arg.Name == "RequestedCount") - stateString += BuildArgumentXml(arg, "200"); - else if (arg.Name == "BrowseFlag") - stateString += BuildArgumentXml(arg, null, "BrowseDirectChildren"); - else if (arg.Name == "SortCriteria") - stateString += BuildArgumentXml(arg, ""); - else - stateString += BuildArgumentXml(arg, value.ToString(), commandParameter); - } - - return string.Format(CommandBase, action.Name, xmlNamesapce, stateString); - } - public string BuildPost(ServiceAction action, string xmlNamesapce, object value, Dictionary dictionary) { var stateString = string.Empty; diff --git a/MediaBrowser.Providers/Savers/XmlSaverHelpers.cs b/MediaBrowser.Providers/Savers/XmlSaverHelpers.cs index 6b9ebbfe93..d10422f78e 100644 --- a/MediaBrowser.Providers/Savers/XmlSaverHelpers.cs +++ b/MediaBrowser.Providers/Savers/XmlSaverHelpers.cs @@ -72,6 +72,7 @@ namespace MediaBrowser.Providers.Savers "MusicbrainzId", "Overview", + "ShortOverview", "Persons", "PlotKeywords", "PremiereDate", @@ -257,6 +258,11 @@ namespace MediaBrowser.Providers.Savers } } + if (!string.IsNullOrEmpty(item.Overview)) + { + builder.Append(""); + } + var hasShortOverview = item as IHasShortOverview; if (hasShortOverview != null) { diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs index 28d4769714..034894670d 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs @@ -67,32 +67,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Audio /// true if [is music album] [the specified data]; otherwise, false. public static bool IsMusicAlbum(string path, IDirectoryService directoryService) { - // If list contains at least 2 audio files or at least one and no video files consider it to contain music - var foundAudio = 0; - - foreach (var file in directoryService.GetFiles(path)) - { - var fullName = file.FullName; - - if (EntityResolutionHelper.IsAudioFile(fullName)) - { - // Don't resolve these into audio files - if (string.Equals(Path.GetFileNameWithoutExtension(fullName), BaseItem.ThemeSongFilename) && EntityResolutionHelper.IsAudioFile(fullName)) - { - continue; - } - - foundAudio++; - } - if (foundAudio >= 2) - { - return true; - } - if (EntityResolutionHelper.IsVideoFile(fullName)) return false; - } - - // or a single audio file and no video files - return foundAudio > 0; + return ContainsMusic(directoryService.GetFileSystemEntries(path)); } /// @@ -122,15 +97,31 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Audio // If list contains at least 2 audio files or at least one and no video files consider it to contain music var foundAudio = 0; - foreach (var file in list) + foreach (var fileSystemInfo in list) { - var fullName = file.FullName; + // TODO: Support disc 1, disc 2, etc + if ((fileSystemInfo.Attributes & FileAttributes.Directory) == FileAttributes.Directory) + { + continue; + } - if (EntityResolutionHelper.IsAudioFile(fullName)) foundAudio++; + var fullName = fileSystemInfo.FullName; + + if (EntityResolutionHelper.IsAudioFile(fullName)) + { + // Don't resolve these into audio files + if (string.Equals(Path.GetFileNameWithoutExtension(fullName), BaseItem.ThemeSongFilename) && EntityResolutionHelper.IsAudioFile(fullName)) + { + continue; + } + + foundAudio++; + } if (foundAudio >= 2) { return true; } + if (EntityResolutionHelper.IsVideoFile(fullName)) return false; if (EntityResolutionHelper.IsVideoPlaceHolder(fullName)) return false; } diff --git a/MediaBrowser.Server.Implementations/Session/SessionManager.cs b/MediaBrowser.Server.Implementations/Session/SessionManager.cs index f48431dc1d..4e2b3c7b78 100644 --- a/MediaBrowser.Server.Implementations/Session/SessionManager.cs +++ b/MediaBrowser.Server.Implementations/Session/SessionManager.cs @@ -1516,5 +1516,11 @@ namespace MediaBrowser.Server.Implementations.Session { ReportTranscodingInfo(deviceId, null); } + + public SessionInfo GetSession(string deviceId, string client, string version) + { + return Sessions.FirstOrDefault(i => string.Equals(i.DeviceId, deviceId) && + string.Equals(i.Client, client)); + } } } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Session/SessionWebSocketListener.cs b/MediaBrowser.Server.Implementations/Session/SessionWebSocketListener.cs index 365845f416..a50a6f02ef 100644 --- a/MediaBrowser.Server.Implementations/Session/SessionWebSocketListener.cs +++ b/MediaBrowser.Server.Implementations/Session/SessionWebSocketListener.cs @@ -113,21 +113,13 @@ namespace MediaBrowser.Server.Implementations.Session var version = vals[2]; var deviceName = vals.Length > 3 ? vals[3] : string.Empty; - var session = _sessionManager.Sessions - .FirstOrDefault(i => string.Equals(i.DeviceId, deviceId) && - string.Equals(i.Client, client) && - string.Equals(i.ApplicationVersion, version)); + var session = _sessionManager.GetSession(deviceId, client, version); if (session == null && !string.IsNullOrEmpty(deviceName)) { _logger.Debug("Logging session activity"); - await _sessionManager.LogSessionActivity(client, version, deviceId, deviceName, message.Connection.RemoteEndPoint, null).ConfigureAwait(false); - - session = _sessionManager.Sessions - .FirstOrDefault(i => string.Equals(i.DeviceId, deviceId) && - string.Equals(i.Client, client) && - string.Equals(i.ApplicationVersion, version)); + session = await _sessionManager.LogSessionActivity(client, version, deviceId, deviceName, message.Connection.RemoteEndPoint, null).ConfigureAwait(false); } if (session != null) @@ -197,7 +189,7 @@ namespace MediaBrowser.Server.Implementations.Session } private readonly CultureInfo _usCulture = new CultureInfo("en-US"); - + /// /// Reports the playback start. /// @@ -284,7 +276,7 @@ namespace MediaBrowser.Server.Implementations.Session _sessionManager.OnPlaybackProgress(info); } } - + /// /// Reports the playback progress. /// @@ -362,7 +354,7 @@ namespace MediaBrowser.Server.Implementations.Session _sessionManager.OnPlaybackStopped(info); } } - + /// /// Reports the playback stopped. ///