diff options
Diffstat (limited to 'MediaBrowser.Controller/Session/SessionInfo.cs')
| -rw-r--r-- | MediaBrowser.Controller/Session/SessionInfo.cs | 43 |
1 files changed, 33 insertions, 10 deletions
diff --git a/MediaBrowser.Controller/Session/SessionInfo.cs b/MediaBrowser.Controller/Session/SessionInfo.cs index 6134c0cf3..25bf23d61 100644 --- a/MediaBrowser.Controller/Session/SessionInfo.cs +++ b/MediaBrowser.Controller/Session/SessionInfo.cs @@ -7,6 +7,7 @@ using System.Collections.Generic; using System.Linq; using System.Text.Json.Serialization; using System.Threading; +using System.Threading.Tasks; using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Session; @@ -17,7 +18,7 @@ namespace MediaBrowser.Controller.Session /// <summary> /// Class SessionInfo. /// </summary> - public sealed class SessionInfo : IDisposable + public sealed class SessionInfo : IAsyncDisposable, IDisposable { // 1 second private const long ProgressIncrement = 10000000; @@ -39,6 +40,8 @@ namespace MediaBrowser.Controller.Session AdditionalUsers = Array.Empty<SessionUserInfo>(); PlayState = new PlayerStateInfo(); SessionControllers = Array.Empty<ISessionController>(); + NowPlayingQueue = Array.Empty<QueueItem>(); + NowPlayingQueueFullItems = Array.Empty<BaseItemDto>(); } public PlayerStateInfo PlayState { get; set; } @@ -61,7 +64,7 @@ namespace MediaBrowser.Controller.Session { get { - if (Capabilities == null) + if (Capabilities is null) { return Array.Empty<string>(); } @@ -179,7 +182,7 @@ namespace MediaBrowser.Controller.Session { get { - if (Capabilities == null || !Capabilities.SupportsMediaControl) + if (Capabilities is null || !Capabilities.SupportsMediaControl) { return false; } @@ -201,7 +204,7 @@ namespace MediaBrowser.Controller.Session { get { - if (Capabilities == null || !Capabilities.SupportsMediaControl) + if (Capabilities is null || !Capabilities.SupportsMediaControl) { return false; } @@ -219,7 +222,9 @@ namespace MediaBrowser.Controller.Session } } - public QueueItem[] NowPlayingQueue { get; set; } + public IReadOnlyList<QueueItem> NowPlayingQueue { get; set; } + + public IReadOnlyList<BaseItemDto> NowPlayingQueueFullItems { get; set; } public bool HasCustomDeviceName { get; set; } @@ -234,7 +239,7 @@ namespace MediaBrowser.Controller.Session /// </summary> /// <value>The supported commands.</value> public IReadOnlyList<GeneralCommandType> SupportedCommands - => Capabilities == null ? Array.Empty<GeneralCommandType>() : Capabilities.SupportedCommands; + => Capabilities is null ? Array.Empty<GeneralCommandType>() : Capabilities.SupportedCommands; public Tuple<ISessionController, bool> EnsureController<T>(Func<SessionInfo, ISessionController> factory) { @@ -291,7 +296,7 @@ namespace MediaBrowser.Controller.Session { _lastProgressInfo = progressInfo; - if (_progressTimer == null) + if (_progressTimer is null) { _progressTimer = new Timer(OnProgressTimerCallback, null, 1000, 1000); } @@ -310,7 +315,7 @@ namespace MediaBrowser.Controller.Session } var progressInfo = _lastProgressInfo; - if (progressInfo == null) + if (progressInfo is null) { return; } @@ -352,7 +357,7 @@ namespace MediaBrowser.Controller.Session { lock (_progressLock) { - if (_progressTimer != null) + if (_progressTimer is not null) { _progressTimer.Dispose(); _progressTimer = null; @@ -376,10 +381,28 @@ namespace MediaBrowser.Controller.Session { if (controller is IDisposable disposable) { - _logger.LogDebug("Disposing session controller {0}", disposable.GetType().Name); + _logger.LogDebug("Disposing session controller synchronously {TypeName}", disposable.GetType().Name); disposable.Dispose(); } } } + + public async ValueTask DisposeAsync() + { + _disposed = true; + + StopAutomaticProgress(); + + var controllers = SessionControllers.ToList(); + + foreach (var controller in controllers) + { + if (controller is IAsyncDisposable disposableAsync) + { + _logger.LogDebug("Disposing session controller asynchronously {TypeName}", disposableAsync.GetType().Name); + await disposableAsync.DisposeAsync().ConfigureAwait(false); + } + } + } } } |
