|
|
|
@ -41,12 +41,7 @@ namespace MediaBrowser.Server.Implementations.Session
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// The _user data repository
|
|
|
|
|
/// </summary>
|
|
|
|
|
private readonly IUserDataManager _userDataRepository;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// The _user repository
|
|
|
|
|
/// </summary>
|
|
|
|
|
private readonly IUserRepository _userRepository;
|
|
|
|
|
private readonly IUserDataManager _userDataManager;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// The _logger
|
|
|
|
@ -99,11 +94,10 @@ namespace MediaBrowser.Server.Implementations.Session
|
|
|
|
|
|
|
|
|
|
private readonly SemaphoreSlim _sessionLock = new SemaphoreSlim(1, 1);
|
|
|
|
|
|
|
|
|
|
public SessionManager(IUserDataManager userDataRepository, ILogger logger, IUserRepository userRepository, ILibraryManager libraryManager, IUserManager userManager, IMusicManager musicManager, IDtoService dtoService, IImageProcessor imageProcessor, IJsonSerializer jsonSerializer, IServerApplicationHost appHost, IHttpClient httpClient, IAuthenticationRepository authRepo, IDeviceManager deviceManager, IMediaSourceManager mediaSourceManager)
|
|
|
|
|
public SessionManager(IUserDataManager userDataManager, ILogger logger, ILibraryManager libraryManager, IUserManager userManager, IMusicManager musicManager, IDtoService dtoService, IImageProcessor imageProcessor, IJsonSerializer jsonSerializer, IServerApplicationHost appHost, IHttpClient httpClient, IAuthenticationRepository authRepo, IDeviceManager deviceManager, IMediaSourceManager mediaSourceManager)
|
|
|
|
|
{
|
|
|
|
|
_userDataRepository = userDataRepository;
|
|
|
|
|
_userDataManager = userDataManager;
|
|
|
|
|
_logger = logger;
|
|
|
|
|
_userRepository = userRepository;
|
|
|
|
|
_libraryManager = libraryManager;
|
|
|
|
|
_userManager = userManager;
|
|
|
|
|
_musicManager = musicManager;
|
|
|
|
@ -248,13 +242,11 @@ namespace MediaBrowser.Server.Implementations.Session
|
|
|
|
|
var userLastActivityDate = user.LastActivityDate ?? DateTime.MinValue;
|
|
|
|
|
user.LastActivityDate = activityDate;
|
|
|
|
|
|
|
|
|
|
// Don't log in the db anymore frequently than 10 seconds
|
|
|
|
|
if ((activityDate - userLastActivityDate).TotalSeconds > 10)
|
|
|
|
|
if ((activityDate - userLastActivityDate).TotalSeconds > 60)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
// Save this directly. No need to fire off all the events for this.
|
|
|
|
|
await _userRepository.SaveUser(user, CancellationToken.None).ConfigureAwait(false);
|
|
|
|
|
await _userManager.UpdateUser(user).ConfigureAwait(false);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
@ -636,7 +628,7 @@ namespace MediaBrowser.Server.Implementations.Session
|
|
|
|
|
/// <returns>Task.</returns>
|
|
|
|
|
private async Task OnPlaybackStart(Guid userId, IHasUserData item)
|
|
|
|
|
{
|
|
|
|
|
var data = _userDataRepository.GetUserData(userId, item);
|
|
|
|
|
var data = _userDataManager.GetUserData(userId, item);
|
|
|
|
|
|
|
|
|
|
data.PlayCount++;
|
|
|
|
|
data.LastPlayedDate = DateTime.UtcNow;
|
|
|
|
@ -646,7 +638,7 @@ namespace MediaBrowser.Server.Implementations.Session
|
|
|
|
|
data.Played = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
await _userDataRepository.SaveUserData(userId, item, data, UserDataSaveReason.PlaybackStart, CancellationToken.None).ConfigureAwait(false);
|
|
|
|
|
await _userDataManager.SaveUserData(userId, item, data, UserDataSaveReason.PlaybackStart, CancellationToken.None).ConfigureAwait(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
@ -713,17 +705,17 @@ namespace MediaBrowser.Server.Implementations.Session
|
|
|
|
|
|
|
|
|
|
private async Task OnPlaybackProgress(User user, BaseItem item, PlaybackProgressInfo info)
|
|
|
|
|
{
|
|
|
|
|
var data = _userDataRepository.GetUserData(user.Id, item);
|
|
|
|
|
var data = _userDataManager.GetUserData(user.Id, item);
|
|
|
|
|
|
|
|
|
|
var positionTicks = info.PositionTicks;
|
|
|
|
|
|
|
|
|
|
if (positionTicks.HasValue)
|
|
|
|
|
{
|
|
|
|
|
_userDataRepository.UpdatePlayState(item, data, positionTicks.Value);
|
|
|
|
|
_userDataManager.UpdatePlayState(item, data, positionTicks.Value);
|
|
|
|
|
|
|
|
|
|
UpdatePlaybackSettings(user, info, data);
|
|
|
|
|
|
|
|
|
|
await _userDataRepository.SaveUserData(user.Id, item, data, UserDataSaveReason.PlaybackProgress, CancellationToken.None).ConfigureAwait(false);
|
|
|
|
|
await _userDataManager.SaveUserData(user.Id, item, data, UserDataSaveReason.PlaybackProgress, CancellationToken.None).ConfigureAwait(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -849,11 +841,11 @@ namespace MediaBrowser.Server.Implementations.Session
|
|
|
|
|
|
|
|
|
|
if (!playbackFailed)
|
|
|
|
|
{
|
|
|
|
|
var data = _userDataRepository.GetUserData(userId, item);
|
|
|
|
|
var data = _userDataManager.GetUserData(userId, item);
|
|
|
|
|
|
|
|
|
|
if (positionTicks.HasValue)
|
|
|
|
|
{
|
|
|
|
|
playedToCompletion = _userDataRepository.UpdatePlayState(item, data, positionTicks.Value);
|
|
|
|
|
playedToCompletion = _userDataManager.UpdatePlayState(item, data, positionTicks.Value);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
@ -864,7 +856,7 @@ namespace MediaBrowser.Server.Implementations.Session
|
|
|
|
|
playedToCompletion = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
await _userDataRepository.SaveUserData(userId, item, data, UserDataSaveReason.PlaybackFinished, CancellationToken.None).ConfigureAwait(false);
|
|
|
|
|
await _userDataManager.SaveUserData(userId, item, data, UserDataSaveReason.PlaybackFinished, CancellationToken.None).ConfigureAwait(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return playedToCompletion;
|
|
|
|
|