Kaynağa Gözat

revert servicestack.text update

Luke Pulverenti 7 yıl önce
ebeveyn
işleme
e7425e6205
64 değiştirilmiş dosya ile 198 ekleme ve 310 silme
  1. 3 2
      Emby.Common.Implementations/Emby.Common.Implementations.csproj
  2. 1 1
      Emby.Common.Implementations/packages.config
  3. 1 1
      Emby.Server.Implementations/Channels/ChannelManager.cs
  4. 6 3
      Emby.Server.Implementations/Collections/CollectionManager.cs
  5. 6 19
      Emby.Server.Implementations/Data/SqliteItemRepository.cs
  6. 5 6
      Emby.Server.Implementations/Dto/DtoService.cs
  7. 3 2
      Emby.Server.Implementations/Emby.Server.Implementations.csproj
  8. 1 1
      Emby.Server.Implementations/Library/LocalTrailerPostScanTask.cs
  9. 3 3
      Emby.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs
  10. 2 7
      Emby.Server.Implementations/MediaEncoder/EncodingManager.cs
  11. 14 9
      Emby.Server.Implementations/Playlists/PlaylistManager.cs
  12. 2 9
      Emby.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs
  13. 1 1
      Emby.Server.Implementations/packages.config
  14. 1 1
      MediaBrowser.Api/ItemUpdateService.cs
  15. 1 1
      MediaBrowser.Api/Reports/Data/ReportBuilder.cs
  16. 6 2
      MediaBrowser.Api/VideosService.cs
  17. 1 7
      MediaBrowser.Controller/Chapters/IChapterManager.cs
  18. 2 2
      MediaBrowser.Controller/Entities/Audio/Audio.cs
  19. 1 1
      MediaBrowser.Controller/Entities/Audio/IHasAlbumArtist.cs
  20. 2 2
      MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs
  21. 3 1
      MediaBrowser.Controller/Entities/BaseItem.cs
  22. 1 1
      MediaBrowser.Controller/Entities/CollectionFolder.cs
  23. 16 7
      MediaBrowser.Controller/Entities/Extensions.cs
  24. 15 19
      MediaBrowser.Controller/Entities/Folder.cs
  25. 6 17
      MediaBrowser.Controller/Entities/Game.cs
  26. 3 3
      MediaBrowser.Controller/Entities/IHasTrailers.cs
  27. 6 17
      MediaBrowser.Controller/Entities/Movies/BoxSet.cs
  28. 6 6
      MediaBrowser.Controller/Entities/Movies/Movie.cs
  29. 6 6
      MediaBrowser.Controller/Entities/TV/Episode.cs
  30. 6 17
      MediaBrowser.Controller/Entities/TV/Series.cs
  31. 11 11
      MediaBrowser.Controller/Entities/Video.cs
  32. 0 1
      MediaBrowser.Controller/MediaBrowser.Controller.csproj
  33. 0 17
      MediaBrowser.Controller/MediaEncoding/ChapterImageRefreshOptions.cs
  34. 0 20
      MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs
  35. 5 5
      MediaBrowser.Controller/MediaEncoding/IEncodingManager.cs
  36. 2 6
      MediaBrowser.Controller/Persistence/IItemRepository.cs
  37. 3 3
      MediaBrowser.Controller/Playlists/Playlist.cs
  38. 2 2
      MediaBrowser.Controller/Providers/AlbumInfo.cs
  39. 2 0
      MediaBrowser.Controller/Providers/ItemLookupInfo.cs
  40. 2 2
      MediaBrowser.Controller/Providers/SongInfo.cs
  41. 2 2
      MediaBrowser.LocalMetadata/Parsers/BaseItemXmlParser.cs
  42. 2 1
      MediaBrowser.LocalMetadata/Parsers/BoxSetXmlParser.cs
  43. 2 1
      MediaBrowser.LocalMetadata/Parsers/PlaylistXmlParser.cs
  44. 1 1
      MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs
  45. 2 2
      MediaBrowser.Model/Dto/BaseItemDto.cs
  46. 4 2
      MediaBrowser.Model/MediaInfo/MediaInfo.cs
  47. 2 5
      MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs
  48. 2 2
      MediaBrowser.Providers/Chapters/ChapterManager.cs
  49. 2 2
      MediaBrowser.Providers/Manager/ProviderUtils.cs
  50. 3 10
      MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs
  51. 1 1
      MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs
  52. 1 1
      MediaBrowser.Providers/Music/AlbumMetadataService.cs
  53. 1 1
      MediaBrowser.Providers/Music/AudioDbAlbumProvider.cs
  54. 1 1
      MediaBrowser.Providers/TV/TheMovieDb/MovieDbEpisodeProvider.cs
  55. 1 1
      MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeriesProvider.cs
  56. 2 2
      MediaBrowser.Server.Mac/Emby.Server.Mac.csproj
  57. 3 2
      MediaBrowser.Server.Mono/MediaBrowser.Server.Mono.csproj
  58. 1 1
      MediaBrowser.Server.Mono/packages.config
  59. 3 2
      MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj
  60. 1 1
      MediaBrowser.ServerApplication/packages.config
  61. 1 1
      MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs
  62. 0 24
      Nuget/MediaBrowser.Common.Internal.nuspec
  63. 1 1
      Nuget/MediaBrowser.Common.nuspec
  64. 2 2
      Nuget/MediaBrowser.Server.Core.nuspec

+ 3 - 2
Emby.Common.Implementations/Emby.Common.Implementations.csproj

@@ -34,8 +34,9 @@
     <Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
       <HintPath>..\packages\NLog.4.4.12\lib\net45\NLog.dll</HintPath>
     </Reference>
-    <Reference Include="ServiceStack.Text, Version=4.5.12.0, Culture=neutral, processorArchitecture=MSIL">
-      <HintPath>..\packages\ServiceStack.Text.4.5.12\lib\net45\ServiceStack.Text.dll</HintPath>
+    <Reference Include="ServiceStack.Text, Version=4.5.8.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\ServiceStack.Text.4.5.8\lib\net45\ServiceStack.Text.dll</HintPath>
+      <Private>True</Private>
     </Reference>
     <Reference Include="SharpCompress, Version=0.14.0.0, Culture=neutral, processorArchitecture=MSIL">
       <HintPath>..\packages\SharpCompress.0.14.0\lib\net45\SharpCompress.dll</HintPath>

+ 1 - 1
Emby.Common.Implementations/packages.config

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <packages>
   <package id="NLog" version="4.4.12" targetFramework="net46" />
-  <package id="ServiceStack.Text" version="4.5.12" targetFramework="net46" />
+  <package id="ServiceStack.Text" version="4.5.8" targetFramework="net46" />
   <package id="SharpCompress" version="0.14.0" targetFramework="net462" />
   <package id="SimpleInjector" version="4.0.8" targetFramework="net46" />
 </packages>

+ 1 - 1
Emby.Server.Implementations/Channels/ChannelManager.cs

@@ -1344,7 +1344,7 @@ namespace Emby.Server.Implementations.Channels
             var hasAlbumArtists = item as IHasAlbumArtist;
             if (hasAlbumArtists != null)
             {
-                hasAlbumArtists.AlbumArtists = info.AlbumArtists;
+                hasAlbumArtists.AlbumArtists = info.AlbumArtists.ToArray(info.AlbumArtists.Count);
             }
 
             var trailer = item as Trailer;

+ 6 - 3
Emby.Server.Implementations/Collections/CollectionManager.cs

@@ -12,6 +12,7 @@ using System.Linq;
 using System.Threading;
 using System.Threading.Tasks;
 using MediaBrowser.Model.IO;
+using MediaBrowser.Model.Extensions;
 
 namespace Emby.Server.Implementations.Collections
 {
@@ -190,7 +191,9 @@ namespace Emby.Server.Implementations.Collections
 
             if (list.Count > 0)
             {
-                collection.LinkedChildren.AddRange(list);
+                var newList = collection.LinkedChildren.ToList();
+                newList.AddRange(list);
+                collection.LinkedChildren = newList.ToArray(newList.Count);
 
                 collection.UpdateRatingToContent();
 
@@ -241,9 +244,9 @@ namespace Emby.Server.Implementations.Collections
                 }
             }
 
-            foreach (var child in list)
+            if (list.Count > 0)
             {
-                collection.LinkedChildren.Remove(child);
+                collection.LinkedChildren = collection.LinkedChildren.Except(list).ToArray();
             }
 
             collection.UpdateRatingToContent();

+ 6 - 19
Emby.Server.Implementations/Data/SqliteItemRepository.cs

@@ -1037,9 +1037,9 @@ namespace Emby.Server.Implementations.Data
             var hasAlbumArtists = item as IHasAlbumArtist;
             if (hasAlbumArtists != null)
             {
-                if (hasAlbumArtists.AlbumArtists.Count > 0)
+                if (hasAlbumArtists.AlbumArtists.Length > 0)
                 {
-                    albumArtists = string.Join("|", hasAlbumArtists.AlbumArtists.ToArray());
+                    albumArtists = string.Join("|", hasAlbumArtists.AlbumArtists);
                 }
             }
             saveItemStatement.TryBind("@AlbumArtists", albumArtists);
@@ -1927,7 +1927,7 @@ namespace Emby.Server.Implementations.Data
                 var hasAlbumArtists = item as IHasAlbumArtist;
                 if (hasAlbumArtists != null && !reader.IsDBNull(index))
                 {
-                    hasAlbumArtists.AlbumArtists = reader.GetString(index).Split('|').Where(i => !string.IsNullOrWhiteSpace(i)).ToList();
+                    hasAlbumArtists.AlbumArtists = reader.GetString(index).Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
                 }
                 index++;
             }
@@ -1995,7 +1995,7 @@ namespace Emby.Server.Implementations.Data
         /// <param name="id">The id.</param>
         /// <returns>IEnumerable{ChapterInfo}.</returns>
         /// <exception cref="System.ArgumentNullException">id</exception>
-        public IEnumerable<ChapterInfo> GetChapters(Guid id)
+        public List<ChapterInfo> GetChapters(Guid id)
         {
             CheckDisposed();
             if (id == Guid.Empty)
@@ -2091,18 +2091,7 @@ namespace Emby.Server.Implementations.Data
         /// <summary>
         /// Saves the chapters.
         /// </summary>
-        /// <param name="id">The id.</param>
-        /// <param name="chapters">The chapters.</param>
-        /// <param name="cancellationToken">The cancellation token.</param>
-        /// <returns>Task.</returns>
-        /// <exception cref="System.ArgumentNullException">
-        /// id
-        /// or
-        /// chapters
-        /// or
-        /// cancellationToken
-        /// </exception>
-        public async Task SaveChapters(Guid id, List<ChapterInfo> chapters, CancellationToken cancellationToken)
+        public async Task SaveChapters(Guid id, List<ChapterInfo> chapters)
         {
             CheckDisposed();
 
@@ -2116,8 +2105,6 @@ namespace Emby.Server.Implementations.Data
                 throw new ArgumentNullException("chapters");
             }
 
-            cancellationToken.ThrowIfCancellationRequested();
-
             var index = 0;
 
             using (WriteLock.Write())
@@ -2826,7 +2813,7 @@ namespace Emby.Server.Implementations.Data
             var slowThreshold = 1000;
 
 #if DEBUG
-            slowThreshold = 2;
+            slowThreshold = 10;
 #endif
 
             if (elapsed >= slowThreshold)

+ 5 - 6
Emby.Server.Implementations/Dto/DtoService.cs

@@ -993,7 +993,7 @@ namespace Emby.Server.Implementations.Dto
             {
                 dto.RemoteTrailers = hasTrailers != null ?
                     hasTrailers.RemoteTrailers :
-                    new List<MediaUrl>();
+                    new MediaUrl[] {};
             }
 
             dto.Name = item.Name;
@@ -1172,8 +1172,7 @@ namespace Emby.Server.Implementations.Dto
                 //    })
                 //    .ToList();
 
-                dto.AlbumArtists = new List<NameIdPair>();
-                dto.AlbumArtists.AddRange(hasAlbumArtist.AlbumArtists
+                dto.AlbumArtists = hasAlbumArtist.AlbumArtists
                     //.Except(foundArtists, new DistinctNameComparer())
                     .Select(i =>
                     {
@@ -1198,7 +1197,7 @@ namespace Emby.Server.Implementations.Dto
 
                         return null;
 
-                    }).Where(i => i != null));
+                    }).Where(i => i != null).ToArray();
             }
 
             // Add video info
@@ -1214,9 +1213,9 @@ namespace Emby.Server.Implementations.Dto
                     dto.HasSubtitles = video.HasSubtitles;
                 }
 
-                if (video.AdditionalParts.Count != 0)
+                if (video.AdditionalParts.Length != 0)
                 {
-                    dto.PartCount = video.AdditionalParts.Count + 1;
+                    dto.PartCount = video.AdditionalParts.Length + 1;
                 }
 
                 if (fields.Contains(ItemFields.MediaSourceCount))

+ 3 - 2
Emby.Server.Implementations/Emby.Server.Implementations.csproj

@@ -367,8 +367,9 @@
     <Reference Include="Microsoft.IO.RecyclableMemoryStream, Version=1.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
       <HintPath>..\packages\Microsoft.IO.RecyclableMemoryStream.1.2.2\lib\net45\Microsoft.IO.RecyclableMemoryStream.dll</HintPath>
     </Reference>
-    <Reference Include="ServiceStack.Text, Version=4.5.12.0, Culture=neutral, processorArchitecture=MSIL">
-      <HintPath>..\packages\ServiceStack.Text.4.5.12\lib\net45\ServiceStack.Text.dll</HintPath>
+    <Reference Include="ServiceStack.Text, Version=4.5.8.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\ServiceStack.Text.4.5.8\lib\net45\ServiceStack.Text.dll</HintPath>
+      <Private>True</Private>
     </Reference>
     <Reference Include="SimpleInjector, Version=4.0.8.0, Culture=neutral, PublicKeyToken=984cb50dea722e99, processorArchitecture=MSIL">
       <HintPath>..\packages\SimpleInjector.4.0.8\lib\net45\SimpleInjector.dll</HintPath>

+ 1 - 1
Emby.Server.Implementations/Library/LocalTrailerPostScanTask.cs

@@ -91,7 +91,7 @@ namespace Emby.Server.Implementations.Library
             });
 
             var trailerIds = trailers.Select(i => i.Id)
-                .ToList();
+                .ToArray();
 
             if (!trailerIds.SequenceEqual(item.RemoteTrailerIds))
             {

+ 3 - 3
Emby.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs

@@ -159,8 +159,8 @@ namespace Emby.Server.Implementations.Library.Resolvers.Movies
                     IsInMixedFolder = isInMixedFolder,
                     ProductionYear = video.Year,
                     Name = video.Name,
-                    AdditionalParts = video.Files.Skip(1).Select(i => i.Path).ToList(),
-                    LocalAlternateVersions = video.AlternateVersions.Select(i => i.Path).ToList()
+                    AdditionalParts = video.Files.Skip(1).Select(i => i.Path).ToArray(),
+                    LocalAlternateVersions = video.AlternateVersions.Select(i => i.Path).ToArray()
                 };
 
                 SetVideoType(videoItem, firstVideo);
@@ -503,7 +503,7 @@ namespace Emby.Server.Implementations.Library.Resolvers.Movies
             {
                 Path = folderPaths[0],
 
-                AdditionalParts = folderPaths.Skip(1).ToList(),
+                AdditionalParts = folderPaths.Skip(1).ToArray(),
 
                 VideoType = videoTypes[0],
 

+ 2 - 7
Emby.Server.Implementations/MediaEncoder/EncodingManager.cs

@@ -84,13 +84,8 @@ namespace Emby.Server.Implementations.MediaEncoder
         /// </summary>
         private static readonly long FirstChapterTicks = TimeSpan.FromSeconds(15).Ticks;
 
-        public async Task<bool> RefreshChapterImages(ChapterImageRefreshOptions options, CancellationToken cancellationToken)
+        public async Task<bool> RefreshChapterImages(Video video, List<ChapterInfo> chapters, bool extractImages, bool saveChapters, CancellationToken cancellationToken)
         {
-            var extractImages = options.ExtractImages;
-            var video = options.Video;
-            var chapters = options.Chapters;
-            var saveChapters = options.SaveChapters;
-
             if (!IsEligibleForChapterImageExtraction(video))
             {
                 extractImages = false;
@@ -179,7 +174,7 @@ namespace Emby.Server.Implementations.MediaEncoder
 
             if (saveChapters && changesMade)
             {
-                await _chapterManager.SaveChapters(video.Id.ToString(), chapters, cancellationToken).ConfigureAwait(false);
+                await _chapterManager.SaveChapters(video.Id.ToString(), chapters).ConfigureAwait(false);
             }
 
             DeleteDeadImages(currentImages, chapters);

+ 14 - 9
Emby.Server.Implementations/Playlists/PlaylistManager.cs

@@ -12,10 +12,9 @@ using System.IO;
 using System.Linq;
 using System.Threading;
 using System.Threading.Tasks;
-
 using MediaBrowser.Controller.Dto;
-using MediaBrowser.Controller.IO;
 using MediaBrowser.Model.IO;
+using MediaBrowser.Model.Extensions;
 
 namespace Emby.Server.Implementations.Playlists
 {
@@ -164,7 +163,7 @@ namespace Emby.Server.Implementations.Playlists
             return path;
         }
 
-        private IEnumerable<BaseItem> GetPlaylistItems(IEnumerable<string> itemIds, string playlistMediaType, User user, DtoOptions options)
+        private List<BaseItem> GetPlaylistItems(IEnumerable<string> itemIds, string playlistMediaType, User user, DtoOptions options)
         {
             var items = itemIds.Select(i => _libraryManager.GetItemById(i)).Where(i => i != null);
 
@@ -206,7 +205,9 @@ namespace Emby.Server.Implementations.Playlists
                 list.Add(LinkedChild.Create(item));
             }
 
-            playlist.LinkedChildren.AddRange(list);
+            var newList = playlist.LinkedChildren.ToList();
+            newList.AddRange(list);
+            playlist.LinkedChildren = newList.ToArray(newList.Count);
 
             await playlist.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
 
@@ -234,7 +235,7 @@ namespace Emby.Server.Implementations.Playlists
 
             playlist.LinkedChildren = children.Except(removals)
                 .Select(i => i.Item1)
-                .ToList();
+                .ToArray();
 
             await playlist.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
 
@@ -265,17 +266,21 @@ namespace Emby.Server.Implementations.Playlists
 
             var item = playlist.LinkedChildren[oldIndex];
 
-            playlist.LinkedChildren.Remove(item);
+            var newList = playlist.LinkedChildren.ToList();
 
-            if (newIndex >= playlist.LinkedChildren.Count)
+            newList.Remove(item);
+
+            if (newIndex >= newList.Count)
             {
-                playlist.LinkedChildren.Add(item);
+                newList.Add(item);
             }
             else
             {
-                playlist.LinkedChildren.Insert(newIndex, item);
+                newList.Insert(newIndex, item);
             }
 
+            playlist.LinkedChildren = newList.ToArray(newList.Count);
+
             await playlist.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
         }
 

+ 2 - 9
Emby.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs

@@ -124,16 +124,9 @@ namespace Emby.Server.Implementations.ScheduledTasks
 
                 try
                 {
-                    var chapters = _itemRepo.GetChapters(video.Id).ToList();
+                    var chapters = _itemRepo.GetChapters(video.Id);
 
-                    var success = await _encodingManager.RefreshChapterImages(new ChapterImageRefreshOptions
-                    {
-                        SaveChapters = true,
-                        ExtractImages = extract,
-                        Video = video,
-                        Chapters = chapters
-
-                    }, CancellationToken.None);
+                    var success = await _encodingManager.RefreshChapterImages(video, chapters, extract, true, CancellationToken.None);
 
                     if (!success)
                     {

+ 1 - 1
Emby.Server.Implementations/packages.config

@@ -3,7 +3,7 @@
   <package id="Emby.XmlTv" version="1.0.9" targetFramework="net46" />
   <package id="MediaBrowser.Naming" version="1.0.5" targetFramework="portable45-net45+win8" />
   <package id="Microsoft.IO.RecyclableMemoryStream" version="1.2.2" targetFramework="net46" />
-  <package id="ServiceStack.Text" version="4.5.12" targetFramework="net46" />
+  <package id="ServiceStack.Text" version="4.5.8" targetFramework="net46" />
   <package id="SimpleInjector" version="4.0.8" targetFramework="net46" />
   <package id="SQLitePCL.pretty" version="1.1.0" targetFramework="portable45-net45+win8" />
   <package id="SQLitePCLRaw.core" version="1.1.8" targetFramework="net46" />

+ 1 - 1
MediaBrowser.Api/ItemUpdateService.cs

@@ -347,7 +347,7 @@ namespace MediaBrowser.Api
                     hasAlbumArtists.AlbumArtists = request
                         .AlbumArtists
                         .Select(i => i.Name)
-                        .ToList();
+                        .ToArray();
                 }
             }
 

+ 1 - 1
MediaBrowser.Api/Reports/Data/ReportBuilder.cs

@@ -513,7 +513,7 @@ namespace MediaBrowser.Api.Reports
                     internalHeader = HeaderMetadata.AlbumArtist;
                     break;
                 case HeaderMetadata.AudioAlbumArtist:
-                    option.Column = (i, r) => this.GetListAsString(this.GetObject<Audio, List<string>>(i, (x) => x.AlbumArtists));
+                    option.Column = (i, r) => this.GetListAsString(this.GetObject<Audio, List<string>>(i, (x) => x.AlbumArtists.ToList()));
                     option.Header.SortField = "AlbumArtist,Album,SortName";
                     internalHeader = HeaderMetadata.AlbumArtist;
                     break;

+ 6 - 2
MediaBrowser.Api/VideosService.cs

@@ -126,7 +126,7 @@ namespace MediaBrowser.Api
                 await link.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
             }
 
-            video.LinkedAlternateVersions.Clear();
+            video.LinkedAlternateVersions = Video.EmptyLinkedChildArray;
             await video.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
         }
 
@@ -185,19 +185,23 @@ namespace MediaBrowser.Api
                     }).First();
             }
 
+            var list = primaryVersion.LinkedAlternateVersions.ToList();
+
             foreach (var item in items.Where(i => i.Id != primaryVersion.Id))
             {
                 item.PrimaryVersionId = primaryVersion.Id.ToString("N");
 
                 await item.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
 
-                primaryVersion.LinkedAlternateVersions.Add(new LinkedChild
+                list.Add(new LinkedChild
                 {
                     Path = item.Path,
                     ItemId = item.Id
                 });
             }
 
+            primaryVersion.LinkedAlternateVersions = list.ToArray();
+
             await primaryVersion.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
         }
     }

+ 1 - 7
MediaBrowser.Controller/Chapters/IChapterManager.cs

@@ -1,7 +1,5 @@
 using System.Collections.Generic;
-using System.Threading;
 using System.Threading.Tasks;
-using MediaBrowser.Model.Configuration;
 using MediaBrowser.Model.Entities;
 
 namespace MediaBrowser.Controller.Chapters
@@ -21,10 +19,6 @@ namespace MediaBrowser.Controller.Chapters
         /// <summary>
         /// Saves the chapters.
         /// </summary>
-        /// <param name="itemId">The item identifier.</param>
-        /// <param name="chapters">The chapters.</param>
-        /// <param name="cancellationToken">The cancellation token.</param>
-        /// <returns>Task.</returns>
-        Task SaveChapters(string itemId, List<ChapterInfo> chapters, CancellationToken cancellationToken);
+        Task SaveChapters(string itemId, List<ChapterInfo> chapters);
     }
 }

+ 2 - 2
MediaBrowser.Controller/Entities/Audio/Audio.cs

@@ -32,7 +32,7 @@ namespace MediaBrowser.Controller.Entities.Audio
         public List<string> Artists { get; set; }
 
         [IgnoreDataMember]
-        public List<string> AlbumArtists { get; set; }
+        public string[] AlbumArtists { get; set; }
 
         [IgnoreDataMember]
         public override bool EnableRefreshOnDateModifiedChange
@@ -43,7 +43,7 @@ namespace MediaBrowser.Controller.Entities.Audio
         public Audio()
         {
             Artists = new List<string>();
-            AlbumArtists = new List<string>();
+            AlbumArtists = EmptyStringArray;
         }
 
         public override double? GetDefaultPrimaryImageAspectRatio()

+ 1 - 1
MediaBrowser.Controller/Entities/Audio/IHasAlbumArtist.cs

@@ -5,7 +5,7 @@ namespace MediaBrowser.Controller.Entities.Audio
 {
     public interface IHasAlbumArtist
     {
-        List<string> AlbumArtists { get; set; }
+        string[] AlbumArtists { get; set; }
     }
 
     public interface IHasArtist

+ 2 - 2
MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs

@@ -19,13 +19,13 @@ namespace MediaBrowser.Controller.Entities.Audio
     /// </summary>
     public class MusicAlbum : Folder, IHasAlbumArtist, IHasArtist, IHasMusicGenres, IHasLookupInfo<AlbumInfo>, IMetadataContainer
     {
-        public List<string> AlbumArtists { get; set; }
+        public string[] AlbumArtists { get; set; }
         public List<string> Artists { get; set; }
 
         public MusicAlbum()
         {
             Artists = new List<string>();
-            AlbumArtists = new List<string>();
+            AlbumArtists = EmptyStringArray;
         }
 
         [IgnoreDataMember]

+ 3 - 1
MediaBrowser.Controller/Entities/BaseItem.cs

@@ -44,7 +44,9 @@ namespace MediaBrowser.Controller.Entities
         protected static Guid[] EmptyGuidArray = new Guid[] { };
         protected static MetadataFields[] EmptyMetadataFieldsArray = new MetadataFields[] { };
         protected static string[] EmptyStringArray = new string[] { };
+        protected static MediaUrl[] EmptyMediaUrlArray = new MediaUrl[] { };
         protected static ItemImageInfo[] EmptyItemImageInfoArray = new ItemImageInfo[] { };
+        public static readonly LinkedChild[] EmptyLinkedChildArray = new LinkedChild[] { };
 
         protected BaseItem()
         {
@@ -1169,7 +1171,7 @@ namespace MediaBrowser.Controller.Entities
         {
             var newItems = LibraryManager.FindTrailers(this, fileSystemChildren, options.DirectoryService).ToList();
 
-            var newItemIds = newItems.Select(i => i.Id).ToList();
+            var newItemIds = newItems.Select(i => i.Id).ToArray();
 
             var itemsChanged = !item.LocalTrailerIds.SequenceEqual(newItemIds);
 

+ 1 - 1
MediaBrowser.Controller/Entities/CollectionFolder.cs

@@ -249,7 +249,7 @@ namespace MediaBrowser.Controller.Entities
 
             var changed = !linkedChildren.SequenceEqual(LinkedChildren, new LinkedChildComparer(FileSystem));
 
-            LinkedChildren = linkedChildren;
+            LinkedChildren = linkedChildren.ToArray(linkedChildren.Count);
 
             var folderIds = PhysicalFolderIds.ToList();
             var newFolderIds = physicalFolders.Select(i => i.Id).ToList();

+ 16 - 7
MediaBrowser.Controller/Entities/Extensions.cs

@@ -1,6 +1,7 @@
 using MediaBrowser.Model.Entities;
 using System;
 using System.Linq;
+using MediaBrowser.Model.Extensions;
 
 namespace MediaBrowser.Controller.Entities
 {
@@ -12,11 +13,7 @@ namespace MediaBrowser.Controller.Entities
         /// <summary>
         /// Adds the trailer URL.
         /// </summary>
-        /// <param name="item">The item.</param>
-        /// <param name="url">The URL.</param>
-        /// <param name="isDirectLink">if set to <c>true</c> [is direct link].</param>
-        /// <exception cref="System.ArgumentNullException">url</exception>
-        public static void AddTrailerUrl(this IHasTrailers item, string url, bool isDirectLink)
+        public static void AddTrailerUrl(this IHasTrailers item, string url)
         {
             if (string.IsNullOrWhiteSpace(url))
             {
@@ -27,10 +24,22 @@ namespace MediaBrowser.Controller.Entities
 
             if (current == null)
             {
-                item.RemoteTrailers.Add(new MediaUrl
+                var mediaUrl = new MediaUrl
                 {
                     Url = url
-                });
+                };
+
+                if (item.RemoteTrailers.Length == 0)
+                {
+                    item.RemoteTrailers = new[] { mediaUrl };
+                }
+                else
+                {
+                    var list = item.RemoteTrailers.ToArray(item.RemoteTrailers.Length + 1);
+                    list[list.Length - 1] = mediaUrl;
+
+                    item.RemoteTrailers = list;
+                }
             }
         }
     }

+ 15 - 19
MediaBrowser.Controller/Entities/Folder.cs

@@ -38,14 +38,14 @@ namespace MediaBrowser.Controller.Entities
         /// <value><c>true</c> if this instance is root; otherwise, <c>false</c>.</value>
         public bool IsRoot { get; set; }
 
-        public virtual List<LinkedChild> LinkedChildren { get; set; }
+        public LinkedChild[] LinkedChildren { get; set; }
 
         [IgnoreDataMember]
         public DateTime? DateLastMediaAdded { get; set; }
 
         public Folder()
         {
-            LinkedChildren = new List<LinkedChild>();
+            LinkedChildren = EmptyLinkedChildArray;
         }
 
         [IgnoreDataMember]
@@ -707,7 +707,7 @@ namespace MediaBrowser.Controller.Entities
 
         public virtual int GetChildCount(User user)
         {
-            if (LinkedChildren.Count > 0)
+            if (LinkedChildren.Length > 0)
             {
                 if (!(this is ICollectionFolder))
                 {
@@ -844,7 +844,7 @@ namespace MediaBrowser.Controller.Entities
 
         private bool RequiresPostFiltering(InternalItemsQuery query)
         {
-            if (LinkedChildren.Count > 0)
+            if (LinkedChildren.Length > 0)
             {
                 if (!(this is ICollectionFolder))
                 {
@@ -1225,7 +1225,7 @@ namespace MediaBrowser.Controller.Entities
                 return GetLinkedChildren();
             }
 
-            if (LinkedChildren.Count == 0)
+            if (LinkedChildren.Length == 0)
             {
                 return new List<BaseItem>();
             }
@@ -1314,14 +1314,9 @@ namespace MediaBrowser.Controller.Entities
         /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns>
         protected virtual bool RefreshLinkedChildren(IEnumerable<FileSystemMetadata> fileSystemChildren)
         {
-            var currentManualLinks = LinkedChildren.Where(i => i.Type == LinkedChildType.Manual).ToList();
-            var currentShortcutLinks = LinkedChildren.Where(i => i.Type == LinkedChildType.Shortcut).ToList();
-
-            List<LinkedChild> newShortcutLinks;
-
             if (SupportsShortcutChildren)
             {
-                newShortcutLinks = fileSystemChildren
+                var newShortcutLinks = fileSystemChildren
                     .Where(i => !i.IsDirectory && FileSystem.IsShortcut(i.FullName))
                     .Select(i =>
                     {
@@ -1352,16 +1347,17 @@ namespace MediaBrowser.Controller.Entities
                     })
                     .Where(i => i != null)
                     .ToList();
-            }
-            else { newShortcutLinks = new List<LinkedChild>(); }
 
-            if (!newShortcutLinks.SequenceEqual(currentShortcutLinks, new LinkedChildComparer(FileSystem)))
-            {
-                Logger.Info("Shortcut links have changed for {0}", Path);
+                var currentShortcutLinks = LinkedChildren.Where(i => i.Type == LinkedChildType.Shortcut).ToList();
 
-                newShortcutLinks.AddRange(currentManualLinks);
-                LinkedChildren = newShortcutLinks;
-                return true;
+                if (!newShortcutLinks.SequenceEqual(currentShortcutLinks, new LinkedChildComparer(FileSystem)))
+                {
+                    Logger.Info("Shortcut links have changed for {0}", Path);
+
+                    newShortcutLinks.AddRange(LinkedChildren.Where(i => i.Type == LinkedChildType.Manual));
+                    LinkedChildren = newShortcutLinks.ToArray(newShortcutLinks.Count);
+                    return true;
+                }
             }
 
             foreach (var child in LinkedChildren)

+ 6 - 17
MediaBrowser.Controller/Entities/Game.cs

@@ -14,13 +14,13 @@ namespace MediaBrowser.Controller.Entities
         public Game()
         {
             MultiPartGameFiles = EmptyStringArray;
-            RemoteTrailers = new List<MediaUrl>();
-            LocalTrailerIds = new List<Guid>();
-            RemoteTrailerIds = new List<Guid>();
+            RemoteTrailers = EmptyMediaUrlArray;
+            LocalTrailerIds = EmptyGuidArray;
+            RemoteTrailerIds = EmptyGuidArray;
         }
 
-        public List<Guid> LocalTrailerIds { get; set; }
-        public List<Guid> RemoteTrailerIds { get; set; }
+        public Guid[] LocalTrailerIds { get; set; }
+        public Guid[] RemoteTrailerIds { get; set; }
 
         public override bool CanDownload()
         {
@@ -45,7 +45,7 @@ namespace MediaBrowser.Controller.Entities
         /// Gets or sets the remote trailers.
         /// </summary>
         /// <value>The remote trailers.</value>
-        public List<MediaUrl> RemoteTrailers { get; set; }
+        public MediaUrl[] RemoteTrailers { get; set; }
 
         /// <summary>
         /// Gets the type of the media.
@@ -127,16 +127,5 @@ namespace MediaBrowser.Controller.Entities
 
             return id;
         }
-
-        /// <summary>
-        /// Gets the trailer ids.
-        /// </summary>
-        /// <returns>List&lt;Guid&gt;.</returns>
-        public List<Guid> GetTrailerIds()
-        {
-            var list = LocalTrailerIds.ToList();
-            list.AddRange(RemoteTrailerIds);
-            return list;
-        }
     }
 }

+ 3 - 3
MediaBrowser.Controller/Entities/IHasTrailers.cs

@@ -11,14 +11,14 @@ namespace MediaBrowser.Controller.Entities
         /// Gets or sets the remote trailers.
         /// </summary>
         /// <value>The remote trailers.</value>
-        List<MediaUrl> RemoteTrailers { get; set; }
+        MediaUrl[] RemoteTrailers { get; set; }
 
         /// <summary>
         /// Gets or sets the local trailer ids.
         /// </summary>
         /// <value>The local trailer ids.</value>
-        List<Guid> LocalTrailerIds { get; set; }
-        List<Guid> RemoteTrailerIds { get; set; }
+        Guid[] LocalTrailerIds { get; set; }
+        Guid[] RemoteTrailerIds { get; set; }
     }
 
     public static class HasTrailerExtensions

+ 6 - 17
MediaBrowser.Controller/Entities/Movies/BoxSet.cs

@@ -21,9 +21,9 @@ namespace MediaBrowser.Controller.Entities.Movies
 
         public BoxSet()
         {
-            RemoteTrailers = new List<MediaUrl>();
-            LocalTrailerIds = new List<Guid>();
-            RemoteTrailerIds = new List<Guid>();
+            RemoteTrailers = EmptyMediaUrlArray;
+            LocalTrailerIds = EmptyGuidArray;
+            RemoteTrailerIds = EmptyGuidArray;
 
             DisplayOrder = ItemSortBy.PremiereDate;
             Shares = new List<Share>();
@@ -47,14 +47,14 @@ namespace MediaBrowser.Controller.Entities.Movies
             }
         }
 
-        public List<Guid> LocalTrailerIds { get; set; }
-        public List<Guid> RemoteTrailerIds { get; set; }
+        public Guid[] LocalTrailerIds { get; set; }
+        public Guid[] RemoteTrailerIds { get; set; }
 
         /// <summary>
         /// Gets or sets the remote trailers.
         /// </summary>
         /// <value>The remote trailers.</value>
-        public List<MediaUrl> RemoteTrailers { get; set; }
+        public MediaUrl[] RemoteTrailers { get; set; }
 
         /// <summary>
         /// Gets or sets the display order.
@@ -147,17 +147,6 @@ namespace MediaBrowser.Controller.Entities.Movies
             return true;
         }
 
-        /// <summary>
-        /// Gets the trailer ids.
-        /// </summary>
-        /// <returns>List&lt;Guid&gt;.</returns>
-        public List<Guid> GetTrailerIds()
-        {
-            var list = LocalTrailerIds.ToList();
-            list.AddRange(RemoteTrailerIds);
-            return list;
-        }
-
         /// <summary>
         /// Updates the official rating based on content and returns true or false indicating if it changed.
         /// </summary>

+ 6 - 6
MediaBrowser.Controller/Entities/Movies/Movie.cs

@@ -24,15 +24,15 @@ namespace MediaBrowser.Controller.Entities.Movies
         public Movie()
         {
             SpecialFeatureIds = new List<Guid>();
-            RemoteTrailers = new List<MediaUrl>();
-            LocalTrailerIds = new List<Guid>();
-            RemoteTrailerIds = new List<Guid>();
+            RemoteTrailers = EmptyMediaUrlArray;
+            LocalTrailerIds = EmptyGuidArray;
+            RemoteTrailerIds = EmptyGuidArray;
         }
 
-        public List<Guid> LocalTrailerIds { get; set; }
-        public List<Guid> RemoteTrailerIds { get; set; }
+        public Guid[] LocalTrailerIds { get; set; }
+        public Guid[] RemoteTrailerIds { get; set; }
 
-        public List<MediaUrl> RemoteTrailers { get; set; }
+        public MediaUrl[] RemoteTrailers { get; set; }
 
         /// <summary>
         /// Gets or sets the name of the TMDB collection.

+ 6 - 6
MediaBrowser.Controller/Entities/TV/Episode.cs

@@ -17,14 +17,14 @@ namespace MediaBrowser.Controller.Entities.TV
     {
         public Episode()
         {
-            RemoteTrailers = new List<MediaUrl>();
-            LocalTrailerIds = new List<Guid>();
-            RemoteTrailerIds = new List<Guid>();
+            RemoteTrailers = EmptyMediaUrlArray;
+            LocalTrailerIds = EmptyGuidArray;
+            RemoteTrailerIds = EmptyGuidArray;
         }
 
-        public List<Guid> LocalTrailerIds { get; set; }
-        public List<Guid> RemoteTrailerIds { get; set; }
-        public List<MediaUrl> RemoteTrailers { get; set; }
+        public Guid[] LocalTrailerIds { get; set; }
+        public Guid[] RemoteTrailerIds { get; set; }
+        public MediaUrl[] RemoteTrailers { get; set; }
 
         /// <summary>
         /// Gets the season in which it aired.

+ 6 - 17
MediaBrowser.Controller/Entities/TV/Series.cs

@@ -24,9 +24,9 @@ namespace MediaBrowser.Controller.Entities.TV
         {
             AirDays = new List<DayOfWeek>();
 
-            RemoteTrailers = new List<MediaUrl>();
-            LocalTrailerIds = new List<Guid>();
-            RemoteTrailerIds = new List<Guid>();
+            RemoteTrailers = EmptyMediaUrlArray;
+            LocalTrailerIds = EmptyGuidArray;
+            RemoteTrailerIds = EmptyGuidArray;
         }
 
         [IgnoreDataMember]
@@ -62,10 +62,10 @@ namespace MediaBrowser.Controller.Entities.TV
             }
         }
 
-        public List<Guid> LocalTrailerIds { get; set; }
-        public List<Guid> RemoteTrailerIds { get; set; }
+        public Guid[] LocalTrailerIds { get; set; }
+        public Guid[] RemoteTrailerIds { get; set; }
 
-        public List<MediaUrl> RemoteTrailers { get; set; }
+        public MediaUrl[] RemoteTrailers { get; set; }
 
         /// <summary>
         /// airdate, dvd or absolute
@@ -225,17 +225,6 @@ namespace MediaBrowser.Controller.Entities.TV
             return list;
         }
 
-        /// <summary>
-        /// Gets the trailer ids.
-        /// </summary>
-        /// <returns>List&lt;Guid&gt;.</returns>
-        public List<Guid> GetTrailerIds()
-        {
-            var list = LocalTrailerIds.ToList();
-            list.AddRange(RemoteTrailerIds);
-            return list;
-        }
-
         [IgnoreDataMember]
         public bool ContainsEpisodesWithoutSeasonFolders
         {

+ 11 - 11
MediaBrowser.Controller/Entities/Video.cs

@@ -31,9 +31,9 @@ namespace MediaBrowser.Controller.Entities
         [IgnoreDataMember]
         public string PrimaryVersionId { get; set; }
 
-        public List<string> AdditionalParts { get; set; }
-        public List<string> LocalAlternateVersions { get; set; }
-        public List<LinkedChild> LinkedAlternateVersions { get; set; }
+        public string[] AdditionalParts { get; set; }
+        public string[] LocalAlternateVersions { get; set; }
+        public LinkedChild[] LinkedAlternateVersions { get; set; }
 
         [IgnoreDataMember]
         public override bool SupportsPlayedStatus
@@ -119,7 +119,7 @@ namespace MediaBrowser.Controller.Entities
         /// Gets or sets the subtitle paths.
         /// </summary>
         /// <value>The subtitle paths.</value>
-        public List<string> SubtitleFiles { get; set; }
+        public string[] SubtitleFiles { get; set; }
 
         /// <summary>
         /// Gets or sets a value indicating whether this instance has subtitles.
@@ -177,10 +177,10 @@ namespace MediaBrowser.Controller.Entities
 
         public Video()
         {
-            AdditionalParts = new List<string>();
-            LocalAlternateVersions = new List<string>();
-            SubtitleFiles = new List<string>();
-            LinkedAlternateVersions = new List<LinkedChild>();
+            AdditionalParts = EmptyStringArray;
+            LocalAlternateVersions = EmptyStringArray;
+            SubtitleFiles = EmptyStringArray;
+            LinkedAlternateVersions = EmptyLinkedChildArray;
         }
 
         public override bool CanDownload()
@@ -214,20 +214,20 @@ namespace MediaBrowser.Controller.Entities
                         return item.MediaSourceCount;
                     }
                 }
-                return LinkedAlternateVersions.Count + LocalAlternateVersions.Count + 1;
+                return LinkedAlternateVersions.Length + LocalAlternateVersions.Length + 1;
             }
         }
 
         [IgnoreDataMember]
         public bool IsStacked
         {
-            get { return AdditionalParts.Count > 0; }
+            get { return AdditionalParts.Length > 0; }
         }
 
         [IgnoreDataMember]
         public bool HasLocalAlternateVersions
         {
-            get { return LocalAlternateVersions.Count > 0; }
+            get { return LocalAlternateVersions.Length > 0; }
         }
 
         public IEnumerable<Guid> GetAdditionalPartIds()

+ 0 - 1
MediaBrowser.Controller/MediaBrowser.Controller.csproj

@@ -166,7 +166,6 @@
     <Compile Include="LiveTv\TimerEventInfo.cs" />
     <Compile Include="LiveTv\TimerInfo.cs" />
     <Compile Include="LiveTv\TunerChannelMapping.cs" />
-    <Compile Include="MediaEncoding\ChapterImageRefreshOptions.cs" />
     <Compile Include="MediaEncoding\EncodingHelper.cs" />
     <Compile Include="MediaEncoding\EncodingJobInfo.cs" />
     <Compile Include="MediaEncoding\EncodingJobOptions.cs" />

+ 0 - 17
MediaBrowser.Controller/MediaEncoding/ChapterImageRefreshOptions.cs

@@ -1,17 +0,0 @@
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Model.Entities;
-using System.Collections.Generic;
-
-namespace MediaBrowser.Controller.MediaEncoding
-{
-    public class ChapterImageRefreshOptions
-    {
-        public Video Video { get; set; }
-
-        public List<ChapterInfo> Chapters { get; set; }
-
-        public bool SaveChapters { get; set; }
-
-        public bool ExtractImages { get; set; }
-    }
-}

+ 0 - 20
MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs

@@ -1622,26 +1622,6 @@ namespace MediaBrowser.Controller.MediaEncoding
                         inputModifier += " -f " + inputFormat;
                     }
                 }
-
-                // Only do this for video files due to sometimes unpredictable codec names coming from BDInfo
-                if (state.VideoType == VideoType.VideoFile && state.RunTimeTicks.HasValue && string.IsNullOrWhiteSpace(encodingOptions.HardwareAccelerationType))
-                {
-                    foreach (var stream in state.MediaSource.MediaStreams)
-                    {
-                        if (!stream.IsExternal && stream.Type != MediaStreamType.Subtitle)
-                        {
-                            if (!string.IsNullOrWhiteSpace(stream.Codec) && stream.Index != -1)
-                            {
-                                var decoder = GetDecoderFromCodec(stream.Codec);
-
-                                if (!string.IsNullOrWhiteSpace(decoder))
-                                {
-                                    inputModifier += " -codec:" + stream.Index.ToString(_usCulture) + " " + decoder;
-                                }
-                            }
-                        }
-                    }
-                }
             }
 
             if (state.MediaSource.RequiresLooping)

+ 5 - 5
MediaBrowser.Controller/MediaEncoding/IEncodingManager.cs

@@ -1,5 +1,8 @@
-using System.Threading;
+using System.Collections.Generic;
+using System.Threading;
 using System.Threading.Tasks;
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Model.Entities;
 
 namespace MediaBrowser.Controller.MediaEncoding
 {
@@ -8,9 +11,6 @@ namespace MediaBrowser.Controller.MediaEncoding
         /// <summary>
         /// Refreshes the chapter images.
         /// </summary>
-        /// <param name="options">The options.</param>
-        /// <param name="cancellationToken">The cancellation token.</param>
-        /// <returns>Task{System.Boolean}.</returns>
-        Task<bool> RefreshChapterImages(ChapterImageRefreshOptions options, CancellationToken cancellationToken);
+        Task<bool> RefreshChapterImages(Video video, List<ChapterInfo> chapters, bool extractImages, bool saveChapters, CancellationToken cancellationToken);
     }
 }

+ 2 - 6
MediaBrowser.Controller/Persistence/IItemRepository.cs

@@ -65,7 +65,7 @@ namespace MediaBrowser.Controller.Persistence
         /// </summary>
         /// <param name="id"></param>
         /// <returns></returns>
-        IEnumerable<ChapterInfo> GetChapters(Guid id);
+        List<ChapterInfo> GetChapters(Guid id);
 
         /// <summary>
         /// Gets a single chapter for an item
@@ -78,11 +78,7 @@ namespace MediaBrowser.Controller.Persistence
         /// <summary>
         /// Saves the chapters.
         /// </summary>
-        /// <param name="id">The id.</param>
-        /// <param name="chapters">The chapters.</param>
-        /// <param name="cancellationToken">The cancellation token.</param>
-        /// <returns>Task.</returns>
-        Task SaveChapters(Guid id, List<ChapterInfo> chapters, CancellationToken cancellationToken);
+        Task SaveChapters(Guid id, List<ChapterInfo> chapters);
 
         /// <summary>
         /// Gets the media streams.

+ 3 - 3
MediaBrowser.Controller/Playlists/Playlist.cs

@@ -105,7 +105,7 @@ namespace MediaBrowser.Controller.Playlists
 
             if (query != null)
             {
-                items = items.Where(i => UserViewBuilder.FilterItem(i, query));
+                items = items.Where(i => UserViewBuilder.FilterItem(i, query)).ToList();
             }
 
             return items;
@@ -116,12 +116,12 @@ namespace MediaBrowser.Controller.Playlists
             return GetLinkedChildrenInfos();
         }
 
-        private IEnumerable<BaseItem> GetPlayableItems(User user, DtoOptions options)
+        private List<BaseItem> GetPlayableItems(User user, DtoOptions options)
         {
             return GetPlaylistItems(MediaType, base.GetChildren(user, true), user, options);
         }
 
-        public static IEnumerable<BaseItem> GetPlaylistItems(string playlistMediaType, IEnumerable<BaseItem> inputItems, User user, DtoOptions options)
+        public static List<BaseItem> GetPlaylistItems(string playlistMediaType, IEnumerable<BaseItem> inputItems, User user, DtoOptions options)
         {
             if (user != null)
             {

+ 2 - 2
MediaBrowser.Controller/Providers/AlbumInfo.cs

@@ -9,7 +9,7 @@ namespace MediaBrowser.Controller.Providers
         /// Gets or sets the album artist.
         /// </summary>
         /// <value>The album artist.</value>
-        public List<string> AlbumArtists { get; set; }
+        public string[] AlbumArtists { get; set; }
 
         /// <summary>
         /// Gets or sets the artist provider ids.
@@ -22,7 +22,7 @@ namespace MediaBrowser.Controller.Providers
         {
             ArtistProviderIds = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
             SongInfos = new List<SongInfo>();
-            AlbumArtists = new List<string>();
+            AlbumArtists = EmptyStringArray;
         }
     }
 }

+ 2 - 0
MediaBrowser.Controller/Providers/ItemLookupInfo.cs

@@ -6,6 +6,8 @@ namespace MediaBrowser.Controller.Providers
 {
     public class ItemLookupInfo : IHasProviderIds
     {
+        protected static string[] EmptyStringArray = new string[] { };
+        
         /// <summary>
         /// Gets or sets the name.
         /// </summary>

+ 2 - 2
MediaBrowser.Controller/Providers/SongInfo.cs

@@ -4,14 +4,14 @@ namespace MediaBrowser.Controller.Providers
 {
     public class SongInfo : ItemLookupInfo
     {
-        public List<string> AlbumArtists { get; set; }
+        public string[] AlbumArtists { get; set; }
         public string Album { get; set; }
         public List<string> Artists { get; set; }
 
         public SongInfo()
         {
             Artists = new List<string>();
-            AlbumArtists = new List<string>();
+            AlbumArtists = EmptyStringArray;
         }
     }
 }

+ 2 - 2
MediaBrowser.LocalMetadata/Parsers/BaseItemXmlParser.cs

@@ -467,7 +467,7 @@ namespace MediaBrowser.LocalMetadata.Parsers
                         {
                             if (!string.IsNullOrWhiteSpace(val))
                             {
-                                hasTrailers.AddTrailerUrl(val, false);
+                                hasTrailers.AddTrailerUrl(val);
                             }
                         }
                         break;
@@ -1030,7 +1030,7 @@ namespace MediaBrowser.LocalMetadata.Parsers
 
                                 if (!string.IsNullOrWhiteSpace(val))
                                 {
-                                    item.AddTrailerUrl(val, false);
+                                    item.AddTrailerUrl(val);
                                 }
                                 break;
                             }

+ 2 - 1
MediaBrowser.LocalMetadata/Parsers/BoxSetXmlParser.cs

@@ -6,6 +6,7 @@ using System.Collections.Generic;
 using System.Xml;
 using MediaBrowser.Model.IO;
 using MediaBrowser.Model.Xml;
+using MediaBrowser.Model.Extensions;
 
 namespace MediaBrowser.LocalMetadata.Parsers
 {
@@ -84,7 +85,7 @@ namespace MediaBrowser.LocalMetadata.Parsers
                 }
             }
 
-            item.Item.LinkedChildren = list;
+            item.Item.LinkedChildren = list.ToArray(list.Count);
         }
 
         public BoxSetXmlParser(ILogger logger, IProviderManager providerManager, IXmlReaderSettingsFactory xmlReaderSettingsFactory, IFileSystem fileSystem) : base(logger, providerManager, xmlReaderSettingsFactory, fileSystem)

+ 2 - 1
MediaBrowser.LocalMetadata/Parsers/PlaylistXmlParser.cs

@@ -8,6 +8,7 @@ using System.Linq;
 using System.Xml;
 using MediaBrowser.Model.IO;
 using MediaBrowser.Model.Xml;
+using MediaBrowser.Model.Extensions;
 
 namespace MediaBrowser.LocalMetadata.Parsers
 {
@@ -124,7 +125,7 @@ namespace MediaBrowser.LocalMetadata.Parsers
                 }
             }
 
-            item.LinkedChildren = list;
+            item.LinkedChildren = list.ToArray(list.Count);
         }
 
         private void FetchFromSharesNode(XmlReader reader, Playlist item)

+ 1 - 1
MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs

@@ -364,7 +364,7 @@ namespace MediaBrowser.LocalMetadata.Savers
             var hasTrailers = item as IHasTrailers;
             if (hasTrailers != null)
             {
-                if (hasTrailers.RemoteTrailers.Count > 0)
+                if (hasTrailers.RemoteTrailers.Length > 0)
                 {
                     writer.WriteStartElement("Trailers");
 

+ 2 - 2
MediaBrowser.Model/Dto/BaseItemDto.cs

@@ -298,7 +298,7 @@ namespace MediaBrowser.Model.Dto
         /// Gets or sets the trailer urls.
         /// </summary>
         /// <value>The trailer urls.</value>
-        public List<MediaUrl> RemoteTrailers { get; set; }
+        public MediaUrl[] RemoteTrailers { get; set; }
 
         /// <summary>
         /// Gets or sets the provider ids.
@@ -503,7 +503,7 @@ namespace MediaBrowser.Model.Dto
         /// Gets or sets the album artists.
         /// </summary>
         /// <value>The album artists.</value>
-        public List<NameIdPair> AlbumArtists { get; set; }
+        public NameIdPair[] AlbumArtists { get; set; }
 
         /// <summary>
         /// Gets or sets the name of the season.

+ 4 - 2
MediaBrowser.Model/MediaInfo/MediaInfo.cs

@@ -7,6 +7,8 @@ namespace MediaBrowser.Model.MediaInfo
 {
     public class MediaInfo : MediaSourceInfo, IHasProviderIds
     {
+        private static readonly string[] EmptyStringArray = new string[] { };
+
         public List<ChapterInfo> Chapters { get; set; }
 
         /// <summary>
@@ -23,7 +25,7 @@ namespace MediaBrowser.Model.MediaInfo
         /// Gets or sets the album artists.
         /// </summary>
         /// <value>The album artists.</value>
-        public List<string> AlbumArtists { get; set; }
+        public string[] AlbumArtists { get; set; }
         /// <summary>
         /// Gets or sets the studios.
         /// </summary>
@@ -56,7 +58,7 @@ namespace MediaBrowser.Model.MediaInfo
         {
             Chapters = new List<ChapterInfo>();
             Artists = new List<string>();
-            AlbumArtists = new List<string>();
+            AlbumArtists = EmptyStringArray;
             Studios = new List<string>();
             Genres = new List<string>();
             People = new List<BaseItemPerson>();

+ 2 - 5
MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs

@@ -6,12 +6,9 @@ using MediaBrowser.Controller.Providers;
 using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.Logging;
 using MediaBrowser.Providers.Manager;
-using System.Collections.Generic;
 using System.Linq;
-using System.Threading.Tasks;
-
-using MediaBrowser.Controller.IO;
 using MediaBrowser.Model.IO;
+using MediaBrowser.Model.Extensions;
 
 namespace MediaBrowser.Providers.BoxSets
 {
@@ -48,7 +45,7 @@ namespace MediaBrowser.Providers.BoxSets
                 var linkedChildren = sourceItem.LinkedChildren.ToList();
                 linkedChildren.AddRange(sourceItem.LinkedChildren.Where(i => i.Type == LinkedChildType.Shortcut));
 
-                targetItem.LinkedChildren = linkedChildren;
+                targetItem.LinkedChildren = linkedChildren.ToArray(linkedChildren.Count);
                 targetItem.Shares = sourceItem.Shares;
             }
         }

+ 2 - 2
MediaBrowser.Providers/Chapters/ChapterManager.cs

@@ -39,9 +39,9 @@ namespace MediaBrowser.Providers.Chapters
             return _itemRepo.GetChapters(new Guid(itemId));
         }
 
-        public Task SaveChapters(string itemId, List<ChapterInfo> chapters, CancellationToken cancellationToken)
+        public Task SaveChapters(string itemId, List<ChapterInfo> chapters)
         {
-            return _itemRepo.SaveChapters(new Guid(itemId), chapters, cancellationToken);
+            return _itemRepo.SaveChapters(new Guid(itemId), chapters);
         }
     }
 }

+ 2 - 2
MediaBrowser.Providers/Manager/ProviderUtils.cs

@@ -284,7 +284,7 @@ namespace MediaBrowser.Providers.Manager
 
             if (sourceHasAlbumArtist != null && targetHasAlbumArtist != null)
             {
-                if (replaceData || targetHasAlbumArtist.AlbumArtists.Count == 0)
+                if (replaceData || targetHasAlbumArtist.AlbumArtists.Length == 0)
                 {
                     targetHasAlbumArtist.AlbumArtists = sourceHasAlbumArtist.AlbumArtists;
                 }
@@ -306,7 +306,7 @@ namespace MediaBrowser.Providers.Manager
 
             if (sourceCast != null && targetCast != null)
             {
-                if (replaceData || targetCast.RemoteTrailers.Count == 0)
+                if (replaceData || targetCast.RemoteTrailers.Length == 0)
                 {
                     targetCast.RemoteTrailers = sourceCast.RemoteTrailers;
                 }

+ 3 - 10
MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs

@@ -234,16 +234,9 @@ namespace MediaBrowser.Providers.MediaInfo
                     extractDuringScan = libraryOptions.ExtractChapterImagesDuringLibraryScan;
                 }
 
-                await _encodingManager.RefreshChapterImages(new ChapterImageRefreshOptions
-                {
-                    Chapters = chapters,
-                    Video = video,
-                    ExtractImages = extractDuringScan,
-                    SaveChapters = false
-
-                }, cancellationToken).ConfigureAwait(false);
+                await _encodingManager.RefreshChapterImages(video, chapters, extractDuringScan, false, cancellationToken).ConfigureAwait(false);
 
-                await _chapterManager.SaveChapters(video.Id.ToString(), chapters, cancellationToken).ConfigureAwait(false);
+                await _chapterManager.SaveChapters(video.Id.ToString(), chapters).ConfigureAwait(false);
             }
         }
 
@@ -513,7 +506,7 @@ namespace MediaBrowser.Providers.MediaInfo
                 }
             }
 
-            video.SubtitleFiles = externalSubtitleStreams.Select(i => i.Path).OrderBy(i => i).ToList();
+            video.SubtitleFiles = externalSubtitleStreams.Select(i => i.Path).OrderBy(i => i).ToArray();
 
             currentStreams.AddRange(externalSubtitleStreams);
         }

+ 1 - 1
MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs

@@ -318,7 +318,7 @@ namespace MediaBrowser.Providers.Movies
                         Url = string.Format("https://www.youtube.com/watch?v={0}", i.source),
                         Name = i.name
 
-                    }).ToList();
+                    }).ToArray();
                 }
             }
         }

+ 1 - 1
MediaBrowser.Providers/Music/AlbumMetadataService.cs

@@ -87,7 +87,7 @@ namespace MediaBrowser.Providers.Music
                 .SelectMany(i => i.AlbumArtists)
                 .Distinct(StringComparer.OrdinalIgnoreCase)
                 .OrderBy(i => i)
-                .ToList();
+                .ToArray();
 
             if (!item.AlbumArtists.SequenceEqual(artists, StringComparer.OrdinalIgnoreCase))
             {

+ 1 - 1
MediaBrowser.Providers/Music/AudioDbAlbumProvider.cs

@@ -74,7 +74,7 @@ namespace MediaBrowser.Providers.Music
         {
             if (!string.IsNullOrWhiteSpace(result.strArtist))
             {
-                item.AlbumArtists = new List<string> { result.strArtist };
+                item.AlbumArtists = new string[] { result.strArtist };
             }
 
             if (!string.IsNullOrEmpty(result.intYearReleased))

+ 1 - 1
MediaBrowser.Providers/TV/TheMovieDb/MovieDbEpisodeProvider.cs

@@ -134,7 +134,7 @@ namespace MediaBrowser.Providers.TV
                             if (video.site.Equals("youtube", System.StringComparison.OrdinalIgnoreCase))
                             {
                                 var videoUrl = string.Format("http://www.youtube.com/watch?v={0}", video.key);
-                                item.AddTrailerUrl(videoUrl, true);
+                                item.AddTrailerUrl(videoUrl);
                             }
                         }
                     }

+ 1 - 1
MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeriesProvider.cs

@@ -302,7 +302,7 @@ namespace MediaBrowser.Providers.TV
                         if (video.site.Equals("youtube", System.StringComparison.OrdinalIgnoreCase))
                         {
                             var videoUrl = string.Format("http://www.youtube.com/watch?v={0}", video.key);
-                            series.AddTrailerUrl(videoUrl, true);
+                            series.AddTrailerUrl(videoUrl);
                         }
                     }
                 }

+ 2 - 2
MediaBrowser.Server.Mac/Emby.Server.Mac.csproj

@@ -96,8 +96,8 @@
       <HintPath>..\packages\NLog.4.4.12\lib\net45\NLog.dll</HintPath>
       <Private>True</Private>
     </Reference>
-    <Reference Include="ServiceStack.Text, Version=4.5.12.0, Culture=neutral, processorArchitecture=MSIL">
-      <HintPath>..\packages\ServiceStack.Text.4.5.12\lib\net45\ServiceStack.Text.dll</HintPath>
+    <Reference Include="ServiceStack.Text, Version=4.5.8.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\ServiceStack.Text.4.5.8\lib\net45\ServiceStack.Text.dll</HintPath>
       <Private>True</Private>
     </Reference>
     <Reference Include="SharpCompress, Version=0.14.0.0, Culture=neutral, processorArchitecture=MSIL">

+ 3 - 2
MediaBrowser.Server.Mono/MediaBrowser.Server.Mono.csproj

@@ -54,8 +54,9 @@
     <Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
       <HintPath>..\packages\NLog.4.4.12\lib\net45\NLog.dll</HintPath>
     </Reference>
-    <Reference Include="ServiceStack.Text, Version=4.5.12.0, Culture=neutral, processorArchitecture=MSIL">
-      <HintPath>..\packages\ServiceStack.Text.4.5.12\lib\net45\ServiceStack.Text.dll</HintPath>
+    <Reference Include="ServiceStack.Text, Version=4.5.8.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\ServiceStack.Text.4.5.8\lib\net45\ServiceStack.Text.dll</HintPath>
+      <Private>True</Private>
     </Reference>
     <Reference Include="SharpCompress, Version=0.14.0.0, Culture=neutral, processorArchitecture=MSIL">
       <HintPath>..\packages\SharpCompress.0.14.0\lib\net45\SharpCompress.dll</HintPath>

+ 1 - 1
MediaBrowser.Server.Mono/packages.config

@@ -2,7 +2,7 @@
 <packages>
   <package id="Mono.Posix" version="4.0.0.0" targetFramework="net45" />
   <package id="NLog" version="4.4.12" targetFramework="net46" />
-  <package id="ServiceStack.Text" version="4.5.12" targetFramework="net46" />
+  <package id="ServiceStack.Text" version="4.5.8" targetFramework="net46" />
   <package id="SharpCompress" version="0.14.0" targetFramework="net46" />
   <package id="SimpleInjector" version="4.0.8" targetFramework="net46" />
   <package id="SkiaSharp" version="1.58.0" targetFramework="net46" />

+ 3 - 2
MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj

@@ -76,8 +76,9 @@
     <Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
       <HintPath>..\packages\NLog.4.4.12\lib\net45\NLog.dll</HintPath>
     </Reference>
-    <Reference Include="ServiceStack.Text, Version=4.5.12.0, Culture=neutral, processorArchitecture=MSIL">
-      <HintPath>..\packages\ServiceStack.Text.4.5.12\lib\net45\ServiceStack.Text.dll</HintPath>
+    <Reference Include="ServiceStack.Text, Version=4.5.8.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\ServiceStack.Text.4.5.8\lib\net45\ServiceStack.Text.dll</HintPath>
+      <Private>True</Private>
     </Reference>
     <Reference Include="SharpCompress, Version=0.14.0.0, Culture=neutral, processorArchitecture=MSIL">
       <HintPath>..\packages\SharpCompress.0.14.0\lib\net45\SharpCompress.dll</HintPath>

+ 1 - 1
MediaBrowser.ServerApplication/packages.config

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <packages>
   <package id="NLog" version="4.4.12" targetFramework="net462" />
-  <package id="ServiceStack.Text" version="4.5.12" targetFramework="net462" />
+  <package id="ServiceStack.Text" version="4.5.8" targetFramework="net462" />
   <package id="SharpCompress" version="0.14.0" targetFramework="net462" />
   <package id="SimpleInjector" version="4.0.8" targetFramework="net462" />
   <package id="SkiaSharp" version="1.58.0" targetFramework="net462" />

+ 1 - 1
MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs

@@ -599,7 +599,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
                             {
                                 val = val.Replace("plugin://plugin.video.youtube/?action=play_video&videoid=", "https://www.youtube.com/watch?v=", StringComparison.OrdinalIgnoreCase);
 
-                                hasTrailer.AddTrailerUrl(val, false);
+                                hasTrailer.AddTrailerUrl(val);
                             }
                         }
                         break;

+ 0 - 24
Nuget/MediaBrowser.Common.Internal.nuspec

@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
-    <metadata>
-        <id>MediaBrowser.Common.Internal</id>
-        <version>3.0.681</version>
-        <title>Emby.Common.Internal</title>
-        <authors>Luke</authors>
-        <owners>ebr,Luke,scottisafool</owners>
-        <projectUrl>https://github.com/MediaBrowser/Emby</projectUrl>
-        <iconUrl>http://www.mb3admin.com/images/mb3icons1-1.png</iconUrl>
-        <requireLicenseAcceptance>false</requireLicenseAcceptance>
-        <description>Contains common components shared by Emby Theater and Emby Server. Not intended for plugin developer consumption.</description>
-        <copyright>Copyright © Emby 2013</copyright>
-        <dependencies>
-            <dependency id="MediaBrowser.Common" version="3.0.680" />
-            <dependency id="NLog" version="4.3.8" />
-            <dependency id="SimpleInjector" version="3.2.2" />
-        </dependencies>
-    </metadata>
-    <files>
-        <file src="dlls\MediaBrowser.Common.Implementations.dll" target="lib\net45\MediaBrowser.Common.Implementations.dll" />
-        <file src="..\ThirdParty\ServiceStack.Text\ServiceStack.Text.dll" target="lib\net45\ServiceStack.Text.dll" />
-    </files>
-</package>

+ 1 - 1
Nuget/MediaBrowser.Common.nuspec

@@ -2,7 +2,7 @@
 <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
     <metadata>
         <id>MediaBrowser.Common</id>
-        <version>3.0.716</version>
+        <version>3.0.717</version>
         <title>Emby.Common</title>
         <authors>Emby Team</authors>
         <owners>ebr,Luke,scottisafool</owners>

+ 2 - 2
Nuget/MediaBrowser.Server.Core.nuspec

@@ -2,7 +2,7 @@
 <package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
     <metadata>
         <id>MediaBrowser.Server.Core</id>
-        <version>3.0.716</version>
+        <version>3.0.717</version>
         <title>Emby.Server.Core</title>
         <authors>Emby Team</authors>
         <owners>ebr,Luke,scottisafool</owners>
@@ -12,7 +12,7 @@
         <description>Contains core components required to build plugins for Emby Server.</description>
         <copyright>Copyright © Emby 2013</copyright>
         <dependencies>
-            <dependency id="MediaBrowser.Common" version="3.0.716" />
+            <dependency id="MediaBrowser.Common" version="3.0.717" />
         </dependencies>
     </metadata>
     <files>