From c1c4c85fc250ce76d91a2afbda06c13173a06ec6 Mon Sep 17 00:00:00 2001 From: LukePulverenti Luke Pulverenti luke pulverenti Date: Sun, 9 Sep 2012 14:32:51 -0400 Subject: Added some favorites api calls --- .../HttpHandlers/FavoriteStatusHandler.cs | 44 ++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 MediaBrowser.Api/HttpHandlers/FavoriteStatusHandler.cs (limited to 'MediaBrowser.Api/HttpHandlers/FavoriteStatusHandler.cs') diff --git a/MediaBrowser.Api/HttpHandlers/FavoriteStatusHandler.cs b/MediaBrowser.Api/HttpHandlers/FavoriteStatusHandler.cs new file mode 100644 index 0000000000..851120230a --- /dev/null +++ b/MediaBrowser.Api/HttpHandlers/FavoriteStatusHandler.cs @@ -0,0 +1,44 @@ +using MediaBrowser.Common.Net.Handlers; +using MediaBrowser.Model.DTO; +using MediaBrowser.Model.Entities; +using System.ComponentModel.Composition; +using System.Net; +using System.Threading.Tasks; + +namespace MediaBrowser.Api.HttpHandlers +{ + /// + /// Provides a handler to set user favorite status for an item + /// + [Export(typeof(BaseHandler))] + public class FavoriteStatus : BaseSerializationHandler + { + public override bool HandlesRequest(HttpListenerRequest request) + { + return ApiService.IsApiUrlMatch("FavoriteStatus", request); + } + + protected override Task GetObjectToSerialize() + { + // Get the item + BaseItem item = ApiService.GetItemById(QueryString["id"]); + + // Get the user + User user = ApiService.GetUserById(QueryString["userid"], true); + + // Get the user data for this item + UserItemData data = item.GetUserData(user); + + if (data == null) + { + data = new UserItemData(); + item.AddUserData(user, data); + } + + // Set favorite status + data.IsFavorite = QueryString["isfavorite"] == "1"; + + return Task.FromResult(ApiService.GetDTOUserItemData(data)); + } + } +} \ No newline at end of file -- cgit v1.2.3 From 614668a4479bf2c25941200c5b5b2e882408780c Mon Sep 17 00:00:00 2001 From: LukePulverenti Luke Pulverenti luke pulverenti Date: Sun, 9 Sep 2012 22:30:34 -0400 Subject: Added api methods to mark an item as played or unplayed --- MediaBrowser.Api/ApiService.cs | 2 +- .../HttpHandlers/FavoriteStatusHandler.cs | 10 ++---- .../HttpHandlers/PlayedStatusHandler.cs | 38 ++++++++++++++++++++++ .../HttpHandlers/UserItemRatingHandler.cs | 8 +---- MediaBrowser.Api/MediaBrowser.Api.csproj | 1 + MediaBrowser.ApiInteraction.Portable/ApiClient.cs | 13 ++++++++ MediaBrowser.ApiInteraction/BaseHttpApiClient.cs | 16 +++++++++ MediaBrowser.Model/Entities/BaseItem.cs | 31 ++++++++++++++++-- MediaBrowser.Model/Entities/Folder.cs | 34 ++++++++++++++++--- 9 files changed, 130 insertions(+), 23 deletions(-) create mode 100644 MediaBrowser.Api/HttpHandlers/PlayedStatusHandler.cs (limited to 'MediaBrowser.Api/HttpHandlers/FavoriteStatusHandler.cs') diff --git a/MediaBrowser.Api/ApiService.cs b/MediaBrowser.Api/ApiService.cs index 46303ddc45..06929de73a 100644 --- a/MediaBrowser.Api/ApiService.cs +++ b/MediaBrowser.Api/ApiService.cs @@ -172,7 +172,7 @@ namespace MediaBrowser.Api dto.Type = item.GetType().Name; dto.UserRating = item.UserRating; - dto.UserData = GetDTOUserItemData(item.GetUserData(user)); + dto.UserData = GetDTOUserItemData(item.GetUserData(user, false)); Folder folder = item as Folder; diff --git a/MediaBrowser.Api/HttpHandlers/FavoriteStatusHandler.cs b/MediaBrowser.Api/HttpHandlers/FavoriteStatusHandler.cs index 851120230a..1c640e89ae 100644 --- a/MediaBrowser.Api/HttpHandlers/FavoriteStatusHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/FavoriteStatusHandler.cs @@ -11,7 +11,7 @@ namespace MediaBrowser.Api.HttpHandlers /// Provides a handler to set user favorite status for an item /// [Export(typeof(BaseHandler))] - public class FavoriteStatus : BaseSerializationHandler + public class FavoriteStatusHandler : BaseSerializationHandler { public override bool HandlesRequest(HttpListenerRequest request) { @@ -27,13 +27,7 @@ namespace MediaBrowser.Api.HttpHandlers User user = ApiService.GetUserById(QueryString["userid"], true); // Get the user data for this item - UserItemData data = item.GetUserData(user); - - if (data == null) - { - data = new UserItemData(); - item.AddUserData(user, data); - } + UserItemData data = item.GetUserData(user, true); // Set favorite status data.IsFavorite = QueryString["isfavorite"] == "1"; diff --git a/MediaBrowser.Api/HttpHandlers/PlayedStatusHandler.cs b/MediaBrowser.Api/HttpHandlers/PlayedStatusHandler.cs new file mode 100644 index 0000000000..ae32b23daa --- /dev/null +++ b/MediaBrowser.Api/HttpHandlers/PlayedStatusHandler.cs @@ -0,0 +1,38 @@ +using MediaBrowser.Common.Net.Handlers; +using MediaBrowser.Model.DTO; +using MediaBrowser.Model.Entities; +using System.ComponentModel.Composition; +using System.Net; +using System.Threading.Tasks; + +namespace MediaBrowser.Api.HttpHandlers +{ + /// + /// Provides a handler to set played status for an item + /// + [Export(typeof(BaseHandler))] + public class PlayedStatusHandler : BaseSerializationHandler + { + public override bool HandlesRequest(HttpListenerRequest request) + { + return ApiService.IsApiUrlMatch("PlayedStatus", request); + } + + protected override Task GetObjectToSerialize() + { + // Get the item + BaseItem item = ApiService.GetItemById(QueryString["id"]); + + // Get the user + User user = ApiService.GetUserById(QueryString["userid"], true); + + bool wasPlayed = QueryString["played"] == "1"; + + item.SetPlayedStatus(user, wasPlayed); + + UserItemData data = item.GetUserData(user, true); + + return Task.FromResult(ApiService.GetDTOUserItemData(data)); + } + } +} \ No newline at end of file diff --git a/MediaBrowser.Api/HttpHandlers/UserItemRatingHandler.cs b/MediaBrowser.Api/HttpHandlers/UserItemRatingHandler.cs index a83bb07f78..216bcac7fb 100644 --- a/MediaBrowser.Api/HttpHandlers/UserItemRatingHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/UserItemRatingHandler.cs @@ -27,13 +27,7 @@ namespace MediaBrowser.Api.HttpHandlers User user = ApiService.GetUserById(QueryString["userid"], true); // Get the user data for this item - UserItemData data = item.GetUserData(user); - - if (data == null) - { - data = new UserItemData(); - item.AddUserData(user, data); - } + UserItemData data = item.GetUserData(user, true); // If clearing the rating, set it to null if (QueryString["clear"] == "1") diff --git a/MediaBrowser.Api/MediaBrowser.Api.csproj b/MediaBrowser.Api/MediaBrowser.Api.csproj index 9c9e32359c..858717e6ed 100644 --- a/MediaBrowser.Api/MediaBrowser.Api.csproj +++ b/MediaBrowser.Api/MediaBrowser.Api.csproj @@ -62,6 +62,7 @@ + diff --git a/MediaBrowser.ApiInteraction.Portable/ApiClient.cs b/MediaBrowser.ApiInteraction.Portable/ApiClient.cs index a49c0f7cf4..b41572cd36 100644 --- a/MediaBrowser.ApiInteraction.Portable/ApiClient.cs +++ b/MediaBrowser.ApiInteraction.Portable/ApiClient.cs @@ -410,6 +410,19 @@ namespace MediaBrowser.ApiInteraction.Portable GetDataAsync(url, callback); } + /// + /// Updates played status for an item + /// + public void UpdatePlayedStatusAsync(Guid itemId, Guid userId, bool wasPlayed, Action callback) + { + string url = ApiUrl + "/PlayedStatus?id=" + itemId; + + url += "&userid=" + userId; + url += "&played=" + (wasPlayed ? "1" : "0"); + + GetDataAsync(url, callback); + } + /// /// Clears a user's rating for an item /// diff --git a/MediaBrowser.ApiInteraction/BaseHttpApiClient.cs b/MediaBrowser.ApiInteraction/BaseHttpApiClient.cs index ca29f8ff47..0b87ef4cd1 100644 --- a/MediaBrowser.ApiInteraction/BaseHttpApiClient.cs +++ b/MediaBrowser.ApiInteraction/BaseHttpApiClient.cs @@ -464,6 +464,22 @@ namespace MediaBrowser.ApiInteraction } } + /// + /// Updates played status for an item + /// + public async Task UpdatePlayedStatusAsync(Guid itemId, Guid userId, bool wasPlayed) + { + string url = ApiUrl + "/PlayedStatus?id=" + itemId; + + url += "&userid=" + userId; + url += "&played=" + (wasPlayed ? "1" : "0"); + + using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false)) + { + return DeserializeFromStream(stream); + } + } + /// /// Updates a user's favorite status for an item and returns the updated UserItemData object. /// diff --git a/MediaBrowser.Model/Entities/BaseItem.cs b/MediaBrowser.Model/Entities/BaseItem.cs index 7751207425..51cb34a531 100644 --- a/MediaBrowser.Model/Entities/BaseItem.cs +++ b/MediaBrowser.Model/Entities/BaseItem.cs @@ -72,17 +72,24 @@ namespace MediaBrowser.Model.Entities public Dictionary UserData { get; set; } - public UserItemData GetUserData(User user) + public UserItemData GetUserData(User user, bool createIfNull) { if (UserData == null || !UserData.ContainsKey(user.Id)) { - return null; + if (createIfNull) + { + AddUserData(user, new UserItemData()); + } + else + { + return null; + } } return UserData[user.Id]; } - public void AddUserData(User user, UserItemData data) + private void AddUserData(User user, UserItemData data) { if (UserData == null) { @@ -143,5 +150,23 @@ namespace MediaBrowser.Model.Entities People[person.Name] = person; } + + /// + /// Marks the item as either played or unplayed + /// + public virtual void SetPlayedStatus(User user, bool wasPlayed) + { + UserItemData data = GetUserData(user, true); + + if (wasPlayed) + { + data.PlayCount = Math.Max(data.PlayCount, 1); + } + else + { + data.PlayCount = 0; + data.PlaybackPositionTicks = 0; + } + } } } diff --git a/MediaBrowser.Model/Entities/Folder.cs b/MediaBrowser.Model/Entities/Folder.cs index ec37107c30..ef05071385 100644 --- a/MediaBrowser.Model/Entities/Folder.cs +++ b/MediaBrowser.Model/Entities/Folder.cs @@ -103,7 +103,7 @@ namespace MediaBrowser.Model.Entities { return GetParentalAllowedRecursiveChildren(user).Where(c => { - UserItemData data = c.GetUserData(user); + UserItemData data = c.GetUserData(user, false); if (data != null) { @@ -171,21 +171,30 @@ namespace MediaBrowser.Model.Entities return GetInProgressItems(GetParentalAllowedRecursiveChildren(user), user); } + /// + /// Takes a list of items and returns the ones that are recently added + /// private static IEnumerable GetRecentlyAddedItems(IEnumerable itemSet, User user) { return itemSet.Where(i => !(i.IsFolder) && i.IsRecentlyAdded(user)); } + /// + /// Takes a list of items and returns the ones that are recently added and unplayed + /// private static IEnumerable GetRecentlyAddedUnplayedItems(IEnumerable itemSet, User user) { return GetRecentlyAddedItems(itemSet, user).Where(i => { - var userdata = i.GetUserData(user); + var userdata = i.GetUserData(user, false); return userdata == null || userdata.PlayCount == 0; }); } + /// + /// Takes a list of items and returns the ones that are in progress + /// private static IEnumerable GetInProgressItems(IEnumerable itemSet, User user) { return itemSet.Where(i => @@ -195,12 +204,15 @@ namespace MediaBrowser.Model.Entities return false; } - var userdata = i.GetUserData(user); + var userdata = i.GetUserData(user, false); return userdata != null && userdata.PlaybackPositionTicks > 0; }); } + /// + /// Gets the total played percentage for a set of items + /// private static decimal GetPlayedPercentage(IEnumerable itemSet, User user) { itemSet = itemSet.Where(i => !(i.IsFolder)); @@ -214,7 +226,7 @@ namespace MediaBrowser.Model.Entities foreach (BaseItem item in itemSet) { - UserItemData data = item.GetUserData(user); + UserItemData data = item.GetUserData(user, false); if (data == null) { @@ -236,6 +248,20 @@ namespace MediaBrowser.Model.Entities return totalPercent / itemSet.Count(); } + /// + /// Marks the item as either played or unplayed + /// + public override void SetPlayedStatus(User user, bool wasPlayed) + { + base.SetPlayedStatus(user, wasPlayed); + + // Now sweep through recursively and update status + foreach (BaseItem item in GetParentalAllowedChildren(user)) + { + item.SetPlayedStatus(user, wasPlayed); + } + } + /// /// Finds an item by ID, recursively /// -- cgit v1.2.3 From 2467ca966823d78737a268d2c3b3730bc3b286cc Mon Sep 17 00:00:00 2001 From: LukePulverenti Luke Pulverenti luke pulverenti Date: Mon, 10 Sep 2012 21:34:02 -0400 Subject: Moved some entities to the main project --- MediaBrowser.Api/ApiService.cs | 5 +- MediaBrowser.Api/HttpHandlers/AudioHandler.cs | 2 +- MediaBrowser.Api/HttpHandlers/BaseMediaHandler.cs | 2 +- .../HttpHandlers/FavoriteStatusHandler.cs | 1 + MediaBrowser.Api/HttpHandlers/GenreHandler.cs | 2 +- MediaBrowser.Api/HttpHandlers/GenresHandler.cs | 2 +- MediaBrowser.Api/HttpHandlers/ImageHandler.cs | 1 + MediaBrowser.Api/HttpHandlers/ItemHandler.cs | 2 +- MediaBrowser.Api/HttpHandlers/ItemListHandler.cs | 2 +- .../HttpHandlers/MovieSpecialFeaturesHandler.cs | 4 +- MediaBrowser.Api/HttpHandlers/PersonHandler.cs | 2 +- .../HttpHandlers/PlayedStatusHandler.cs | 1 + MediaBrowser.Api/HttpHandlers/StudioHandler.cs | 2 +- MediaBrowser.Api/HttpHandlers/StudiosHandler.cs | 2 +- .../HttpHandlers/UserAuthenticationHandler.cs | 2 +- MediaBrowser.Api/HttpHandlers/UserHandler.cs | 2 +- .../HttpHandlers/UserItemRatingHandler.cs | 1 + MediaBrowser.Api/HttpHandlers/VideoHandler.cs | 1 + MediaBrowser.Api/HttpHandlers/YearHandler.cs | 2 +- MediaBrowser.Api/HttpHandlers/YearsHandler.cs | 2 +- MediaBrowser.Common/Kernel/BaseKernel.cs | 15 +- MediaBrowser.Common/Logging/ThreadedLogger.cs | 2 - MediaBrowser.Common/Logging/TraceLogger.cs | 12 + MediaBrowser.Common/MediaBrowser.Common.csproj | 1 + MediaBrowser.Controller/Entities/Audio.cs | 14 + MediaBrowser.Controller/Entities/BaseEntity.cs | 25 ++ MediaBrowser.Controller/Entities/BaseItem.cs | 173 +++++++++++ MediaBrowser.Controller/Entities/Folder.cs | 323 +++++++++++++++++++++ MediaBrowser.Controller/Entities/Genre.cs | 7 + MediaBrowser.Controller/Entities/Movies/BoxSet.cs | 7 + MediaBrowser.Controller/Entities/Movies/Movie.cs | 31 ++ MediaBrowser.Controller/Entities/Person.cs | 25 ++ MediaBrowser.Controller/Entities/Studio.cs | 7 + MediaBrowser.Controller/Entities/TV/Episode.cs | 7 + MediaBrowser.Controller/Entities/TV/Season.cs | 28 ++ MediaBrowser.Controller/Entities/TV/Series.cs | 12 + MediaBrowser.Controller/Entities/User.cs | 21 ++ MediaBrowser.Controller/Entities/UserItemData.cs | 67 +++++ MediaBrowser.Controller/Entities/Video.cs | 20 ++ MediaBrowser.Controller/Entities/Year.cs | 7 + MediaBrowser.Controller/FFMpeg/FFProbe.cs | 8 +- MediaBrowser.Controller/IO/DirectoryWatchers.cs | 4 +- MediaBrowser.Controller/Kernel.cs | 4 +- MediaBrowser.Controller/Library/ItemController.cs | 4 +- .../Library/ItemResolveEventArgs.cs | 6 +- .../MediaBrowser.Controller.csproj | 17 ++ .../Providers/AudioInfoProvider.cs | 4 +- .../Providers/BaseItemXmlParser.cs | 3 +- .../Providers/BaseMetadataProvider.cs | 4 +- .../Providers/FolderProviderFromXml.cs | 4 +- .../Providers/ImageFromMediaLocationProvider.cs | 4 +- .../Providers/LocalTrailerProvider.cs | 4 +- .../Providers/Movies/MovieProviderFromXml.cs | 7 +- .../Movies/MovieSpecialFeaturesProvider.cs | 6 +- .../TV/EpisodeImageFromMediaLocationProvider.cs | 6 +- .../Providers/TV/EpisodeProviderFromXml.cs | 6 +- .../Providers/TV/EpisodeXmlParser.cs | 2 +- .../Providers/TV/SeriesProviderFromXml.cs | 6 +- .../Providers/TV/SeriesXmlParser.cs | 4 +- .../Providers/VideoInfoProvider.cs | 3 +- MediaBrowser.Controller/Resolvers/AudioResolver.cs | 4 +- .../Resolvers/BaseItemResolver.cs | 6 +- .../Resolvers/FolderResolver.cs | 4 +- .../Resolvers/Movies/BoxSetResolver.cs | 4 +- .../Resolvers/Movies/MovieResolver.cs | 5 +- .../Resolvers/TV/EpisodeResolver.cs | 4 +- .../Resolvers/TV/SeasonResolver.cs | 4 +- .../Resolvers/TV/SeriesResolver.cs | 4 +- MediaBrowser.Controller/Resolvers/VideoResolver.cs | 3 +- MediaBrowser.Model/Entities/Audio.cs | 14 - MediaBrowser.Model/Entities/BaseEntity.cs | 25 -- MediaBrowser.Model/Entities/BaseItem.cs | 172 ----------- MediaBrowser.Model/Entities/Folder.cs | 322 -------------------- MediaBrowser.Model/Entities/Genre.cs | 7 - MediaBrowser.Model/Entities/ItemSpecialCounts.cs | 43 +++ MediaBrowser.Model/Entities/Movies/BoxSet.cs | 7 - MediaBrowser.Model/Entities/Movies/Movie.cs | 31 -- MediaBrowser.Model/Entities/Person.cs | 25 -- MediaBrowser.Model/Entities/Studio.cs | 7 - MediaBrowser.Model/Entities/TV/Episode.cs | 7 - MediaBrowser.Model/Entities/TV/Season.cs | 28 -- MediaBrowser.Model/Entities/TV/Series.cs | 12 - MediaBrowser.Model/Entities/User.cs | 21 -- MediaBrowser.Model/Entities/UserItemData.cs | 67 ----- MediaBrowser.Model/Entities/Video.cs | 63 ---- MediaBrowser.Model/Entities/Year.cs | 7 - MediaBrowser.Model/MediaBrowser.Model.csproj | 16 - 87 files changed, 942 insertions(+), 920 deletions(-) create mode 100644 MediaBrowser.Common/Logging/TraceLogger.cs create mode 100644 MediaBrowser.Controller/Entities/Audio.cs create mode 100644 MediaBrowser.Controller/Entities/BaseEntity.cs create mode 100644 MediaBrowser.Controller/Entities/BaseItem.cs create mode 100644 MediaBrowser.Controller/Entities/Folder.cs create mode 100644 MediaBrowser.Controller/Entities/Genre.cs create mode 100644 MediaBrowser.Controller/Entities/Movies/BoxSet.cs create mode 100644 MediaBrowser.Controller/Entities/Movies/Movie.cs create mode 100644 MediaBrowser.Controller/Entities/Person.cs create mode 100644 MediaBrowser.Controller/Entities/Studio.cs create mode 100644 MediaBrowser.Controller/Entities/TV/Episode.cs create mode 100644 MediaBrowser.Controller/Entities/TV/Season.cs create mode 100644 MediaBrowser.Controller/Entities/TV/Series.cs create mode 100644 MediaBrowser.Controller/Entities/User.cs create mode 100644 MediaBrowser.Controller/Entities/UserItemData.cs create mode 100644 MediaBrowser.Controller/Entities/Video.cs create mode 100644 MediaBrowser.Controller/Entities/Year.cs delete mode 100644 MediaBrowser.Model/Entities/Audio.cs delete mode 100644 MediaBrowser.Model/Entities/BaseEntity.cs delete mode 100644 MediaBrowser.Model/Entities/BaseItem.cs delete mode 100644 MediaBrowser.Model/Entities/Folder.cs delete mode 100644 MediaBrowser.Model/Entities/Genre.cs delete mode 100644 MediaBrowser.Model/Entities/Movies/BoxSet.cs delete mode 100644 MediaBrowser.Model/Entities/Movies/Movie.cs delete mode 100644 MediaBrowser.Model/Entities/Person.cs delete mode 100644 MediaBrowser.Model/Entities/Studio.cs delete mode 100644 MediaBrowser.Model/Entities/TV/Episode.cs delete mode 100644 MediaBrowser.Model/Entities/TV/Season.cs delete mode 100644 MediaBrowser.Model/Entities/TV/Series.cs delete mode 100644 MediaBrowser.Model/Entities/User.cs delete mode 100644 MediaBrowser.Model/Entities/UserItemData.cs delete mode 100644 MediaBrowser.Model/Entities/Video.cs delete mode 100644 MediaBrowser.Model/Entities/Year.cs (limited to 'MediaBrowser.Api/HttpHandlers/FavoriteStatusHandler.cs') diff --git a/MediaBrowser.Api/ApiService.cs b/MediaBrowser.Api/ApiService.cs index a439a88d2a..88af0f8134 100644 --- a/MediaBrowser.Api/ApiService.cs +++ b/MediaBrowser.Api/ApiService.cs @@ -1,8 +1,9 @@ using MediaBrowser.Controller; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities.Movies; +using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Model.DTO; using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Entities.Movies; -using MediaBrowser.Model.Entities.TV; using System; using System.Collections.Generic; using System.Linq; diff --git a/MediaBrowser.Api/HttpHandlers/AudioHandler.cs b/MediaBrowser.Api/HttpHandlers/AudioHandler.cs index b2c0213d54..3d17a3d6a2 100644 --- a/MediaBrowser.Api/HttpHandlers/AudioHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/AudioHandler.cs @@ -1,6 +1,6 @@ using MediaBrowser.Common.Net.Handlers; +using MediaBrowser.Controller.Entities; using MediaBrowser.Model.DTO; -using MediaBrowser.Model.Entities; using System.Collections.Generic; using System.ComponentModel.Composition; using System.IO; diff --git a/MediaBrowser.Api/HttpHandlers/BaseMediaHandler.cs b/MediaBrowser.Api/HttpHandlers/BaseMediaHandler.cs index 6d52ea07d2..e87af76ea5 100644 --- a/MediaBrowser.Api/HttpHandlers/BaseMediaHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/BaseMediaHandler.cs @@ -2,7 +2,7 @@ using MediaBrowser.Common.Net; using MediaBrowser.Common.Net.Handlers; using MediaBrowser.Controller; -using MediaBrowser.Model.Entities; +using MediaBrowser.Controller.Entities; using System; using System.Collections.Generic; using System.Diagnostics; diff --git a/MediaBrowser.Api/HttpHandlers/FavoriteStatusHandler.cs b/MediaBrowser.Api/HttpHandlers/FavoriteStatusHandler.cs index 1c640e89ae..4125b940f1 100644 --- a/MediaBrowser.Api/HttpHandlers/FavoriteStatusHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/FavoriteStatusHandler.cs @@ -1,4 +1,5 @@ using MediaBrowser.Common.Net.Handlers; +using MediaBrowser.Controller.Entities; using MediaBrowser.Model.DTO; using MediaBrowser.Model.Entities; using System.ComponentModel.Composition; diff --git a/MediaBrowser.Api/HttpHandlers/GenreHandler.cs b/MediaBrowser.Api/HttpHandlers/GenreHandler.cs index 3be952d9d0..cd4d8b9438 100644 --- a/MediaBrowser.Api/HttpHandlers/GenreHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/GenreHandler.cs @@ -1,7 +1,7 @@ using MediaBrowser.Common.Net.Handlers; using MediaBrowser.Controller; +using MediaBrowser.Controller.Entities; using MediaBrowser.Model.DTO; -using MediaBrowser.Model.Entities; using System; using System.Collections.Generic; using System.ComponentModel.Composition; diff --git a/MediaBrowser.Api/HttpHandlers/GenresHandler.cs b/MediaBrowser.Api/HttpHandlers/GenresHandler.cs index 70449a2356..0ff48761ca 100644 --- a/MediaBrowser.Api/HttpHandlers/GenresHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/GenresHandler.cs @@ -1,7 +1,7 @@ using MediaBrowser.Common.Net.Handlers; using MediaBrowser.Controller; +using MediaBrowser.Controller.Entities; using MediaBrowser.Model.DTO; -using MediaBrowser.Model.Entities; using System.Collections.Generic; using System.ComponentModel.Composition; using System.Linq; diff --git a/MediaBrowser.Api/HttpHandlers/ImageHandler.cs b/MediaBrowser.Api/HttpHandlers/ImageHandler.cs index a00f5cb70e..c5949122fa 100644 --- a/MediaBrowser.Api/HttpHandlers/ImageHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/ImageHandler.cs @@ -2,6 +2,7 @@ using MediaBrowser.Common.Net; using MediaBrowser.Common.Net.Handlers; using MediaBrowser.Controller; +using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Entities; using System; using System.ComponentModel.Composition; diff --git a/MediaBrowser.Api/HttpHandlers/ItemHandler.cs b/MediaBrowser.Api/HttpHandlers/ItemHandler.cs index 024647d8a5..491f45446d 100644 --- a/MediaBrowser.Api/HttpHandlers/ItemHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/ItemHandler.cs @@ -1,6 +1,6 @@ using MediaBrowser.Common.Net.Handlers; +using MediaBrowser.Controller.Entities; using MediaBrowser.Model.DTO; -using MediaBrowser.Model.Entities; using System.ComponentModel.Composition; using System.Net; using System.Threading.Tasks; diff --git a/MediaBrowser.Api/HttpHandlers/ItemListHandler.cs b/MediaBrowser.Api/HttpHandlers/ItemListHandler.cs index 9845a5b21e..bce018d3ef 100644 --- a/MediaBrowser.Api/HttpHandlers/ItemListHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/ItemListHandler.cs @@ -1,6 +1,6 @@ using MediaBrowser.Common.Net.Handlers; +using MediaBrowser.Controller.Entities; using MediaBrowser.Model.DTO; -using MediaBrowser.Model.Entities; using System; using System.Collections.Generic; using System.ComponentModel.Composition; diff --git a/MediaBrowser.Api/HttpHandlers/MovieSpecialFeaturesHandler.cs b/MediaBrowser.Api/HttpHandlers/MovieSpecialFeaturesHandler.cs index 5b528b3feb..63426be47d 100644 --- a/MediaBrowser.Api/HttpHandlers/MovieSpecialFeaturesHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/MovieSpecialFeaturesHandler.cs @@ -1,7 +1,7 @@ using MediaBrowser.Common.Net.Handlers; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Model.DTO; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Entities.Movies; using System.ComponentModel.Composition; using System.Linq; using System.Net; diff --git a/MediaBrowser.Api/HttpHandlers/PersonHandler.cs b/MediaBrowser.Api/HttpHandlers/PersonHandler.cs index 2089b9e74a..b91ccb9275 100644 --- a/MediaBrowser.Api/HttpHandlers/PersonHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/PersonHandler.cs @@ -1,7 +1,7 @@ using MediaBrowser.Common.Net.Handlers; using MediaBrowser.Controller; +using MediaBrowser.Controller.Entities; using MediaBrowser.Model.DTO; -using MediaBrowser.Model.Entities; using System.Collections.Generic; using System.ComponentModel.Composition; using System.Net; diff --git a/MediaBrowser.Api/HttpHandlers/PlayedStatusHandler.cs b/MediaBrowser.Api/HttpHandlers/PlayedStatusHandler.cs index ae32b23daa..4fe790c801 100644 --- a/MediaBrowser.Api/HttpHandlers/PlayedStatusHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/PlayedStatusHandler.cs @@ -1,4 +1,5 @@ using MediaBrowser.Common.Net.Handlers; +using MediaBrowser.Controller.Entities; using MediaBrowser.Model.DTO; using MediaBrowser.Model.Entities; using System.ComponentModel.Composition; diff --git a/MediaBrowser.Api/HttpHandlers/StudioHandler.cs b/MediaBrowser.Api/HttpHandlers/StudioHandler.cs index c665d2523b..cf0b7d38d0 100644 --- a/MediaBrowser.Api/HttpHandlers/StudioHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/StudioHandler.cs @@ -1,7 +1,7 @@ using MediaBrowser.Common.Net.Handlers; using MediaBrowser.Controller; +using MediaBrowser.Controller.Entities; using MediaBrowser.Model.DTO; -using MediaBrowser.Model.Entities; using System; using System.Collections.Generic; using System.ComponentModel.Composition; diff --git a/MediaBrowser.Api/HttpHandlers/StudiosHandler.cs b/MediaBrowser.Api/HttpHandlers/StudiosHandler.cs index 3f12df4f7b..f80bed0896 100644 --- a/MediaBrowser.Api/HttpHandlers/StudiosHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/StudiosHandler.cs @@ -1,7 +1,7 @@ using MediaBrowser.Common.Net.Handlers; using MediaBrowser.Controller; +using MediaBrowser.Controller.Entities; using MediaBrowser.Model.DTO; -using MediaBrowser.Model.Entities; using System.Collections.Generic; using System.ComponentModel.Composition; using System.Linq; diff --git a/MediaBrowser.Api/HttpHandlers/UserAuthenticationHandler.cs b/MediaBrowser.Api/HttpHandlers/UserAuthenticationHandler.cs index b3867cde7a..fa9d975983 100644 --- a/MediaBrowser.Api/HttpHandlers/UserAuthenticationHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/UserAuthenticationHandler.cs @@ -1,7 +1,7 @@ using MediaBrowser.Common.Net.Handlers; using MediaBrowser.Controller; +using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Authentication; -using MediaBrowser.Model.Entities; using System.ComponentModel.Composition; using System.Net; using System.Threading.Tasks; diff --git a/MediaBrowser.Api/HttpHandlers/UserHandler.cs b/MediaBrowser.Api/HttpHandlers/UserHandler.cs index 39ec9dec2c..5ccf3bb619 100644 --- a/MediaBrowser.Api/HttpHandlers/UserHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/UserHandler.cs @@ -1,6 +1,6 @@ using MediaBrowser.Common.Net.Handlers; +using MediaBrowser.Controller.Entities; using MediaBrowser.Model.DTO; -using MediaBrowser.Model.Entities; using System.ComponentModel.Composition; using System.Net; using System.Threading.Tasks; diff --git a/MediaBrowser.Api/HttpHandlers/UserItemRatingHandler.cs b/MediaBrowser.Api/HttpHandlers/UserItemRatingHandler.cs index 216bcac7fb..d040414088 100644 --- a/MediaBrowser.Api/HttpHandlers/UserItemRatingHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/UserItemRatingHandler.cs @@ -1,4 +1,5 @@ using MediaBrowser.Common.Net.Handlers; +using MediaBrowser.Controller.Entities; using MediaBrowser.Model.DTO; using MediaBrowser.Model.Entities; using System.ComponentModel.Composition; diff --git a/MediaBrowser.Api/HttpHandlers/VideoHandler.cs b/MediaBrowser.Api/HttpHandlers/VideoHandler.cs index 3ca00f0d5d..4f8621ce7e 100644 --- a/MediaBrowser.Api/HttpHandlers/VideoHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/VideoHandler.cs @@ -1,5 +1,6 @@ using MediaBrowser.Common.Drawing; using MediaBrowser.Common.Net.Handlers; +using MediaBrowser.Controller.Entities; using MediaBrowser.Model.DTO; using MediaBrowser.Model.Entities; using System; diff --git a/MediaBrowser.Api/HttpHandlers/YearHandler.cs b/MediaBrowser.Api/HttpHandlers/YearHandler.cs index 5074979708..1bdedf0c63 100644 --- a/MediaBrowser.Api/HttpHandlers/YearHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/YearHandler.cs @@ -1,7 +1,7 @@ using MediaBrowser.Common.Net.Handlers; using MediaBrowser.Controller; +using MediaBrowser.Controller.Entities; using MediaBrowser.Model.DTO; -using MediaBrowser.Model.Entities; using System.Collections.Generic; using System.ComponentModel.Composition; using System.Net; diff --git a/MediaBrowser.Api/HttpHandlers/YearsHandler.cs b/MediaBrowser.Api/HttpHandlers/YearsHandler.cs index 852ffe2da4..c33464c4cc 100644 --- a/MediaBrowser.Api/HttpHandlers/YearsHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/YearsHandler.cs @@ -1,7 +1,7 @@ using MediaBrowser.Common.Net.Handlers; using MediaBrowser.Controller; +using MediaBrowser.Controller.Entities; using MediaBrowser.Model.DTO; -using MediaBrowser.Model.Entities; using System.Collections.Generic; using System.ComponentModel.Composition; using System.Linq; diff --git a/MediaBrowser.Common/Kernel/BaseKernel.cs b/MediaBrowser.Common/Kernel/BaseKernel.cs index b409ba5827..3c8fff2128 100644 --- a/MediaBrowser.Common/Kernel/BaseKernel.cs +++ b/MediaBrowser.Common/Kernel/BaseKernel.cs @@ -9,6 +9,7 @@ using System; using System.Collections.Generic; using System.ComponentModel.Composition; using System.ComponentModel.Composition.Hosting; +using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; @@ -85,22 +86,18 @@ namespace MediaBrowser.Common.Kernel await ReloadComposableParts().ConfigureAwait(false); } - /// - /// Gets or sets the path to the current log file - /// - public static string LogFilePath { get; set; } - private void ReloadLogger() { DisposeLogger(); DateTime now = DateTime.Now; - LogFilePath = Path.Combine(ApplicationPaths.LogDirectoryPath, "log-" + now.ToString("dMyyyy") + "-" + now.Ticks + ".log"); + string logFilePath = Path.Combine(ApplicationPaths.LogDirectoryPath, "log-" + now.ToString("dMyyyy") + "-" + now.Ticks + ".log"); - FileStream fs = new FileStream(LogFilePath, FileMode.Append, FileAccess.Write, FileShare.Read); + Trace.Listeners.Add(new TextWriterTraceListener(logFilePath)); + Trace.AutoFlush = true; - Logger.LoggerInstance = new StreamLogger(fs); + Logger.LoggerInstance = new TraceLogger(); } /// @@ -264,6 +261,8 @@ namespace MediaBrowser.Common.Kernel /// private void DisposeLogger() { + Trace.Listeners.Clear(); + if (Logger.LoggerInstance != null) { Logger.LoggerInstance.Dispose(); diff --git a/MediaBrowser.Common/Logging/ThreadedLogger.cs b/MediaBrowser.Common/Logging/ThreadedLogger.cs index 8713ac2248..f53b3d4260 100644 --- a/MediaBrowser.Common/Logging/ThreadedLogger.cs +++ b/MediaBrowser.Common/Logging/ThreadedLogger.cs @@ -1,7 +1,5 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Text; using System.Threading; namespace MediaBrowser.Common.Logging diff --git a/MediaBrowser.Common/Logging/TraceLogger.cs b/MediaBrowser.Common/Logging/TraceLogger.cs new file mode 100644 index 0000000000..d152f97806 --- /dev/null +++ b/MediaBrowser.Common/Logging/TraceLogger.cs @@ -0,0 +1,12 @@ +using System.Diagnostics; + +namespace MediaBrowser.Common.Logging +{ + public class TraceLogger : BaseLogger + { + protected override void LogEntry(LogRow row) + { + Trace.WriteLine(row.ToString()); + } + } +} diff --git a/MediaBrowser.Common/MediaBrowser.Common.csproj b/MediaBrowser.Common/MediaBrowser.Common.csproj index 1ea8ba4a47..9b801d9498 100644 --- a/MediaBrowser.Common/MediaBrowser.Common.csproj +++ b/MediaBrowser.Common/MediaBrowser.Common.csproj @@ -84,6 +84,7 @@ + diff --git a/MediaBrowser.Controller/Entities/Audio.cs b/MediaBrowser.Controller/Entities/Audio.cs new file mode 100644 index 0000000000..61e901dd22 --- /dev/null +++ b/MediaBrowser.Controller/Entities/Audio.cs @@ -0,0 +1,14 @@ + +namespace MediaBrowser.Controller.Entities +{ + public class Audio : BaseItem + { + public int BitRate { get; set; } + public int Channels { get; set; } + public int SampleRate { get; set; } + + public string Artist { get; set; } + public string Album { get; set; } + public string AlbumArtist { get; set; } + } +} diff --git a/MediaBrowser.Controller/Entities/BaseEntity.cs b/MediaBrowser.Controller/Entities/BaseEntity.cs new file mode 100644 index 0000000000..53b42da01d --- /dev/null +++ b/MediaBrowser.Controller/Entities/BaseEntity.cs @@ -0,0 +1,25 @@ +using System; + +namespace MediaBrowser.Controller.Entities +{ + /// + /// Provides a base entity for all of our types + /// + public abstract class BaseEntity + { + public string Name { get; set; } + + public Guid Id { get; set; } + + public string PrimaryImagePath { get; set; } + + public DateTime DateCreated { get; set; } + + public DateTime DateModified { get; set; } + + public override string ToString() + { + return Name; + } + } +} diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs new file mode 100644 index 0000000000..68a192065f --- /dev/null +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -0,0 +1,173 @@ +using MediaBrowser.Model.Entities; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace MediaBrowser.Controller.Entities +{ + public abstract class BaseItem : BaseEntity, IHasProviderIds + { + public string SortName { get; set; } + + /// + /// When the item first debuted. For movies this could be premiere date, episodes would be first aired + /// + public DateTime? PremiereDate { get; set; } + + public string Path { get; set; } + + public Folder Parent { get; set; } + + public string LogoImagePath { get; set; } + + public string ArtImagePath { get; set; } + + public string ThumbnailImagePath { get; set; } + + public string BannerImagePath { get; set; } + + public IEnumerable BackdropImagePaths { get; set; } + + public string OfficialRating { get; set; } + + public string CustomRating { get; set; } + public string CustomPin { get; set; } + + public string Language { get; set; } + public string Overview { get; set; } + public List Taglines { get; set; } + + /// + /// Using a Dictionary to prevent duplicates + /// + public Dictionary People { get; set; } + + public List Studios { get; set; } + + public List Genres { get; set; } + + public string DisplayMediaType { get; set; } + + public float? UserRating { get; set; } + public long? RunTimeTicks { get; set; } + + public string AspectRatio { get; set; } + public int? ProductionYear { get; set; } + + /// + /// If the item is part of a series, this is it's number in the series. + /// This could be episode number, album track number, etc. + /// + public int? IndexNumber { get; set; } + + /// + /// For an episode this could be the season number, or for a song this could be the disc number. + /// + public int? ParentIndexNumber { get; set; } + + public IEnumerable