diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-10-11 16:38:13 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-10-11 16:38:13 -0400 |
| commit | f3539686bd7ff6c748a0a9441086538081fa8903 (patch) | |
| tree | 84b6a6e89fddb206d3b8cc503423876e45100fa9 /MediaBrowser.Server.Implementations/Session/SessionManager.cs | |
| parent | 2486cffa7171629d09857981b8987727642f6f02 (diff) | |
add device upload options
Diffstat (limited to 'MediaBrowser.Server.Implementations/Session/SessionManager.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Session/SessionManager.cs | 80 |
1 files changed, 25 insertions, 55 deletions
diff --git a/MediaBrowser.Server.Implementations/Session/SessionManager.cs b/MediaBrowser.Server.Implementations/Session/SessionManager.cs index 58a6f649c..10c89c613 100644 --- a/MediaBrowser.Server.Implementations/Session/SessionManager.cs +++ b/MediaBrowser.Server.Implementations/Session/SessionManager.cs @@ -3,6 +3,7 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Net; using MediaBrowser.Controller; using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Devices; using MediaBrowser.Controller.Drawing; using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Entities; @@ -64,6 +65,7 @@ namespace MediaBrowser.Server.Implementations.Session private readonly IServerApplicationHost _appHost; private readonly IAuthenticationRepository _authRepo; + private readonly IDeviceManager _deviceManager; /// <summary> /// Gets or sets the configuration manager. @@ -80,7 +82,7 @@ namespace MediaBrowser.Server.Implementations.Session public event EventHandler<GenericEventArgs<AuthenticationRequest>> AuthenticationFailed; public event EventHandler<GenericEventArgs<AuthenticationRequest>> AuthenticationSucceeded; - + /// <summary> /// Occurs when [playback start]. /// </summary> @@ -111,7 +113,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, IItemRepository itemRepo, IJsonSerializer jsonSerializer, IServerApplicationHost appHost, IHttpClient httpClient, IAuthenticationRepository authRepo) + public SessionManager(IUserDataManager userDataRepository, IServerConfigurationManager configurationManager, ILogger logger, IUserRepository userRepository, ILibraryManager libraryManager, IUserManager userManager, IMusicManager musicManager, IDtoService dtoService, IImageProcessor imageProcessor, IItemRepository itemRepo, IJsonSerializer jsonSerializer, IServerApplicationHost appHost, IHttpClient httpClient, IAuthenticationRepository authRepo, IDeviceManager deviceManager) { _userDataRepository = userDataRepository; _configurationManager = configurationManager; @@ -127,6 +129,7 @@ namespace MediaBrowser.Server.Implementations.Session _appHost = appHost; _httpClient = httpClient; _authRepo = authRepo; + _deviceManager = deviceManager; } /// <summary> @@ -394,7 +397,9 @@ namespace MediaBrowser.Server.Implementations.Session try { - var connection = _activeConnections.GetOrAdd(key, keyName => + SessionInfo connection; + + if (!_activeConnections.TryGetValue(key, out connection)) { var sessionInfo = new SessionInfo { @@ -411,8 +416,15 @@ namespace MediaBrowser.Server.Implementations.Session OnSessionStarted(sessionInfo); - return sessionInfo; - }); + _activeConnections.TryAdd(key, sessionInfo); + connection = sessionInfo; + + if (!string.IsNullOrEmpty(deviceId)) + { + var userIdString = userId.HasValue ? userId.Value.ToString("N") : null; + await _deviceManager.RegisterDevice(deviceId, deviceName, userIdString).ConfigureAwait(false); + } + } connection.DeviceName = deviceName; connection.UserId = userId; @@ -1226,7 +1238,7 @@ namespace MediaBrowser.Server.Implementations.Session var token = await GetAuthorizationToken(user.Id.ToString("N"), request.DeviceId, request.App, request.DeviceName).ConfigureAwait(false); EventHelper.FireEventIfNotNull(AuthenticationSucceeded, this, new GenericEventArgs<AuthenticationRequest>(request), _logger); - + var session = await LogSessionActivity(request.App, request.AppVersion, request.DeviceId, @@ -1234,7 +1246,7 @@ namespace MediaBrowser.Server.Implementations.Session request.RemoteEndPoint, user) .ConfigureAwait(false); - + return new AuthenticationResult { User = _userManager.GetUserDto(user, request.RemoteEndPoint), @@ -1339,7 +1351,7 @@ namespace MediaBrowser.Server.Implementations.Session /// </summary> /// <param name="sessionId">The session identifier.</param> /// <param name="capabilities">The capabilities.</param> - public void ReportCapabilities(string sessionId, SessionCapabilities capabilities) + public void ReportCapabilities(string sessionId, ClientCapabilities capabilities) { var session = GetSession(sessionId); @@ -1347,7 +1359,7 @@ namespace MediaBrowser.Server.Implementations.Session } private async void ReportCapabilities(SessionInfo session, - SessionCapabilities capabilities, + ClientCapabilities capabilities, bool saveCapabilities) { session.PlayableMediaTypes = capabilities.PlayableMediaTypes; @@ -1375,56 +1387,14 @@ namespace MediaBrowser.Server.Implementations.Session } } - private string GetCapabilitiesFilePath(string deviceId) + private ClientCapabilities GetSavedCapabilities(string deviceId) { - var filename = deviceId.GetMD5().ToString("N") + ".json"; - - return Path.Combine(_configurationManager.ApplicationPaths.CachePath, "devices", filename); - } - - private SessionCapabilities GetSavedCapabilities(string deviceId) - { - var path = GetCapabilitiesFilePath(deviceId); - - try - { - return _jsonSerializer.DeserializeFromFile<SessionCapabilities>(path); - } - catch (DirectoryNotFoundException) - { - return null; - } - catch (FileNotFoundException) - { - return null; - } - catch (Exception ex) - { - _logger.ErrorException("Error getting saved capabilities", ex); - return null; - } + return _deviceManager.GetCapabilities(deviceId); } - private readonly SemaphoreSlim _capabilitiesLock = new SemaphoreSlim(1, 1); - private async Task SaveCapabilities(string deviceId, SessionCapabilities capabilities) + private Task SaveCapabilities(string deviceId, ClientCapabilities capabilities) { - var path = GetCapabilitiesFilePath(deviceId); - Directory.CreateDirectory(Path.GetDirectoryName(path)); - - await _capabilitiesLock.WaitAsync().ConfigureAwait(false); - - try - { - _jsonSerializer.SerializeToFile(capabilities, path); - } - catch (Exception ex) - { - _logger.ErrorException("Error saving to {0}", ex, path); - } - finally - { - _capabilitiesLock.Release(); - } + return _deviceManager.SaveCapabilities(deviceId, capabilities); } public SessionInfoDto GetSessionInfoDto(SessionInfo session) |
