diff --git a/Emby.Drawing/Emby.Drawing.csproj b/Emby.Drawing/Emby.Drawing.csproj index aa7dc5a153..8de9e23f54 100644 --- a/Emby.Drawing/Emby.Drawing.csproj +++ b/Emby.Drawing/Emby.Drawing.csproj @@ -9,9 +9,10 @@ Properties Emby.Drawing Emby.Drawing - v4.5 + v4.6 512 ..\ + true @@ -42,9 +43,6 @@ ..\packages\Patterns.Logging.1.0.0.2\lib\portable-net45+sl4+wp71+win8+wpa81\Patterns.Logging.dll - - ..\packages\taglib.2.1.0.0\lib\policy.2.0.taglib-sharp.dll - @@ -54,7 +52,7 @@ - ..\packages\taglib.2.1.0.0\lib\taglib-sharp.dll + ..\ThirdParty\taglib\taglib-sharp.dll diff --git a/MediaBrowser.Api/BaseApiService.cs b/MediaBrowser.Api/BaseApiService.cs index 3ff432d741..ce3e963b7b 100644 --- a/MediaBrowser.Api/BaseApiService.cs +++ b/MediaBrowser.Api/BaseApiService.cs @@ -6,9 +6,9 @@ using MediaBrowser.Controller.Net; using MediaBrowser.Controller.Session; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; -using ServiceStack.Text.Controller; using ServiceStack.Web; using System; +using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; @@ -275,8 +275,8 @@ namespace MediaBrowser.Api protected string GetPathValue(int index) { - var pathInfo = PathInfo.Parse(Request.PathInfo); - var first = pathInfo.GetArgumentValue(0); + var pathInfo = Parse(Request.PathInfo); + var first = pathInfo[0]; // backwards compatibility if (string.Equals(first, "mediabrowser", StringComparison.OrdinalIgnoreCase) || @@ -285,7 +285,24 @@ namespace MediaBrowser.Api index++; } - return pathInfo.GetArgumentValue(index); + return pathInfo[index]; + } + + private static List Parse(string pathUri) + { + var actionParts = pathUri.Split(new[] { "://" }, StringSplitOptions.None); + + var pathInfo = actionParts[actionParts.Length - 1]; + + var optionsPos = pathInfo.LastIndexOf('?'); + if (optionsPos != -1) + { + pathInfo = pathInfo.Substring(0, optionsPos); + } + + var args = pathInfo.Split('/'); + + return args.Skip(1).ToList(); } /// diff --git a/MediaBrowser.Api/ItemUpdateService.cs b/MediaBrowser.Api/ItemUpdateService.cs index 78aa5e1657..2c2e599d4d 100644 --- a/MediaBrowser.Api/ItemUpdateService.cs +++ b/MediaBrowser.Api/ItemUpdateService.cs @@ -295,6 +295,11 @@ namespace MediaBrowser.Api item.OfficialRating = string.IsNullOrWhiteSpace(request.OfficialRating) ? null : request.OfficialRating; item.CustomRating = request.CustomRating; + if (request.ProductionLocations != null) + { + item.ProductionLocations = request.ProductionLocations.ToList(); + } + item.PreferredMetadataCountryCode = request.PreferredMetadataCountryCode; item.PreferredMetadataLanguage = request.PreferredMetadataLanguage; diff --git a/MediaBrowser.Api/MediaBrowser.Api.csproj b/MediaBrowser.Api/MediaBrowser.Api.csproj index d7091df566..fde40aeb6c 100644 --- a/MediaBrowser.Api/MediaBrowser.Api.csproj +++ b/MediaBrowser.Api/MediaBrowser.Api.csproj @@ -11,7 +11,7 @@ MediaBrowser.Api 512 ..\ - v4.5.1 + v4.6 @@ -50,9 +50,6 @@ False ..\packages\CommonIO.1.0.0.9\lib\net45\CommonIO.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 @@ -64,9 +61,6 @@ ..\ThirdParty\ServiceStack\ServiceStack.Interfaces.dll - - ..\ThirdParty\ServiceStack.Text\ServiceStack.Text.dll - diff --git a/MediaBrowser.Api/Movies/MoviesService.cs b/MediaBrowser.Api/Movies/MoviesService.cs index 559bca7557..6645e0759f 100644 --- a/MediaBrowser.Api/Movies/MoviesService.cs +++ b/MediaBrowser.Api/Movies/MoviesService.cs @@ -8,7 +8,6 @@ using MediaBrowser.Controller.Persistence; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Querying; -using MoreLinq; using ServiceStack; using System; using System.Collections.Generic; @@ -16,6 +15,7 @@ using System.Linq; using System.Threading.Tasks; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.LiveTv; +using MediaBrowser.Model.Extensions; namespace MediaBrowser.Api.Movies { diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs index dc26218a52..16175229b5 100644 --- a/MediaBrowser.Api/Playback/BaseStreamingService.cs +++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs @@ -352,6 +352,11 @@ namespace MediaBrowser.Api.Playback return defaultEncoder; } + protected virtual string GetDefaultH264Preset() + { + return "superfast"; + } + /// /// Gets the video bitrate to specify on the command line /// @@ -375,7 +380,7 @@ namespace MediaBrowser.Api.Playback } else { - param += "-preset superfast"; + param += "-preset " + GetDefaultH264Preset(); } if (encodingOptions.H264Crf >= 0 && encodingOptions.H264Crf <= 51) diff --git a/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs b/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs index 319e4bbb68..06e57bfc03 100644 --- a/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs +++ b/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs @@ -256,7 +256,7 @@ namespace MediaBrowser.Api.Playback.Hls "hls/" + Path.GetFileNameWithoutExtension(outputPath)); } - var args = string.Format("{0} {1} {2} -map_metadata -1 -threads {3} {4} {5} -sc_threshold 0 {6} -hls_time {7} -start_number {8} -hls_list_size {9}{10} -y \"{11}\"", + var args = string.Format("{0} {1} {2} -map_metadata -1 -threads {3} {4} {5} -avoid_negative_ts make_zero -fflags +genpts -sc_threshold 0 {6} -hls_time {7} -start_number {8} -hls_list_size {9}{10} -y \"{11}\"", itsOffset, inputModifier, GetInputArgument(state), @@ -274,6 +274,11 @@ namespace MediaBrowser.Api.Playback.Hls return args; } + protected override string GetDefaultH264Preset() + { + return "veryfast"; + } + protected virtual int GetStartNumber(StreamState state) { return 0; diff --git a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs index 97b386d73b..8dea9068de 100644 --- a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs +++ b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs @@ -886,7 +886,7 @@ namespace MediaBrowser.Api.Playback.Hls var mapArgs = state.IsOutputVideo ? GetMapArgs(state) : string.Empty; var enableSplittingOnNonKeyFrames = state.VideoRequest.EnableSplittingOnNonKeyFrames && string.Equals(state.OutputVideoCodec, "copy", StringComparison.OrdinalIgnoreCase); - enableSplittingOnNonKeyFrames = false; + // TODO: check libavformat version for 57 50.100 and use -hls_flags split_by_time var hlsProtocolSupportsSplittingByTime = false; diff --git a/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs b/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs index c7258d72f7..61335a6e0d 100644 --- a/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs +++ b/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs @@ -91,6 +91,7 @@ namespace MediaBrowser.Api.Playback.Hls { args += " -bsf:v h264_mp4toannexb"; } + args += " -flags +global_header"; return args; } @@ -113,7 +114,7 @@ namespace MediaBrowser.Api.Playback.Hls args += GetGraphicalSubtitleParam(state, codec); } - args += " -flags -global_header"; + args += " -flags +global_header"; return args; } diff --git a/MediaBrowser.Api/Playback/Progressive/VideoService.cs b/MediaBrowser.Api/Playback/Progressive/VideoService.cs index 21e8845f5f..a1d4963c0a 100644 --- a/MediaBrowser.Api/Playback/Progressive/VideoService.cs +++ b/MediaBrowser.Api/Playback/Progressive/VideoService.cs @@ -150,6 +150,11 @@ namespace MediaBrowser.Api.Playback.Progressive args += " -copyts -avoid_negative_ts disabled -start_at_zero"; } + if (!state.RunTimeTicks.HasValue) + { + args += " -fflags +genpts -flags +global_header"; + } + return args; } @@ -191,6 +196,11 @@ namespace MediaBrowser.Api.Playback.Progressive args += GetGraphicalSubtitleParam(state, videoCodec); } + if (!state.RunTimeTicks.HasValue) + { + args += " -fflags +genpts -flags +global_header"; + } + return args; } diff --git a/MediaBrowser.Api/packages.config b/MediaBrowser.Api/packages.config index 4f2cbae7cb..ccef6d6862 100644 --- a/MediaBrowser.Api/packages.config +++ b/MediaBrowser.Api/packages.config @@ -1,6 +1,5 @@  - \ No newline at end of file diff --git a/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs b/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs index eec18e9857..063529cfc8 100644 --- a/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs +++ b/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs @@ -342,7 +342,6 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager ResponseUrl = url, Content = memoryStream, StatusCode = HttpStatusCode.OK, - Headers = new NameValueCollection(), ContentLength = memoryStream.Length }; } @@ -487,7 +486,7 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager private HttpResponseInfo GetResponseInfo(HttpWebResponse httpResponse, Stream content, long? contentLength, IDisposable disposable) { - return new HttpResponseInfo(disposable) + var responseInfo = new HttpResponseInfo(disposable) { Content = content, @@ -495,17 +494,22 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager ContentType = httpResponse.ContentType, - Headers = new NameValueCollection(httpResponse.Headers), - ContentLength = contentLength, ResponseUrl = httpResponse.ResponseUri.ToString() }; + + if (httpResponse.Headers != null) + { + SetHeaders(httpResponse.Headers, responseInfo); + } + + return responseInfo; } private HttpResponseInfo GetResponseInfo(HttpWebResponse httpResponse, string tempFile, long? contentLength) { - return new HttpResponseInfo + var responseInfo = new HttpResponseInfo { TempFilePath = tempFile, @@ -513,10 +517,23 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager ContentType = httpResponse.ContentType, - Headers = httpResponse.Headers, - ContentLength = contentLength }; + + if (httpResponse.Headers != null) + { + SetHeaders(httpResponse.Headers, responseInfo); + } + + return responseInfo; + } + + private void SetHeaders(WebHeaderCollection headers, HttpResponseInfo responseInfo) + { + foreach (var key in headers.AllKeys) + { + responseInfo.Headers[key] = headers[key]; + } } public Task Post(HttpRequestOptions options) diff --git a/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj b/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj index f3444f01b0..ebe9ac5c4b 100644 --- a/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj +++ b/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj @@ -13,7 +13,7 @@ ..\ 10.0.0 2.0 - v4.5 + v4.6 @@ -24,7 +24,6 @@ DEBUG;TRACE prompt 4 - v4.5.1 none @@ -33,7 +32,6 @@ TRACE prompt 4 - v4.5 none @@ -42,7 +40,6 @@ TRACE prompt 4 - v4.5 Always @@ -56,9 +53,6 @@ ..\packages\Microsoft.IO.RecyclableMemoryStream.1.1.0.0\lib\net45\Microsoft.IO.RecyclableMemoryStream.dll True - - ..\packages\morelinq.1.4.0\lib\net35\MoreLinq.dll - ..\packages\NLog.4.3.8\lib\net45\NLog.dll True diff --git a/MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs b/MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs index 1b5e260d71..5e00514d55 100644 --- a/MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs +++ b/MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs @@ -6,7 +6,7 @@ using System.Linq; using System.Net; using System.Net.NetworkInformation; using System.Net.Sockets; -using MoreLinq; +using MediaBrowser.Model.Extensions; namespace MediaBrowser.Common.Implementations.Networking { @@ -308,7 +308,7 @@ namespace MediaBrowser.Common.Implementations.Networking string[] values = endpointstring.Split(new char[] { ':' }); IPAddress ipaddy; int port = -1; - + //check if we have an IPv6 or ports if (values.Length <= 2) // ipv4 or hostname { diff --git a/MediaBrowser.Common.Implementations/packages.config b/MediaBrowser.Common.Implementations/packages.config index 40c727a063..90a6aae245 100644 --- a/MediaBrowser.Common.Implementations/packages.config +++ b/MediaBrowser.Common.Implementations/packages.config @@ -2,7 +2,6 @@ - diff --git a/MediaBrowser.Common/MediaBrowser.Common.csproj b/MediaBrowser.Common/MediaBrowser.Common.csproj index a46aaf9f7b..9ee91684f9 100644 --- a/MediaBrowser.Common/MediaBrowser.Common.csproj +++ b/MediaBrowser.Common/MediaBrowser.Common.csproj @@ -24,7 +24,6 @@ prompt 4 AnyCPU - v4.5 none @@ -33,7 +32,6 @@ TRACE prompt 4 - v4.5 none @@ -42,7 +40,6 @@ TRACE prompt 4 - v4.5 @@ -91,7 +88,6 @@ - diff --git a/MediaBrowser.Common/Net/HttpResponseInfo.cs b/MediaBrowser.Common/Net/HttpResponseInfo.cs index 890c893e61..ed941a4474 100644 --- a/MediaBrowser.Common/Net/HttpResponseInfo.cs +++ b/MediaBrowser.Common/Net/HttpResponseInfo.cs @@ -1,5 +1,5 @@ using System; -using System.Collections.Specialized; +using System.Collections.Generic; using System.IO; using System.Net; @@ -50,16 +50,18 @@ namespace MediaBrowser.Common.Net /// Gets or sets the headers. /// /// The headers. - public NameValueCollection Headers { get; set; } + public Dictionary Headers { get; set; } private readonly IDisposable _disposable; public HttpResponseInfo(IDisposable disposable) { _disposable = disposable; + Headers = new Dictionary(StringComparer.OrdinalIgnoreCase); } public HttpResponseInfo() { + Headers = new Dictionary(StringComparer.OrdinalIgnoreCase); } public void Dispose() diff --git a/MediaBrowser.Common/Net/INetworkManager.cs b/MediaBrowser.Common/Net/INetworkManager.cs index de63ddd513..0a565f6701 100644 --- a/MediaBrowser.Common/Net/INetworkManager.cs +++ b/MediaBrowser.Common/Net/INetworkManager.cs @@ -7,12 +7,6 @@ namespace MediaBrowser.Common.Net { public interface INetworkManager { - /// - /// Gets the machine's local ip address - /// - /// IPAddress. - IEnumerable GetLocalIpAddresses(); - /// /// Gets a random port number that is currently available /// @@ -45,13 +39,6 @@ namespace MediaBrowser.Common.Net /// PC's in the Domain IEnumerable GetNetworkDevices(); - /// - /// Parses the specified endpointstring. - /// - /// The endpointstring. - /// IPEndPoint. - IPEndPoint Parse(string endpointstring); - /// /// Determines whether [is in local network] [the specified endpoint]. /// 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..9debdf9bae 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 { @@ -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) 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.Common/Threading/PeriodicTimer.cs b/MediaBrowser.Controller/Threading/PeriodicTimer.cs similarity index 97% rename from MediaBrowser.Common/Threading/PeriodicTimer.cs rename to MediaBrowser.Controller/Threading/PeriodicTimer.cs index 75ccada4ef..f9d19b9a10 100644 --- a/MediaBrowser.Common/Threading/PeriodicTimer.cs +++ b/MediaBrowser.Controller/Threading/PeriodicTimer.cs @@ -2,7 +2,7 @@ using System.Threading; using Microsoft.Win32; -namespace MediaBrowser.Common.Threading +namespace MediaBrowser.Controller.Threading { public class PeriodicTimer : IDisposable { 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 diff --git a/MediaBrowser.Dlna/DlnaManager.cs b/MediaBrowser.Dlna/DlnaManager.cs index aae157e7a8..2c134ec99f 100644 --- a/MediaBrowser.Dlna/DlnaManager.cs +++ b/MediaBrowser.Dlna/DlnaManager.cs @@ -277,9 +277,27 @@ namespace MediaBrowser.Dlna { try { - return _fileSystem.GetFiles(path) + var allFiles = _fileSystem.GetFiles(path) + .ToList(); + + var xmlFies = allFiles .Where(i => string.Equals(i.Extension, ".xml", StringComparison.OrdinalIgnoreCase)) - .Select(i => ParseProfileXmlFile(i.FullName, type)) + .ToList(); + + var jsonFiles = allFiles + .Where(i => string.Equals(i.Extension, ".json", StringComparison.OrdinalIgnoreCase)) + .ToList(); + + var jsonFileNames = jsonFiles + .Select(i => Path.GetFileNameWithoutExtension(i.Name)) + .ToList(); + + var parseFiles = jsonFiles.ToList(); + + parseFiles.AddRange(xmlFies.Where(i => !jsonFileNames.Contains(Path.GetFileNameWithoutExtension(i.Name), StringComparer.Ordinal))); + + return parseFiles + .Select(i => ParseProfileFile(i.FullName, type)) .Where(i => i != null) .ToList(); } @@ -289,7 +307,7 @@ namespace MediaBrowser.Dlna } } - private DeviceProfile ParseProfileXmlFile(string path, DeviceProfileType type) + private DeviceProfile ParseProfileFile(string path, DeviceProfileType type) { lock (_profiles) { @@ -301,7 +319,19 @@ namespace MediaBrowser.Dlna try { - var profile = (DeviceProfile)_xmlSerializer.DeserializeFromFile(typeof(DeviceProfile), path); + DeviceProfile profile; + + if (string.Equals(Path.GetExtension(path), ".xml", StringComparison.OrdinalIgnoreCase)) + { + var tempProfile = (MediaBrowser.Dlna.ProfileSerialization.DeviceProfile)_xmlSerializer.DeserializeFromFile(typeof(MediaBrowser.Dlna.ProfileSerialization.DeviceProfile), path); + + var json = _jsonSerializer.SerializeToString(tempProfile); + profile = (DeviceProfile)_jsonSerializer.DeserializeFromString(json); + } + else + { + profile = (DeviceProfile)_jsonSerializer.DeserializeFromFile(typeof(DeviceProfile), path); + } profile.Id = path.ToLower().GetMD5().ToString("N"); profile.ProfileType = type; @@ -312,7 +342,7 @@ namespace MediaBrowser.Dlna } catch (Exception ex) { - _logger.ErrorException("Error parsing profile xml: {0}", ex, path); + _logger.ErrorException("Error parsing profile file: {0}", ex, path); return null; } @@ -328,7 +358,7 @@ namespace MediaBrowser.Dlna var info = GetProfileInfosInternal().First(i => string.Equals(i.Info.Id, id, StringComparison.OrdinalIgnoreCase)); - return ParseProfileXmlFile(info.Path, info.Info.Type); + return ParseProfileFile(info.Path, info.Info.Type); } private IEnumerable GetProfileInfosInternal() @@ -348,21 +378,6 @@ namespace MediaBrowser.Dlna return GetProfileInfosInternal().Select(i => i.Info); } - private IEnumerable GetProfileInfos(string path, DeviceProfileType type) - { - try - { - return _fileSystem.GetFiles(path) - .Where(i => string.Equals(i.Extension, ".xml", StringComparison.OrdinalIgnoreCase)) - .Select(i => GetInternalProfileInfo(i, type)) - .ToList(); - } - catch (DirectoryNotFoundException) - { - return new List(); - } - } - private InternalProfileInfo GetInternalProfileInfo(FileSystemMetadata file, DeviceProfileType type) { return new InternalProfileInfo @@ -381,7 +396,7 @@ namespace MediaBrowser.Dlna private void ExtractSystemProfiles() { var assembly = GetType().Assembly; - var namespaceName = GetType().Namespace + ".Profiles.Xml."; + var namespaceName = GetType().Namespace + ".Profiles.Json."; var systemProfilesPath = SystemProfilesPath; @@ -439,7 +454,7 @@ namespace MediaBrowser.Dlna throw new ArgumentException("Profile is missing Name"); } - var newFilename = _fileSystem.GetValidFilename(profile.Name) + ".xml"; + var newFilename = _fileSystem.GetValidFilename(profile.Name) + ".json"; var path = Path.Combine(UserProfilesPath, newFilename); SaveProfile(profile, path, DeviceProfileType.User); @@ -460,7 +475,7 @@ namespace MediaBrowser.Dlna var current = GetProfileInfosInternal().First(i => string.Equals(i.Info.Id, profile.Id, StringComparison.OrdinalIgnoreCase)); - var newFilename = _fileSystem.GetValidFilename(profile.Name) + ".xml"; + var newFilename = _fileSystem.GetValidFilename(profile.Name) + ".json"; var path = Path.Combine(UserProfilesPath, newFilename); if (!string.Equals(path, current.Path, StringComparison.Ordinal) && @@ -478,7 +493,21 @@ namespace MediaBrowser.Dlna { _profiles[path] = new Tuple(GetInternalProfileInfo(_fileSystem.GetFileInfo(path), type), profile); } - _xmlSerializer.SerializeToFile(profile, path); + SerializeToJson(profile, path); + } + + internal void SerializeToJson(DeviceProfile profile, string path) + { + _jsonSerializer.SerializeToFile(profile, path); + + try + { + File.Delete(Path.ChangeExtension(path, ".xml")); + } + catch + { + + } } /// @@ -532,14 +561,14 @@ namespace MediaBrowser.Dlna class DlnaProfileEntryPoint : IServerEntryPoint { private readonly IApplicationPaths _appPaths; - private readonly IXmlSerializer _xmlSerializer; + private readonly IJsonSerializer _jsonSerializer; private readonly IFileSystem _fileSystem; - public DlnaProfileEntryPoint(IApplicationPaths appPaths, IXmlSerializer xmlSerializer, IFileSystem fileSystem) + public DlnaProfileEntryPoint(IApplicationPaths appPaths, IFileSystem fileSystem, IJsonSerializer jsonSerializer) { _appPaths = appPaths; - _xmlSerializer = xmlSerializer; _fileSystem = fileSystem; + _jsonSerializer = jsonSerializer; } public void Run() @@ -587,9 +616,9 @@ namespace MediaBrowser.Dlna foreach (var item in list) { - var path = Path.Combine(_appPaths.ProgramDataPath, _fileSystem.GetValidFilename(item.Name) + ".xml"); + var path = Path.Combine(_appPaths.ProgramDataPath, _fileSystem.GetValidFilename(item.Name) + ".json"); - _xmlSerializer.SerializeToFile(item, path); + _jsonSerializer.SerializeToFile(item, path); } } diff --git a/MediaBrowser.Dlna/MediaBrowser.Dlna.csproj b/MediaBrowser.Dlna/MediaBrowser.Dlna.csproj index ebffe6c575..6053097619 100644 --- a/MediaBrowser.Dlna/MediaBrowser.Dlna.csproj +++ b/MediaBrowser.Dlna/MediaBrowser.Dlna.csproj @@ -12,7 +12,7 @@ 512 10.0.0 2.0 - v4.5 + v4.6 ..\ @@ -24,7 +24,6 @@ DEBUG;TRACE prompt 4 - v4.5.1 none @@ -33,7 +32,6 @@ TRACE prompt 4 - v4.5.1 false @@ -45,9 +43,6 @@ False ..\packages\CommonIO.1.0.0.9\lib\net45\CommonIO.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 @@ -96,6 +91,16 @@ + + + + + + + + + + @@ -173,55 +178,16 @@ MediaBrowser.Model - - - - - - - - - - - - - - Designer - - - - - Designer - - - - - - Designer - - - - - - - - - - - - - - @@ -230,31 +196,39 @@ - - - - - - - - - - Designer - - - - - Designer - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - Activity\ActivityLogEntry.cs - - - ApiClient\ApiClientExtensions.cs - - - ApiClient\ApiHelpers.cs - - - ApiClient\ConnectionMode.cs - - - ApiClient\ConnectionOptions.cs - - - ApiClient\ConnectionResult.cs - - - ApiClient\ConnectionState.cs - - - ApiClient\ConnectSignupResponse.cs - - - ApiClient\GeneralCommandEventArgs.cs - - - ApiClient\HttpResponseEventArgs.cs - - - ApiClient\IApiClient.cs - - - ApiClient\IClientWebSocket.cs - - - ApiClient\IConnectionManager.cs - - - ApiClient\IDevice.cs - - - ApiClient\IServerEvents.cs - - - ApiClient\NetworkStatus.cs - - - ApiClient\RemoteLogoutReason.cs - - - ApiClient\ServerCredentials.cs - - - ApiClient\ServerDiscoveryInfo.cs - - - ApiClient\ServerInfo.cs - - - ApiClient\ServerUserInfo.cs - - - ApiClient\SessionUpdatesEventArgs.cs - - - ApiClient\WakeOnLanInfo.cs - - - Branding\BrandingOptions.cs - - - Channels\AllChannelMediaQuery.cs - - - Channels\ChannelFeatures.cs - - - Channels\ChannelFolderType.cs - - - Channels\ChannelInfo.cs - - - Channels\ChannelItemQuery.cs - - - Channels\ChannelItemSortField.cs - - - Channels\ChannelMediaContentType.cs - - - Channels\ChannelMediaType.cs - - - Channels\ChannelQuery.cs - - - Collections\CollectionCreationResult.cs - - - Configuration\AccessSchedule.cs - - - Configuration\BaseApplicationConfiguration.cs - - - Configuration\ChannelOptions.cs - - - Configuration\ChapterOptions.cs - - - Configuration\DlnaOptions.cs - - - Configuration\DynamicDayOfWeek.cs - - - Configuration\EncodingOptions.cs - - - Configuration\FanartOptions.cs - - - Configuration\ImageOption.cs - - - Configuration\ImageSavingConvention.cs - - - Configuration\LibraryOptions.cs - - - Configuration\MetadataConfiguration.cs - - - Configuration\MetadataOptions.cs - - - Configuration\MetadataPlugin.cs - - - Configuration\MetadataPluginSummary.cs - - - Configuration\MetadataPluginType.cs - - - Configuration\PathSubstitution.cs - - - Configuration\PeopleMetadataOptions.cs - - - Configuration\ServerConfiguration.cs - - - Configuration\SubtitlePlaybackMode.cs - - - Configuration\UnratedItem.cs - - - Configuration\UserConfiguration.cs - - - Configuration\XbmcMetadataOptions.cs - - - ApiClient\ConnectAuthenticationExchangeResult.cs - - - Connect\ConnectAuthenticationResult.cs - - - Connect\ConnectAuthorization.cs - - - Connect\ConnectAuthorizationRequest.cs - - - Connect\ConnectPassword.cs - - - Connect\ConnectUser.cs - - - Connect\ConnectUserQuery.cs - - - Connect\ConnectUserServer.cs - - - Connect\PinCreationResult.cs - - - Connect\PinExchangeResult.cs - - - Connect\PinStatusResult.cs - - - Connect\UserLinkType.cs - - - Devices\ContentUploadHistory.cs - - - Devices\DeviceInfo.cs - - - Devices\DeviceOptions.cs - - - Devices\DeviceQuery.cs - - - Devices\DevicesOptions.cs - - - Devices\LocalFileInfo.cs - - - Dlna\AudioOptions.cs - - - Dlna\CodecProfile.cs - - - Dlna\CodecType.cs - - - Dlna\ConditionProcessor.cs - - - Dlna\ContainerProfile.cs - - - Dlna\ContentFeatureBuilder.cs - - - Dlna\DeviceIdentification.cs - - - Dlna\DeviceProfile.cs - - - Dlna\DeviceProfileInfo.cs - - - Dlna\DeviceProfileType.cs - - - Dlna\DirectPlayProfile.cs - - - Dlna\DlnaFlags.cs - - - Dlna\DlnaMaps.cs - - - Dlna\DlnaProfileType.cs - - - Dlna\EncodingContext.cs - - - Dlna\HeaderMatchType.cs - - - Dlna\HttpHeaderInfo.cs - - - Dlna\ITranscoderSupport.cs - - - Dlna\MediaFormatProfile.cs - - - Dlna\MediaFormatProfileResolver.cs - - - Dlna\PlaybackErrorCode.cs - - - Dlna\PlaybackException.cs - - - Dlna\ProfileCondition.cs - - - Dlna\ProfileConditionType.cs - - - Dlna\ProfileConditionValue.cs - - - Dlna\ResolutionConfiguration.cs - - - Dlna\ResolutionNormalizer.cs - - - Dlna\ResolutionOptions.cs - - - Dlna\ResponseProfile.cs - - - Dlna\SearchCriteria.cs - - - Dlna\SearchType.cs - - - Dlna\SortCriteria.cs - - - Dlna\StreamBuilder.cs - - - Dlna\StreamInfo.cs - - - Dlna\StreamInfoSorter.cs - - - Dlna\SubtitleDeliveryMethod.cs - - - Dlna\SubtitleProfile.cs - - - Dlna\SubtitleStreamInfo.cs - - - Dlna\TranscodeSeekInfo.cs - - - Dlna\TranscodingProfile.cs - - - Dlna\VideoOptions.cs - - - Dlna\XmlAttribute.cs - - - Drawing\DrawingUtils.cs - - - Drawing\ImageFormat.cs - - - Drawing\ImageOrientation.cs - - - Drawing\ImageSize.cs - - - Dto\BaseItemDto.cs - - - Dto\BaseItemPerson.cs - - - Dto\ChapterInfoDto.cs - - - Dto\GameSystemSummary.cs - - - Dto\IHasServerId.cs - - - Dto\IHasSyncInfo.cs - - - Dto\IItemDto.cs - - - Dto\ImageByNameInfo.cs - - - Dto\ImageInfo.cs - - - Dto\ImageOptions.cs - - - Dto\ItemCounts.cs - - - Dto\ItemIndex.cs - - - Dto\ItemLayout.cs - - - Dto\MediaSourceInfo.cs - - - Dto\MediaSourceType.cs - - - Dto\MetadataEditorInfo.cs - - - Dto\NameIdPair.cs - - - Dto\NameValuePair.cs - - - Dto\RatingType.cs - - - Dto\RecommendationDto.cs - - - Dto\RecommendationType.cs - - - Dto\StudioDto.cs - - - Dto\SubtitleDownloadOptions.cs - - - Dto\UserDto.cs - - - Dto\UserItemDataDto.cs - - - Entities\BaseItemInfo.cs - - - Entities\ChapterInfo.cs - - - Entities\CollectionType.cs - - - Entities\DisplayPreferences.cs - - - Entities\EmptyRequestResult.cs - - - Entities\ExtraType.cs - - - Entities\IHasProviderIds.cs - - - Entities\ImageType.cs - - - Entities\IsoType.cs - - - Entities\ItemReview.cs - - - Entities\LibraryUpdateInfo.cs - - - Entities\LocationType.cs - - - Entities\MBRegistrationRecord.cs - - - Entities\MediaStream.cs - - - Entities\MediaStreamType.cs - - - Entities\MediaType.cs - - - Entities\MediaUrl.cs - - - Entities\MetadataFields.cs - - - Entities\MetadataProviders.cs - - - Entities\PackageReviewInfo.cs - - - Entities\ParentalRating.cs - - - Entities\PersonType.cs - - - Entities\PluginSecurityInfo.cs - - - Entities\ProviderIdsExtensions.cs - - - Entities\ScrollDirection.cs - - - Entities\SeriesStatus.cs - - - Entities\SortOrder.cs - - - Entities\TrailerType.cs - - - Entities\UserDataSaveReason.cs - - - Entities\Video3DFormat.cs - - - Entities\VideoType.cs - - - Entities\VirtualFolderInfo.cs - - - Events\GenericEventArgs.cs - - - Extensions\BoolHelper.cs - - - Extensions\DoubleHelper.cs - - - Extensions\FloatHelper.cs - - - Extensions\IntHelper.cs - - - Extensions\ListHelper.cs - - - Extensions\StringHelper.cs - - - FileOrganization\AutoOrganizeOptions.cs - - - FileOrganization\EpisodeFileOrganizationRequest.cs - - - FileOrganization\FileOrganizationResult.cs - - - FileOrganization\FileOrganizationResultQuery.cs - - - FileOrganization\FileOrganizerType.cs - - - FileOrganization\FileSortingStatus.cs - - - FileOrganization\SmartMatchInfo.cs - - - FileOrganization\TvFileOrganizationOptions.cs - - - Globalization\CountryInfo.cs - - - Globalization\CultureDto.cs - - - Globalization\LocalizatonOption.cs - - - IO\FileSystemEntryInfo.cs - - - IO\FileSystemEntryType.cs - - - IO\IIsoManager.cs - - - IO\IIsoMount.cs - - - IO\IIsoMounter.cs - - - IO\IZipClient.cs - - - Library\PlayAccess.cs - - - LiveTv\BaseTimerInfoDto.cs - - - LiveTv\ChannelInfoDto.cs - - - LiveTv\ChannelType.cs - - - LiveTv\DayPattern.cs - - - LiveTv\GuideInfo.cs - - - LiveTv\LiveTvChannelQuery.cs - - - LiveTv\LiveTvInfo.cs - - - LiveTv\LiveTvOptions.cs - - - LiveTv\LiveTvServiceInfo.cs - - - LiveTv\LiveTvServiceStatus.cs - - - LiveTv\LiveTvTunerInfoDto.cs - - - LiveTv\LiveTvTunerStatus.cs - - - LiveTv\ProgramAudio.cs - - - LiveTv\ProgramQuery.cs - - - LiveTv\RecommendedProgramQuery.cs - - - LiveTv\RecordingGroupQuery.cs - - - LiveTv\RecordingQuery.cs - - - LiveTv\RecordingStatus.cs - - - LiveTv\SeriesTimerInfoDto.cs - - - LiveTv\SeriesTimerQuery.cs - - - LiveTv\TimerInfoDto.cs - - - LiveTv\TimerQuery.cs - - - Logging\ILogger.cs - - - Logging\ILogManager.cs - - - Logging\LogSeverity.cs - - - Logging\NullLogger.cs - - - MediaInfo\AudioCodec.cs - - - MediaInfo\BlurayDiscInfo.cs - - - MediaInfo\Container.cs - - - MediaInfo\IBlurayExaminer.cs - - - MediaInfo\LiveStreamRequest.cs - - - MediaInfo\LiveStreamResponse.cs - - - MediaInfo\MediaInfo.cs - - - MediaInfo\MediaProtocol.cs - - - MediaInfo\PlaybackInfoRequest.cs - - - MediaInfo\PlaybackInfoResponse.cs - - - MediaInfo\SubtitleFormat.cs - - - MediaInfo\SubtitleTrackEvent.cs - - - MediaInfo\SubtitleTrackInfo.cs - - - MediaInfo\TransportStreamTimestamp.cs - - - MediaInfo\VideoCodec.cs - - - Net\EndPointInfo.cs - - - Net\HttpException.cs - - - Net\HttpResponse.cs - - - Net\MimeTypes.cs - - - Net\NetworkShare.cs - - - Net\NetworkShareType.cs - - - Net\WebSocketMessage.cs - - - Net\WebSocketMessageType.cs - - - Net\WebSocketState.cs - - - News\NewsItem.cs - - - News\NewsQuery.cs - - - Notifications\Notification.cs - - - Notifications\NotificationLevel.cs - - - Notifications\NotificationOption.cs - - - Notifications\NotificationOptions.cs - - - Notifications\NotificationQuery.cs - - - Notifications\NotificationRequest.cs - - - Notifications\NotificationResult.cs - - - Notifications\NotificationServiceInfo.cs - - - Notifications\NotificationsSummary.cs - - - Notifications\NotificationType.cs - - - Notifications\NotificationTypeInfo.cs - - - Notifications\SendToUserType.cs - - - Playlists\PlaylistCreationRequest.cs - - - Playlists\PlaylistCreationResult.cs - - - Playlists\PlaylistItemQuery.cs - - - Plugins\BasePluginConfiguration.cs - - - Plugins\PluginInfo.cs - - - Providers\ExternalIdInfo.cs - - - Providers\ExternalUrl.cs - - - Providers\ImageProviderInfo.cs - - - Providers\RemoteImageInfo.cs - - - Providers\RemoteImageQuery.cs - - - Providers\RemoteImageResult.cs - - - Providers\RemoteSearchResult.cs - - - Providers\RemoteSubtitleInfo.cs - - - Providers\SubtitleOptions.cs - - - Providers\SubtitleProviderInfo.cs - - - Querying\AllThemeMediaResult.cs - - - Querying\ArtistsQuery.cs - - - Querying\EpisodeQuery.cs - - - Querying\ItemCountsQuery.cs - - - Querying\ItemFields.cs - - - Querying\ItemFilter.cs - - - Querying\ItemQuery.cs - - - Querying\ItemsByNameQuery.cs - - - Querying\ItemSortBy.cs - - - Querying\ItemsResult.cs - - - Querying\LatestItemsQuery.cs - - - Querying\MovieRecommendationQuery.cs - - - Querying\NextUpQuery.cs - - - Querying\PersonsQuery.cs - - - Querying\QueryFilters.cs - - - Querying\QueryResult.cs - - - Querying\SeasonQuery.cs - - - Querying\SessionQuery.cs - - - Querying\SimilarItemsQuery.cs - - - Querying\ThemeMediaResult.cs - - - Querying\UpcomingEpisodesQuery.cs - - - Querying\UserQuery.cs - - - Registration\RegistrationInfo.cs - - - Search\SearchHint.cs - - - Search\SearchHintResult.cs - - - Search\SearchQuery.cs - - - Serialization\IJsonSerializer.cs - - - Serialization\IXmlSerializer.cs - - - Session\BrowseRequest.cs - - - Session\ClientCapabilities.cs - - - Session\GeneralCommand.cs - - - Session\GeneralCommandType.cs - - - Session\MessageCommand.cs - - - Session\PlaybackProgressInfo.cs - - - Session\PlaybackStartInfo.cs - - - Session\PlaybackStopInfo.cs - - - Session\PlayCommand.cs - - - Session\PlayerStateInfo.cs - - - Session\PlayMethod.cs - - - Session\PlayRequest.cs - - - Session\PlaystateCommand.cs - - - Session\PlaystateRequest.cs - - - Session\SessionInfoDto.cs - - - Session\SessionUserInfo.cs - - - Session\TranscodingInfo.cs - - - Session\UserDataChangeInfo.cs - - - Social\SocialShareInfo.cs - - - Sync\CompleteSyncJobInfo.cs - - - Sync\DeviceFileInfo.cs - - - Sync\ItemFIleInfo.cs - - - Sync\ItemFileType.cs - - - Sync\LocalItem.cs - - - Sync\LocalItemInfo.cs - - - Sync\LocalItemQuery.cs - - - Sync\SyncCategory.cs - - - Sync\SyncDataRequest.cs - - - Sync\SyncDataResponse.cs - - - Sync\SyncDialogOptions.cs - - - Sync\SyncedItem.cs - - - Sync\SyncJob.cs - - - Sync\SyncJobCreationResult.cs - - - Sync\SyncJobItem.cs - - - SyncJobItemQuery.cs - - - Sync\SyncJobItemStatus.cs - - - Sync\SyncJobQuery.cs - - - Sync\SyncJobRequest.cs - - - Sync\SyncJobStatus.cs - - - Sync\SyncOptions.cs - - - Sync\SyncParameter.cs - - - Sync\SyncProfileOption.cs - - - Sync\SyncQualityOption.cs - - - Sync\SyncTarget.cs - - - System\Architecture.cs - - - System\LogFile.cs - - - System\PublicSystemInfo.cs - - - System\SystemInfo.cs - - - Tasks\SystemEvent.cs - - - Tasks\TaskCompletionStatus.cs - - - Tasks\TaskInfo.cs - - - Tasks\TaskResult.cs - - - Tasks\TaskState.cs - - - Tasks\TaskTriggerInfo.cs - - - Updates\CheckForUpdateResult.cs - - - Updates\InstallationInfo.cs - - - Updates\PackageInfo.cs - - - Updates\PackageTargetSystem.cs - - - Updates\PackageVersionClass.cs - - - Updates\PackageVersionInfo.cs - - - Users\AuthenticationResult.cs - - - Users\ForgotPasswordAction.cs - - - Users\ForgotPasswordResult.cs - - - Users\PinRedeemResult.cs - - - Users\UserAction.cs - - - Users\UserActionType.cs - - - Users\UserPolicy.cs - - - Properties\SharedVersion.cs - - - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - false - - - - - - - - - \ No newline at end of file diff --git a/MediaBrowser.Model.Portable/Properties/AssemblyInfo.cs b/MediaBrowser.Model.Portable/Properties/AssemblyInfo.cs deleted file mode 100644 index a24dd014e4..0000000000 --- a/MediaBrowser.Model.Portable/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Resources; -using System.Reflection; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("MediaBrowser.Model.Portable")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("MediaBrowser.Model.Portable")] -[assembly: AssemblyCopyright("Copyright © 2013")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] -[assembly: NeutralResourcesLanguage("en")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// \ No newline at end of file diff --git a/MediaBrowser.Model.Portable/app.config b/MediaBrowser.Model.Portable/app.config deleted file mode 100644 index 3c73782929..0000000000 --- a/MediaBrowser.Model.Portable/app.config +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/MediaBrowser.Model.net35/FodyWeavers.xml b/MediaBrowser.Model.net35/FodyWeavers.xml deleted file mode 100644 index 6e2fa02e64..0000000000 --- a/MediaBrowser.Model.net35/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj deleted file mode 100644 index 3ad40e2f5d..0000000000 --- a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj +++ /dev/null @@ -1,1181 +0,0 @@ - - - - - Debug - AnyCPU - {657B5410-7C3B-4806-9753-D254102CE537} - Library - Properties - MediaBrowser.Model - MediaBrowser.Model - v3.5 - 512 - - ..\ - ..\packages\Fody.1.17.0.0 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - none - true - bin\Release\ - TRACE - prompt - 4 - - - true - - - MediaBrowser.Model.snk - - - Always - - - - - - - - - - - - - Activity\ActivityLogEntry.cs - - - ApiClient\ApiHelpers.cs - - - ApiClient\ConnectionMode.cs - - - ApiClient\ConnectionOptions.cs - - - ApiClient\ConnectionState.cs - - - ApiClient\ConnectSignupResponse.cs - - - ApiClient\GeneralCommandEventArgs.cs - - - ApiClient\HttpResponseEventArgs.cs - - - ApiClient\IServerEvents.cs - - - ApiClient\NetworkStatus.cs - - - ApiClient\RemoteLogoutReason.cs - - - ApiClient\ServerCredentials.cs - - - ApiClient\ServerDiscoveryInfo.cs - - - ApiClient\ServerInfo.cs - - - ApiClient\ServerUserInfo.cs - - - ApiClient\SessionUpdatesEventArgs.cs - - - ApiClient\WakeOnLanInfo.cs - - - Branding\BrandingOptions.cs - - - Channels\AllChannelMediaQuery.cs - - - Channels\ChannelFeatures.cs - - - Channels\ChannelFolderType.cs - - - Channels\ChannelInfo.cs - - - Channels\ChannelItemQuery.cs - - - Channels\ChannelItemSortField.cs - - - Channels\ChannelMediaContentType.cs - - - Channels\ChannelMediaType.cs - - - Channels\ChannelQuery.cs - - - Collections\CollectionCreationResult.cs - - - Configuration\AccessSchedule.cs - - - Configuration\BaseApplicationConfiguration.cs - - - Configuration\ChannelOptions.cs - - - Configuration\ChapterOptions.cs - - - Configuration\DlnaOptions.cs - - - Configuration\DynamicDayOfWeek.cs - - - Configuration\EncodingOptions.cs - - - Configuration\FanartOptions.cs - - - Configuration\ImageOption.cs - - - Configuration\ImageSavingConvention.cs - - - Configuration\LibraryOptions.cs - - - Configuration\MetadataConfiguration.cs - - - Configuration\MetadataOptions.cs - - - Configuration\MetadataPlugin.cs - - - Configuration\MetadataPluginSummary.cs - - - Configuration\MetadataPluginType.cs - - - Configuration\PathSubstitution.cs - - - Configuration\PeopleMetadataOptions.cs - - - Configuration\ServerConfiguration.cs - - - Configuration\SubtitlePlaybackMode.cs - - - Configuration\UnratedItem.cs - - - Configuration\UserConfiguration.cs - - - Configuration\XbmcMetadataOptions.cs - - - Connect\ConnectAuthenticationExchangeResult.cs - - - Connect\ConnectAuthenticationResult.cs - - - Connect\ConnectAuthorization.cs - - - Connect\ConnectAuthorizationRequest.cs - - - Connect\ConnectPassword.cs - - - Connect\ConnectUser.cs - - - Connect\ConnectUserQuery.cs - - - Connect\ConnectUserServer.cs - - - Connect\PinCreationResult.cs - - - Connect\PinExchangeResult.cs - - - Connect\PinStatusResult.cs - - - Connect\UserLinkType.cs - - - Devices\ContentUploadHistory.cs - - - Devices\DeviceInfo.cs - - - Devices\DeviceOptions.cs - - - Devices\DeviceQuery.cs - - - Devices\DevicesOptions.cs - - - Devices\LocalFileInfo.cs - - - Dlna\AudioOptions.cs - - - Dlna\CodecProfile.cs - - - Dlna\CodecType.cs - - - Dlna\ConditionProcessor.cs - - - Dlna\ContainerProfile.cs - - - Dlna\ContentFeatureBuilder.cs - - - Dlna\DeviceIdentification.cs - - - Dlna\DeviceProfile.cs - - - Dlna\DeviceProfileInfo.cs - - - Dlna\DeviceProfileType.cs - - - Dlna\DirectPlayProfile.cs - - - Dlna\DlnaFlags.cs - - - Dlna\DlnaMaps.cs - - - Dlna\DlnaProfileType.cs - - - Dlna\EncodingContext.cs - - - Dlna\HeaderMatchType.cs - - - Dlna\HttpHeaderInfo.cs - - - Dlna\ITranscoderSupport.cs - - - Dlna\MediaFormatProfile.cs - - - Dlna\MediaFormatProfileResolver.cs - - - Dlna\PlaybackErrorCode.cs - - - Dlna\PlaybackException.cs - - - Dlna\ProfileCondition.cs - - - Dlna\ProfileConditionType.cs - - - Dlna\ProfileConditionValue.cs - - - Dlna\ResolutionConfiguration.cs - - - Dlna\ResolutionNormalizer.cs - - - Dlna\ResolutionOptions.cs - - - Dlna\ResponseProfile.cs - - - Dlna\SearchCriteria.cs - - - Dlna\SearchType.cs - - - Dlna\SortCriteria.cs - - - Dlna\StreamBuilder.cs - - - Dlna\StreamInfo.cs - - - Dlna\StreamInfoSorter.cs - - - Dlna\SubtitleDeliveryMethod.cs - - - Dlna\SubtitleProfile.cs - - - Dlna\SubtitleStreamInfo.cs - - - Dlna\TranscodeSeekInfo.cs - - - Dlna\TranscodingProfile.cs - - - Dlna\VideoOptions.cs - - - Dlna\XmlAttribute.cs - - - Drawing\DrawingUtils.cs - - - Drawing\ImageFormat.cs - - - Drawing\ImageOrientation.cs - - - Drawing\ImageSize.cs - - - Dto\BaseItemDto.cs - - - Dto\BaseItemPerson.cs - - - Dto\ChapterInfoDto.cs - - - Dto\GameSystemSummary.cs - - - Dto\IHasServerId.cs - - - Dto\IHasSyncInfo.cs - - - Dto\IItemDto.cs - - - Dto\ImageByNameInfo.cs - - - Dto\ImageInfo.cs - - - Dto\ImageOptions.cs - - - Dto\ItemCounts.cs - - - Dto\ItemIndex.cs - - - Dto\ItemLayout.cs - - - Dto\MediaSourceInfo.cs - - - Dto\MediaSourceType.cs - - - Dto\MetadataEditorInfo.cs - - - Dto\NameIdPair.cs - - - Dto\NameValuePair.cs - - - Dto\RatingType.cs - - - Dto\RecommendationDto.cs - - - Dto\RecommendationType.cs - - - Dto\StudioDto.cs - - - Dto\SubtitleDownloadOptions.cs - - - Dto\UserDto.cs - - - Dto\UserItemDataDto.cs - - - Entities\BaseItemInfo.cs - - - Entities\ChapterInfo.cs - - - Entities\CollectionType.cs - - - Entities\DisplayPreferences.cs - - - Entities\EmptyRequestResult.cs - - - Entities\ExtraType.cs - - - Entities\IHasProviderIds.cs - - - Entities\ImageType.cs - - - Entities\IsoType.cs - - - Entities\ItemReview.cs - - - Entities\LibraryUpdateInfo.cs - - - Entities\LocationType.cs - - - Entities\MBRegistrationRecord.cs - - - Entities\MediaStream.cs - - - Entities\MediaStreamType.cs - - - Entities\MediaType.cs - - - Entities\MediaUrl.cs - - - Entities\MetadataFields.cs - - - Entities\MetadataProviders.cs - - - Entities\PackageReviewInfo.cs - - - Entities\ParentalRating.cs - - - Entities\PersonType.cs - - - Entities\PluginSecurityInfo.cs - - - Entities\ProviderIdsExtensions.cs - - - Entities\ScrollDirection.cs - - - Entities\SeriesStatus.cs - - - Entities\SortOrder.cs - - - Entities\TrailerType.cs - - - Entities\UserDataSaveReason.cs - - - Entities\Video3DFormat.cs - - - Entities\VideoType.cs - - - Entities\VirtualFolderInfo.cs - - - Events\GenericEventArgs.cs - - - Extensions\BoolHelper.cs - - - Extensions\DoubleHelper.cs - - - Extensions\FloatHelper.cs - - - Extensions\IntHelper.cs - - - Extensions\ListHelper.cs - - - Extensions\StringHelper.cs - - - FileOrganization\AutoOrganizeOptions.cs - - - FileOrganization\EpisodeFileOrganizationRequest.cs - - - FileOrganization\FileOrganizationResult.cs - - - FileOrganization\FileOrganizationResultQuery.cs - - - FileOrganization\FileOrganizerType.cs - - - FileOrganization\FileSortingStatus.cs - - - FileOrganization\SmartMatchInfo.cs - - - FileOrganization\TvFileOrganizationOptions.cs - - - Globalization\CountryInfo.cs - - - Globalization\CultureDto.cs - - - Globalization\LocalizatonOption.cs - - - IO\FileSystemEntryInfo.cs - - - IO\FileSystemEntryType.cs - - - IO\IIsoMount.cs - - - Library\PlayAccess.cs - - - LiveTv\BaseTimerInfoDto.cs - - - LiveTv\ChannelInfoDto.cs - - - LiveTv\ChannelType.cs - - - LiveTv\DayPattern.cs - - - LiveTv\GuideInfo.cs - - - LiveTv\LiveTvChannelQuery.cs - - - LiveTv\LiveTvInfo.cs - - - LiveTv\LiveTvOptions.cs - - - LiveTv\LiveTvServiceInfo.cs - - - LiveTv\LiveTvServiceStatus.cs - - - LiveTv\LiveTvTunerInfoDto.cs - - - LiveTv\LiveTvTunerStatus.cs - - - LiveTv\ProgramAudio.cs - - - LiveTv\ProgramQuery.cs - - - LiveTv\RecommendedProgramQuery.cs - - - LiveTv\RecordingGroupQuery.cs - - - LiveTv\RecordingQuery.cs - - - LiveTv\RecordingStatus.cs - - - LiveTv\SeriesTimerInfoDto.cs - - - LiveTv\SeriesTimerQuery.cs - - - LiveTv\TimerInfoDto.cs - - - LiveTv\TimerQuery.cs - - - Logging\ILogger.cs - - - Logging\ILogManager.cs - - - Logging\LogSeverity.cs - - - Logging\NullLogger.cs - - - MediaInfo\AudioCodec.cs - - - MediaInfo\BlurayDiscInfo.cs - - - MediaInfo\Container.cs - - - MediaInfo\IBlurayExaminer.cs - - - MediaInfo\LiveStreamRequest.cs - - - MediaInfo\LiveStreamResponse.cs - - - MediaInfo\MediaInfo.cs - - - MediaInfo\MediaProtocol.cs - - - MediaInfo\PlaybackInfoRequest.cs - - - MediaInfo\PlaybackInfoResponse.cs - - - MediaInfo\SubtitleFormat.cs - - - MediaInfo\SubtitleTrackEvent.cs - - - MediaInfo\SubtitleTrackInfo.cs - - - MediaInfo\TransportStreamTimestamp.cs - - - MediaInfo\VideoCodec.cs - - - Net\EndPointInfo.cs - - - Net\HttpException.cs - - - Net\HttpResponse.cs - - - Net\MimeTypes.cs - - - Net\NetworkShare.cs - - - Net\NetworkShareType.cs - - - Net\WebSocketMessage.cs - - - Net\WebSocketMessageType.cs - - - Net\WebSocketState.cs - - - News\NewsItem.cs - - - News\NewsQuery.cs - - - Notifications\Notification.cs - - - Notifications\NotificationLevel.cs - - - Notifications\NotificationOption.cs - - - Notifications\NotificationOptions.cs - - - Notifications\NotificationQuery.cs - - - Notifications\NotificationRequest.cs - - - Notifications\NotificationResult.cs - - - Notifications\NotificationServiceInfo.cs - - - Notifications\NotificationsSummary.cs - - - Notifications\NotificationType.cs - - - Notifications\NotificationTypeInfo.cs - - - Notifications\SendToUserType.cs - - - Playlists\PlaylistCreationRequest.cs - - - Playlists\PlaylistCreationResult.cs - - - Playlists\PlaylistItemQuery.cs - - - Plugins\BasePluginConfiguration.cs - - - Plugins\PluginInfo.cs - - - Providers\ExternalIdInfo.cs - - - Providers\ExternalUrl.cs - - - Providers\ImageProviderInfo.cs - - - Providers\RemoteImageInfo.cs - - - Providers\RemoteImageQuery.cs - - - Providers\RemoteImageResult.cs - - - Providers\RemoteSearchResult.cs - - - Providers\RemoteSubtitleInfo.cs - - - Providers\SubtitleOptions.cs - - - Providers\SubtitleProviderInfo.cs - - - Querying\AllThemeMediaResult.cs - - - Querying\ArtistsQuery.cs - - - Querying\EpisodeQuery.cs - - - Querying\ItemCountsQuery.cs - - - Querying\ItemFields.cs - - - Querying\ItemFilter.cs - - - Querying\ItemQuery.cs - - - Querying\ItemsByNameQuery.cs - - - Querying\ItemSortBy.cs - - - Querying\ItemsResult.cs - - - Querying\LatestItemsQuery.cs - - - Querying\MovieRecommendationQuery.cs - - - Querying\NextUpQuery.cs - - - Querying\PersonsQuery.cs - - - Querying\QueryFilters.cs - - - Querying\QueryResult.cs - - - Querying\SeasonQuery.cs - - - Querying\SessionQuery.cs - - - Querying\SimilarItemsQuery.cs - - - Querying\ThemeMediaResult.cs - - - Querying\UpcomingEpisodesQuery.cs - - - Querying\UserQuery.cs - - - Registration\RegistrationInfo.cs - - - Search\SearchHint.cs - - - Search\SearchHintResult.cs - - - Search\SearchQuery.cs - - - Serialization\IJsonSerializer.cs - - - Serialization\IXmlSerializer.cs - - - Session\BrowseRequest.cs - - - Session\ClientCapabilities.cs - - - Session\GeneralCommand.cs - - - Session\GeneralCommandType.cs - - - Session\MessageCommand.cs - - - Session\PlaybackProgressInfo.cs - - - Session\PlaybackStartInfo.cs - - - Session\PlaybackStopInfo.cs - - - Session\PlayCommand.cs - - - Session\PlayerStateInfo.cs - - - Session\PlayMethod.cs - - - Session\PlayRequest.cs - - - Session\PlaystateCommand.cs - - - Session\PlaystateRequest.cs - - - Session\SessionInfoDto.cs - - - Session\SessionUserInfo.cs - - - Session\TranscodingInfo.cs - - - Session\UserDataChangeInfo.cs - - - Social\SocialShareInfo.cs - - - Sync\CompleteSyncJobInfo.cs - - - Sync\DeviceFileInfo.cs - - - Sync\ItemFIleInfo.cs - - - Sync\ItemFileType.cs - - - Sync\LocalItem.cs - - - Sync\LocalItemInfo.cs - - - Sync\LocalItemQuery.cs - - - Sync\SyncCategory.cs - - - Sync\SyncDataRequest.cs - - - Sync\SyncDataResponse.cs - - - Sync\SyncDialogOptions.cs - - - Sync\SyncedItem.cs - - - Sync\SyncJob.cs - - - Sync\SyncJobCreationResult.cs - - - Sync\SyncJobItem.cs - - - Sync\SyncJobItemQuery.cs - - - Sync\SyncJobItemStatus.cs - - - Sync\SyncJobQuery.cs - - - Sync\SyncJobRequest.cs - - - Sync\SyncJobStatus.cs - - - Sync\SyncOptions.cs - - - Sync\SyncParameter.cs - - - Sync\SyncProfileOption.cs - - - Sync\SyncQualityOption.cs - - - Sync\SyncTarget.cs - - - System\Architecture.cs - - - System\LogFile.cs - - - System\PublicSystemInfo.cs - - - System\SystemInfo.cs - - - Tasks\SystemEvent.cs - - - Tasks\TaskCompletionStatus.cs - - - Tasks\TaskInfo.cs - - - Tasks\TaskResult.cs - - - Tasks\TaskState.cs - - - Tasks\TaskTriggerInfo.cs - - - Updates\CheckForUpdateResult.cs - - - Updates\InstallationInfo.cs - - - Updates\PackageInfo.cs - - - Updates\PackageTargetSystem.cs - - - Updates\PackageVersionClass.cs - - - Updates\PackageVersionInfo.cs - - - Users\AuthenticationResult.cs - - - Users\ForgotPasswordAction.cs - - - Users\ForgotPasswordResult.cs - - - Users\PinRedeemResult.cs - - - Users\UserAction.cs - - - Users\UserActionType.cs - - - Users\UserPolicy.cs - - - Properties\SharedVersion.cs - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.snk b/MediaBrowser.Model.net35/MediaBrowser.Model.snk deleted file mode 100644 index f8188c78e3..0000000000 Binary files a/MediaBrowser.Model.net35/MediaBrowser.Model.snk and /dev/null differ diff --git a/MediaBrowser.Model.net35/Properties/AssemblyInfo.cs b/MediaBrowser.Model.net35/Properties/AssemblyInfo.cs deleted file mode 100644 index 838cccf662..0000000000 --- a/MediaBrowser.Model.net35/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("MediaBrowser.Model.net35")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("MediaBrowser.Model.net35")] -[assembly: AssemblyCopyright("Copyright © 2013")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("801b3f80-cddc-4a3a-986b-3e7f0293da4b")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// \ No newline at end of file diff --git a/MediaBrowser.Model/Dlna/CodecProfile.cs b/MediaBrowser.Model/Dlna/CodecProfile.cs index 385e98f619..70345d2bcf 100644 --- a/MediaBrowser.Model/Dlna/CodecProfile.cs +++ b/MediaBrowser.Model/Dlna/CodecProfile.cs @@ -6,17 +6,14 @@ namespace MediaBrowser.Model.Dlna { public class CodecProfile { - [XmlAttribute("type")] public CodecType Type { get; set; } public ProfileCondition[] Conditions { get; set; } public ProfileCondition[] ApplyConditions { get; set; } - [XmlAttribute("codec")] public string Codec { get; set; } - [XmlAttribute("container")] public string Container { get; set; } public CodecProfile() diff --git a/MediaBrowser.Model/Dlna/ConditionProcessor.cs b/MediaBrowser.Model/Dlna/ConditionProcessor.cs index ec13cacfae..6628e290e7 100644 --- a/MediaBrowser.Model/Dlna/ConditionProcessor.cs +++ b/MediaBrowser.Model/Dlna/ConditionProcessor.cs @@ -1,6 +1,7 @@ using MediaBrowser.Model.Extensions; using MediaBrowser.Model.MediaInfo; using System; +using System.Globalization; namespace MediaBrowser.Model.Dlna { @@ -86,8 +87,8 @@ namespace MediaBrowser.Model.Dlna } } - public bool IsVideoAudioConditionSatisfied(ProfileCondition condition, - int? audioChannels, + public bool IsVideoAudioConditionSatisfied(ProfileCondition condition, + int? audioChannels, int? audioBitrate, string audioProfile, bool? isSecondaryTrack) @@ -116,7 +117,7 @@ namespace MediaBrowser.Model.Dlna } int expected; - if (IntHelper.TryParseCultureInvariant(condition.Value, out expected)) + if (int.TryParse(condition.Value, NumberStyles.Any, CultureInfo.InvariantCulture, out expected)) { switch (condition.Condition) { @@ -149,9 +150,9 @@ namespace MediaBrowser.Model.Dlna switch (condition.Condition) { case ProfileConditionType.EqualsAny: - { - return ListHelper.ContainsIgnoreCase(expected.Split('|'), currentValue); - } + { + return ListHelper.ContainsIgnoreCase(expected.Split('|'), currentValue); + } case ProfileConditionType.Equals: return StringHelper.EqualsIgnoreCase(currentValue, expected); case ProfileConditionType.NotEquals: @@ -214,7 +215,7 @@ namespace MediaBrowser.Model.Dlna return false; } - + private bool IsConditionSatisfied(ProfileCondition condition, double? currentValue) { if (!currentValue.HasValue) @@ -243,7 +244,7 @@ namespace MediaBrowser.Model.Dlna return false; } - + private bool IsConditionSatisfied(ProfileCondition condition, TransportStreamTimestamp? timestamp) { if (!timestamp.HasValue) @@ -251,9 +252,9 @@ namespace MediaBrowser.Model.Dlna // If the value is unknown, it satisfies if not marked as required return !condition.IsRequired; } - + TransportStreamTimestamp expected = (TransportStreamTimestamp)Enum.Parse(typeof(TransportStreamTimestamp), condition.Value, true); - + switch (condition.Condition) { case ProfileConditionType.Equals: diff --git a/MediaBrowser.Model/Dlna/ContainerProfile.cs b/MediaBrowser.Model/Dlna/ContainerProfile.cs index 931194dd3d..92f2fc7c04 100644 --- a/MediaBrowser.Model/Dlna/ContainerProfile.cs +++ b/MediaBrowser.Model/Dlna/ContainerProfile.cs @@ -5,11 +5,9 @@ namespace MediaBrowser.Model.Dlna { public class ContainerProfile { - [XmlAttribute("type")] public DlnaProfileType Type { get; set; } public ProfileCondition[] Conditions { get; set; } - [XmlAttribute("container")] public string Container { get; set; } public ContainerProfile() diff --git a/MediaBrowser.Model/Dlna/DeviceProfile.cs b/MediaBrowser.Model/Dlna/DeviceProfile.cs index 884a9f29d1..7912134411 100644 --- a/MediaBrowser.Model/Dlna/DeviceProfile.cs +++ b/MediaBrowser.Model/Dlna/DeviceProfile.cs @@ -1,11 +1,10 @@ using MediaBrowser.Model.Extensions; using MediaBrowser.Model.MediaInfo; using System.Collections.Generic; -using System.Xml.Serialization; +using MediaBrowser.Model.Serialization; namespace MediaBrowser.Model.Dlna { - [XmlRoot("Profile")] public class DeviceProfile { /// @@ -14,10 +13,10 @@ namespace MediaBrowser.Model.Dlna /// The name. public string Name { get; set; } - [XmlIgnore] + [IgnoreDataMember] public string Id { get; set; } - [XmlIgnore] + [IgnoreDataMember] public DeviceProfileType ProfileType { get; set; } /// diff --git a/MediaBrowser.Model/Dlna/DirectPlayProfile.cs b/MediaBrowser.Model/Dlna/DirectPlayProfile.cs index 183299425e..3847a36712 100644 --- a/MediaBrowser.Model/Dlna/DirectPlayProfile.cs +++ b/MediaBrowser.Model/Dlna/DirectPlayProfile.cs @@ -1,20 +1,15 @@ using System.Collections.Generic; -using System.Xml.Serialization; namespace MediaBrowser.Model.Dlna { public class DirectPlayProfile { - [XmlAttribute("container")] public string Container { get; set; } - [XmlAttribute("audioCodec")] public string AudioCodec { get; set; } - [XmlAttribute("videoCodec")] public string VideoCodec { get; set; } - [XmlAttribute("type")] public DlnaProfileType Type { get; set; } public List GetContainers() diff --git a/MediaBrowser.Model/Dlna/HttpHeaderInfo.cs b/MediaBrowser.Model/Dlna/HttpHeaderInfo.cs index 926963ef67..517757281c 100644 --- a/MediaBrowser.Model/Dlna/HttpHeaderInfo.cs +++ b/MediaBrowser.Model/Dlna/HttpHeaderInfo.cs @@ -4,13 +4,10 @@ namespace MediaBrowser.Model.Dlna { public class HttpHeaderInfo { - [XmlAttribute("name")] public string Name { get; set; } - [XmlAttribute("value")] public string Value { get; set; } - [XmlAttribute("match")] public HeaderMatchType Match { get; set; } } } \ No newline at end of file diff --git a/MediaBrowser.Model/Dlna/ProfileCondition.cs b/MediaBrowser.Model/Dlna/ProfileCondition.cs index 9234a27136..587c628ff2 100644 --- a/MediaBrowser.Model/Dlna/ProfileCondition.cs +++ b/MediaBrowser.Model/Dlna/ProfileCondition.cs @@ -4,16 +4,12 @@ namespace MediaBrowser.Model.Dlna { public class ProfileCondition { - [XmlAttribute("condition")] public ProfileConditionType Condition { get; set; } - [XmlAttribute("property")] public ProfileConditionValue Property { get; set; } - [XmlAttribute("value")] public string Value { get; set; } - [XmlAttribute("isRequired")] public bool IsRequired { get; set; } public ProfileCondition() diff --git a/MediaBrowser.Model/Dlna/ResponseProfile.cs b/MediaBrowser.Model/Dlna/ResponseProfile.cs index c1735f3b7c..15d76df824 100644 --- a/MediaBrowser.Model/Dlna/ResponseProfile.cs +++ b/MediaBrowser.Model/Dlna/ResponseProfile.cs @@ -5,22 +5,16 @@ namespace MediaBrowser.Model.Dlna { public class ResponseProfile { - [XmlAttribute("container")] public string Container { get; set; } - [XmlAttribute("audioCodec")] public string AudioCodec { get; set; } - [XmlAttribute("videoCodec")] public string VideoCodec { get; set; } - [XmlAttribute("type")] public DlnaProfileType Type { get; set; } - [XmlAttribute("orgPn")] public string OrgPn { get; set; } - [XmlAttribute("mimeType")] public string MimeType { get; set; } public ProfileCondition[] Conditions { get; set; } diff --git a/MediaBrowser.Model/Dlna/StreamBuilder.cs b/MediaBrowser.Model/Dlna/StreamBuilder.cs index 18e46b84c2..a3e447d04a 100644 --- a/MediaBrowser.Model/Dlna/StreamBuilder.cs +++ b/MediaBrowser.Model/Dlna/StreamBuilder.cs @@ -6,6 +6,7 @@ using MediaBrowser.Model.MediaInfo; using MediaBrowser.Model.Session; using System; using System.Collections.Generic; +using System.Globalization; namespace MediaBrowser.Model.Dlna { @@ -483,7 +484,7 @@ namespace MediaBrowser.Model.Dlna if (!string.IsNullOrEmpty(transcodingProfile.MaxAudioChannels)) { int transcodingMaxAudioChannels; - if (IntHelper.TryParseCultureInvariant(transcodingProfile.MaxAudioChannels, out transcodingMaxAudioChannels)) + if (int.TryParse(transcodingProfile.MaxAudioChannels, NumberStyles.Any, CultureInfo.InvariantCulture, out transcodingMaxAudioChannels)) { playlistItem.TranscodingMaxAudioChannels = transcodingMaxAudioChannels; } @@ -1039,7 +1040,7 @@ namespace MediaBrowser.Model.Dlna case ProfileConditionValue.AudioBitrate: { int num; - if (IntHelper.TryParseCultureInvariant(value, out num)) + if (int.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out num)) { item.AudioBitrate = num; } @@ -1048,7 +1049,7 @@ namespace MediaBrowser.Model.Dlna case ProfileConditionValue.AudioChannels: { int num; - if (IntHelper.TryParseCultureInvariant(value, out num)) + if (int.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out num)) { item.MaxAudioChannels = num; } @@ -1069,7 +1070,7 @@ namespace MediaBrowser.Model.Dlna case ProfileConditionValue.RefFrames: { int num; - if (IntHelper.TryParseCultureInvariant(value, out num)) + if (int.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out num)) { item.MaxRefFrames = num; } @@ -1078,7 +1079,7 @@ namespace MediaBrowser.Model.Dlna case ProfileConditionValue.VideoBitDepth: { int num; - if (IntHelper.TryParseCultureInvariant(value, out num)) + if (int.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out num)) { item.MaxVideoBitDepth = num; } @@ -1092,7 +1093,7 @@ namespace MediaBrowser.Model.Dlna case ProfileConditionValue.Height: { int num; - if (IntHelper.TryParseCultureInvariant(value, out num)) + if (int.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out num)) { item.MaxHeight = num; } @@ -1101,7 +1102,7 @@ namespace MediaBrowser.Model.Dlna case ProfileConditionValue.VideoBitrate: { int num; - if (IntHelper.TryParseCultureInvariant(value, out num)) + if (int.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out num)) { item.VideoBitrate = num; } @@ -1119,7 +1120,7 @@ namespace MediaBrowser.Model.Dlna case ProfileConditionValue.VideoLevel: { int num; - if (IntHelper.TryParseCultureInvariant(value, out num)) + if (int.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out num)) { item.VideoLevel = num; } @@ -1128,7 +1129,7 @@ namespace MediaBrowser.Model.Dlna case ProfileConditionValue.Width: { int num; - if (IntHelper.TryParseCultureInvariant(value, out num)) + if (int.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out num)) { item.MaxWidth = num; } diff --git a/MediaBrowser.Model/Dlna/SubtitleProfile.cs b/MediaBrowser.Model/Dlna/SubtitleProfile.cs index 0723de222b..ea7e0bda8d 100644 --- a/MediaBrowser.Model/Dlna/SubtitleProfile.cs +++ b/MediaBrowser.Model/Dlna/SubtitleProfile.cs @@ -6,16 +6,12 @@ namespace MediaBrowser.Model.Dlna { public class SubtitleProfile { - [XmlAttribute("format")] public string Format { get; set; } - [XmlAttribute("method")] public SubtitleDeliveryMethod Method { get; set; } - [XmlAttribute("didlMode")] public string DidlMode { get; set; } - [XmlAttribute("language")] public string Language { get; set; } public List GetLanguages() diff --git a/MediaBrowser.Model/Dlna/TranscodingProfile.cs b/MediaBrowser.Model/Dlna/TranscodingProfile.cs index eeab996780..15127dcbad 100644 --- a/MediaBrowser.Model/Dlna/TranscodingProfile.cs +++ b/MediaBrowser.Model/Dlna/TranscodingProfile.cs @@ -5,43 +5,30 @@ namespace MediaBrowser.Model.Dlna { public class TranscodingProfile { - [XmlAttribute("container")] public string Container { get; set; } - [XmlAttribute("type")] public DlnaProfileType Type { get; set; } - [XmlAttribute("videoCodec")] public string VideoCodec { get; set; } - [XmlAttribute("audioCodec")] public string AudioCodec { get; set; } - [XmlAttribute("protocol")] public string Protocol { get; set; } - [XmlAttribute("estimateContentLength")] public bool EstimateContentLength { get; set; } - [XmlAttribute("enableMpegtsM2TsMode")] public bool EnableMpegtsM2TsMode { get; set; } - [XmlAttribute("transcodeSeekInfo")] public TranscodeSeekInfo TranscodeSeekInfo { get; set; } - [XmlAttribute("copyTimestamps")] public bool CopyTimestamps { get; set; } - [XmlAttribute("context")] public EncodingContext Context { get; set; } - [XmlAttribute("enableSubtitlesInManifest")] public bool EnableSubtitlesInManifest { get; set; } - [XmlAttribute("enableSplittingOnNonKeyFrames")] public bool EnableSplittingOnNonKeyFrames { get; set; } - [XmlAttribute("maxAudioChannels")] public string MaxAudioChannels { get; set; } public List GetAudioCodecs() diff --git a/MediaBrowser.Model/Dlna/XmlAttribute.cs b/MediaBrowser.Model/Dlna/XmlAttribute.cs index e8e13ba0de..661ccf4b61 100644 --- a/MediaBrowser.Model/Dlna/XmlAttribute.cs +++ b/MediaBrowser.Model/Dlna/XmlAttribute.cs @@ -4,10 +4,8 @@ namespace MediaBrowser.Model.Dlna { public class XmlAttribute { - [XmlAttribute("name")] public string Name { get; set; } - [XmlAttribute("value")] public string Value { get; set; } } } \ No newline at end of file diff --git a/MediaBrowser.Model/Dto/BaseItemDto.cs b/MediaBrowser.Model/Dto/BaseItemDto.cs index 9267222adf..8a3396e272 100644 --- a/MediaBrowser.Model/Dto/BaseItemDto.cs +++ b/MediaBrowser.Model/Dto/BaseItemDto.cs @@ -8,7 +8,7 @@ using MediaBrowser.Model.Sync; using System; using System.Collections.Generic; using System.Diagnostics; -using System.Runtime.Serialization; +using MediaBrowser.Model.Serialization; namespace MediaBrowser.Model.Dto { diff --git a/MediaBrowser.Model/Dto/BaseItemPerson.cs b/MediaBrowser.Model/Dto/BaseItemPerson.cs index 7052f1b82c..e73872cb76 100644 --- a/MediaBrowser.Model/Dto/BaseItemPerson.cs +++ b/MediaBrowser.Model/Dto/BaseItemPerson.cs @@ -1,5 +1,5 @@ using System.Diagnostics; -using System.Runtime.Serialization; +using MediaBrowser.Model.Serialization; namespace MediaBrowser.Model.Dto { diff --git a/MediaBrowser.Model/Dto/ChapterInfoDto.cs b/MediaBrowser.Model/Dto/ChapterInfoDto.cs index a71d979900..51e0a545af 100644 --- a/MediaBrowser.Model/Dto/ChapterInfoDto.cs +++ b/MediaBrowser.Model/Dto/ChapterInfoDto.cs @@ -1,5 +1,5 @@ using System.Diagnostics; -using System.Runtime.Serialization; +using MediaBrowser.Model.Serialization; namespace MediaBrowser.Model.Dto { diff --git a/MediaBrowser.Model/Dto/MediaSourceInfo.cs b/MediaBrowser.Model/Dto/MediaSourceInfo.cs index 0b047f9e8f..814368d32f 100644 --- a/MediaBrowser.Model/Dto/MediaSourceInfo.cs +++ b/MediaBrowser.Model/Dto/MediaSourceInfo.cs @@ -3,7 +3,7 @@ using MediaBrowser.Model.Entities; using MediaBrowser.Model.Extensions; using MediaBrowser.Model.MediaInfo; using System.Collections.Generic; -using System.Runtime.Serialization; +using MediaBrowser.Model.Serialization; namespace MediaBrowser.Model.Dto { diff --git a/MediaBrowser.Model/Dto/StudioDto.cs b/MediaBrowser.Model/Dto/StudioDto.cs index a0027cc4e2..13623fb1a9 100644 --- a/MediaBrowser.Model/Dto/StudioDto.cs +++ b/MediaBrowser.Model/Dto/StudioDto.cs @@ -1,6 +1,6 @@ using System.ComponentModel; using System.Diagnostics; -using System.Runtime.Serialization; +using MediaBrowser.Model.Serialization; namespace MediaBrowser.Model.Dto { diff --git a/MediaBrowser.Model/Dto/UserDto.cs b/MediaBrowser.Model/Dto/UserDto.cs index 94e4f95a3f..f9e3f7718c 100644 --- a/MediaBrowser.Model/Dto/UserDto.cs +++ b/MediaBrowser.Model/Dto/UserDto.cs @@ -3,7 +3,7 @@ using MediaBrowser.Model.Connect; using MediaBrowser.Model.Users; using System; using System.Diagnostics; -using System.Runtime.Serialization; +using MediaBrowser.Model.Serialization; namespace MediaBrowser.Model.Dto { diff --git a/MediaBrowser.Model/Entities/BaseItemInfo.cs b/MediaBrowser.Model/Entities/BaseItemInfo.cs index 88af18289c..af9091a78b 100644 --- a/MediaBrowser.Model/Entities/BaseItemInfo.cs +++ b/MediaBrowser.Model/Entities/BaseItemInfo.cs @@ -2,7 +2,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; -using System.Runtime.Serialization; +using MediaBrowser.Model.Serialization; namespace MediaBrowser.Model.Entities { diff --git a/MediaBrowser.Model/Extensions/IntHelper.cs b/MediaBrowser.Model/Extensions/IntHelper.cs deleted file mode 100644 index 6c5f26080a..0000000000 --- a/MediaBrowser.Model/Extensions/IntHelper.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.Globalization; - -namespace MediaBrowser.Model.Extensions -{ - /// - /// Isolating these helpers allow this entire project to be easily converted to Java - /// - public static class IntHelper - { - /// - /// Tries the parse culture invariant. - /// - /// The s. - /// The result. - /// true if XXXX, false otherwise. - public static bool TryParseCultureInvariant(string s, out int result) - { - return int.TryParse(s, NumberStyles.Any, CultureInfo.InvariantCulture, out result); - } - } -} diff --git a/MediaBrowser.Model/Extensions/LinqExtensions.cs b/MediaBrowser.Model/Extensions/LinqExtensions.cs new file mode 100644 index 0000000000..6b2bdb4c77 --- /dev/null +++ b/MediaBrowser.Model/Extensions/LinqExtensions.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; + +namespace MediaBrowser.Model.Extensions +{ + // MoreLINQ - Extensions to LINQ to Objects + // Copyright (c) 2008 Jonathan Skeet. All rights reserved. + // + // Licensed under the Apache License, Version 2.0 (the "License"); + // you may not use this file except in compliance with the License. + // You may obtain a copy of the License at + // + // http://www.apache.org/licenses/LICENSE-2.0 + // + // Unless required by applicable law or agreed to in writing, software + // distributed under the License is distributed on an "AS IS" BASIS, + // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + // See the License for the specific language governing permissions and + // limitations under the License. + + public static class LinqExtensions + { + /// + /// Returns all distinct elements of the given source, where "distinctness" + /// is determined via a projection and the default equality comparer for the projected type. + /// + /// + /// This operator uses deferred execution and streams the results, although + /// a set of already-seen keys is retained. If a key is seen multiple times, + /// only the first element with that key is returned. + /// + /// Type of the source sequence + /// Type of the projected element + /// Source sequence + /// Projection for determining "distinctness" + /// A sequence consisting of distinct elements from the source sequence, + /// comparing them by the specified key projection. + + public static IEnumerable DistinctBy(this IEnumerable source, + Func keySelector) + { + return source.DistinctBy(keySelector, null); + } + + /// + /// Returns all distinct elements of the given source, where "distinctness" + /// is determined via a projection and the specified comparer for the projected type. + /// + /// + /// This operator uses deferred execution and streams the results, although + /// a set of already-seen keys is retained. If a key is seen multiple times, + /// only the first element with that key is returned. + /// + /// Type of the source sequence + /// Type of the projected element + /// Source sequence + /// Projection for determining "distinctness" + /// The equality comparer to use to determine whether or not keys are equal. + /// If null, the default equality comparer for TSource is used. + /// A sequence consisting of distinct elements from the source sequence, + /// comparing them by the specified key projection. + + public static IEnumerable DistinctBy(this IEnumerable source, + Func keySelector, IEqualityComparer comparer) + { + if (source == null) throw new ArgumentNullException("source"); + if (keySelector == null) throw new ArgumentNullException("keySelector"); + return DistinctByImpl(source, keySelector, comparer); + } + + private static IEnumerable DistinctByImpl(IEnumerable source, + Func keySelector, IEqualityComparer comparer) + { + var knownKeys = new HashSet(comparer); + foreach (var element in source) + { + if (knownKeys.Add(keySelector(element))) + { + yield return element; + } + } + } + } +} diff --git a/MediaBrowser.Controller/Health/IHealthMonitor.cs b/MediaBrowser.Model/Health/IHealthMonitor.cs similarity index 86% rename from MediaBrowser.Controller/Health/IHealthMonitor.cs rename to MediaBrowser.Model/Health/IHealthMonitor.cs index b8ad98fc14..a4f95c1bcc 100644 --- a/MediaBrowser.Controller/Health/IHealthMonitor.cs +++ b/MediaBrowser.Model/Health/IHealthMonitor.cs @@ -3,7 +3,7 @@ using System.Threading; using System.Threading.Tasks; using MediaBrowser.Model.Notifications; -namespace MediaBrowser.Controller.Health +namespace MediaBrowser.Model.Health { public interface IHealthMonitor { diff --git a/MediaBrowser.Model/LiveTv/ChannelInfoDto.cs b/MediaBrowser.Model/LiveTv/ChannelInfoDto.cs index 8991aad866..a8ea864944 100644 --- a/MediaBrowser.Model/LiveTv/ChannelInfoDto.cs +++ b/MediaBrowser.Model/LiveTv/ChannelInfoDto.cs @@ -3,7 +3,7 @@ using MediaBrowser.Model.Entities; using MediaBrowser.Model.Library; using System.Collections.Generic; using System.Diagnostics; -using System.Runtime.Serialization; +using MediaBrowser.Model.Serialization; namespace MediaBrowser.Model.LiveTv { diff --git a/MediaBrowser.Model/LiveTv/SeriesTimerInfoDto.cs b/MediaBrowser.Model/LiveTv/SeriesTimerInfoDto.cs index 997b090ff6..3880012874 100644 --- a/MediaBrowser.Model/LiveTv/SeriesTimerInfoDto.cs +++ b/MediaBrowser.Model/LiveTv/SeriesTimerInfoDto.cs @@ -2,7 +2,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; -using System.Runtime.Serialization; +using MediaBrowser.Model.Serialization; namespace MediaBrowser.Model.LiveTv { diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index b9b920588d..6c9197c164 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -1,7 +1,8 @@  - + + 11.0 Debug AnyCPU {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B} @@ -9,12 +10,11 @@ Properties MediaBrowser.Model MediaBrowser.Model + en-US 512 - ..\ + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Profile7 v4.5 - - - 60e95275 true @@ -24,7 +24,6 @@ DEBUG;TRACE prompt 4 - AnyCPU pdbonly @@ -34,20 +33,10 @@ prompt 4 - - pdbonly - true - bin\Release Mono\ - TRACE - prompt - 4 - - - Always - - - MediaBrowser.Model.snk - + + + + Properties\SharedVersion.cs @@ -114,8 +103,15 @@ + + + + + + + @@ -123,7 +119,10 @@ + + + @@ -131,7 +130,9 @@ + + @@ -153,7 +154,6 @@ - @@ -171,36 +171,27 @@ - - - - - - - - - @@ -225,7 +216,6 @@ - @@ -315,6 +305,7 @@ + @@ -432,22 +423,8 @@ - - - - - - - - - - - - - - - + - + \ No newline at end of file