aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/Session/SessionInfo.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Controller/Session/SessionInfo.cs')
-rw-r--r--MediaBrowser.Controller/Session/SessionInfo.cs309
1 files changed, 0 insertions, 309 deletions
diff --git a/MediaBrowser.Controller/Session/SessionInfo.cs b/MediaBrowser.Controller/Session/SessionInfo.cs
deleted file mode 100644
index 367a7a467..000000000
--- a/MediaBrowser.Controller/Session/SessionInfo.cs
+++ /dev/null
@@ -1,309 +0,0 @@
-using MediaBrowser.Model.Dto;
-using MediaBrowser.Model.Session;
-using System;
-using System.Collections.Generic;
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Model.Logging;
-using MediaBrowser.Model.Threading;
-
-namespace MediaBrowser.Controller.Session
-{
- /// <summary>
- /// Class SessionInfo
- /// </summary>
- public class SessionInfo : IDisposable
- {
- private ISessionManager _sessionManager;
- private readonly ILogger _logger;
-
- public SessionInfo(ISessionManager sessionManager, ILogger logger)
- {
- _sessionManager = sessionManager;
- _logger = logger;
-
- AdditionalUsers = new SessionUserInfo[] { };
- PlayState = new PlayerStateInfo();
- }
-
- public PlayerStateInfo PlayState { get; set; }
-
- public SessionUserInfo[] AdditionalUsers { get; set; }
-
- public ClientCapabilities Capabilities { get; set; }
-
- /// <summary>
- /// Gets or sets the remote end point.
- /// </summary>
- /// <value>The remote end point.</value>
- public string RemoteEndPoint { get; set; }
-
- /// <summary>
- /// Gets or sets the playable media types.
- /// </summary>
- /// <value>The playable media types.</value>
- public string[] PlayableMediaTypes
- {
- get
- {
- if (Capabilities == null)
- {
- return new string[] { };
- }
- return Capabilities.PlayableMediaTypes;
- }
- }
-
- /// <summary>
- /// Gets or sets the id.
- /// </summary>
- /// <value>The id.</value>
- public string Id { get; set; }
-
- /// <summary>
- /// Gets or sets the user id.
- /// </summary>
- /// <value>The user id.</value>
- public Guid? UserId { get; set; }
-
- /// <summary>
- /// Gets or sets the username.
- /// </summary>
- /// <value>The username.</value>
- public string UserName { get; set; }
-
- /// <summary>
- /// Gets or sets the type of the client.
- /// </summary>
- /// <value>The type of the client.</value>
- public string Client { get; set; }
-
- /// <summary>
- /// Gets or sets the last activity date.
- /// </summary>
- /// <value>The last activity date.</value>
- public DateTime LastActivityDate { get; set; }
-
- /// <summary>
- /// Gets or sets the last playback check in.
- /// </summary>
- /// <value>The last playback check in.</value>
- public DateTime LastPlaybackCheckIn { get; set; }
-
- /// <summary>
- /// Gets or sets the name of the device.
- /// </summary>
- /// <value>The name of the device.</value>
- public string DeviceName { get; set; }
-
- /// <summary>
- /// Gets or sets the name of the now viewing item.
- /// </summary>
- /// <value>The name of the now viewing item.</value>
- public BaseItemDto NowViewingItem { get; set; }
-
- /// <summary>
- /// Gets or sets the now playing item.
- /// </summary>
- /// <value>The now playing item.</value>
- public BaseItemDto NowPlayingItem { get; set; }
-
- public BaseItem FullNowPlayingItem { get; set; }
-
- /// <summary>
- /// Gets or sets the device id.
- /// </summary>
- /// <value>The device id.</value>
- public string DeviceId { get; set; }
-
- /// <summary>
- /// Gets or sets the application version.
- /// </summary>
- /// <value>The application version.</value>
- public string ApplicationVersion { get; set; }
-
- /// <summary>
- /// Gets or sets the session controller.
- /// </summary>
- /// <value>The session controller.</value>
- public ISessionController SessionController { get; set; }
-
- /// <summary>
- /// Gets or sets the application icon URL.
- /// </summary>
- /// <value>The application icon URL.</value>
- public string AppIconUrl { get; set; }
-
- /// <summary>
- /// Gets or sets the supported commands.
- /// </summary>
- /// <value>The supported commands.</value>
- public string[] SupportedCommands
- {
- get
- {
- if (Capabilities == null)
- {
- return new string[] { };
- }
- return Capabilities.SupportedCommands;
- }
- }
-
- public TranscodingInfo TranscodingInfo { get; set; }
-
- /// <summary>
- /// Gets a value indicating whether this instance is active.
- /// </summary>
- /// <value><c>true</c> if this instance is active; otherwise, <c>false</c>.</value>
- public bool IsActive
- {
- get
- {
- if (SessionController != null)
- {
- return SessionController.IsSessionActive;
- }
-
- return (DateTime.UtcNow - LastActivityDate).TotalMinutes <= 10;
- }
- }
-
- public bool SupportsMediaControl
- {
- get
- {
- if (Capabilities == null || !Capabilities.SupportsMediaControl)
- {
- return false;
- }
-
- if (SessionController != null)
- {
- return SessionController.SupportsMediaControl;
- }
-
- return false;
- }
- }
-
- public bool ContainsUser(string userId)
- {
- return ContainsUser(new Guid(userId));
- }
-
- public bool ContainsUser(Guid userId)
- {
- if ((UserId ?? Guid.Empty) == userId)
- {
- return true;
- }
-
- foreach (var additionalUser in AdditionalUsers)
- {
- if (userId == new Guid(additionalUser.UserId))
- {
- return true;
- }
- }
- return false;
- }
-
- private readonly object _progressLock = new object();
- private ITimer _progressTimer;
- private PlaybackProgressInfo _lastProgressInfo;
-
- public void StartAutomaticProgress(ITimerFactory timerFactory, PlaybackProgressInfo progressInfo)
- {
- if (_disposed)
- {
- return;
- }
-
- lock (_progressLock)
- {
- _lastProgressInfo = progressInfo;
-
- if (_progressTimer == null)
- {
- _progressTimer = timerFactory.Create(OnProgressTimerCallback, null, 1000, 1000);
- }
- else
- {
- _progressTimer.Change(1000, 1000);
- }
- }
- }
-
- // 1 second
- private const long ProgressIncrement = 10000000;
-
- private async void OnProgressTimerCallback(object state)
- {
- if (_disposed)
- {
- return;
- }
-
- var progressInfo = _lastProgressInfo;
- if (progressInfo == null)
- {
- return;
- }
- if (progressInfo.IsPaused)
- {
- return;
- }
-
- var positionTicks = progressInfo.PositionTicks ?? 0;
- if (positionTicks < 0)
- {
- positionTicks = 0;
- }
-
- var newPositionTicks = positionTicks + ProgressIncrement;
- var item = progressInfo.Item;
- long? runtimeTicks = item == null ? null : item.RunTimeTicks;
-
- // Don't report beyond the runtime
- if (runtimeTicks.HasValue && newPositionTicks >= runtimeTicks.Value)
- {
- return;
- }
-
- progressInfo.PositionTicks = newPositionTicks;
-
- try
- {
- await _sessionManager.OnPlaybackProgress(progressInfo, true).ConfigureAwait(false);
- }
- catch (Exception ex)
- {
- _logger.ErrorException("Error reporting playback progress", ex);
- }
- }
-
- public void StopAutomaticProgress()
- {
- lock (_progressLock)
- {
- if (_progressTimer != null)
- {
- _progressTimer.Dispose();
- _progressTimer = null;
- }
- _lastProgressInfo = null;
- }
- }
-
- private bool _disposed = false;
-
- public void Dispose()
- {
- _disposed = true;
-
- StopAutomaticProgress();
- _sessionManager = null;
- GC.SuppressFinalize(this);
- }
- }
-}