From fc788efa49e129eadbcc64a1b4fd7797e020d854 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 1 May 2017 16:03:27 -0400 Subject: add password to self signed cert --- MediaBrowser.Api/SearchService.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'MediaBrowser.Api/SearchService.cs') diff --git a/MediaBrowser.Api/SearchService.cs b/MediaBrowser.Api/SearchService.cs index d6fa4030de..b4ee923650 100644 --- a/MediaBrowser.Api/SearchService.cs +++ b/MediaBrowser.Api/SearchService.cs @@ -66,6 +66,8 @@ namespace MediaBrowser.Api [ApiMember(Name = "IncludeItemTypes", Description = "Optional. If specified, results will be filtered based on item type. This allows multiple, comma delimeted.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET", AllowMultiple = true)] public string IncludeItemTypes { get; set; } + public string ParentId { get; set; } + public GetSearchHints() { IncludeArtists = true; @@ -135,7 +137,8 @@ namespace MediaBrowser.Api IncludeStudios = request.IncludeStudios, StartIndex = request.StartIndex, UserId = request.UserId, - IncludeItemTypes = (request.IncludeItemTypes ?? string.Empty).Split(',').Where(i => !string.IsNullOrWhiteSpace(i)).ToArray() + IncludeItemTypes = (request.IncludeItemTypes ?? string.Empty).Split(',').Where(i => !string.IsNullOrWhiteSpace(i)).ToArray(), + ParentId = request.ParentId }).ConfigureAwait(false); -- cgit v1.2.3 From 568d769cc80644e27c15d5b842eb8bc7393016b5 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Wed, 3 May 2017 17:53:33 -0400 Subject: support omdb episodes by imdb; add more search data --- Emby.Common.Implementations/Net/NetAcceptSocket.cs | 2 +- .../LiveTv/EmbyTV/EncodedRecorder.cs | 8 ++++-- MediaBrowser.Api/SearchService.cs | 22 +++++++++++++-- MediaBrowser.Model/Search/SearchHint.cs | 11 ++++++-- .../Manager/GenericPriorityQueue.cs | 11 +++++--- MediaBrowser.Providers/Manager/IPriorityQueue.cs | 2 +- MediaBrowser.Providers/Manager/ProviderManager.cs | 9 +----- .../Manager/SimplePriorityQueue.cs | 16 ++++++++--- MediaBrowser.Providers/Omdb/OmdbProvider.cs | 32 ++++++++++++++++------ .../TV/Omdb/OmdbEpisodeProvider.cs | 5 ++-- SocketHttpListener.Portable/Net/HttpConnection.cs | 2 +- SocketHttpListener.Portable/Net/ResponseStream.cs | 30 ++++++++++++-------- 12 files changed, 101 insertions(+), 49 deletions(-) (limited to 'MediaBrowser.Api/SearchService.cs') diff --git a/Emby.Common.Implementations/Net/NetAcceptSocket.cs b/Emby.Common.Implementations/Net/NetAcceptSocket.cs index 3721709e60..82e7e9b009 100644 --- a/Emby.Common.Implementations/Net/NetAcceptSocket.cs +++ b/Emby.Common.Implementations/Net/NetAcceptSocket.cs @@ -100,7 +100,7 @@ namespace Emby.Common.Implementations.Net #if NET46 public Task SendFile(string path, byte[] preBuffer, byte[] postBuffer, CancellationToken cancellationToken) { - var options = TransmitFileOptions.UseKernelApc; + var options = TransmitFileOptions.UseDefaultWorkerThread; var completionSource = new TaskCompletionSource(); diff --git a/Emby.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs b/Emby.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs index f59772c458..1673c9150d 100644 --- a/Emby.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs +++ b/Emby.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs @@ -213,9 +213,11 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV var subtitleArgs = CopySubtitles ? " -codec:s copy" : " -sn"; - var outputParam = string.Equals(Path.GetExtension(targetFile), ".mp4", StringComparison.OrdinalIgnoreCase) ? - " -f mp4 -movflags frag_keyframe+empty_moov" : - string.Empty; + //var outputParam = string.Equals(Path.GetExtension(targetFile), ".mp4", StringComparison.OrdinalIgnoreCase) ? + // " -f mp4 -movflags frag_keyframe+empty_moov" : + // string.Empty; + + var outputParam = string.Empty; var commandLineArgs = string.Format("-i \"{0}\"{5} {2} -map_metadata -1 -threads 0 {3}{4}{6} -y \"{1}\"", inputTempFile, diff --git a/MediaBrowser.Api/SearchService.cs b/MediaBrowser.Api/SearchService.cs index b4ee923650..5c0f918d93 100644 --- a/MediaBrowser.Api/SearchService.cs +++ b/MediaBrowser.Api/SearchService.cs @@ -9,6 +9,7 @@ using MediaBrowser.Model.Entities; using MediaBrowser.Model.Search; using System.Linq; using System.Threading.Tasks; +using MediaBrowser.Controller.LiveTv; using MediaBrowser.Model.Services; namespace MediaBrowser.Api @@ -170,11 +171,11 @@ namespace MediaBrowser.Api MatchedTerm = hintInfo.MatchedTerm, DisplayMediaType = item.DisplayMediaType, RunTimeTicks = item.RunTimeTicks, - ProductionYear = item.ProductionYear + ProductionYear = item.ProductionYear, + ChannelId = item.ChannelId, + EndDate = item.EndDate }; - result.ChannelId = item.ChannelId; - var primaryImageTag = _imageProcessor.GetImageCacheTag(item, ImageType.Primary); if (primaryImageTag != null) @@ -186,12 +187,27 @@ namespace MediaBrowser.Api SetThumbImageInfo(result, item); SetBackdropImageInfo(result, item); + var program = item as LiveTvProgram; + if (program != null) + { + result.StartDate = program.StartDate; + } + var hasSeries = item as IHasSeries; if (hasSeries != null) { result.Series = hasSeries.SeriesName; } + var series = item as Series; + if (series != null) + { + if (series.Status.HasValue) + { + result.Status = series.Status.Value.ToString(); + } + } + var album = item as MusicAlbum; if (album != null) diff --git a/MediaBrowser.Model/Search/SearchHint.cs b/MediaBrowser.Model/Search/SearchHint.cs index cea15a2a78..3ca0eafe63 100644 --- a/MediaBrowser.Model/Search/SearchHint.cs +++ b/MediaBrowser.Model/Search/SearchHint.cs @@ -1,4 +1,6 @@ -namespace MediaBrowser.Model.Search +using System; + +namespace MediaBrowser.Model.Search { /// /// Class SearchHintResult @@ -94,13 +96,18 @@ /// /// The display type of the media. public string DisplayMediaType { get; set; } - + + public DateTime? StartDate { get; set; } + public DateTime? EndDate { get; set; } + /// /// Gets or sets the series. /// /// The series. public string Series { get; set; } + public string Status { get; set; } + /// /// Gets or sets the album. /// diff --git a/MediaBrowser.Providers/Manager/GenericPriorityQueue.cs b/MediaBrowser.Providers/Manager/GenericPriorityQueue.cs index 18998fd599..03bb0f68c9 100644 --- a/MediaBrowser.Providers/Manager/GenericPriorityQueue.cs +++ b/MediaBrowser.Providers/Manager/GenericPriorityQueue.cs @@ -243,14 +243,16 @@ namespace Priority_Queue /// If queue is empty, result is undefined /// O(log n) /// - public TItem Dequeue() + public bool TryDequeue(out TItem item) { -#if DEBUG if (_numNodes <= 0) { - throw new InvalidOperationException("Cannot call Dequeue() on an empty queue"); + item = default(TItem); + return false; } +#if DEBUG + if (!IsValidQueue()) { throw new InvalidOperationException("Queue has been corrupted (Did you update a node priority manually instead of calling UpdatePriority()?" + @@ -260,7 +262,8 @@ namespace Priority_Queue TItem returnMe = _nodes[1]; Remove(returnMe); - return returnMe; + item = returnMe; + return true; } /// diff --git a/MediaBrowser.Providers/Manager/IPriorityQueue.cs b/MediaBrowser.Providers/Manager/IPriorityQueue.cs index 11f2c62148..425992b18b 100644 --- a/MediaBrowser.Providers/Manager/IPriorityQueue.cs +++ b/MediaBrowser.Providers/Manager/IPriorityQueue.cs @@ -24,7 +24,7 @@ namespace Priority_Queue /// /// Removes the head of the queue (node with minimum priority; ties are broken by order of insertion), and returns it. /// - TItem Dequeue(); + bool TryDequeue(out TItem item); /// /// Removes every node from the queue. diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs index f08a7d3c32..7ff018c7b1 100644 --- a/MediaBrowser.Providers/Manager/ProviderManager.cs +++ b/MediaBrowser.Providers/Manager/ProviderManager.cs @@ -873,19 +873,12 @@ namespace MediaBrowser.Providers.Manager } } - private bool TryDequeue(out Tuple item) - { - item = _refreshQueue.Dequeue(); - - return item != null; - } - private async Task StartProcessingRefreshQueue() { Tuple refreshItem; var libraryManager = _libraryManagerFactory(); - while (TryDequeue(out refreshItem)) + while (_refreshQueue.TryDequeue(out refreshItem)) { if (_disposed) { diff --git a/MediaBrowser.Providers/Manager/SimplePriorityQueue.cs b/MediaBrowser.Providers/Manager/SimplePriorityQueue.cs index 6435aa06b9..f4c261a810 100644 --- a/MediaBrowser.Providers/Manager/SimplePriorityQueue.cs +++ b/MediaBrowser.Providers/Manager/SimplePriorityQueue.cs @@ -126,17 +126,25 @@ namespace Priority_Queue /// If queue is empty, throws an exception /// O(log n) /// - public TItem Dequeue() + public bool TryDequeue(out TItem item) { lock (_queue) { if (_queue.Count <= 0) { - throw new InvalidOperationException("Cannot call Dequeue() on an empty queue"); + item = default(TItem); + return false; } - SimpleNode node = _queue.Dequeue(); - return node.Data; + SimpleNode node; + if (_queue.TryDequeue(out node)) + { + item = node.Data; + return true; + } + + item = default(TItem); + return false; } } diff --git a/MediaBrowser.Providers/Omdb/OmdbProvider.cs b/MediaBrowser.Providers/Omdb/OmdbProvider.cs index 474fdf14cd..0bafe7947f 100644 --- a/MediaBrowser.Providers/Omdb/OmdbProvider.cs +++ b/MediaBrowser.Providers/Omdb/OmdbProvider.cs @@ -103,17 +103,17 @@ namespace MediaBrowser.Providers.Omdb ParseAdditionalMetadata(itemResult, result); } - public async Task FetchEpisodeData(MetadataResult itemResult, int episodeNumber, int seasonNumber, string imdbId, string language, string country, CancellationToken cancellationToken) + public async Task FetchEpisodeData(MetadataResult itemResult, int episodeNumber, int seasonNumber, string episodeImdbId, string seriesImdbId, string language, string country, CancellationToken cancellationToken) where T : BaseItem { - if (string.IsNullOrWhiteSpace(imdbId)) + if (string.IsNullOrWhiteSpace(seriesImdbId)) { - throw new ArgumentNullException("imdbId"); + throw new ArgumentNullException("seriesImdbId"); } T item = itemResult.Item; - var seasonResult = await GetSeasonRootObject(imdbId, seasonNumber, cancellationToken).ConfigureAwait(false); + var seasonResult = await GetSeasonRootObject(seriesImdbId, seasonNumber, cancellationToken).ConfigureAwait(false); if (seasonResult == null) { @@ -122,12 +122,28 @@ namespace MediaBrowser.Providers.Omdb RootObject result = null; - foreach (var episode in (seasonResult.Episodes ?? new RootObject[] { })) + if (!string.IsNullOrWhiteSpace(episodeImdbId)) { - if (episode.Episode == episodeNumber) + foreach (var episode in (seasonResult.Episodes ?? new RootObject[] { })) { - result = episode; - break; + if (string.Equals(episodeImdbId, episode.imdbID, StringComparison.OrdinalIgnoreCase)) + { + result = episode; + break; + } + } + } + + // finally, search by numbers + if (result == null) + { + foreach (var episode in (seasonResult.Episodes ?? new RootObject[] { })) + { + if (episode.Episode == episodeNumber) + { + result = episode; + break; + } } } diff --git a/MediaBrowser.Providers/TV/Omdb/OmdbEpisodeProvider.cs b/MediaBrowser.Providers/TV/Omdb/OmdbEpisodeProvider.cs index 56aa3967c5..f73244cdfe 100644 --- a/MediaBrowser.Providers/TV/Omdb/OmdbEpisodeProvider.cs +++ b/MediaBrowser.Providers/TV/Omdb/OmdbEpisodeProvider.cs @@ -58,11 +58,10 @@ namespace MediaBrowser.Providers.TV string seriesImdbId; if (info.SeriesProviderIds.TryGetValue(MetadataProviders.Imdb.ToString(), out seriesImdbId) && !string.IsNullOrEmpty(seriesImdbId)) { - if (info.IndexNumber.HasValue && - info.ParentIndexNumber.HasValue) + if (info.IndexNumber.HasValue && info.ParentIndexNumber.HasValue) { result.HasMetadata = await new OmdbProvider(_jsonSerializer, _httpClient, _fileSystem, _configurationManager) - .FetchEpisodeData(result, info.IndexNumber.Value, info.ParentIndexNumber.Value, seriesImdbId, info.MetadataLanguage, info.MetadataCountryCode, cancellationToken).ConfigureAwait(false); + .FetchEpisodeData(result, info.IndexNumber.Value, info.ParentIndexNumber.Value, info.GetProviderId(MetadataProviders.Imdb), seriesImdbId, info.MetadataLanguage, info.MetadataCountryCode, cancellationToken).ConfigureAwait(false); } } diff --git a/SocketHttpListener.Portable/Net/HttpConnection.cs b/SocketHttpListener.Portable/Net/HttpConnection.cs index 5fe47fc635..ac8ada4862 100644 --- a/SocketHttpListener.Portable/Net/HttpConnection.cs +++ b/SocketHttpListener.Portable/Net/HttpConnection.cs @@ -217,7 +217,7 @@ namespace SocketHttpListener.Net { var supportsDirectSocketAccess = !context.Response.SendChunked && !isExpect100Continue && !secure; - o_stream = new ResponseStream(stream, context.Response, _memoryStreamFactory, _textEncoding, _fileSystem, sock, supportsDirectSocketAccess); + o_stream = new ResponseStream(stream, context.Response, _memoryStreamFactory, _textEncoding, _fileSystem, sock, supportsDirectSocketAccess, _logger); } else { diff --git a/SocketHttpListener.Portable/Net/ResponseStream.cs b/SocketHttpListener.Portable/Net/ResponseStream.cs index 3c79f47c23..71d0810463 100644 --- a/SocketHttpListener.Portable/Net/ResponseStream.cs +++ b/SocketHttpListener.Portable/Net/ResponseStream.cs @@ -5,6 +5,7 @@ using System.Text; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Model.IO; +using MediaBrowser.Model.Logging; using MediaBrowser.Model.Net; using MediaBrowser.Model.Text; using SocketHttpListener.Primitives; @@ -26,8 +27,9 @@ namespace SocketHttpListener.Net private readonly IFileSystem _fileSystem; private readonly IAcceptSocket _socket; private readonly bool _supportsDirectSocketAccess; + private readonly ILogger _logger; - internal ResponseStream(Stream stream, HttpListenerResponse response, IMemoryStreamFactory memoryStreamFactory, ITextEncoding textEncoding, IFileSystem fileSystem, IAcceptSocket socket, bool supportsDirectSocketAccess) + internal ResponseStream(Stream stream, HttpListenerResponse response, IMemoryStreamFactory memoryStreamFactory, ITextEncoding textEncoding, IFileSystem fileSystem, IAcceptSocket socket, bool supportsDirectSocketAccess, ILogger logger) { this.response = response; _memoryStreamFactory = memoryStreamFactory; @@ -35,6 +37,7 @@ namespace SocketHttpListener.Net _fileSystem = fileSystem; _socket = socket; _supportsDirectSocketAccess = supportsDirectSocketAccess; + _logger = logger; this.stream = stream; } @@ -309,29 +312,34 @@ namespace SocketHttpListener.Net public Task TransmitFile(string path, long offset, long count, FileShareMode fileShareMode, CancellationToken cancellationToken) { - //if (_supportsDirectSocketAccess && offset == 0 && count == 0 && !response.SendChunked) + //if (_supportsDirectSocketAccess && offset == 0 && count == 0 && !response.SendChunked && response.ContentLength64 > 8192) //{ - // return TransmitFileOverSocket(path, offset, count, cancellationToken); + // return TransmitFileOverSocket(path, offset, count, fileShareMode, cancellationToken); //} return TransmitFileManaged(path, offset, count, fileShareMode, cancellationToken); } private readonly byte[] _emptyBuffer = new byte[] { }; - private async Task TransmitFileOverSocket(string path, long offset, long count, CancellationToken cancellationToken) + private Task TransmitFileOverSocket(string path, long offset, long count, FileShareMode fileShareMode, CancellationToken cancellationToken) { MemoryStream ms = GetHeaders(response, _memoryStreamFactory, false); - var buffer = new byte[] {}; + byte[] buffer; if (ms != null) { - ms.Position = 0; - - byte[] msBuffer; - _memoryStreamFactory.TryGetBuffer(ms, out msBuffer); - buffer = msBuffer; + using (var msCopy = new MemoryStream()) + { + ms.CopyTo(msCopy); + buffer = msCopy.ToArray(); + } + } + else + { + return TransmitFileManaged(path, offset, count, fileShareMode, cancellationToken); } - await _socket.SendFile(path, buffer, _emptyBuffer, cancellationToken).ConfigureAwait(false); + _logger.Info("Socket sending file {0} {1}", path, response.ContentLength64); + return _socket.SendFile(path, buffer, _emptyBuffer, cancellationToken); } private async Task TransmitFileManaged(string path, long offset, long count, FileShareMode fileShareMode, CancellationToken cancellationToken) -- cgit v1.2.3 From d48496b84341b4f04500d844cc2c6b6c6557b272 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 6 May 2017 15:45:23 -0400 Subject: add new search filters --- .../Data/SqliteItemRepository.cs | 70 +++++++++------------- .../Library/SearchEngine.cs | 8 ++- .../LiveTv/EmbyTV/EmbyTV.cs | 5 -- .../Security/PluginSecurityManager.cs | 6 -- MediaBrowser.Api/SearchService.cs | 23 ++++++- MediaBrowser.Api/StartupWizardService.cs | 1 - MediaBrowser.Controller/Entities/BaseItem.cs | 13 +--- .../Entities/InternalItemsQuery.cs | 1 - .../Parsers/BaseItemXmlParser.cs | 11 ---- MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs | 7 --- .../Configuration/ServerConfiguration.cs | 1 - MediaBrowser.Model/Querying/ItemFields.cs | 2 - MediaBrowser.Model/Search/SearchQuery.cs | 10 ++++ MediaBrowser.Providers/Manager/ProviderUtils.cs | 5 -- .../MediaInfo/FFProbeVideoInfo.cs | 5 -- MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs | 11 ---- MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs | 7 --- SharedVersion.cs | 2 +- 18 files changed, 69 insertions(+), 119 deletions(-) (limited to 'MediaBrowser.Api/SearchService.cs') diff --git a/Emby.Server.Implementations/Data/SqliteItemRepository.cs b/Emby.Server.Implementations/Data/SqliteItemRepository.cs index c0f473a9db..61dce9bba3 100644 --- a/Emby.Server.Implementations/Data/SqliteItemRepository.cs +++ b/Emby.Server.Implementations/Data/SqliteItemRepository.cs @@ -201,7 +201,6 @@ namespace Emby.Server.Implementations.Data AddColumn(db, "TypedBaseItems", "SortName", "Text", existingColumnNames); AddColumn(db, "TypedBaseItems", "RunTimeTicks", "BIGINT", existingColumnNames); - AddColumn(db, "TypedBaseItems", "OfficialRatingDescription", "Text", existingColumnNames); AddColumn(db, "TypedBaseItems", "HomePageUrl", "Text", existingColumnNames); AddColumn(db, "TypedBaseItems", "VoteCount", "INT", existingColumnNames); AddColumn(db, "TypedBaseItems", "DisplayMediaType", "Text", existingColumnNames); @@ -426,7 +425,6 @@ namespace Emby.Server.Implementations.Data "ParentIndexNumber", "ProductionYear", "OfficialRating", - "OfficialRatingDescription", "HomePageUrl", "DisplayMediaType", "ForcedSortName", @@ -547,7 +545,6 @@ namespace Emby.Server.Implementations.Data "InheritedParentalRatingValue", "SortName", "RunTimeTicks", - "OfficialRatingDescription", "HomePageUrl", "VoteCount", "DisplayMediaType", @@ -825,7 +822,6 @@ namespace Emby.Server.Implementations.Data saveItemStatement.TryBind("@SortName", item.SortName); saveItemStatement.TryBind("@RunTimeTicks", item.RunTimeTicks); - saveItemStatement.TryBind("@OfficialRatingDescription", item.OfficialRatingDescription); saveItemStatement.TryBind("@HomePageUrl", item.HomePageUrl); saveItemStatement.TryBind("@VoteCount", item.VoteCount); saveItemStatement.TryBind("@DisplayMediaType", item.DisplayMediaType); @@ -1278,22 +1274,10 @@ namespace Emby.Server.Implementations.Data { return false; } - if (type == typeof(Year)) - { - return false; - } - if (type == typeof(Book)) - { - return false; - } if (type == typeof(Person)) { return false; } - if (type == typeof(RecordingGroup)) - { - return false; - } if (type == typeof(Channel)) { return false; @@ -1327,31 +1311,42 @@ namespace Emby.Server.Implementations.Data return false; } } - if (_config.Configuration.SkipDeserializationForPrograms) + + if (type == typeof(Year)) { - if (type == typeof(LiveTvProgram)) - { - return false; - } + return false; + } + if (type == typeof(Book)) + { + return false; + } + if (type == typeof(RecordingGroup)) + { + return false; + } + if (type == typeof(LiveTvProgram)) + { + return false; } + if (type == typeof(LiveTvAudioRecording)) + { + return false; + } + if (type == typeof(AudioPodcast)) + { + return false; + } + if (type == typeof(AudioBook)) + { + return false; + } + if (_config.Configuration.SkipDeserializationForAudio) { if (type == typeof(Audio)) { return false; } - if (type == typeof(LiveTvAudioRecording)) - { - return false; - } - if (type == typeof(AudioPodcast)) - { - return false; - } - if (type == typeof(AudioBook)) - { - return false; - } if (type == typeof(MusicAlbum)) { return false; @@ -1597,15 +1592,6 @@ namespace Emby.Server.Implementations.Data } index++; - if (query.HasField(ItemFields.OfficialRatingDescription)) - { - if (!reader.IsDBNull(index)) - { - item.OfficialRatingDescription = reader.GetString(index); - } - index++; - } - if (query.HasField(ItemFields.HomePageUrl)) { if (!reader.IsDBNull(index)) diff --git a/Emby.Server.Implementations/Library/SearchEngine.cs b/Emby.Server.Implementations/Library/SearchEngine.cs index 51c9504c20..f640ae2b15 100644 --- a/Emby.Server.Implementations/Library/SearchEngine.cs +++ b/Emby.Server.Implementations/Library/SearchEngine.cs @@ -168,7 +168,13 @@ namespace Emby.Server.Implementations.Library IncludeItemsByName = string.IsNullOrWhiteSpace(query.ParentId), ParentId = string.IsNullOrWhiteSpace(query.ParentId) ? (Guid?)null : new Guid(query.ParentId), SortBy = new[] { ItemSortBy.SortName }, - Recursive = true + Recursive = true, + + IsKids = query.IsKids, + IsMovie = query.IsMovie, + IsNews = query.IsNews, + IsSeries = query.IsSeries, + IsSports = query.IsSports }); // Add search hints based on item name diff --git a/Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs b/Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs index 9ce4822730..f1b3f41b42 100644 --- a/Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs +++ b/Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs @@ -2155,11 +2155,6 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV writer.WriteElementString("mpaa", item.OfficialRating); } - if (!string.IsNullOrEmpty(item.OfficialRatingDescription)) - { - writer.WriteElementString("mpaadescription", item.OfficialRatingDescription); - } - var overview = (item.Overview ?? string.Empty) .StripHtml() .Replace(""", "'"); diff --git a/Emby.Server.Implementations/Security/PluginSecurityManager.cs b/Emby.Server.Implementations/Security/PluginSecurityManager.cs index 7cd0a8d5f3..d42fae3ad0 100644 --- a/Emby.Server.Implementations/Security/PluginSecurityManager.cs +++ b/Emby.Server.Implementations/Security/PluginSecurityManager.cs @@ -101,12 +101,6 @@ namespace Emby.Server.Implementations.Security /// public async Task LoadAllRegistrationInfo() { - var response = await _httpClient.GetResponse(new HttpRequestOptions - { - Url = "http://192.168.1.2:8096/emby/Videos/663c8a38ccfe91af6566852f78e62c26/stream.mkv?Static=true&mediaSourceId=663c8a38ccfe91af6566852f78e62c26&deviceId=hyJA92oXn4RExFTGismCnY6da91kwnTvv8YvsYf0E&Tag=bcdc02b1cdd6f1eb4a57a6812831617b" - - }).ConfigureAwait(false); - var tasks = new List(); ResetSupporterInfo(); diff --git a/MediaBrowser.Api/SearchService.cs b/MediaBrowser.Api/SearchService.cs index 5c0f918d93..3df815cda1 100644 --- a/MediaBrowser.Api/SearchService.cs +++ b/MediaBrowser.Api/SearchService.cs @@ -69,6 +69,21 @@ namespace MediaBrowser.Api public string ParentId { get; set; } + [ApiMember(Name = "IsMovie", Description = "Optional filter for movies.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET,POST")] + public bool? IsMovie { get; set; } + + [ApiMember(Name = "IsSeries", Description = "Optional filter for movies.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET,POST")] + public bool? IsSeries { get; set; } + + [ApiMember(Name = "IsNews", Description = "Optional filter for news.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET,POST")] + public bool? IsNews { get; set; } + + [ApiMember(Name = "IsKids", Description = "Optional filter for kids.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET,POST")] + public bool? IsKids { get; set; } + + [ApiMember(Name = "IsSports", Description = "Optional filter for sports.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET,POST")] + public bool? IsSports { get; set; } + public GetSearchHints() { IncludeArtists = true; @@ -139,7 +154,13 @@ namespace MediaBrowser.Api StartIndex = request.StartIndex, UserId = request.UserId, IncludeItemTypes = (request.IncludeItemTypes ?? string.Empty).Split(',').Where(i => !string.IsNullOrWhiteSpace(i)).ToArray(), - ParentId = request.ParentId + ParentId = request.ParentId, + + IsKids = request.IsKids, + IsMovie = request.IsMovie, + IsNews = request.IsNews, + IsSeries = request.IsSeries, + IsSports = request.IsSports }).ConfigureAwait(false); diff --git a/MediaBrowser.Api/StartupWizardService.cs b/MediaBrowser.Api/StartupWizardService.cs index 111e552f25..7e13512aa1 100644 --- a/MediaBrowser.Api/StartupWizardService.cs +++ b/MediaBrowser.Api/StartupWizardService.cs @@ -95,7 +95,6 @@ namespace MediaBrowser.Api config.EnableStandaloneMusicKeys = true; config.EnableCaseSensitiveItemIds = true; config.SkipDeserializationForBasicTypes = true; - config.SkipDeserializationForPrograms = true; config.SkipDeserializationForAudio = true; config.EnableSeriesPresentationUniqueKey = true; config.EnableLocalizedGuids = true; diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index 70512ef650..999f6db3fc 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -84,6 +84,7 @@ namespace MediaBrowser.Controller.Entities public long? Size { get; set; } public string Container { get; set; } + [IgnoreDataMember] public string Tagline { get; set; } @@ -834,13 +835,6 @@ namespace MediaBrowser.Controller.Entities [IgnoreDataMember] public float? CriticRating { get; set; } - /// - /// Gets or sets the official rating description. - /// - /// The official rating description. - [IgnoreDataMember] - public string OfficialRatingDescription { get; set; } - /// /// Gets or sets the custom rating. /// @@ -2291,11 +2285,6 @@ namespace MediaBrowser.Controller.Entities ownedItem.CustomRating = item.CustomRating; newOptions.ForceSave = true; } - if (!string.Equals(item.OfficialRatingDescription, ownedItem.OfficialRatingDescription, StringComparison.Ordinal)) - { - ownedItem.OfficialRatingDescription = item.OfficialRatingDescription; - newOptions.ForceSave = true; - } } return ownedItem.RefreshMetadata(newOptions, cancellationToken); diff --git a/MediaBrowser.Controller/Entities/InternalItemsQuery.cs b/MediaBrowser.Controller/Entities/InternalItemsQuery.cs index 6fffbf09e4..092461c842 100644 --- a/MediaBrowser.Controller/Entities/InternalItemsQuery.cs +++ b/MediaBrowser.Controller/Entities/InternalItemsQuery.cs @@ -175,7 +175,6 @@ namespace MediaBrowser.Controller.Entities case ItemFields.DateCreated: case ItemFields.SortName: case ItemFields.Overview: - case ItemFields.OfficialRatingDescription: case ItemFields.HomePageUrl: case ItemFields.VoteCount: case ItemFields.DisplayMediaType: diff --git a/MediaBrowser.LocalMetadata/Parsers/BaseItemXmlParser.cs b/MediaBrowser.LocalMetadata/Parsers/BaseItemXmlParser.cs index 76507ac4d7..2500ee4820 100644 --- a/MediaBrowser.LocalMetadata/Parsers/BaseItemXmlParser.cs +++ b/MediaBrowser.LocalMetadata/Parsers/BaseItemXmlParser.cs @@ -365,17 +365,6 @@ namespace MediaBrowser.LocalMetadata.Parsers break; } - case "MPAADescription": - { - var rating = reader.ReadElementContentAsString(); - - if (!string.IsNullOrWhiteSpace(rating)) - { - item.OfficialRatingDescription = rating; - } - break; - } - case "CustomRating": { var val = reader.ReadElementContentAsString(); diff --git a/MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs b/MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs index 01918a80cc..a3a55176cd 100644 --- a/MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs +++ b/MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs @@ -71,8 +71,6 @@ namespace MediaBrowser.LocalMetadata.Savers // Deprecated. No longer saving in this field. "MPAARating", - "MPAADescription", - "MusicBrainzArtistId", "MusicBrainzAlbumArtistId", "MusicBrainzAlbumId", @@ -308,11 +306,6 @@ namespace MediaBrowser.LocalMetadata.Savers writer.WriteElementString("ContentRating", item.OfficialRating); } - if (!string.IsNullOrEmpty(item.OfficialRatingDescription)) - { - writer.WriteElementString("MPAADescription", item.OfficialRatingDescription); - } - writer.WriteElementString("Added", item.DateCreated.ToLocalTime().ToString("G")); writer.WriteElementString("LockData", item.IsLocked.ToString().ToLower()); diff --git a/MediaBrowser.Model/Configuration/ServerConfiguration.cs b/MediaBrowser.Model/Configuration/ServerConfiguration.cs index a924ad76e5..838111a383 100644 --- a/MediaBrowser.Model/Configuration/ServerConfiguration.cs +++ b/MediaBrowser.Model/Configuration/ServerConfiguration.cs @@ -164,7 +164,6 @@ namespace MediaBrowser.Model.Configuration public bool EnableAutomaticRestart { get; set; } public bool SkipDeserializationForBasicTypes { get; set; } - public bool SkipDeserializationForPrograms { get; set; } public bool SkipDeserializationForAudio { get; set; } public string ServerName { get; set; } diff --git a/MediaBrowser.Model/Querying/ItemFields.cs b/MediaBrowser.Model/Querying/ItemFields.cs index def47f645a..75ba09b609 100644 --- a/MediaBrowser.Model/Querying/ItemFields.cs +++ b/MediaBrowser.Model/Querying/ItemFields.cs @@ -117,8 +117,6 @@ /// MediaSources, - OfficialRatingDescription, - OriginalTitle, /// diff --git a/MediaBrowser.Model/Search/SearchQuery.cs b/MediaBrowser.Model/Search/SearchQuery.cs index 11d2d97f7a..897a9db523 100644 --- a/MediaBrowser.Model/Search/SearchQuery.cs +++ b/MediaBrowser.Model/Search/SearchQuery.cs @@ -36,6 +36,16 @@ namespace MediaBrowser.Model.Search public string[] IncludeItemTypes { get; set; } public string ParentId { get; set; } + public bool? IsMovie { get; set; } + + public bool? IsSeries { get; set; } + + public bool? IsNews { get; set; } + + public bool? IsKids { get; set; } + + public bool? IsSports { get; set; } + public SearchQuery() { IncludeArtists = true; diff --git a/MediaBrowser.Providers/Manager/ProviderUtils.cs b/MediaBrowser.Providers/Manager/ProviderUtils.cs index dfa80a1807..f544c09dc1 100644 --- a/MediaBrowser.Providers/Manager/ProviderUtils.cs +++ b/MediaBrowser.Providers/Manager/ProviderUtils.cs @@ -91,11 +91,6 @@ namespace MediaBrowser.Providers.Manager } } - if (replaceData || string.IsNullOrEmpty(target.OfficialRatingDescription)) - { - target.OfficialRatingDescription = source.OfficialRatingDescription; - } - if (replaceData || string.IsNullOrEmpty(target.CustomRating)) { target.CustomRating = source.CustomRating; diff --git a/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs b/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs index e84617fd34..c686e1d2e1 100644 --- a/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs +++ b/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs @@ -356,11 +356,6 @@ namespace MediaBrowser.Providers.MediaInfo } } - if (!string.IsNullOrWhiteSpace(data.OfficialRatingDescription) || isFullRefresh) - { - video.OfficialRatingDescription = data.OfficialRatingDescription; - } - if (!video.IsLocked && !video.LockedFields.Contains(MetadataFields.Genres)) { if (video.Genres.Count == 0 || isFullRefresh) diff --git a/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs index 641ea4034c..dfd4694c36 100644 --- a/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs +++ b/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs @@ -452,17 +452,6 @@ namespace MediaBrowser.XbmcMetadata.Parsers break; } - case "mpaadescription": - { - var rating = reader.ReadElementContentAsString(); - - if (!string.IsNullOrWhiteSpace(rating)) - { - item.OfficialRatingDescription = rating; - } - break; - } - case "customrating": { var val = reader.ReadElementContentAsString(); diff --git a/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs b/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs index ca7d8a43f7..623b109f76 100644 --- a/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs +++ b/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs @@ -19,7 +19,6 @@ using System.Text; using System.Threading; using System.Xml; using MediaBrowser.Common.IO; -using MediaBrowser.Controller.IO; using MediaBrowser.Model.Extensions; using MediaBrowser.Model.IO; using MediaBrowser.Model.Xml; @@ -42,7 +41,6 @@ namespace MediaBrowser.XbmcMetadata.Savers "year", "sorttitle", "mpaa", - "mpaadescription", "aspectratio", "website", "collectionnumber", @@ -556,11 +554,6 @@ namespace MediaBrowser.XbmcMetadata.Savers writer.WriteElementString("mpaa", item.OfficialRating); } - if (!string.IsNullOrEmpty(item.OfficialRatingDescription)) - { - writer.WriteElementString("mpaadescription", item.OfficialRatingDescription); - } - var hasAspectRatio = item as IHasAspectRatio; if (hasAspectRatio != null) { diff --git a/SharedVersion.cs b/SharedVersion.cs index 0cf34eeacc..caf7c1e63a 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,3 +1,3 @@ using System.Reflection; -[assembly: AssemblyVersion("3.2.13.14")] +[assembly: AssemblyVersion("3.2.14.1")] -- cgit v1.2.3