add more info to playback events
This commit is contained in:
parent
6cfd21122b
commit
6f969ab468
|
@ -11,5 +11,15 @@ namespace MediaBrowser.Controller.Library
|
||||||
public User User { get; set; }
|
public User User { get; set; }
|
||||||
public long? PlaybackPositionTicks { get; set; }
|
public long? PlaybackPositionTicks { get; set; }
|
||||||
public BaseItem Item { get; set; }
|
public BaseItem Item { get; set; }
|
||||||
|
public UserItemData UserData { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class PlaybackStopEventArgs : PlaybackProgressEventArgs
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets a value indicating whether [played to completion].
|
||||||
|
/// </summary>
|
||||||
|
/// <value><c>true</c> if [played to completion]; otherwise, <c>false</c>.</value>
|
||||||
|
public bool PlayedToCompletion { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@ namespace MediaBrowser.Controller.Session
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Occurs when [playback stopped].
|
/// Occurs when [playback stopped].
|
||||||
/// </summary>
|
/// </summary>
|
||||||
event EventHandler<PlaybackProgressEventArgs> PlaybackStopped;
|
event EventHandler<PlaybackStopEventArgs> PlaybackStopped;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sessions.
|
/// Gets the sessions.
|
||||||
|
|
|
@ -63,7 +63,7 @@ namespace MediaBrowser.Server.Implementations.Session
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Occurs when [playback stopped].
|
/// Occurs when [playback stopped].
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public event EventHandler<PlaybackProgressEventArgs> PlaybackStopped;
|
public event EventHandler<PlaybackStopEventArgs> PlaybackStopped;
|
||||||
|
|
||||||
private IEnumerable<ISessionControllerFactory> _sessionFactories = new List<ISessionControllerFactory>();
|
private IEnumerable<ISessionControllerFactory> _sessionFactories = new List<ISessionControllerFactory>();
|
||||||
|
|
||||||
|
@ -284,7 +284,9 @@ namespace MediaBrowser.Server.Implementations.Session
|
||||||
EventHelper.QueueEventIfNotNull(PlaybackStart, this, new PlaybackProgressEventArgs
|
EventHelper.QueueEventIfNotNull(PlaybackStart, this, new PlaybackProgressEventArgs
|
||||||
{
|
{
|
||||||
Item = item,
|
Item = item,
|
||||||
User = user
|
User = user,
|
||||||
|
UserData = data
|
||||||
|
|
||||||
}, _logger);
|
}, _logger);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -315,10 +317,10 @@ namespace MediaBrowser.Server.Implementations.Session
|
||||||
|
|
||||||
var user = session.User;
|
var user = session.User;
|
||||||
|
|
||||||
|
var data = _userDataRepository.GetUserData(user.Id, key);
|
||||||
|
|
||||||
if (info.PositionTicks.HasValue)
|
if (info.PositionTicks.HasValue)
|
||||||
{
|
{
|
||||||
var data = _userDataRepository.GetUserData(user.Id, key);
|
|
||||||
|
|
||||||
UpdatePlayState(info.Item, data, info.PositionTicks.Value);
|
UpdatePlayState(info.Item, data, info.PositionTicks.Value);
|
||||||
|
|
||||||
await _userDataRepository.SaveUserData(user.Id, info.Item, data, UserDataSaveReason.PlaybackProgress, CancellationToken.None).ConfigureAwait(false);
|
await _userDataRepository.SaveUserData(user.Id, info.Item, data, UserDataSaveReason.PlaybackProgress, CancellationToken.None).ConfigureAwait(false);
|
||||||
|
@ -328,7 +330,8 @@ namespace MediaBrowser.Server.Implementations.Session
|
||||||
{
|
{
|
||||||
Item = info.Item,
|
Item = info.Item,
|
||||||
User = user,
|
User = user,
|
||||||
PlaybackPositionTicks = info.PositionTicks
|
PlaybackPositionTicks = info.PositionTicks,
|
||||||
|
UserData = data
|
||||||
|
|
||||||
}, _logger);
|
}, _logger);
|
||||||
}
|
}
|
||||||
|
@ -371,10 +374,11 @@ namespace MediaBrowser.Server.Implementations.Session
|
||||||
var user = session.User;
|
var user = session.User;
|
||||||
|
|
||||||
var data = _userDataRepository.GetUserData(user.Id, key);
|
var data = _userDataRepository.GetUserData(user.Id, key);
|
||||||
|
bool playedToCompletion;
|
||||||
|
|
||||||
if (info.PositionTicks.HasValue)
|
if (info.PositionTicks.HasValue)
|
||||||
{
|
{
|
||||||
UpdatePlayState(info.Item, data, info.PositionTicks.Value);
|
playedToCompletion = UpdatePlayState(info.Item, data, info.PositionTicks.Value);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -382,15 +386,19 @@ namespace MediaBrowser.Server.Implementations.Session
|
||||||
data.PlayCount++;
|
data.PlayCount++;
|
||||||
data.Played = true;
|
data.Played = true;
|
||||||
data.PlaybackPositionTicks = 0;
|
data.PlaybackPositionTicks = 0;
|
||||||
|
playedToCompletion = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
await _userDataRepository.SaveUserData(user.Id, info.Item, data, UserDataSaveReason.PlaybackFinished, CancellationToken.None).ConfigureAwait(false);
|
await _userDataRepository.SaveUserData(user.Id, info.Item, data, UserDataSaveReason.PlaybackFinished, CancellationToken.None).ConfigureAwait(false);
|
||||||
|
|
||||||
EventHelper.QueueEventIfNotNull(PlaybackStopped, this, new PlaybackProgressEventArgs
|
EventHelper.QueueEventIfNotNull(PlaybackStopped, this, new PlaybackStopEventArgs
|
||||||
{
|
{
|
||||||
Item = info.Item,
|
Item = info.Item,
|
||||||
User = user,
|
User = user,
|
||||||
PlaybackPositionTicks = info.PositionTicks
|
PlaybackPositionTicks = info.PositionTicks,
|
||||||
|
UserData = data,
|
||||||
|
PlayedToCompletion = playedToCompletion
|
||||||
|
|
||||||
}, _logger);
|
}, _logger);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -400,8 +408,10 @@ namespace MediaBrowser.Server.Implementations.Session
|
||||||
/// <param name="item">The item</param>
|
/// <param name="item">The item</param>
|
||||||
/// <param name="data">User data for the item</param>
|
/// <param name="data">User data for the item</param>
|
||||||
/// <param name="positionTicks">The current playback position</param>
|
/// <param name="positionTicks">The current playback position</param>
|
||||||
private void UpdatePlayState(BaseItem item, UserItemData data, long positionTicks)
|
private bool UpdatePlayState(BaseItem item, UserItemData data, long positionTicks)
|
||||||
{
|
{
|
||||||
|
var playedToCompletion = false;
|
||||||
|
|
||||||
var hasRuntime = item.RunTimeTicks.HasValue && item.RunTimeTicks > 0;
|
var hasRuntime = item.RunTimeTicks.HasValue && item.RunTimeTicks > 0;
|
||||||
|
|
||||||
// If a position has been reported, and if we know the duration
|
// If a position has been reported, and if we know the duration
|
||||||
|
@ -419,7 +429,7 @@ namespace MediaBrowser.Server.Implementations.Session
|
||||||
else if (pctIn > _configurationManager.Configuration.MaxResumePct || positionTicks >= item.RunTimeTicks.Value)
|
else if (pctIn > _configurationManager.Configuration.MaxResumePct || positionTicks >= item.RunTimeTicks.Value)
|
||||||
{
|
{
|
||||||
positionTicks = 0;
|
positionTicks = 0;
|
||||||
data.Played = true;
|
data.Played = playedToCompletion = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
|
@ -430,14 +440,14 @@ namespace MediaBrowser.Server.Implementations.Session
|
||||||
if (durationSeconds < _configurationManager.Configuration.MinResumeDurationSeconds)
|
if (durationSeconds < _configurationManager.Configuration.MinResumeDurationSeconds)
|
||||||
{
|
{
|
||||||
positionTicks = 0;
|
positionTicks = 0;
|
||||||
data.Played = true;
|
data.Played = playedToCompletion = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!hasRuntime)
|
else if (!hasRuntime)
|
||||||
{
|
{
|
||||||
// If we don't know the runtime we'll just have to assume it was fully played
|
// If we don't know the runtime we'll just have to assume it was fully played
|
||||||
data.Played = true;
|
data.Played = playedToCompletion = true;
|
||||||
positionTicks = 0;
|
positionTicks = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -447,6 +457,8 @@ namespace MediaBrowser.Server.Implementations.Session
|
||||||
}
|
}
|
||||||
|
|
||||||
data.PlaybackPositionTicks = positionTicks;
|
data.PlaybackPositionTicks = positionTicks;
|
||||||
|
|
||||||
|
return playedToCompletion;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user