From c7f559f8cefa4c4b90df3bff72290c8bd5b18e01 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 21 Oct 2016 22:08:34 -0400 Subject: make model project portable --- .../Entities/CollectionFolder.cs | 14 ++--- MediaBrowser.Controller/Entities/TV/Season.cs | 1 - MediaBrowser.Controller/Entities/TV/Series.cs | 16 +++-- MediaBrowser.Controller/Entities/User.cs | 16 ++--- .../Entities/UserViewBuilder.cs | 2 +- MediaBrowser.Controller/Health/IHealthMonitor.cs | 12 ---- MediaBrowser.Controller/Library/NameExtensions.cs | 2 +- .../MediaBrowser.Controller.csproj | 10 ++- MediaBrowser.Controller/Threading/PeriodicTimer.cs | 72 ++++++++++++++++++++++ MediaBrowser.Controller/packages.config | 1 - 10 files changed, 104 insertions(+), 42 deletions(-) delete mode 100644 MediaBrowser.Controller/Health/IHealthMonitor.cs create mode 100644 MediaBrowser.Controller/Threading/PeriodicTimer.cs (limited to 'MediaBrowser.Controller') diff --git a/MediaBrowser.Controller/Entities/CollectionFolder.cs b/MediaBrowser.Controller/Entities/CollectionFolder.cs index 41e277b7ca..414b2b2c3a 100644 --- a/MediaBrowser.Controller/Entities/CollectionFolder.cs +++ b/MediaBrowser.Controller/Entities/CollectionFolder.cs @@ -11,8 +11,8 @@ using System.Threading.Tasks; using CommonIO; using MediaBrowser.Controller.Configuration; using MediaBrowser.Model.Configuration; +using MediaBrowser.Model.Extensions; using MediaBrowser.Model.Serialization; -using MoreLinq; namespace MediaBrowser.Controller.Entities { @@ -29,7 +29,7 @@ namespace MediaBrowser.Controller.Entities PhysicalLocationsList = new List(); } - [IgnoreDataMember] + [System.Runtime.Serialization.IgnoreDataMember] protected override bool SupportsShortcutChildren { get @@ -38,7 +38,7 @@ namespace MediaBrowser.Controller.Entities } } - [IgnoreDataMember] + [System.Runtime.Serialization.IgnoreDataMember] public override bool SupportsPlayedStatus { get @@ -129,7 +129,7 @@ namespace MediaBrowser.Controller.Entities /// Allow different display preferences for each collection folder /// /// The display prefs id. - [IgnoreDataMember] + [System.Runtime.Serialization.IgnoreDataMember] public override Guid DisplayPreferencesId { get @@ -138,7 +138,7 @@ namespace MediaBrowser.Controller.Entities } } - [IgnoreDataMember] + [System.Runtime.Serialization.IgnoreDataMember] public override IEnumerable PhysicalLocations { get @@ -283,7 +283,7 @@ namespace MediaBrowser.Controller.Entities /// Our children are actually just references to the ones in the physical root... /// /// The actual children. - [IgnoreDataMember] + [System.Runtime.Serialization.IgnoreDataMember] protected override IEnumerable ActualChildren { get { return GetActualChildren(); } @@ -322,7 +322,7 @@ namespace MediaBrowser.Controller.Entities return result; } - [IgnoreDataMember] + [System.Runtime.Serialization.IgnoreDataMember] public override bool SupportsPeople { get diff --git a/MediaBrowser.Controller/Entities/TV/Season.cs b/MediaBrowser.Controller/Entities/TV/Season.cs index ce13f5fc5f..fa713c5cab 100644 --- a/MediaBrowser.Controller/Entities/TV/Season.cs +++ b/MediaBrowser.Controller/Entities/TV/Season.cs @@ -2,7 +2,6 @@ using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Querying; using MediaBrowser.Model.Users; -using MoreLinq; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; diff --git a/MediaBrowser.Controller/Entities/TV/Series.cs b/MediaBrowser.Controller/Entities/TV/Series.cs index 39703f67ac..df464b52a8 100644 --- a/MediaBrowser.Controller/Entities/TV/Series.cs +++ b/MediaBrowser.Controller/Entities/TV/Series.cs @@ -9,8 +9,8 @@ using System.Linq; using System.Runtime.Serialization; using System.Threading; using System.Threading.Tasks; +using MediaBrowser.Model.Extensions; using MediaBrowser.Model.Providers; -using MoreLinq; namespace MediaBrowser.Controller.Entities.TV { @@ -106,6 +106,12 @@ namespace MediaBrowser.Controller.Entities.TV private string AddLibrariesToPresentationUniqueKey(string key) { + var lang = GetPreferredMetadataLanguage(); + if (!string.IsNullOrWhiteSpace(lang)) + { + key += "-" + lang; + } + var folders = LibraryManager.GetCollectionFolders(this) .Select(i => i.Id.ToString("N")) .ToArray(); @@ -209,8 +215,8 @@ namespace MediaBrowser.Controller.Entities.TV var query = new InternalItemsQuery(user) { AncestorWithPresentationUniqueKey = seriesKey, - IncludeItemTypes = new[] {typeof (Season).Name}, - SortBy = new[] {ItemSortBy.SortName} + IncludeItemTypes = new[] { typeof(Season).Name }, + SortBy = new[] { ItemSortBy.SortName } }; if (!config.DisplayMissingEpisodes && !config.DisplayUnairedEpisodes) @@ -267,8 +273,8 @@ namespace MediaBrowser.Controller.Entities.TV var query = new InternalItemsQuery(user) { AncestorWithPresentationUniqueKey = seriesKey, - IncludeItemTypes = new[] {typeof (Episode).Name, typeof (Season).Name}, - SortBy = new[] {ItemSortBy.SortName} + IncludeItemTypes = new[] { typeof(Episode).Name, typeof(Season).Name }, + SortBy = new[] { ItemSortBy.SortName } }; var config = user.Configuration; if (!config.DisplayMissingEpisodes && !config.DisplayUnairedEpisodes) diff --git a/MediaBrowser.Controller/Entities/User.cs b/MediaBrowser.Controller/Entities/User.cs index 46da469fa5..00320e9b77 100644 --- a/MediaBrowser.Controller/Entities/User.cs +++ b/MediaBrowser.Controller/Entities/User.cs @@ -42,7 +42,7 @@ namespace MediaBrowser.Controller.Entities /// Gets or sets the path. /// /// The path. - [IgnoreDataMember] + [System.Runtime.Serialization.IgnoreDataMember] public override string Path { get @@ -81,7 +81,7 @@ namespace MediaBrowser.Controller.Entities /// If the item is a folder, it returns the folder itself /// /// The containing folder path. - [IgnoreDataMember] + [System.Runtime.Serialization.IgnoreDataMember] public override string ContainingFolderPath { get @@ -94,7 +94,7 @@ namespace MediaBrowser.Controller.Entities /// Gets a value indicating whether this instance is owned item. /// /// true if this instance is owned item; otherwise, false. - [IgnoreDataMember] + [System.Runtime.Serialization.IgnoreDataMember] public override bool IsOwnedItem { get @@ -107,7 +107,7 @@ namespace MediaBrowser.Controller.Entities /// Gets the root folder. /// /// The root folder. - [IgnoreDataMember] + [System.Runtime.Serialization.IgnoreDataMember] public Folder RootFolder { get @@ -129,7 +129,7 @@ namespace MediaBrowser.Controller.Entities private volatile UserConfiguration _config; private readonly object _configSyncLock = new object(); - [IgnoreDataMember] + [System.Runtime.Serialization.IgnoreDataMember] public UserConfiguration Configuration { get @@ -152,7 +152,7 @@ namespace MediaBrowser.Controller.Entities private volatile UserPolicy _policy; private readonly object _policySyncLock = new object(); - [IgnoreDataMember] + [System.Runtime.Serialization.IgnoreDataMember] public UserPolicy Policy { get @@ -232,7 +232,7 @@ namespace MediaBrowser.Controller.Entities /// Gets the path to the user's configuration directory /// /// The configuration directory path. - [IgnoreDataMember] + [System.Runtime.Serialization.IgnoreDataMember] public string ConfigurationDirectoryPath { get @@ -308,7 +308,7 @@ namespace MediaBrowser.Controller.Entities return Configuration.GroupedFolders.Select(i => new Guid(i)).Contains(id); } - [IgnoreDataMember] + [System.Runtime.Serialization.IgnoreDataMember] public override bool SupportsPeople { get diff --git a/MediaBrowser.Controller/Entities/UserViewBuilder.cs b/MediaBrowser.Controller/Entities/UserViewBuilder.cs index 38397572e3..f813fac715 100644 --- a/MediaBrowser.Controller/Entities/UserViewBuilder.cs +++ b/MediaBrowser.Controller/Entities/UserViewBuilder.cs @@ -17,7 +17,7 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Controller.Configuration; -using MoreLinq; +using MediaBrowser.Model.Extensions; namespace MediaBrowser.Controller.Entities { diff --git a/MediaBrowser.Controller/Health/IHealthMonitor.cs b/MediaBrowser.Controller/Health/IHealthMonitor.cs deleted file mode 100644 index b8ad98fc14..0000000000 --- a/MediaBrowser.Controller/Health/IHealthMonitor.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Model.Notifications; - -namespace MediaBrowser.Controller.Health -{ - public interface IHealthMonitor - { - Task> GetNotifications(CancellationToken cancellationToken); - } -} diff --git a/MediaBrowser.Controller/Library/NameExtensions.cs b/MediaBrowser.Controller/Library/NameExtensions.cs index 72f036b0a5..19d0fc772f 100644 --- a/MediaBrowser.Controller/Library/NameExtensions.cs +++ b/MediaBrowser.Controller/Library/NameExtensions.cs @@ -1,9 +1,9 @@ using MediaBrowser.Common.Extensions; -using MoreLinq; using System; using System.Collections.Generic; using System.Globalization; using System.Linq; +using MediaBrowser.Model.Extensions; namespace MediaBrowser.Controller.Library { diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index 36d59d3e44..c14e25030c 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -1,5 +1,5 @@  - + Debug @@ -11,9 +11,10 @@ MediaBrowser.Controller 512 ..\ - v4.5 + v4.6 + true @@ -51,9 +52,6 @@ ..\packages\Interfaces.IO.1.0.0.5\lib\portable-net45+sl4+wp71+win8+wpa81\Interfaces.IO.dll - - ..\packages\morelinq.1.4.0\lib\net35\MoreLinq.dll - ..\packages\Patterns.Logging.1.0.0.2\lib\portable-net45+sl4+wp71+win8+wpa81\Patterns.Logging.dll @@ -168,7 +166,6 @@ - @@ -391,6 +388,7 @@ + diff --git a/MediaBrowser.Controller/Threading/PeriodicTimer.cs b/MediaBrowser.Controller/Threading/PeriodicTimer.cs new file mode 100644 index 0000000000..f9d19b9a10 --- /dev/null +++ b/MediaBrowser.Controller/Threading/PeriodicTimer.cs @@ -0,0 +1,72 @@ +using System; +using System.Threading; +using Microsoft.Win32; + +namespace MediaBrowser.Controller.Threading +{ + public class PeriodicTimer : IDisposable + { + public Action Callback { get; set; } + private Timer _timer; + private readonly object _state; + private readonly object _timerLock = new object(); + private readonly TimeSpan _period; + + public PeriodicTimer(Action callback, object state, TimeSpan dueTime, TimeSpan period) + { + if (callback == null) + { + throw new ArgumentNullException("callback"); + } + + Callback = callback; + _period = period; + _state = state; + + StartTimer(dueTime); + } + + void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e) + { + if (e.Mode == PowerModes.Resume) + { + DisposeTimer(); + StartTimer(Timeout.InfiniteTimeSpan); + } + } + + private void TimerCallback(object state) + { + Callback(state); + } + + private void StartTimer(TimeSpan dueTime) + { + lock (_timerLock) + { + _timer = new Timer(TimerCallback, _state, dueTime, _period); + + SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged; + } + } + + private void DisposeTimer() + { + SystemEvents.PowerModeChanged -= SystemEvents_PowerModeChanged; + + lock (_timerLock) + { + if (_timer != null) + { + _timer.Dispose(); + _timer = null; + } + } + } + + public void Dispose() + { + DisposeTimer(); + } + } +} diff --git a/MediaBrowser.Controller/packages.config b/MediaBrowser.Controller/packages.config index 84422d9da9..08345d1c58 100644 --- a/MediaBrowser.Controller/packages.config +++ b/MediaBrowser.Controller/packages.config @@ -2,6 +2,5 @@ - \ No newline at end of file -- cgit v1.2.3 From 3768de3a32b8fd64774b5723fd593d221dd41e76 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 22 Oct 2016 10:51:02 -0400 Subject: update music dlna --- .../Entities/UserViewBuilder.cs | 173 ++++++++------------- 1 file changed, 64 insertions(+), 109 deletions(-) (limited to 'MediaBrowser.Controller') diff --git a/MediaBrowser.Controller/Entities/UserViewBuilder.cs b/MediaBrowser.Controller/Entities/UserViewBuilder.cs index f813fac715..9debdf9bae 100644 --- a/MediaBrowser.Controller/Entities/UserViewBuilder.cs +++ b/MediaBrowser.Controller/Entities/UserViewBuilder.cs @@ -201,7 +201,7 @@ namespace MediaBrowser.Controller.Entities return await GetMusicFolders(queryParent, user, query).ConfigureAwait(false); case SpecialFolder.MusicGenres: - return await GetMusicGenres(queryParent, user, query).ConfigureAwait(false); + return GetMusicGenres(queryParent, user, query); case SpecialFolder.MusicGenre: return await GetMusicGenreItems(queryParent, displayParent, user, query).ConfigureAwait(false); @@ -290,32 +290,20 @@ namespace MediaBrowser.Controller.Entities return GetResult(list, parent, query); } - private async Task> GetMusicGenres(Folder parent, User user, InternalItemsQuery query) + private QueryResult GetMusicGenres(Folder parent, User user, InternalItemsQuery query) { - var tasks = GetRecursiveChildren(parent, user, new[] { CollectionType.Music, CollectionType.MusicVideos }) - .Where(i => !i.IsFolder) - .SelectMany(i => i.Genres) - .DistinctNames() - .Select(i => - { - try - { - return _libraryManager.GetMusicGenre(i); - } - catch - { - // Full exception logged at lower levels - _logger.Error("Error getting genre"); - return null; - } - - }) - .Where(i => i != null) - .Select(i => GetUserView(i.Name, SpecialFolder.MusicGenre, i.SortName, parent)); - - var genres = await Task.WhenAll(tasks).ConfigureAwait(false); + var result = _libraryManager.GetMusicGenres(new InternalItemsQuery(user) + { + AncestorIds = new[] { parent.Id.ToString("N") }, + StartIndex = query.StartIndex, + Limit = query.Limit + }); - return GetResult(genres, parent, query); + return new QueryResult + { + TotalRecordCount = result.TotalRecordCount, + Items = result.Items.Select(i => i.Item1).ToArray() + }; } private async Task> GetMusicGenreItems(Folder queryParent, Folder displayParent, User user, InternalItemsQuery query) @@ -332,50 +320,51 @@ namespace MediaBrowser.Controller.Entities private QueryResult GetMusicAlbumArtists(Folder parent, User user, InternalItemsQuery query) { - var items = parent.QueryRecursive(new InternalItemsQuery(user) + var artists = _libraryManager.GetAlbumArtists(new InternalItemsQuery(user) { - Recursive = true, - ParentId = parent.Id, - IncludeItemTypes = new[] { typeof(Audio.Audio).Name }, - EnableTotalRecordCount = false - - }).Items.Cast(); - - var artists = _libraryManager.GetAlbumArtists(items); + AncestorIds = new[] { parent.Id.ToString("N") }, + StartIndex = query.StartIndex, + Limit = query.Limit + }); - return GetResult(artists, parent, query); + return new QueryResult + { + TotalRecordCount = artists.TotalRecordCount, + Items = artists.Items.Select(i => i.Item1).ToArray() + }; } private QueryResult GetMusicArtists(Folder parent, User user, InternalItemsQuery query) { - var items = parent.QueryRecursive(new InternalItemsQuery(user) + var artists = _libraryManager.GetArtists(new InternalItemsQuery(user) { - Recursive = true, - ParentId = parent.Id, - IncludeItemTypes = new[] { typeof(Audio.Audio).Name, typeof(MusicVideo).Name }, - EnableTotalRecordCount = false - - }).Items.Cast(); - - var artists = _libraryManager.GetArtists(items); + AncestorIds = new[] { parent.Id.ToString("N") }, + StartIndex = query.StartIndex, + Limit = query.Limit + }); - return GetResult(artists, parent, query); + return new QueryResult + { + TotalRecordCount = artists.TotalRecordCount, + Items = artists.Items.Select(i => i.Item1).ToArray() + }; } private QueryResult GetFavoriteArtists(Folder parent, User user, InternalItemsQuery query) { - var items = parent.QueryRecursive(new InternalItemsQuery(user) + var artists = _libraryManager.GetArtists(new InternalItemsQuery(user) { - Recursive = true, - ParentId = parent.Id, - IncludeItemTypes = new[] { typeof(Audio.Audio).Name }, - EnableTotalRecordCount = false - - }).Items.Cast(); - - var artists = _libraryManager.GetAlbumArtists(items).Where(i => _userDataManager.GetUserData(user, i).IsFavorite); + AncestorIds = new[] { parent.Id.ToString("N") }, + StartIndex = query.StartIndex, + Limit = query.Limit, + IsFavorite = true + }); - return GetResult(artists, parent, query); + return new QueryResult + { + TotalRecordCount = artists.TotalRecordCount, + Items = artists.Items.Select(i => i.Item1).ToArray() + }; } private QueryResult GetMusicPlaylists(Folder parent, User user, InternalItemsQuery query) @@ -577,35 +566,18 @@ namespace MediaBrowser.Controller.Entities private async Task> GetMovieGenres(Folder parent, User user, InternalItemsQuery query) { - var tasks = parent.QueryRecursive(new InternalItemsQuery(user) + var result = _libraryManager.GetGenres(new InternalItemsQuery(user) { - IncludeItemTypes = new[] { typeof(Movie).Name }, - Recursive = true, - EnableTotalRecordCount = false - - }).Items - .SelectMany(i => i.Genres) - .DistinctNames() - .Select(i => - { - try - { - return _libraryManager.GetGenre(i); - } - catch - { - // Full exception logged at lower levels - _logger.Error("Error getting genre"); - return null; - } - - }) - .Where(i => i != null) - .Select(i => GetUserView(i.Name, SpecialFolder.MovieGenre, i.SortName, parent)); - - var genres = await Task.WhenAll(tasks).ConfigureAwait(false); + AncestorIds = new[] { parent.Id.ToString("N") }, + StartIndex = query.StartIndex, + Limit = query.Limit + }); - return GetResult(genres, parent, query); + return new QueryResult + { + TotalRecordCount = result.TotalRecordCount, + Items = result.Items.Select(i => i.Item1).ToArray() + }; } private async Task> GetMovieGenreItems(Folder queryParent, Folder displayParent, User user, InternalItemsQuery query) @@ -720,35 +692,18 @@ namespace MediaBrowser.Controller.Entities private async Task> GetTvGenres(Folder parent, User user, InternalItemsQuery query) { - var tasks = parent.QueryRecursive(new InternalItemsQuery(user) + var result = _libraryManager.GetGenres(new InternalItemsQuery(user) { - IncludeItemTypes = new[] { typeof(Series).Name }, - Recursive = true, - EnableTotalRecordCount = false - - }).Items - .SelectMany(i => i.Genres) - .DistinctNames() - .Select(i => - { - try - { - return _libraryManager.GetGenre(i); - } - catch - { - // Full exception logged at lower levels - _logger.Error("Error getting genre"); - return null; - } - - }) - .Where(i => i != null) - .Select(i => GetUserView(i.Name, SpecialFolder.TvGenre, i.SortName, parent)); - - var genres = await Task.WhenAll(tasks).ConfigureAwait(false); + AncestorIds = new[] { parent.Id.ToString("N") }, + StartIndex = query.StartIndex, + Limit = query.Limit + }); - return GetResult(genres, parent, query); + return new QueryResult + { + TotalRecordCount = result.TotalRecordCount, + Items = result.Items.Select(i => i.Item1).ToArray() + }; } private QueryResult GetTvGenreItems(Folder queryParent, Folder displayParent, User user, InternalItemsQuery query) -- cgit v1.2.3