|
@@ -18,6 +18,8 @@ using MediaBrowser.Controller.Devices;
|
|
|
using MediaBrowser.Controller.Drawing;
|
|
|
using MediaBrowser.Controller.Dto;
|
|
|
using MediaBrowser.Controller.Entities;
|
|
|
+using MediaBrowser.Controller.Events;
|
|
|
+using MediaBrowser.Controller.Events.Session;
|
|
|
using MediaBrowser.Controller.Library;
|
|
|
using MediaBrowser.Controller.Net;
|
|
|
using MediaBrowser.Controller.Security;
|
|
@@ -40,25 +42,16 @@ namespace Emby.Server.Implementations.Session
|
|
|
/// </summary>
|
|
|
public class SessionManager : ISessionManager, IDisposable
|
|
|
{
|
|
|
- /// <summary>
|
|
|
- /// The user data repository.
|
|
|
- /// </summary>
|
|
|
private readonly IUserDataManager _userDataManager;
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// The logger.
|
|
|
- /// </summary>
|
|
|
private readonly ILogger<SessionManager> _logger;
|
|
|
-
|
|
|
+ private readonly IEventManager _eventManager;
|
|
|
private readonly ILibraryManager _libraryManager;
|
|
|
private readonly IUserManager _userManager;
|
|
|
private readonly IMusicManager _musicManager;
|
|
|
private readonly IDtoService _dtoService;
|
|
|
private readonly IImageProcessor _imageProcessor;
|
|
|
private readonly IMediaSourceManager _mediaSourceManager;
|
|
|
-
|
|
|
private readonly IServerApplicationHost _appHost;
|
|
|
-
|
|
|
private readonly IAuthenticationRepository _authRepo;
|
|
|
private readonly IDeviceManager _deviceManager;
|
|
|
|
|
@@ -75,6 +68,7 @@ namespace Emby.Server.Implementations.Session
|
|
|
|
|
|
public SessionManager(
|
|
|
ILogger<SessionManager> logger,
|
|
|
+ IEventManager eventManager,
|
|
|
IUserDataManager userDataManager,
|
|
|
ILibraryManager libraryManager,
|
|
|
IUserManager userManager,
|
|
@@ -87,6 +81,7 @@ namespace Emby.Server.Implementations.Session
|
|
|
IMediaSourceManager mediaSourceManager)
|
|
|
{
|
|
|
_logger = logger;
|
|
|
+ _eventManager = eventManager;
|
|
|
_userDataManager = userDataManager;
|
|
|
_libraryManager = libraryManager;
|
|
|
_userManager = userManager;
|
|
@@ -209,6 +204,8 @@ namespace Emby.Server.Implementations.Session
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ _eventManager.Publish(new SessionStartedEventArgs(info));
|
|
|
+
|
|
|
EventHelper.QueueEventIfNotNull(
|
|
|
SessionStarted,
|
|
|
this,
|
|
@@ -230,6 +227,8 @@ namespace Emby.Server.Implementations.Session
|
|
|
},
|
|
|
_logger);
|
|
|
|
|
|
+ _eventManager.Publish(new SessionEndedEventArgs(info));
|
|
|
+
|
|
|
info.Dispose();
|
|
|
}
|
|
|
|
|
@@ -667,22 +666,26 @@ namespace Emby.Server.Implementations.Session
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ var eventArgs = new PlaybackProgressEventArgs
|
|
|
+ {
|
|
|
+ Item = libraryItem,
|
|
|
+ Users = users,
|
|
|
+ MediaSourceId = info.MediaSourceId,
|
|
|
+ MediaInfo = info.Item,
|
|
|
+ DeviceName = session.DeviceName,
|
|
|
+ ClientName = session.Client,
|
|
|
+ DeviceId = session.DeviceId,
|
|
|
+ Session = session
|
|
|
+ };
|
|
|
+
|
|
|
+ await _eventManager.PublishAsync(eventArgs).ConfigureAwait(false);
|
|
|
+
|
|
|
// Nothing to save here
|
|
|
// Fire events to inform plugins
|
|
|
EventHelper.QueueEventIfNotNull(
|
|
|
PlaybackStart,
|
|
|
this,
|
|
|
- new PlaybackProgressEventArgs
|
|
|
- {
|
|
|
- Item = libraryItem,
|
|
|
- Users = users,
|
|
|
- MediaSourceId = info.MediaSourceId,
|
|
|
- MediaInfo = info.Item,
|
|
|
- DeviceName = session.DeviceName,
|
|
|
- ClientName = session.Client,
|
|
|
- DeviceId = session.DeviceId,
|
|
|
- Session = session
|
|
|
- },
|
|
|
+ eventArgs,
|
|
|
_logger);
|
|
|
|
|
|
StartIdleCheckTimer();
|
|
@@ -750,23 +753,25 @@ namespace Emby.Server.Implementations.Session
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- PlaybackProgress?.Invoke(
|
|
|
- this,
|
|
|
- new PlaybackProgressEventArgs
|
|
|
- {
|
|
|
- Item = libraryItem,
|
|
|
- Users = users,
|
|
|
- PlaybackPositionTicks = session.PlayState.PositionTicks,
|
|
|
- MediaSourceId = session.PlayState.MediaSourceId,
|
|
|
- MediaInfo = info.Item,
|
|
|
- DeviceName = session.DeviceName,
|
|
|
- ClientName = session.Client,
|
|
|
- DeviceId = session.DeviceId,
|
|
|
- IsPaused = info.IsPaused,
|
|
|
- PlaySessionId = info.PlaySessionId,
|
|
|
- IsAutomated = isAutomated,
|
|
|
- Session = session
|
|
|
- });
|
|
|
+ var eventArgs = new PlaybackProgressEventArgs
|
|
|
+ {
|
|
|
+ Item = libraryItem,
|
|
|
+ Users = users,
|
|
|
+ PlaybackPositionTicks = session.PlayState.PositionTicks,
|
|
|
+ MediaSourceId = session.PlayState.MediaSourceId,
|
|
|
+ MediaInfo = info.Item,
|
|
|
+ DeviceName = session.DeviceName,
|
|
|
+ ClientName = session.Client,
|
|
|
+ DeviceId = session.DeviceId,
|
|
|
+ IsPaused = info.IsPaused,
|
|
|
+ PlaySessionId = info.PlaySessionId,
|
|
|
+ IsAutomated = isAutomated,
|
|
|
+ Session = session
|
|
|
+ };
|
|
|
+
|
|
|
+ await _eventManager.PublishAsync(eventArgs).ConfigureAwait(false);
|
|
|
+
|
|
|
+ PlaybackProgress?.Invoke(this, eventArgs);
|
|
|
|
|
|
if (!isAutomated)
|
|
|
{
|
|
@@ -943,23 +948,23 @@ namespace Emby.Server.Implementations.Session
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- EventHelper.QueueEventIfNotNull(
|
|
|
- PlaybackStopped,
|
|
|
- this,
|
|
|
- new PlaybackStopEventArgs
|
|
|
- {
|
|
|
- Item = libraryItem,
|
|
|
- Users = users,
|
|
|
- PlaybackPositionTicks = info.PositionTicks,
|
|
|
- PlayedToCompletion = playedToCompletion,
|
|
|
- MediaSourceId = info.MediaSourceId,
|
|
|
- MediaInfo = info.Item,
|
|
|
- DeviceName = session.DeviceName,
|
|
|
- ClientName = session.Client,
|
|
|
- DeviceId = session.DeviceId,
|
|
|
- Session = session
|
|
|
- },
|
|
|
- _logger);
|
|
|
+ var eventArgs = new PlaybackStopEventArgs
|
|
|
+ {
|
|
|
+ Item = libraryItem,
|
|
|
+ Users = users,
|
|
|
+ PlaybackPositionTicks = info.PositionTicks,
|
|
|
+ PlayedToCompletion = playedToCompletion,
|
|
|
+ MediaSourceId = info.MediaSourceId,
|
|
|
+ MediaInfo = info.Item,
|
|
|
+ DeviceName = session.DeviceName,
|
|
|
+ ClientName = session.Client,
|
|
|
+ DeviceId = session.DeviceId,
|
|
|
+ Session = session
|
|
|
+ };
|
|
|
+
|
|
|
+ await _eventManager.PublishAsync(eventArgs).ConfigureAwait(false);
|
|
|
+
|
|
|
+ EventHelper.QueueEventIfNotNull(PlaybackStopped, this, eventArgs, _logger);
|
|
|
}
|
|
|
|
|
|
private bool OnPlaybackStopped(User user, BaseItem item, long? positionTicks, bool playbackFailed)
|