浏览代码

consolidate internal interfaces

Luke Pulverenti 8 年之前
父节点
当前提交
3bf72b71b3
共有 28 个文件被更改,包括 113 次插入300 次删除
  1. 4 4
      Emby.Common.Implementations/IO/ManagedFileSystem.cs
  2. 17 34
      Emby.Drawing/ImageProcessor.cs
  3. 0 19
      MediaBrowser.Common/MediaBrowser.Common.xproj
  4. 2 3
      MediaBrowser.Controller/Entities/Audio/Audio.cs
  5. 10 0
      MediaBrowser.Controller/Entities/BaseItem.cs
  6. 0 8
      MediaBrowser.Controller/Entities/IHasOriginalTitle.cs
  7. 0 8
      MediaBrowser.Controller/Entities/IThemeMedia.cs
  8. 1 1
      MediaBrowser.Controller/Entities/Movies/Movie.cs
  9. 1 1
      MediaBrowser.Controller/Entities/TV/Series.cs
  10. 1 1
      MediaBrowser.Controller/Entities/Trailer.cs
  11. 2 9
      MediaBrowser.Controller/Entities/Video.cs
  12. 0 2
      MediaBrowser.Controller/MediaBrowser.Controller.csproj
  13. 0 19
      MediaBrowser.Controller/MediaBrowser.Controller.xproj
  14. 0 2
      MediaBrowser.LocalMetadata/BaseXmlProvider.cs
  15. 2 6
      MediaBrowser.LocalMetadata/Parsers/BaseItemXmlParser.cs
  16. 50 56
      MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs
  17. 2 0
      MediaBrowser.Model/Entities/BaseItemInfo.cs
  18. 0 19
      MediaBrowser.Model/MediaBrowser.Model.xproj
  19. 12 43
      MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs
  20. 0 1
      MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs
  21. 0 3
      MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs
  22. 2 4
      MediaBrowser.Server.Implementations/EntryPoints/ActivityLogEntryPoint.cs
  23. 1 2
      MediaBrowser.Server.Implementations/EntryPoints/Notifications/Notifications.cs
  24. 0 1
      MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj
  25. 2 1
      MediaBrowser.Server.Implementations/Session/SessionManager.cs
  26. 0 41
      MediaBrowser.Server.Implementations/Sorting/VideoBitRateComparer.cs
  27. 2 6
      MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs
  28. 2 6
      MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs

+ 4 - 4
Emby.Common.Implementations/IO/ManagedFileSystem.cs

@@ -408,13 +408,13 @@ namespace Emby.Common.Implementations.IO
             {
                 if (isHidden)
                 {
-                    FileAttributes attributes = File.GetAttributes(path);
-                    attributes = RemoveAttribute(attributes, FileAttributes.Hidden);
-                    File.SetAttributes(path, attributes);
+                    File.SetAttributes(path, File.GetAttributes(path) | FileAttributes.Hidden);
                 }
                 else
                 {
-                    File.SetAttributes(path, File.GetAttributes(path) | FileAttributes.Hidden);
+                    FileAttributes attributes = File.GetAttributes(path);
+                    attributes = RemoveAttribute(attributes, FileAttributes.Hidden);
+                    File.SetAttributes(path, attributes);
                 }
             }
         }

+ 17 - 34
Emby.Drawing/ImageProcessor.cs

@@ -780,40 +780,38 @@ namespace Emby.Drawing
             // All enhanced images are saved as png to allow transparency
             var enhancedImagePath = GetCachePath(EnhancedImageCachePath, cacheGuid + ".png");
 
-            var semaphore = GetLock(enhancedImagePath);
-
-            await semaphore.WaitAsync().ConfigureAwait(false);
-
             // Check again in case of contention
             if (_fileSystem.FileExists(enhancedImagePath))
             {
-                semaphore.Release();
                 return enhancedImagePath;
             }
 
-            var imageProcessingLockTaken = false;
+            _fileSystem.CreateDirectory(Path.GetDirectoryName(enhancedImagePath));
 
-            try
-            {
-                _fileSystem.CreateDirectory(Path.GetDirectoryName(enhancedImagePath));
+            var tmpPath = Path.Combine(_appPaths.TempDirectory, Path.ChangeExtension(Guid.NewGuid().ToString(), Path.GetExtension(enhancedImagePath)));
+            _fileSystem.CreateDirectory(Path.GetDirectoryName(tmpPath));
 
-                await _imageProcessingSemaphore.WaitAsync().ConfigureAwait(false);
+            await _imageProcessingSemaphore.WaitAsync().ConfigureAwait(false);
 
-                imageProcessingLockTaken = true;
+            try
+            {
+                await ExecuteImageEnhancers(supportedEnhancers, originalImagePath, tmpPath, item, imageType, imageIndex).ConfigureAwait(false);
 
-                await ExecuteImageEnhancers(supportedEnhancers, originalImagePath, enhancedImagePath, item, imageType, imageIndex).ConfigureAwait(false);
+                try
+                {
+                    File.Copy(tmpPath, enhancedImagePath, true);
+                }
+                catch
+                {
+                    
+                }
             }
             finally
             {
-                if (imageProcessingLockTaken)
-                {
-                    _imageProcessingSemaphore.Release();
-                }
-
-                semaphore.Release();
+                _imageProcessingSemaphore.Release();
             }
 
-            return enhancedImagePath;
+            return tmpPath;
         }
 
         /// <summary>
@@ -838,21 +836,6 @@ namespace Emby.Drawing
             }
         }
 
-        /// <summary>
-        /// The _semaphoreLocks
-        /// </summary>
-        private readonly ConcurrentDictionary<string, SemaphoreSlim> _semaphoreLocks = new ConcurrentDictionary<string, SemaphoreSlim>();
-
-        /// <summary>
-        /// Gets the lock.
-        /// </summary>
-        /// <param name="filename">The filename.</param>
-        /// <returns>System.Object.</returns>
-        private SemaphoreSlim GetLock(string filename)
-        {
-            return _semaphoreLocks.GetOrAdd(filename, key => new SemaphoreSlim(1, 1));
-        }
-
         /// <summary>
         /// Gets the cache path.
         /// </summary>

+ 0 - 19
MediaBrowser.Common/MediaBrowser.Common.xproj

@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="14.0.25420" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0.25420</VisualStudioVersion>
-    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
-  </PropertyGroup>
-  <Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.Props" Condition="'$(VSToolsPath)' != ''" />
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>7d5d3d18-3b43-43e6-a5a9-ac734430affd</ProjectGuid>
-    <RootNamespace>MediaBrowser.Common</RootNamespace>
-    <BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">.\obj</BaseIntermediateOutputPath>
-    <OutputPath Condition="'$(OutputPath)'=='' ">.\bin\</OutputPath>
-  </PropertyGroup>
-
-  <PropertyGroup>
-    <SchemaVersion>2.0</SchemaVersion>
-  </PropertyGroup>
-  <Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.targets" Condition="'$(VSToolsPath)' != ''" />
-</Project>

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

@@ -22,8 +22,7 @@ namespace MediaBrowser.Controller.Entities.Audio
         IHasArtist,
         IHasMusicGenres,
         IHasLookupInfo<SongInfo>,
-        IHasMediaSources,
-        IThemeMedia
+        IHasMediaSources
     {
         public List<ChannelMediaInfo> ChannelMediaSources { get; set; }
 
@@ -39,7 +38,7 @@ namespace MediaBrowser.Controller.Entities.Audio
         public List<string> AlbumArtists { get; set; }
 
         [IgnoreDataMember]
-        public bool IsThemeMedia
+        public override bool IsThemeMedia
         {
             get
             {

+ 10 - 0
MediaBrowser.Controller/Entities/BaseItem.cs

@@ -203,6 +203,16 @@ namespace MediaBrowser.Controller.Entities
             get { return PremiereDate.HasValue && PremiereDate.Value.ToLocalTime().Date >= DateTime.Now.Date; }
         }
 
+        [IgnoreDataMember]
+        public virtual bool IsThemeMedia
+        {
+            get
+            {
+                return false;
+            }
+        }
+
+        [IgnoreDataMember]
         public string OriginalTitle { get; set; }
 
         /// <summary>

+ 0 - 8
MediaBrowser.Controller/Entities/IHasOriginalTitle.cs

@@ -1,8 +0,0 @@
-
-namespace MediaBrowser.Controller.Entities
-{
-    public interface IHasOriginalTitle
-    {
-        string OriginalTitle { get; set; }
-    }
-}

+ 0 - 8
MediaBrowser.Controller/Entities/IThemeMedia.cs

@@ -1,8 +0,0 @@
-
-namespace MediaBrowser.Controller.Entities
-{
-    public interface IThemeMedia
-    {
-        bool IsThemeMedia { get; }
-    }
-}

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

@@ -17,7 +17,7 @@ namespace MediaBrowser.Controller.Entities.Movies
     /// <summary>
     /// Class Movie
     /// </summary>
-    public class Movie : Video, IHasSpecialFeatures, IHasBudget, IHasTrailers, IHasAwards, IHasMetascore, IHasLookupInfo<MovieInfo>, ISupportsBoxSetGrouping, IHasOriginalTitle
+    public class Movie : Video, IHasSpecialFeatures, IHasBudget, IHasTrailers, IHasAwards, IHasMetascore, IHasLookupInfo<MovieInfo>, ISupportsBoxSetGrouping
     {
         public List<Guid> SpecialFeatureIds { get; set; }
 

+ 1 - 1
MediaBrowser.Controller/Entities/TV/Series.cs

@@ -17,7 +17,7 @@ namespace MediaBrowser.Controller.Entities.TV
     /// <summary>
     /// Class Series
     /// </summary>
-    public class Series : Folder, IHasTrailers, IHasDisplayOrder, IHasLookupInfo<SeriesInfo>, IMetadataContainer, IHasOriginalTitle
+    public class Series : Folder, IHasTrailers, IHasDisplayOrder, IHasLookupInfo<SeriesInfo>, IMetadataContainer
     {
         public int? AnimeSeriesIndex { get; set; }
 

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

@@ -10,7 +10,7 @@ namespace MediaBrowser.Controller.Entities
     /// <summary>
     /// Class Trailer
     /// </summary>
-    public class Trailer : Video, IHasBudget, IHasMetascore, IHasOriginalTitle, IHasLookupInfo<TrailerInfo>
+    public class Trailer : Video, IHasBudget, IHasMetascore, IHasLookupInfo<TrailerInfo>
     {
         public Trailer()
         {

+ 2 - 9
MediaBrowser.Controller/Entities/Video.cs

@@ -25,8 +25,7 @@ namespace MediaBrowser.Controller.Entities
     public class Video : BaseItem,
         IHasAspectRatio,
         ISupportsPlaceHolders,
-        IHasMediaSources,
-        IThemeMedia
+        IHasMediaSources
     {
         [IgnoreDataMember]
         public string PrimaryVersionId { get; set; }
@@ -37,7 +36,7 @@ namespace MediaBrowser.Controller.Entities
         public List<ChannelMediaInfo> ChannelMediaSources { get; set; }
 
         [IgnoreDataMember]
-        public bool IsThemeMedia
+        public override bool IsThemeMedia
         {
             get
             {
@@ -113,12 +112,6 @@ namespace MediaBrowser.Controller.Entities
         public bool IsShortcut { get; set; }
         public string ShortcutPath { get; set; }
 
-        /// <summary>
-        /// Gets or sets the video bit rate.
-        /// </summary>
-        /// <value>The video bit rate.</value>
-        public int? VideoBitRate { get; set; }
-
         /// <summary>
         /// Gets or sets the default index of the video stream.
         /// </summary>

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

@@ -113,7 +113,6 @@
     <Compile Include="Entities\KeywordExtensions.cs" />
     <Compile Include="Entities\IHasMediaSources.cs" />
     <Compile Include="Entities\IHasMetascore.cs" />
-    <Compile Include="Entities\IHasOriginalTitle.cs" />
     <Compile Include="Entities\IHasProgramAttributes.cs" />
     <Compile Include="Entities\IHasScreenshots.cs" />
     <Compile Include="Entities\IHasSeries.cs" />
@@ -129,7 +128,6 @@
     <Compile Include="Entities\ISupportsBoxSetGrouping.cs" />
     <Compile Include="Entities\ISupportsPlaceHolders.cs" />
     <Compile Include="Entities\ItemImageInfo.cs" />
-    <Compile Include="Entities\IThemeMedia.cs" />
     <Compile Include="Entities\LinkedChild.cs" />
     <Compile Include="Entities\MusicVideo.cs" />
     <Compile Include="Entities\IHasAwards.cs" />

+ 0 - 19
MediaBrowser.Controller/MediaBrowser.Controller.xproj

@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="14.0.25420" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0.25420</VisualStudioVersion>
-    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
-  </PropertyGroup>
-  <Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.Props" Condition="'$(VSToolsPath)' != ''" />
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>f9fe523c-6eb0-4e4d-ae26-de5c7982b063</ProjectGuid>
-    <RootNamespace>MediaBrowser.Controller</RootNamespace>
-    <BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">.\obj</BaseIntermediateOutputPath>
-    <OutputPath Condition="'$(OutputPath)'=='' ">.\bin\</OutputPath>
-  </PropertyGroup>
-
-  <PropertyGroup>
-    <SchemaVersion>2.0</SchemaVersion>
-  </PropertyGroup>
-  <Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.targets" Condition="'$(VSToolsPath)' != ''" />
-</Project>

+ 0 - 2
MediaBrowser.LocalMetadata/BaseXmlProvider.cs

@@ -96,7 +96,5 @@ namespace MediaBrowser.LocalMetadata
                 return "Emby Xml";
             }
         }
-        
-        internal static readonly SemaphoreSlim XmlParsingResourcePool = new SemaphoreSlim(4, 4);
     }
 }

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

@@ -163,13 +163,9 @@ namespace MediaBrowser.LocalMetadata.Parsers
                     {
                         var val = reader.ReadElementContentAsString();
 
-                        var hasOriginalTitle = item as IHasOriginalTitle;
-                        if (hasOriginalTitle != null)
+                        if (!string.IsNullOrEmpty(val))
                         {
-                            if (!string.IsNullOrEmpty(hasOriginalTitle.OriginalTitle))
-                            {
-                                hasOriginalTitle.OriginalTitle = val;
-                            }
+                            item.OriginalTitle = val;
                         }
                         break;
                     }

+ 50 - 56
MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs

@@ -344,58 +344,52 @@ namespace MediaBrowser.LocalMetadata.Savers
                 writer.WriteElementString("Overview", item.Overview);
             }
 
-            //var hasOriginalTitle = item as IHasOriginalTitle;
-            //if (hasOriginalTitle != null)
-            //{
-            //    if (!string.IsNullOrEmpty(hasOriginalTitle.OriginalTitle))
-            //    {
-            //        builder.Append("<OriginalTitle>" + SecurityElement.Escape(hasOriginalTitle.OriginalTitle) + "</OriginalTitle>");
-            //    }
-            //}
-
-            //if (!string.IsNullOrEmpty(item.ShortOverview))
-            //{
-            //    builder.Append("<ShortOverview><![CDATA[" + item.ShortOverview + "]]></ShortOverview>");
-            //}
-
-            //if (!string.IsNullOrEmpty(item.CustomRating))
-            //{
-            //    builder.Append("<CustomRating>" + SecurityElement.Escape(item.CustomRating) + "</CustomRating>");
-            //}
+            if (!string.IsNullOrEmpty(item.OriginalTitle))
+            {
+                writer.WriteElementString("OriginalTitle", item.OriginalTitle);
+            }
+            if (!string.IsNullOrEmpty(item.ShortOverview))
+            {
+                writer.WriteElementString("ShortOverview", item.ShortOverview);
+            }
+            if (!string.IsNullOrEmpty(item.CustomRating))
+            {
+                writer.WriteElementString("CustomRating", item.CustomRating);
+            }
 
-            //if (!string.IsNullOrEmpty(item.Name) && !(item is Episode))
-            //{
-            //    builder.Append("<LocalTitle>" + SecurityElement.Escape(item.Name) + "</LocalTitle>");
-            //}
+            if (!string.IsNullOrEmpty(item.Name) && !(item is Episode))
+            {
+                writer.WriteElementString("LocalTitle", item.Name);
+            }
 
-            //if (!string.IsNullOrEmpty(item.ForcedSortName))
-            //{
-            //    builder.Append("<SortTitle>" + SecurityElement.Escape(item.ForcedSortName) + "</SortTitle>");
-            //}
+            if (!string.IsNullOrEmpty(item.ForcedSortName))
+            {
+                writer.WriteElementString("SortTitle", item.ForcedSortName);
+            }
 
-            //if (item.PremiereDate.HasValue)
-            //{
-            //    if (item is Person)
-            //    {
-            //        builder.Append("<BirthDate>" + SecurityElement.Escape(item.PremiereDate.Value.ToLocalTime().ToString("yyyy-MM-dd")) + "</BirthDate>");
-            //    }
-            //    else if (!(item is Episode))
-            //    {
-            //        builder.Append("<PremiereDate>" + SecurityElement.Escape(item.PremiereDate.Value.ToLocalTime().ToString("yyyy-MM-dd")) + "</PremiereDate>");
-            //    }
-            //}
+            if (item.PremiereDate.HasValue)
+            {
+                if (item is Person)
+                {
+                    writer.WriteElementString("BirthDate", item.PremiereDate.Value.ToLocalTime().ToString("yyyy-MM-dd"));
+                }
+                else if (!(item is Episode))
+                {
+                    writer.WriteElementString("PremiereDate", item.PremiereDate.Value.ToLocalTime().ToString("yyyy-MM-dd"));
+                }
+            }
 
-            //if (item.EndDate.HasValue)
-            //{
-            //    if (item is Person)
-            //    {
-            //        builder.Append("<DeathDate>" + SecurityElement.Escape(item.EndDate.Value.ToString("yyyy-MM-dd")) + "</DeathDate>");
-            //    }
-            //    else if (!(item is Episode))
-            //    {
-            //        builder.Append("<EndDate>" + SecurityElement.Escape(item.EndDate.Value.ToString("yyyy-MM-dd")) + "</EndDate>");
-            //    }
-            //}
+            if (item.EndDate.HasValue)
+            {
+                if (item is Person)
+                {
+                    writer.WriteElementString("DeathDate", item.EndDate.Value.ToLocalTime().ToString("yyyy-MM-dd"));
+                }
+                else if (!(item is Episode))
+                {
+                    writer.WriteElementString("EndDate", item.EndDate.Value.ToLocalTime().ToString("yyyy-MM-dd"));
+                }
+            }
 
             //var hasTrailers = item as IHasTrailers;
             //if (hasTrailers != null)
@@ -612,6 +606,8 @@ namespace MediaBrowser.LocalMetadata.Savers
             //{
             //    AddShares(hasShares, builder);
             //}
+
+            AddMediaInfo(item, writer);
         }
 
         public static void AddShares(IHasShares item, StringBuilder builder)
@@ -635,33 +631,31 @@ namespace MediaBrowser.LocalMetadata.Savers
         /// Appends the media info.
         /// </summary>
         /// <typeparam name="T"></typeparam>
-        public static void AddMediaInfo<T>(T item, StringBuilder builder, IItemRepository itemRepository)
+        public static void AddMediaInfo<T>(T item, XmlWriter writer)
             where T : BaseItem
         {
             var video = item as Video;
 
             if (video != null)
             {
-                //AddChapters(video, builder, itemRepository);
-
                 if (video.Video3DFormat.HasValue)
                 {
                     switch (video.Video3DFormat.Value)
                     {
                         case Video3DFormat.FullSideBySide:
-                            builder.Append("<Format3D>FSBS</Format3D>");
+                            writer.WriteElementString("Format3D", "FSBS");
                             break;
                         case Video3DFormat.FullTopAndBottom:
-                            builder.Append("<Format3D>FTAB</Format3D>");
+                            writer.WriteElementString("Format3D", "FTAB");
                             break;
                         case Video3DFormat.HalfSideBySide:
-                            builder.Append("<Format3D>HSBS</Format3D>");
+                            writer.WriteElementString("Format3D", "HSBS");
                             break;
                         case Video3DFormat.HalfTopAndBottom:
-                            builder.Append("<Format3D>HTAB</Format3D>");
+                            writer.WriteElementString("Format3D", "HTAB");
                             break;
                         case Video3DFormat.MVC:
-                            builder.Append("<Format3D>MVC</Format3D>");
+                            writer.WriteElementString("Format3D", "MVC");
                             break;
                     }
                 }

+ 2 - 0
MediaBrowser.Model/Entities/BaseItemInfo.cs

@@ -132,6 +132,8 @@ namespace MediaBrowser.Model.Entities
         /// <value>The album.</value>
         public string Album { get; set; }
 
+        public bool IsThemeMedia { get; set; }
+
         /// <summary>
         /// Gets or sets the artists.
         /// </summary>

+ 0 - 19
MediaBrowser.Model/MediaBrowser.Model.xproj

@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="14.0.25420" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0.25420</VisualStudioVersion>
-    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
-  </PropertyGroup>
-  <Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.Props" Condition="'$(VSToolsPath)' != ''" />
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>a02a9262-f007-4464-bb32-02f5f2593651</ProjectGuid>
-    <RootNamespace>MediaBrowser.Model</RootNamespace>
-    <BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">.\obj</BaseIntermediateOutputPath>
-    <OutputPath Condition="'$(OutputPath)'=='' ">.\bin\</OutputPath>
-  </PropertyGroup>
-
-  <PropertyGroup>
-    <SchemaVersion>2.0</SchemaVersion>
-  </PropertyGroup>
-  <Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.targets" Condition="'$(VSToolsPath)' != ''" />
-</Project>

+ 12 - 43
MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs

@@ -6,14 +6,11 @@ using MediaBrowser.Controller.Entities.Audio;
 using MediaBrowser.Controller.MediaEncoding;
 using MediaBrowser.Controller.Providers;
 using MediaBrowser.Model.Entities;
-using System.Collections.Concurrent;
 using System.Collections.Generic;
 using System.IO;
 using System.Linq;
 using System.Threading;
 using System.Threading.Tasks;
-using MediaBrowser.Common.IO;
-using MediaBrowser.Controller.IO;
 using MediaBrowser.Model.IO;
 
 namespace MediaBrowser.Providers.MediaInfo
@@ -23,8 +20,6 @@ namespace MediaBrowser.Providers.MediaInfo
     /// </summary>
     public class AudioImageProvider : IDynamicImageProvider, IHasItemChangeMonitor
     {
-        private readonly ConcurrentDictionary<string, SemaphoreSlim> _locks = new ConcurrentDictionary<string, SemaphoreSlim>();
-
         private readonly IMediaEncoder _mediaEncoder;
         private readonly IServerConfigurationManager _config;
         private readonly IFileSystem _fileSystem;
@@ -67,41 +62,25 @@ namespace MediaBrowser.Providers.MediaInfo
 
             if (!_fileSystem.FileExists(path))
             {
-                var semaphore = GetLock(path);
-
-                // Acquire a lock
-                await semaphore.WaitAsync(cancellationToken).ConfigureAwait(false);
-
-                try
-                {
-                    // Check again in case it was saved while waiting for the lock
-                    if (!_fileSystem.FileExists(path))
-                    {
-                        _fileSystem.CreateDirectory(Path.GetDirectoryName(path));
-
-                        var imageStream = imageStreams.FirstOrDefault(i => (i.Comment ?? string.Empty).IndexOf("front", StringComparison.OrdinalIgnoreCase) != -1) ??
-                            imageStreams.FirstOrDefault(i => (i.Comment ?? string.Empty).IndexOf("cover", StringComparison.OrdinalIgnoreCase) != -1) ??
-                            imageStreams.FirstOrDefault();
+                _fileSystem.CreateDirectory(Path.GetDirectoryName(path));
 
-                        var imageStreamIndex = imageStream == null ? (int?)null : imageStream.Index;
+                var imageStream = imageStreams.FirstOrDefault(i => (i.Comment ?? string.Empty).IndexOf("front", StringComparison.OrdinalIgnoreCase) != -1) ??
+                    imageStreams.FirstOrDefault(i => (i.Comment ?? string.Empty).IndexOf("cover", StringComparison.OrdinalIgnoreCase) != -1) ??
+                    imageStreams.FirstOrDefault();
 
-                        var tempFile = await _mediaEncoder.ExtractAudioImage(item.Path, imageStreamIndex, cancellationToken).ConfigureAwait(false);
+                var imageStreamIndex = imageStream == null ? (int?)null : imageStream.Index;
 
-                        _fileSystem.CopyFile(tempFile, path, true);
+                var tempFile = await _mediaEncoder.ExtractAudioImage(item.Path, imageStreamIndex, cancellationToken).ConfigureAwait(false);
 
-                        try
-                        {
-                            _fileSystem.DeleteFile(tempFile);
-                        }
-                        catch
-                        {
+                _fileSystem.CopyFile(tempFile, path, true);
 
-                        }
-                    }
+                try
+                {
+                    _fileSystem.DeleteFile(tempFile);
                 }
-                finally
+                catch
                 {
-                    semaphore.Release();
+
                 }
             }
 
@@ -145,16 +124,6 @@ namespace MediaBrowser.Providers.MediaInfo
             }
         }
 
-        /// <summary>
-        /// Gets the lock.
-        /// </summary>
-        /// <param name="filename">The filename.</param>
-        /// <returns>SemaphoreSlim.</returns>
-        private SemaphoreSlim GetLock(string filename)
-        {
-            return _locks.GetOrAdd(filename, key => new SemaphoreSlim(1, 1));
-        }
-
         public string Name
         {
             get { return "Image Extractor"; }

+ 0 - 1
MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs

@@ -203,7 +203,6 @@ namespace MediaBrowser.Providers.MediaInfo
 
             var videoStream = mediaStreams.FirstOrDefault(i => i.Type == MediaStreamType.Video);
 
-            video.VideoBitRate = videoStream == null ? null : videoStream.BitRate;
             video.DefaultVideoStreamIndex = videoStream == null ? (int?)null : videoStream.Index;
 
             video.HasSubtitles = mediaStreams.Any(i => i.Type == MediaStreamType.Subtitle);

+ 0 - 3
MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs

@@ -13,9 +13,6 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Threading;
 using System.Threading.Tasks;
-using MediaBrowser.Common.IO;
-using MediaBrowser.Controller.IO;
-using MediaBrowser.Model.IO;
 
 namespace MediaBrowser.Providers.MediaInfo
 {

+ 2 - 4
MediaBrowser.Server.Implementations/EntryPoints/ActivityLogEntryPoint.cs

@@ -123,8 +123,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
                 return;
             }
 
-            var themeMedia = item as IThemeMedia;
-            if (themeMedia != null && themeMedia.IsThemeMedia)
+            if (item.IsThemeMedia)
             {
                 // Don't report theme song or local trailer playback
                 return;
@@ -156,8 +155,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
                 return;
             }
 
-            var themeMedia = item as IThemeMedia;
-            if (themeMedia != null && themeMedia.IsThemeMedia)
+            if (item.IsThemeMedia)
             {
                 // Don't report theme song or local trailer playback
                 return;

+ 1 - 2
MediaBrowser.Server.Implementations/EntryPoints/Notifications/Notifications.cs

@@ -256,9 +256,8 @@ namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications
             }
 
             var item = e.MediaInfo;
-            var themeMedia = item as IThemeMedia;
 
-            if (themeMedia != null && themeMedia.IsThemeMedia)
+            if ( item.IsThemeMedia)
             {
                 // Don't report theme song or local trailer playback
                 return;

+ 0 - 1
MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj

@@ -367,7 +367,6 @@
     <Compile Include="Persistence\SqliteUserDataRepository.cs" />
     <Compile Include="Persistence\SqliteUserRepository.cs" />
     <Compile Include="Sorting\StudioComparer.cs" />
-    <Compile Include="Sorting\VideoBitRateComparer.cs" />
     <Compile Include="Sync\AppSyncProvider.cs" />
     <Compile Include="Sync\CloudSyncProfile.cs" />
     <Compile Include="Sync\IHasSyncQuality.cs" />

+ 2 - 1
MediaBrowser.Server.Implementations/Session/SessionManager.cs

@@ -1611,7 +1611,8 @@ namespace MediaBrowser.Server.Implementations.Session
                 IndexNumber = item.IndexNumber,
                 ParentIndexNumber = item.ParentIndexNumber,
                 PremiereDate = item.PremiereDate,
-                ProductionYear = item.ProductionYear
+                ProductionYear = item.ProductionYear,
+                IsThemeMedia = item.IsThemeMedia
             };
 
             info.PrimaryImageTag = GetImageCacheTag(item, ImageType.Primary);

+ 0 - 41
MediaBrowser.Server.Implementations/Sorting/VideoBitRateComparer.cs

@@ -1,41 +0,0 @@
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Sorting;
-using MediaBrowser.Model.Querying;
-
-namespace MediaBrowser.Server.Implementations.Sorting
-{
-    class VideoBitRateComparer : IBaseItemComparer
-    {
-        /// <summary>
-        /// Compares the specified x.
-        /// </summary>
-        /// <param name="x">The x.</param>
-        /// <param name="y">The y.</param>
-        /// <returns>System.Int32.</returns>
-        public int Compare(BaseItem x, BaseItem y)
-        {
-            return GetValue(x).CompareTo(GetValue(y));
-        }
-
-        private int GetValue(BaseItem item)
-        {
-            var video = item as Video;
-
-            if (video != null)
-            {
-                return video.VideoBitRate ?? 0;
-            }
-
-            return 0;
-        }
-
-        /// <summary>
-        /// Gets the name.
-        /// </summary>
-        /// <value>The name.</value>
-        public string Name
-        {
-            get { return ItemSortBy.VideoBitRate; }
-        }
-    }
-}

+ 2 - 6
MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs

@@ -278,13 +278,9 @@ namespace MediaBrowser.XbmcMetadata.Parsers
                     {
                         var val = reader.ReadElementContentAsString();
 
-                        var hasOriginalTitle = item as IHasOriginalTitle;
-                        if (hasOriginalTitle != null)
+                        if (!string.IsNullOrEmpty(val))
                         {
-                            if (!string.IsNullOrEmpty(hasOriginalTitle.OriginalTitle))
-                            {
-                                hasOriginalTitle.OriginalTitle = val;
-                            }
+                            item.OriginalTitle = val;
                         }
                         break;
                     }

+ 2 - 6
MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs

@@ -485,13 +485,9 @@ namespace MediaBrowser.XbmcMetadata.Savers
 
             writer.WriteElementString("title", item.Name ?? string.Empty);
 
-            var hasOriginalTitle = item as IHasOriginalTitle;
-            if (hasOriginalTitle != null)
+            if (!string.IsNullOrWhiteSpace(item.OriginalTitle))
             {
-                if (!string.IsNullOrEmpty(hasOriginalTitle.OriginalTitle))
-                {
-                    writer.WriteElementString("originaltitle", hasOriginalTitle.OriginalTitle ?? string.Empty);
-                }
+                writer.WriteElementString("originaltitle", item.OriginalTitle);
             }
 
             var people = libraryManager.GetPeople(item);