From 95250b9f220dbd3a5bc6c11cbdc983967b8574d4 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 21 Mar 2016 16:15:18 -0400 Subject: [PATCH 1/7] removed dead code --- MediaBrowser.Controller/Entities/Folder.cs | 67 +------- .../Persistence/IItemRepository.cs | 23 --- MediaBrowser.Providers/Manager/ImageSaver.cs | 2 +- .../Library/LibraryManager.cs | 2 +- .../Persistence/SqliteItemRepository.cs | 149 ------------------ 5 files changed, 6 insertions(+), 237 deletions(-) diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index fa96ba4e51..a1a89d71f6 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -151,16 +151,6 @@ namespace MediaBrowser.Controller.Entities AddChildInternal(item.Id); await LibraryManager.CreateItem(item, cancellationToken).ConfigureAwait(false); - - if (!EnableNewFolderQuerying()) - { - await ItemRepository.SaveChildren(Id, ActualChildren.Select(i => i.Id).ToList(), cancellationToken).ConfigureAwait(false); - } - } - - private static bool EnableNewFolderQuerying() - { - return ConfigurationManager.Configuration.MigrationVersion >= 1; } protected void AddChildrenInternal(List children) @@ -197,21 +187,11 @@ namespace MediaBrowser.Controller.Entities /// Removes the child. /// /// The item. - /// The cancellation token. - /// Task. - /// Unable to remove + item.Name - public Task RemoveChild(BaseItem item, CancellationToken cancellationToken) + public void RemoveChild(BaseItem item) { RemoveChildrenInternal(new[] { item.Id }.ToList()); item.SetParent(null); - - if (!EnableNewFolderQuerying()) - { - return ItemRepository.SaveChildren(Id, ActualChildren.Select(i => i.Id).ToList(), cancellationToken); - } - - return Task.FromResult(true); } #region Indexing @@ -500,11 +480,6 @@ namespace MediaBrowser.Controller.Entities await LibraryManager.CreateItems(newItems, cancellationToken).ConfigureAwait(false); AddChildrenInternal(newItems.Select(i => i.Id).ToList()); - - if (!EnableNewFolderQuerying()) - { - await ItemRepository.SaveChildren(Id, ActualChildren.Select(i => i.Id).ToList(), cancellationToken).ConfigureAwait(false); - } } } @@ -734,45 +709,11 @@ namespace MediaBrowser.Controller.Entities /// IEnumerable{BaseItem}. protected IEnumerable GetCachedChildren() { - if (EnableNewFolderQuerying()) + return ItemRepository.GetItemIdsList(new InternalItemsQuery { - return ItemRepository.GetItemIdsList(new InternalItemsQuery - { - ParentId = Id - - }); - } - - return ItemRepository.GetChildrenItems(Id).Select(RetrieveChild).Where(i => i != null).Select(i => i.Id); - } - - private BaseItem RetrieveChild(BaseItem child) - { - if (child == null || child.Id == Guid.Empty) - { - Logger.Error("Item found with empty Id: " + (child.Path ?? child.Name)); - return null; - } - - var item = LibraryManager.GetMemoryItemById(child.Id); - - if (item != null) - { - if (item is IByReferenceItem) - { - return LibraryManager.GetOrAddByReferenceItem(item); - } - - item.SetParent(this); - } - else - { - child.SetParent(this); - LibraryManager.RegisterItem(child); - item = child; - } + ParentId = Id - return item; + }); } public QueryResult QueryRecursive(InternalItemsQuery query) diff --git a/MediaBrowser.Controller/Persistence/IItemRepository.cs b/MediaBrowser.Controller/Persistence/IItemRepository.cs index 533d66b950..15df1f6492 100644 --- a/MediaBrowser.Controller/Persistence/IItemRepository.cs +++ b/MediaBrowser.Controller/Persistence/IItemRepository.cs @@ -42,13 +42,6 @@ namespace MediaBrowser.Controller.Persistence /// Task{IEnumerable{ItemReview}}. IEnumerable GetCriticReviews(Guid itemId); - /// - /// Gets the children items. - /// - /// The parent identifier. - /// IEnumerable<BaseItem>. - IEnumerable GetChildrenItems(Guid parentId); - /// /// Saves the critic reviews. /// @@ -96,22 +89,6 @@ namespace MediaBrowser.Controller.Persistence /// Task. Task SaveChapters(Guid id, IEnumerable chapters, CancellationToken cancellationToken); - /// - /// Gets the children. - /// - /// The parent id. - /// IEnumerable{ChildDefinition}. - IEnumerable GetChildren(Guid parentId); - - /// - /// Saves the children. - /// - /// The parent id. - /// The children. - /// The cancellation token. - /// Task. - Task SaveChildren(Guid parentId, IEnumerable children, CancellationToken cancellationToken); - /// /// Gets the media streams. /// diff --git a/MediaBrowser.Providers/Manager/ImageSaver.cs b/MediaBrowser.Providers/Manager/ImageSaver.cs index 64a0e6d5b2..bd1961143e 100644 --- a/MediaBrowser.Providers/Manager/ImageSaver.cs +++ b/MediaBrowser.Providers/Manager/ImageSaver.cs @@ -421,7 +421,7 @@ namespace MediaBrowser.Providers.Manager if (saveLocally) { - if (item is Episode) + if (type == ImageType.Primary && item is Episode) { path = Path.Combine(Path.GetDirectoryName(item.Path), "metadata", filename + extension); } diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs index 50d3653358..ad3cd25767 100644 --- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs +++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs @@ -430,7 +430,7 @@ namespace MediaBrowser.Server.Implementations.Library } else if (parent != null) { - await parent.RemoveChild(item, CancellationToken.None).ConfigureAwait(false); + parent.RemoveChild(item); } await ItemRepository.DeleteItem(item.Id, CancellationToken.None).ConfigureAwait(false); diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs index a6e92171f8..0b337b2a18 100644 --- a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs +++ b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs @@ -63,8 +63,6 @@ namespace MediaBrowser.Server.Implementations.Persistence private readonly string _criticReviewsPath; - private IDbCommand _deleteChildrenCommand; - private IDbCommand _saveChildrenCommand; private IDbCommand _deleteItemCommand; private IDbCommand _deletePeopleCommand; @@ -138,9 +136,6 @@ namespace MediaBrowser.Server.Implementations.Persistence "create index if not exists idx_AncestorIds1 on AncestorIds(AncestorId)", "create index if not exists idx_AncestorIds2 on AncestorIds(AncestorIdText)", - "create table if not exists ChildrenIds (ParentId GUID, ItemId GUID, PRIMARY KEY (ParentId, ItemId))", - "create index if not exists idx_ChildrenIds on ChildrenIds(ParentId,ItemId)", - "create table if not exists People (ItemId GUID, Name TEXT NOT NULL, Role TEXT, PersonType TEXT, SortOrder int, ListOrder int)", "create index if not exists idxPeopleItemId on People(ItemId)", "create index if not exists idxPeopleName on People(Name)", @@ -477,19 +472,10 @@ namespace MediaBrowser.Server.Implementations.Persistence } _saveItemCommand.CommandText += ")"; - _deleteChildrenCommand = _connection.CreateCommand(); - _deleteChildrenCommand.CommandText = "delete from ChildrenIds where ParentId=@ParentId"; - _deleteChildrenCommand.Parameters.Add(_deleteChildrenCommand, "@ParentId"); - _deleteItemCommand = _connection.CreateCommand(); _deleteItemCommand.CommandText = "delete from TypedBaseItems where guid=@Id"; _deleteItemCommand.Parameters.Add(_deleteItemCommand, "@Id"); - _saveChildrenCommand = _connection.CreateCommand(); - _saveChildrenCommand.CommandText = "replace into ChildrenIds (ParentId, ItemId) values (@ParentId, @ItemId)"; - _saveChildrenCommand.Parameters.Add(_saveChildrenCommand, "@ParentId"); - _saveChildrenCommand.Parameters.Add(_saveChildrenCommand, "@ItemId"); - // People _deletePeopleCommand = _connection.CreateCommand(); _deletePeopleCommand.CommandText = "delete from People where ItemId=@Id"; @@ -1375,63 +1361,6 @@ namespace MediaBrowser.Server.Implementations.Persistence } } - public IEnumerable GetChildren(Guid parentId) - { - if (parentId == Guid.Empty) - { - throw new ArgumentNullException("parentId"); - } - - CheckDisposed(); - - using (var cmd = _connection.CreateCommand()) - { - cmd.CommandText = "select ItemId from ChildrenIds where ParentId = @ParentId"; - - cmd.Parameters.Add(cmd, "@ParentId", DbType.Guid).Value = parentId; - - using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult)) - { - while (reader.Read()) - { - yield return reader.GetGuid(0); - } - } - } - } - - public IEnumerable GetChildrenItems(Guid parentId) - { - if (parentId == Guid.Empty) - { - throw new ArgumentNullException("parentId"); - } - - CheckDisposed(); - - using (var cmd = _connection.CreateCommand()) - { - cmd.CommandText = "select " + string.Join(",", _retriveItemColumns) + " from TypedBaseItems where guid in (select ItemId from ChildrenIds where ParentId = @ParentId)"; - - cmd.Parameters.Add(cmd, "@ParentId", DbType.Guid).Value = parentId; - - //Logger.Debug(cmd.CommandText); - - using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult)) - { - while (reader.Read()) - { - var item = GetItem(reader); - - if (item != null) - { - yield return item; - } - } - } - } - } - public IEnumerable GetItemsOfType(Type type) { if (type == null) @@ -2392,11 +2321,6 @@ namespace MediaBrowser.Server.Implementations.Persistence { transaction = _connection.BeginTransaction(); - // First delete children - _deleteChildrenCommand.GetParameter(0).Value = id; - _deleteChildrenCommand.Transaction = transaction; - _deleteChildrenCommand.ExecuteNonQuery(); - // Delete people _deletePeopleCommand.GetParameter(0).Value = id; _deletePeopleCommand.Transaction = transaction; @@ -2455,79 +2379,6 @@ namespace MediaBrowser.Server.Implementations.Persistence } } - public async Task SaveChildren(Guid parentId, IEnumerable children, CancellationToken cancellationToken) - { - if (parentId == Guid.Empty) - { - throw new ArgumentNullException("parentId"); - } - - if (children == null) - { - throw new ArgumentNullException("children"); - } - - CheckDisposed(); - - await WriteLock.WaitAsync(cancellationToken).ConfigureAwait(false); - - IDbTransaction transaction = null; - - try - { - transaction = _connection.BeginTransaction(); - - // First delete - _deleteChildrenCommand.GetParameter(0).Value = parentId; - _deleteChildrenCommand.Transaction = transaction; - - _deleteChildrenCommand.ExecuteNonQuery(); - - foreach (var id in children) - { - cancellationToken.ThrowIfCancellationRequested(); - - _saveChildrenCommand.GetParameter(0).Value = parentId; - _saveChildrenCommand.GetParameter(1).Value = id; - - _saveChildrenCommand.Transaction = transaction; - - _saveChildrenCommand.ExecuteNonQuery(); - } - - transaction.Commit(); - } - catch (OperationCanceledException) - { - if (transaction != null) - { - transaction.Rollback(); - } - - throw; - } - catch (Exception e) - { - Logger.ErrorException("Failed to save children:", e); - - if (transaction != null) - { - transaction.Rollback(); - } - - throw; - } - finally - { - if (transaction != null) - { - transaction.Dispose(); - } - - WriteLock.Release(); - } - } - public List GetPeopleNames(InternalPeopleQuery query) { if (query == null) From e15a4328fb0930d3554365e1b6ed2adc2aa161bb Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 21 Mar 2016 23:15:26 -0400 Subject: [PATCH 2/7] fix progress ping --- MediaBrowser.Api/ApiEntryPoint.cs | 14 ++++++++++---- MediaBrowser.Api/UserLibrary/PlaystateService.cs | 4 ++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/MediaBrowser.Api/ApiEntryPoint.cs b/MediaBrowser.Api/ApiEntryPoint.cs index 55f191f1a3..47a339d2be 100644 --- a/MediaBrowser.Api/ApiEntryPoint.cs +++ b/MediaBrowser.Api/ApiEntryPoint.cs @@ -300,26 +300,31 @@ namespace MediaBrowser.Api PingTimer(job, false); } } - internal void PingTranscodingJob(string playSessionId) + internal void PingTranscodingJob(string playSessionId, bool? isUserPaused) { if (string.IsNullOrEmpty(playSessionId)) { throw new ArgumentNullException("playSessionId"); } - //Logger.Debug("PingTranscodingJob PlaySessionId={0}", playSessionId); + //Logger.Debug("PingTranscodingJob PlaySessionId={0} isUsedPaused: {1}", playSessionId, isUserPaused); - var jobs = new List(); + List jobs; lock (_activeTranscodingJobs) { // This is really only needed for HLS. // Progressive streams can stop on their own reliably - jobs = jobs.Where(j => string.Equals(playSessionId, j.PlaySessionId, StringComparison.OrdinalIgnoreCase)).ToList(); + jobs = _activeTranscodingJobs.Where(j => string.Equals(playSessionId, j.PlaySessionId, StringComparison.OrdinalIgnoreCase)).ToList(); } foreach (var job in jobs) { + if (isUserPaused.HasValue) + { + //Logger.Debug("Setting job.IsUserPaused to {0}. jobId: {1}", isUserPaused, job.Id); + job.IsUserPaused = isUserPaused.Value; + } PingTimer(job, true); } } @@ -655,6 +660,7 @@ namespace MediaBrowser.Api public object ProcessLock = new object(); public bool HasExited { get; set; } + public bool IsUserPaused { get; set; } public string Id { get; set; } diff --git a/MediaBrowser.Api/UserLibrary/PlaystateService.cs b/MediaBrowser.Api/UserLibrary/PlaystateService.cs index 08c6b0ba47..ddb73c2a68 100644 --- a/MediaBrowser.Api/UserLibrary/PlaystateService.cs +++ b/MediaBrowser.Api/UserLibrary/PlaystateService.cs @@ -337,7 +337,7 @@ namespace MediaBrowser.Api.UserLibrary { if (!string.IsNullOrWhiteSpace(request.PlaySessionId)) { - ApiEntryPoint.Instance.PingTranscodingJob(request.PlaySessionId); + ApiEntryPoint.Instance.PingTranscodingJob(request.PlaySessionId, request.IsPaused); } request.SessionId = GetSession().Result.Id; @@ -349,7 +349,7 @@ namespace MediaBrowser.Api.UserLibrary public void Post(PingPlaybackSession request) { - ApiEntryPoint.Instance.PingTranscodingJob(request.PlaySessionId); + ApiEntryPoint.Instance.PingTranscodingJob(request.PlaySessionId, null); } /// From be7590fca42d5bd8251d29361fa4d8f47c8ae4fc Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 21 Mar 2016 23:15:54 -0400 Subject: [PATCH 3/7] add legacy script --- MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj | 3 +++ 1 file changed, 3 insertions(+) diff --git a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj index f28b540164..1622eff930 100644 --- a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj +++ b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj @@ -272,6 +272,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest From 952f34c832e4ecd68ef7c8164604f1f681d2eec4 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 21 Mar 2016 23:27:46 -0400 Subject: [PATCH 4/7] update stream writer --- .../Progressive/ProgressiveStreamWriter.cs | 40 +++++++++++++++---- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/MediaBrowser.Api/Playback/Progressive/ProgressiveStreamWriter.cs b/MediaBrowser.Api/Playback/Progressive/ProgressiveStreamWriter.cs index 2719b1faf5..f766f46b1f 100644 --- a/MediaBrowser.Api/Playback/Progressive/ProgressiveStreamWriter.cs +++ b/MediaBrowser.Api/Playback/Progressive/ProgressiveStreamWriter.cs @@ -61,8 +61,9 @@ namespace MediaBrowser.Api.Playback.Progressive { try { - new ProgressiveFileCopier(_fileSystem, _job) - .StreamFile(Path, responseStream); + var task = new ProgressiveFileCopier(_fileSystem, _job, Logger).StreamFile(Path, responseStream); + + Task.WaitAll(task); } catch (IOException) { @@ -91,19 +92,21 @@ namespace MediaBrowser.Api.Playback.Progressive { private readonly IFileSystem _fileSystem; private readonly TranscodingJob _job; + private readonly ILogger _logger; // 256k private const int BufferSize = 262144; - + private long _bytesWritten = 0; - public ProgressiveFileCopier(IFileSystem fileSystem, TranscodingJob job) + public ProgressiveFileCopier(IFileSystem fileSystem, TranscodingJob job, ILogger logger) { _fileSystem = fileSystem; _job = job; + _logger = logger; } - public void StreamFile(string path, Stream outputStream) + public async Task StreamFile(string path, Stream outputStream) { var eofCount = 0; long position = 0; @@ -126,8 +129,7 @@ namespace MediaBrowser.Api.Playback.Progressive { eofCount++; } - var task = Task.Delay(100); - Task.WaitAll(task); + await Task.Delay(100).ConfigureAwait(false); } else { @@ -145,6 +147,30 @@ namespace MediaBrowser.Api.Playback.Progressive int count; while ((count = source.Read(array, 0, array.Length)) != 0) { + //if (_job != null) + //{ + // var didPause = false; + // var totalPauseTime = 0; + + // if (_job.IsUserPaused) + // { + // _logger.Debug("Pausing writing to network stream while user has paused playback."); + + // while (_job.IsUserPaused && totalPauseTime < 30000) + // { + // didPause = true; + // var pauseTime = 500; + // totalPauseTime += pauseTime; + // await Task.Delay(pauseTime).ConfigureAwait(false); + // } + // } + + // if (didPause) + // { + // _logger.Debug("Resuming writing to network stream due to user unpausing playback."); + // } + //} + destination.Write(array, 0, count); _bytesWritten += count; From ca308bc3c9372173887f41e16fd74241f844f39f Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 21 Mar 2016 23:31:35 -0400 Subject: [PATCH 5/7] update progress ping --- MediaBrowser.Api/ApiEntryPoint.cs | 9 +++++++++ MediaBrowser.Api/UserLibrary/PlaystateService.cs | 5 ----- .../Library/PlaybackProgressEventArgs.cs | 3 +++ .../Session/SessionManager.cs | 4 +++- 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/MediaBrowser.Api/ApiEntryPoint.cs b/MediaBrowser.Api/ApiEntryPoint.cs index 47a339d2be..117ff2305d 100644 --- a/MediaBrowser.Api/ApiEntryPoint.cs +++ b/MediaBrowser.Api/ApiEntryPoint.cs @@ -63,6 +63,15 @@ namespace MediaBrowser.Api _mediaSourceManager = mediaSourceManager; Instance = this; + _sessionManager.PlaybackProgress += _sessionManager_PlaybackProgress; + } + + void _sessionManager_PlaybackProgress(object sender, PlaybackProgressEventArgs e) + { + if (!string.IsNullOrWhiteSpace(e.PlaySessionId)) + { + PingTranscodingJob(e.PlaySessionId, e.IsPaused); + } } /// diff --git a/MediaBrowser.Api/UserLibrary/PlaystateService.cs b/MediaBrowser.Api/UserLibrary/PlaystateService.cs index ddb73c2a68..0a96a5b06c 100644 --- a/MediaBrowser.Api/UserLibrary/PlaystateService.cs +++ b/MediaBrowser.Api/UserLibrary/PlaystateService.cs @@ -335,11 +335,6 @@ namespace MediaBrowser.Api.UserLibrary public void Post(ReportPlaybackProgress request) { - if (!string.IsNullOrWhiteSpace(request.PlaySessionId)) - { - ApiEntryPoint.Instance.PingTranscodingJob(request.PlaySessionId, request.IsPaused); - } - request.SessionId = GetSession().Result.Id; var task = _sessionManager.OnPlaybackProgress(request); diff --git a/MediaBrowser.Controller/Library/PlaybackProgressEventArgs.cs b/MediaBrowser.Controller/Library/PlaybackProgressEventArgs.cs index 50528c6aec..bcf39558e1 100644 --- a/MediaBrowser.Controller/Library/PlaybackProgressEventArgs.cs +++ b/MediaBrowser.Controller/Library/PlaybackProgressEventArgs.cs @@ -15,11 +15,14 @@ namespace MediaBrowser.Controller.Library public BaseItem Item { get; set; } public BaseItemInfo MediaInfo { get; set; } public string MediaSourceId { get; set; } + public bool IsPaused { get; set; } public string DeviceId { get; set; } public string DeviceName { get; set; } public string ClientName { get; set; } + public string PlaySessionId { get; set; } + public PlaybackProgressEventArgs() { Users = new List(); diff --git a/MediaBrowser.Server.Implementations/Session/SessionManager.cs b/MediaBrowser.Server.Implementations/Session/SessionManager.cs index 824e5e0e8a..98127d39ad 100644 --- a/MediaBrowser.Server.Implementations/Session/SessionManager.cs +++ b/MediaBrowser.Server.Implementations/Session/SessionManager.cs @@ -705,7 +705,9 @@ namespace MediaBrowser.Server.Implementations.Session MediaInfo = info.Item, DeviceName = session.DeviceName, ClientName = session.Client, - DeviceId = session.DeviceId + DeviceId = session.DeviceId, + IsPaused = info.IsPaused, + PlaySessionId = info.PlaySessionId }, _logger); From 7a014affb27b3e3d00680e39ce6b858f6d954ec6 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 21 Mar 2016 23:35:24 -0400 Subject: [PATCH 6/7] fix albums per artist --- MediaBrowser.Api/Reports/ReportsService.cs | 33 ++++++-------------- MediaBrowser.Api/UserLibrary/ItemsService.cs | 33 ++++++-------------- 2 files changed, 18 insertions(+), 48 deletions(-) diff --git a/MediaBrowser.Api/Reports/ReportsService.cs b/MediaBrowser.Api/Reports/ReportsService.cs index 15bdf4be62..ae6fbc9e24 100644 --- a/MediaBrowser.Api/Reports/ReportsService.cs +++ b/MediaBrowser.Api/Reports/ReportsService.cs @@ -213,8 +213,6 @@ namespace MediaBrowser.Api.Reports SortBy = request.GetOrderBy(), SortOrder = request.SortOrder ?? SortOrder.Ascending, - Filter = i => ApplyAdditionalFilters(request, i, user, _libraryManager), - IsFavorite = request.IsFavorite, Limit = request.Limit, StartIndex = request.StartIndex, @@ -350,6 +348,15 @@ namespace MediaBrowser.Api.Reports query.MaxParentalRating = _localization.GetRatingLevel(request.MinOfficialRating); } + // Artists + if (!string.IsNullOrEmpty(request.ArtistIds)) + { + var artistIds = request.ArtistIds.Split(new[] { '|', ',' }); + + var artistItems = artistIds.Select(_libraryManager.GetItemById).Where(i => i != null).ToList(); + query.ArtistNames = artistItems.Select(i => i.Name).ToArray(); + } + // Artists if (!string.IsNullOrEmpty(request.Artists)) { @@ -371,28 +378,6 @@ namespace MediaBrowser.Api.Reports return query; } - private bool ApplyAdditionalFilters(BaseReportRequest request, BaseItem i, User user, ILibraryManager libraryManager) - { - // Artists - if (!string.IsNullOrEmpty(request.ArtistIds)) - { - var artistIds = request.ArtistIds.Split(new[] { '|', ',' }); - - var audio = i as IHasArtist; - - if (!(audio != null && artistIds.Any(id => - { - var artistItem = libraryManager.GetItemById(id); - return artistItem != null && audio.HasAnyArtist(artistItem.Name); - }))) - { - return false; - } - } - - return true; - } - /// Gets query result. /// The request. /// The query result. diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs index 566b1dfd5c..ea7e16e8d6 100644 --- a/MediaBrowser.Api/UserLibrary/ItemsService.cs +++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs @@ -184,8 +184,6 @@ namespace MediaBrowser.Api.UserLibrary SortBy = request.GetOrderBy(), SortOrder = request.SortOrder ?? SortOrder.Ascending, - Filter = i => ApplyAdditionalFilters(request, i, user, _libraryManager), - IsFavorite = request.IsFavorite, Limit = request.Limit, StartIndex = request.StartIndex, @@ -323,6 +321,15 @@ namespace MediaBrowser.Api.UserLibrary query.MaxParentalRating = _localization.GetRatingLevel(request.MinOfficialRating); } + // Artists + if (!string.IsNullOrEmpty(request.ArtistIds)) + { + var artistIds = request.ArtistIds.Split(new[] { '|', ',' }); + + var artistItems = artistIds.Select(_libraryManager.GetItemById).Where(i => i != null).ToList(); + query.ArtistNames = artistItems.Select(i => i.Name).ToArray(); + } + // Artists if (!string.IsNullOrEmpty(request.Artists)) { @@ -337,28 +344,6 @@ namespace MediaBrowser.Api.UserLibrary return query; } - - private bool ApplyAdditionalFilters(GetItems request, BaseItem i, User user, ILibraryManager libraryManager) - { - // Artists - if (!string.IsNullOrEmpty(request.ArtistIds)) - { - var artistIds = request.ArtistIds.Split(new[] { '|', ',' }); - - var audio = i as IHasArtist; - - if (!(audio != null && artistIds.Any(id => - { - var artistItem = libraryManager.GetItemById(id); - return artistItem != null && audio.HasAnyArtist(artistItem.Name); - }))) - { - return false; - } - } - - return true; - } } /// From 49c678037a329f35de0ff09999b79cd8a1d4694d Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Tue, 22 Mar 2016 00:15:12 -0400 Subject: [PATCH 7/7] fix samsung dlna subtitles --- MediaBrowser.Dlna/Didl/DidlBuilder.cs | 20 +++++++++---------- .../Subtitles/SubtitleEncoder.cs | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/MediaBrowser.Dlna/Didl/DidlBuilder.cs b/MediaBrowser.Dlna/Didl/DidlBuilder.cs index 91d1af8f4f..e8e969a5f1 100644 --- a/MediaBrowser.Dlna/Didl/DidlBuilder.cs +++ b/MediaBrowser.Dlna/Didl/DidlBuilder.cs @@ -188,15 +188,15 @@ namespace MediaBrowser.Dlna.Didl { var subtitleAdded = AddSubtitleElement(container, subtitle); - if (subtitleAdded && _profile.EnableSingleSubtitleLimit) - { - break; - } + if (subtitleAdded && _profile.EnableSingleSubtitleLimit) + { + break; + } } } } - private bool AddSubtitleElement(XmlElement container, SubtitleStreamInfo info) + private bool AddSubtitleElement(XmlElement container, SubtitleStreamInfo info) { var subtitleProfile = _profile.SubtitleProfiles .FirstOrDefault(i => string.Equals(info.Format, i.Format, StringComparison.OrdinalIgnoreCase) && i.Method == SubtitleDeliveryMethod.External); @@ -213,13 +213,13 @@ namespace MediaBrowser.Dlna.Didl // http://192.168.1.3:9999/video.srt // http://192.168.1.3:9999/video.srt - //var res = container.OwnerDocument.CreateElement("SEC", "CaptionInfoEx"); + var res = container.OwnerDocument.CreateElement("CaptionInfoEx", "sec"); - //res.InnerText = info.Url; + res.InnerText = info.Url; //// TODO: attribute needs SEC: - //res.SetAttribute("type", info.Format.ToLower()); - //container.AppendChild(res); + res.SetAttribute("type", "sec", info.Format.ToLower()); + container.AppendChild(res); } else if (string.Equals(subtitleMode, "smi", StringComparison.OrdinalIgnoreCase)) { @@ -243,7 +243,7 @@ namespace MediaBrowser.Dlna.Didl container.AppendChild(res); } - return true; + return true; } private void AddVideoResource(XmlElement container, IHasMediaSources video, string deviceId, Filter filter, string contentFeatures, StreamInfo streamInfo) diff --git a/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs b/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs index 882b2e1c24..cbe24bda83 100644 --- a/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs +++ b/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs @@ -604,7 +604,7 @@ namespace MediaBrowser.MediaEncoding.Subtitles process.StandardError.BaseStream.CopyToAsync(logFileStream); - var ranToCompletion = process.WaitForExit(120000); + var ranToCompletion = process.WaitForExit(300000); if (!ranToCompletion) {