diff options
| author | LukePulverenti <luke.pulverenti@gmail.com> | 2013-02-20 20:33:05 -0500 |
|---|---|---|
| committer | LukePulverenti <luke.pulverenti@gmail.com> | 2013-02-20 20:33:05 -0500 |
| commit | 767cdc1f6f6a63ce997fc9476911e2c361f9d402 (patch) | |
| tree | 49add55976f895441167c66cfa95e5c7688d18ce /MediaBrowser.Api/HttpHandlers/PlaybackCheckInHandler.cs | |
| parent | 845554722efaed872948a9e0f7202e3ef52f1b6e (diff) | |
Pushing missing changes
Diffstat (limited to 'MediaBrowser.Api/HttpHandlers/PlaybackCheckInHandler.cs')
| -rw-r--r-- | MediaBrowser.Api/HttpHandlers/PlaybackCheckInHandler.cs | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/MediaBrowser.Api/HttpHandlers/PlaybackCheckInHandler.cs b/MediaBrowser.Api/HttpHandlers/PlaybackCheckInHandler.cs new file mode 100644 index 000000000..c6f11e5bb --- /dev/null +++ b/MediaBrowser.Api/HttpHandlers/PlaybackCheckInHandler.cs @@ -0,0 +1,112 @@ +using MediaBrowser.Common.Net.Handlers; +using MediaBrowser.Controller; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Library; +using MediaBrowser.Model.Connectivity; +using MediaBrowser.Model.DTO; +using System; +using System.ComponentModel.Composition; +using System.Threading.Tasks; + +namespace MediaBrowser.Api.HttpHandlers +{ + /// <summary> + /// Provides a handler to set played status for an item + /// </summary> + [Export(typeof(IHttpServerHandler))] + public class PlaybackCheckInHandler : BaseSerializationHandler<Kernel, DtoUserItemData> + { + /// <summary> + /// Gets the object to serialize. + /// </summary> + /// <returns>Task{DtoUserItemData}.</returns> + protected override async Task<DtoUserItemData> GetObjectToSerialize() + { + // Get the user + var user = await this.GetCurrentUser().ConfigureAwait(false); + + var clientType = ClientType.Other; + + if (!string.IsNullOrEmpty(QueryString["client"])) + { + ClientType type; + + if (Enum.TryParse(QueryString["client"], true, out type)) + { + clientType = type; + } + } + + var device = QueryString["device"]; + + // Get the item + var item = DtoBuilder.GetItemByClientId(QueryString["id"], user.Id); + + // Playback start check-in + if (QueryString["type"].Equals("start", StringComparison.OrdinalIgnoreCase)) + { + Kernel.UserDataManager.OnPlaybackStart(user, item, clientType, device); + } + else + { + long? positionTicks = null; + + if (!string.IsNullOrEmpty(QueryString["positionTicks"])) + { + positionTicks = long.Parse(QueryString["positionTicks"]); + } + + // Progress check-ins require position ticks + if (QueryString["type"].Equals("progress", StringComparison.OrdinalIgnoreCase)) + { + await Kernel.UserDataManager.OnPlaybackProgress(user, item, positionTicks, clientType, device).ConfigureAwait(false); + } + else if (QueryString["type"].Equals("stopped", StringComparison.OrdinalIgnoreCase)) + { + await Kernel.UserDataManager.OnPlaybackStopped(user, item, positionTicks, clientType, device).ConfigureAwait(false); + } + } + + var data = item.GetUserData(user, true); + + return DtoBuilder.GetDtoUserItemData(data); + } + + /// <summary> + /// Gets the current user. + /// </summary> + /// <returns>User.</returns> + /// <exception cref="System.UnauthorizedAccessException"></exception> + public async Task<User> GetCurrentUser() + { + var handler = this; + var id = handler.QueryString["userid"]; + + var user = ApiService.GetUserById(id); + + if (user == null) + { + throw new UnauthorizedAccessException(string.Format("User with Id {0} does not exist", id)); + } + + var clientType = ClientType.Other; + + if (!string.IsNullOrEmpty(handler.QueryString["client"])) + { + ClientType type; + + if (Enum.TryParse(handler.QueryString["client"], true, out type)) + { + clientType = type; + } + } + + var device = handler.QueryString["device"]; + + await Controller.Kernel.Instance.UserManager.LogUserActivity(user, clientType, device).ConfigureAwait(false); + + return user; + } + + } +}
\ No newline at end of file |
