diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-12-30 12:18:18 -0500 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-12-30 12:18:18 -0500 |
| commit | 6f969ab4682e54948dac2344ac8ebdc0cb5ab433 (patch) | |
| tree | 13e39ae027809368dfac8c1ea3078531090ccc5b | |
| parent | 6cfd21122b165e31073af8047675bebded100571 (diff) | |
add more info to playback events
3 files changed, 35 insertions, 13 deletions
diff --git a/MediaBrowser.Controller/Library/PlaybackProgressEventArgs.cs b/MediaBrowser.Controller/Library/PlaybackProgressEventArgs.cs index 7cf9b1d69..ec2219395 100644 --- a/MediaBrowser.Controller/Library/PlaybackProgressEventArgs.cs +++ b/MediaBrowser.Controller/Library/PlaybackProgressEventArgs.cs @@ -11,5 +11,15 @@ namespace MediaBrowser.Controller.Library public User User { get; set; } public long? PlaybackPositionTicks { 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; } } } diff --git a/MediaBrowser.Controller/Session/ISessionManager.cs b/MediaBrowser.Controller/Session/ISessionManager.cs index ec138bfb4..e0163a3e1 100644 --- a/MediaBrowser.Controller/Session/ISessionManager.cs +++ b/MediaBrowser.Controller/Session/ISessionManager.cs @@ -26,7 +26,7 @@ namespace MediaBrowser.Controller.Session /// <summary> /// Occurs when [playback stopped]. /// </summary> - event EventHandler<PlaybackProgressEventArgs> PlaybackStopped; + event EventHandler<PlaybackStopEventArgs> PlaybackStopped; /// <summary> /// Gets the sessions. diff --git a/MediaBrowser.Server.Implementations/Session/SessionManager.cs b/MediaBrowser.Server.Implementations/Session/SessionManager.cs index c42f33ec3..37b695776 100644 --- a/MediaBrowser.Server.Implementations/Session/SessionManager.cs +++ b/MediaBrowser.Server.Implementations/Session/SessionManager.cs @@ -63,7 +63,7 @@ namespace MediaBrowser.Server.Implementations.Session /// <summary> /// Occurs when [playback stopped]. /// </summary> - public event EventHandler<PlaybackProgressEventArgs> PlaybackStopped; + public event EventHandler<PlaybackStopEventArgs> PlaybackStopped; private IEnumerable<ISessionControllerFactory> _sessionFactories = new List<ISessionControllerFactory>(); @@ -284,7 +284,9 @@ namespace MediaBrowser.Server.Implementations.Session EventHelper.QueueEventIfNotNull(PlaybackStart, this, new PlaybackProgressEventArgs { Item = item, - User = user + User = user, + UserData = data + }, _logger); } @@ -315,10 +317,10 @@ namespace MediaBrowser.Server.Implementations.Session var user = session.User; + var data = _userDataRepository.GetUserData(user.Id, key); + if (info.PositionTicks.HasValue) { - var data = _userDataRepository.GetUserData(user.Id, key); - UpdatePlayState(info.Item, data, info.PositionTicks.Value); 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, User = user, - PlaybackPositionTicks = info.PositionTicks + PlaybackPositionTicks = info.PositionTicks, + UserData = data }, _logger); } @@ -371,10 +374,11 @@ namespace MediaBrowser.Server.Implementations.Session var user = session.User; var data = _userDataRepository.GetUserData(user.Id, key); + bool playedToCompletion; if (info.PositionTicks.HasValue) { - UpdatePlayState(info.Item, data, info.PositionTicks.Value); + playedToCompletion = UpdatePlayState(info.Item, data, info.PositionTicks.Value); } else { @@ -382,15 +386,19 @@ namespace MediaBrowser.Server.Implementations.Session data.PlayCount++; data.Played = true; data.PlaybackPositionTicks = 0; + playedToCompletion = true; } 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, User = user, - PlaybackPositionTicks = info.PositionTicks + PlaybackPositionTicks = info.PositionTicks, + UserData = data, + PlayedToCompletion = playedToCompletion + }, _logger); } @@ -400,8 +408,10 @@ namespace MediaBrowser.Server.Implementations.Session /// <param name="item">The item</param> /// <param name="data">User data for the item</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; // 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) { positionTicks = 0; - data.Played = true; + data.Played = playedToCompletion = true; } else @@ -430,14 +440,14 @@ namespace MediaBrowser.Server.Implementations.Session if (durationSeconds < _configurationManager.Configuration.MinResumeDurationSeconds) { positionTicks = 0; - data.Played = true; + data.Played = playedToCompletion = true; } } } else if (!hasRuntime) { // 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; } @@ -447,6 +457,8 @@ namespace MediaBrowser.Server.Implementations.Session } data.PlaybackPositionTicks = positionTicks; + + return playedToCompletion; } /// <summary> |
