浏览代码

update skiasharp to 1.58.1

Luke Pulverenti 7 年之前
父节点
当前提交
dd9404ebc6

+ 1 - 1
Emby.Drawing.Skia/Emby.Drawing.Skia.csproj

@@ -64,7 +64,7 @@
   </ItemGroup>
   <ItemGroup>
     <Reference Include="SkiaSharp, Version=1.58.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
-      <HintPath>..\packages\SkiaSharp.1.58.0\lib\portable-net45+win8+wpa81+wp8\SkiaSharp.dll</HintPath>
+      <HintPath>..\packages\SkiaSharp.1.58.1\lib\portable-net45+win8+wpa81+wp8\SkiaSharp.dll</HintPath>
     </Reference>
   </ItemGroup>
   <ItemGroup>

+ 26 - 9
Emby.Drawing.Skia/SkiaEncoder.cs

@@ -195,12 +195,26 @@ namespace Emby.Drawing.Skia
                 {
                     var codec = SKCodec.Create(stream);
 
+                    if (codec == null)
+                    {
+                        origin = SKCodecOrigin.TopLeft;
+                        return null;
+                    }
+
                     // create the bitmap
                     var bitmap = new SKBitmap(codec.Info.Width, codec.Info.Height, !requiresTransparencyHack);
-                    // decode
-                    codec.GetPixels(bitmap.Info, bitmap.GetPixels());
 
-                    origin = codec.Origin;
+                    if (bitmap != null)
+                    {
+                        // decode
+                        codec.GetPixels(bitmap.Info, bitmap.GetPixels());
+
+                        origin = codec.Origin;
+                    }
+                    else
+                    {
+                        origin = SKCodecOrigin.TopLeft;
+                    }
 
                     return bitmap;
                 }
@@ -239,7 +253,7 @@ namespace Emby.Drawing.Skia
             return Decode(path, forceAnalyzeBitmap, out origin);
         }
 
-        private SKBitmap GetBitmap(string path, bool cropWhitespace, bool autoOrient, ImageOrientation? orientation)
+        private SKBitmap GetBitmap(string path, bool cropWhitespace, bool autoOrient)
         {
             SKCodecOrigin origin;
 
@@ -247,11 +261,14 @@ namespace Emby.Drawing.Skia
             {
                 var bitmap = GetBitmap(path, cropWhitespace, true, out origin);
 
-                if (origin != SKCodecOrigin.TopLeft)
+                if (bitmap != null)
                 {
-                    using (bitmap)
+                    if (origin != SKCodecOrigin.TopLeft)
                     {
-                        return RotateAndFlip(bitmap, origin);
+                        using (bitmap)
+                        {
+                            return RotateAndFlip(bitmap, origin);
+                        }
                     }
                 }
 
@@ -357,11 +374,11 @@ namespace Emby.Drawing.Skia
             var blur = options.Blur ?? 0;
             var hasIndicator = options.AddPlayedIndicator || options.UnplayedCount.HasValue || !options.PercentPlayed.Equals(0);
 
-            using (var bitmap = GetBitmap(inputPath, options.CropWhiteSpace, autoOrient, orientation))
+            using (var bitmap = GetBitmap(inputPath, options.CropWhiteSpace, autoOrient))
             {
                 if (bitmap == null)
                 {
-                    throw new Exception(string.Format("Skia unable to read image {0}", inputPath));
+                    throw new ArgumentOutOfRangeException(string.Format("Skia unable to read image {0}", inputPath));
                 }
 
                 //_logger.Info("Color type {0}", bitmap.Info.ColorType);

+ 1 - 1
Emby.Drawing.Skia/packages.config

@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <packages>
-  <package id="SkiaSharp" version="1.58.0" targetFramework="portable45-net45+win8" />
+  <package id="SkiaSharp" version="1.58.1" targetFramework="portable45-net45+win8" />
 </packages>

+ 9 - 5
Emby.Drawing/ImageProcessor.cs

@@ -296,11 +296,6 @@ namespace Emby.Drawing
                     var tmpPath = Path.ChangeExtension(Path.Combine(_appPaths.TempDirectory, Guid.NewGuid().ToString("N")), Path.GetExtension(cacheFilePath));
                     _fileSystem.CreateDirectory(_fileSystem.GetDirectoryName(tmpPath));
 
-                    if (item == null && string.Equals(options.ItemType, typeof(Photo).Name, StringComparison.OrdinalIgnoreCase))
-                    {
-                        item = _libraryManager().GetItemById(options.ItemId);
-                    }
-
                     if (options.CropWhiteSpace && !SupportsTransparency(originalImagePath))
                     {
                         options.CropWhiteSpace = false;
@@ -321,6 +316,15 @@ namespace Emby.Drawing
 
                 return new Tuple<string, string, DateTime>(cacheFilePath, GetMimeType(outputFormat, cacheFilePath), _fileSystem.GetLastWriteTimeUtc(cacheFilePath));
             }
+            catch (ArgumentOutOfRangeException ex)
+            {
+                // Decoder failed to decode it
+#if DEBUG
+                _logger.ErrorException("Error encoding image", ex);
+#endif
+                // Just spit out the original file if all the options are default
+                return new Tuple<string, string, DateTime>(originalImagePath, MimeTypes.GetMimeType(originalImagePath), dateModified);
+            }
             catch (Exception ex)
             {
                 // If it fails for whatever reason, return the original image

+ 0 - 17
Emby.Server.Implementations/HttpServer/HttpListenerHost.cs

@@ -710,13 +710,6 @@ namespace Emby.Server.Implementations.HttpServer
                     Summary = route.Summary
                 });
 
-                routes.Add(new RouteAttribute(NormalizeRoutePath(route.Path), route.Verbs)
-                {
-                    Notes = route.Notes,
-                    Priority = route.Priority,
-                    Summary = route.Summary
-                });
-
                 routes.Add(new RouteAttribute(DoubleNormalizeEmbyRoutePath(route.Path), route.Verbs)
                 {
                     Notes = route.Notes,
@@ -773,16 +766,6 @@ namespace Emby.Server.Implementations.HttpServer
             return "emby/emby/" + path;
         }
 
-        private string NormalizeRoutePath(string path)
-        {
-            if (path.StartsWith("/", StringComparison.OrdinalIgnoreCase))
-            {
-                return "/mediabrowser" + path;
-            }
-
-            return "mediabrowser/" + path;
-        }
-
         private bool _disposed;
         private readonly object _disposeLock = new object();
         protected virtual void Dispose(bool disposing)

+ 2 - 7
Emby.Server.Implementations/Services/ServiceController.cs

@@ -75,11 +75,7 @@ namespace Emby.Server.Implementations.Services
             var attrs = appHost.GetRouteAttributes(requestType);
             foreach (RouteAttribute attr in attrs)
             {
-                var restPath = new RestPath(appHost.CreateInstance, appHost.GetParseFn, requestType, attr.Path, attr.Verbs, attr.Summary, attr.Notes);
-
-                if (!restPath.IsValid)
-                    throw new NotSupportedException(string.Format(
-                        "RestPath '{0}' on Type '{1}' is not Valid", attr.Path, requestType.GetMethodName()));
+                var restPath = new RestPath(appHost.CreateInstance, appHost.GetParseFn, requestType, attr.Path, attr.Verbs, attr.Summary);
 
                 RegisterRestPath(restPath);
             }
@@ -92,8 +88,7 @@ namespace Emby.Server.Implementations.Services
             if (!restPath.Path.StartsWith("/"))
                 throw new ArgumentException(string.Format("Route '{0}' on '{1}' must start with a '/'", restPath.Path, restPath.RequestType.GetMethodName()));
             if (restPath.Path.IndexOfAny(InvalidRouteChars) != -1)
-                throw new ArgumentException(string.Format("Route '{0}' on '{1}' contains invalid chars. " +
-                                            "See https://github.com/ServiceStack/ServiceStack/wiki/Routing for info on valid routes.", restPath.Path, restPath.RequestType.GetMethodName()));
+                throw new ArgumentException(string.Format("Route '{0}' on '{1}' contains invalid chars. ", restPath.Path, restPath.RequestType.GetMethodName()));
 
             List<RestPath> pathsAtFirstMatch;
             if (!RestPathMap.TryGetValue(restPath.FirstMatchHashKey, out pathsAtFirstMatch))

+ 4 - 2
Emby.Server.Implementations/Services/ServiceExec.cs

@@ -11,7 +11,7 @@ namespace Emby.Server.Implementations.Services
 {
     public static class ServiceExecExtensions
     {
-        public static HashSet<string> AllVerbs = new HashSet<string>(new[] {
+        public static string[] AllVerbs = new[] {
             "OPTIONS", "GET", "HEAD", "POST", "PUT", "DELETE", "TRACE", "CONNECT", // RFC 2616
             "PROPFIND", "PROPPATCH", "MKCOL", "COPY", "MOVE", "LOCK", "UNLOCK",    // RFC 2518
             "VERSION-CONTROL", "REPORT", "CHECKOUT", "CHECKIN", "UNCHECKOUT",
@@ -22,7 +22,9 @@ namespace Emby.Server.Implementations.Services
             "SEARCH",     // https://datatracker.ietf.org/doc/draft-reschke-webdav-search/
             "BCOPY", "BDELETE", "BMOVE", "BPROPFIND", "BPROPPATCH", "NOTIFY",
             "POLL",  "SUBSCRIBE", "UNSUBSCRIBE"
-        });
+        };
+
+        public static HashSet<string> AllVerbsSet = new HashSet<string>(AllVerbs);
 
         public static List<MethodInfo> GetActions(this Type serviceType)
         {

+ 59 - 65
Emby.Server.Implementations/Services/ServicePath.cs

@@ -21,8 +21,6 @@ namespace Emby.Server.Implementations.Services
         readonly bool[] componentsWithSeparators;
 
         private readonly string restPath;
-        private readonly string allowedVerbs;
-        private readonly bool allowsAllVerbs;
         public bool IsWildCardPath { get; private set; }
 
         private readonly string[] literalsToMatch;
@@ -46,15 +44,7 @@ namespace Emby.Server.Implementations.Services
         /// </summary>
         public int TotalComponentsCount { get; set; }
 
-        public string[] Verbs
-        {
-            get
-            {
-                return allowsAllVerbs
-                    ? new[] { "ANY" }
-                    : AllowedVerbs.Split(new[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries);
-            }
-        }
+        public string[] Verbs { get; private set; }
 
         public Type RequestType { get; private set; }
 
@@ -62,19 +52,11 @@ namespace Emby.Server.Implementations.Services
 
         public string Summary { get; private set; }
 
-        public string Notes { get; private set; }
-
-        public bool AllowsAllVerbs { get { return this.allowsAllVerbs; } }
-
-        public string AllowedVerbs { get { return this.allowedVerbs; } }
-
         public int Priority { get; set; } //passed back to RouteAttribute
 
         public static string[] GetPathPartsForMatching(string pathInfo)
         {
-            var parts = pathInfo.ToLower().Split(PathSeperatorChar)
-                .Where(x => !String.IsNullOrEmpty(x)).ToArray();
-            return parts;
+            return pathInfo.ToLower().Split(new[] { PathSeperatorChar }, StringSplitOptions.RemoveEmptyEntries);
         }
 
         public static List<string> GetFirstMatchHashKeys(string[] pathPartsForMatching)
@@ -109,18 +91,13 @@ namespace Emby.Server.Implementations.Services
             return list;
         }
 
-        public RestPath(Func<Type, object> createInstanceFn, Func<Type, Func<string, object>> getParseFn, Type requestType, string path, string verbs, string summary = null, string notes = null)
+        public RestPath(Func<Type, object> createInstanceFn, Func<Type, Func<string, object>> getParseFn, Type requestType, string path, string verbs, string summary = null)
         {
             this.RequestType = requestType;
             this.Summary = summary;
-            this.Notes = notes;
             this.restPath = path;
 
-            this.allowsAllVerbs = verbs == null || String.Equals(verbs, WildCard, StringComparison.OrdinalIgnoreCase);
-            if (!this.allowsAllVerbs)
-            {
-                this.allowedVerbs = verbs.ToUpper();
-            }
+            this.Verbs = string.IsNullOrWhiteSpace(verbs) ? ServiceExecExtensions.AllVerbs : verbs.ToUpper().Split(new[] { ' ', ',' }, StringSplitOptions.RemoveEmptyEntries);
 
             var componentsList = new List<string>();
 
@@ -153,7 +130,6 @@ namespace Emby.Server.Implementations.Services
             this.PathComponentsCount = this.componentsWithSeparators.Length;
             string firstLiteralMatch = null;
 
-            var sbHashKey = new StringBuilder();
             for (var i = 0; i < components.Length; i++)
             {
                 var component = components[i];
@@ -172,7 +148,6 @@ namespace Emby.Server.Implementations.Services
                 else
                 {
                     this.literalsToMatch[i] = component.ToLower();
-                    sbHashKey.Append(i + PathSeperatorChar.ToString() + this.literalsToMatch);
 
                     if (firstLiteralMatch == null)
                     {
@@ -198,9 +173,6 @@ namespace Emby.Server.Implementations.Services
                 ? this.PathComponentsCount + PathSeperator + firstLiteralMatch
                 : WildCardChar + PathSeperator + firstLiteralMatch;
 
-            this.IsValid = sbHashKey.Length > 0;
-            this.UniqueMatchHashKey = sbHashKey.ToString();
-
             this.typeDeserializer = new StringMapTypeDeserializer(createInstanceFn, getParseFn, this.RequestType);
             RegisterCaseInsenstivePropertyNameMappings();
         }
@@ -220,26 +192,46 @@ namespace Emby.Server.Implementations.Services
         };
 
 
-        private static List<Type> _excludeTypes = new List<Type> { typeof(Stream) };
+        private static Type excludeType = typeof(Stream);
 
-        internal static PropertyInfo[] GetSerializableProperties(Type type)
+        internal static List<PropertyInfo> GetSerializableProperties(Type type)
         {
-            var properties = GetPublicProperties(type);
-            var readableProperties = properties.Where(x => x.GetMethod != null);
+            var list = new List<PropertyInfo>();
+            var props = GetPublicProperties(type);
 
-            // else return those properties that are not decorated with IgnoreDataMember
-            return readableProperties
-                .Where(prop => prop.GetCustomAttributes(true)
-                    .All(attr =>
+            foreach (var prop in props)
+            {
+                if (prop.GetMethod == null)
+                {
+                    continue;
+                }
+
+                if (excludeType == prop.PropertyType)
+                {
+                    continue;
+                }
+
+                var ignored = false;
+                foreach (var attr in prop.GetCustomAttributes(true))
+                {
+                    if (IgnoreAttributesNamed.Contains(attr.GetType().Name))
                     {
-                        var name = attr.GetType().Name;
-                        return !IgnoreAttributesNamed.Contains(name);
-                    }))
-                .Where(prop => !_excludeTypes.Contains(prop.PropertyType))
-                .ToArray();
+                        ignored = true;
+                        break;
+                    }
+                }
+
+                if (!ignored)
+                {
+                    list.Add(prop);
+                }
+            }
+
+            // else return those properties that are not decorated with IgnoreDataMember
+            return list;
         }
 
-        private static PropertyInfo[] GetPublicProperties(Type type)
+        private static List<PropertyInfo> GetPublicProperties(Type type)
         {
             if (type.GetTypeInfo().IsInterface)
             {
@@ -269,12 +261,19 @@ namespace Emby.Server.Implementations.Services
                     propertyInfos.InsertRange(0, newPropertyInfos);
                 }
 
-                return propertyInfos.ToArray(propertyInfos.Count);
+                return propertyInfos;
             }
 
-            return GetTypesPublicProperties(type)
-                .Where(t => t.GetIndexParameters().Length == 0) // ignore indexed properties
-                .ToArray();
+            var list = new List<PropertyInfo>();
+
+            foreach (var t in GetTypesPublicProperties(type))
+            {
+                if (t.GetIndexParameters().Length == 0)
+                {
+                    list.Add(t);
+                }
+            }
+            return list;
         }
 
         private static PropertyInfo[] GetTypesPublicProperties(Type subType)
@@ -289,16 +288,11 @@ namespace Emby.Server.Implementations.Services
             return pis.ToArray(pis.Count);
         }
 
-
-        public bool IsValid { get; set; }
-
         /// <summary>
         /// Provide for quick lookups based on hashes that can be determined from a request url
         /// </summary>
         public string FirstMatchHashKey { get; private set; }
 
-        public string UniqueMatchHashKey { get; private set; }
-
         private readonly StringMapTypeDeserializer typeDeserializer;
 
         private readonly Dictionary<string, string> propertyNamesMap = new Dictionary<string, string>();
@@ -321,8 +315,14 @@ namespace Emby.Server.Implementations.Services
             score += Math.Max((10 - VariableArgsCount), 1) * 100;
 
             //Exact verb match is better than ANY
-            var exactVerb = String.Equals(httpMethod, AllowedVerbs, StringComparison.OrdinalIgnoreCase);
-            score += exactVerb ? 10 : 1;
+            if (Verbs.Length == 1 && string.Equals(httpMethod, Verbs[0], StringComparison.OrdinalIgnoreCase))
+            {
+                score += 10;
+            }
+            else
+            {
+                score += 1;
+            }
 
             return score;
         }
@@ -346,7 +346,7 @@ namespace Emby.Server.Implementations.Services
                 return false;
             }
 
-            if (!this.allowsAllVerbs && !StringContains(this.allowedVerbs, httpMethod))
+            if (!Verbs.Contains(httpMethod, StringComparer.OrdinalIgnoreCase))
             {
                 //logger.Info("allowsAllVerbs mismatch for {0} for {1} allowedverbs {2}", httpMethod, string.Join("/", withPathInfoParts), this.allowedVerbs);
                 return false;
@@ -457,8 +457,7 @@ namespace Emby.Server.Implementations.Services
 
         public object CreateRequest(string pathInfo, Dictionary<string, string> queryStringAndFormData, object fromInstance)
         {
-            var requestComponents = pathInfo.Split(PathSeperatorChar)
-                .Where(x => !String.IsNullOrEmpty(x)).ToArray();
+            var requestComponents = pathInfo.Split(new[] { PathSeperatorChar }, StringSplitOptions.RemoveEmptyEntries);
 
             ExplodeComponents(ref requestComponents);
 
@@ -555,10 +554,5 @@ namespace Emby.Server.Implementations.Services
 
             return this.typeDeserializer.PopulateFromMap(fromInstance, requestKeyValuesMap);
         }
-
-        public override int GetHashCode()
-        {
-            return UniqueMatchHashKey.GetHashCode();
-        }
     }
 }

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

@@ -63,8 +63,7 @@
       <HintPath>..\packages\SimpleInjector.4.0.8\lib\net45\SimpleInjector.dll</HintPath>
     </Reference>
     <Reference Include="SkiaSharp, Version=1.58.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
-      <HintPath>..\packages\SkiaSharp.1.58.0\lib\net45\SkiaSharp.dll</HintPath>
-      <Private>True</Private>
+      <HintPath>..\packages\SkiaSharp.1.58.1\lib\net45\SkiaSharp.dll</HintPath>
     </Reference>
     <Reference Include="SQLitePCLRaw.core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1488e028ca7ab535, processorArchitecture=MSIL">
       <HintPath>..\packages\SQLitePCLRaw.core.1.1.8\lib\net45\SQLitePCLRaw.core.dll</HintPath>
@@ -196,4 +195,11 @@
     </None>
   </ItemGroup>
   <ItemGroup />
+  <Import Project="..\packages\SkiaSharp.1.58.1\build\net45\SkiaSharp.targets" Condition="Exists('..\packages\SkiaSharp.1.58.1\build\net45\SkiaSharp.targets')" />
+  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+    <PropertyGroup>
+      <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
+    </PropertyGroup>
+    <Error Condition="!Exists('..\packages\SkiaSharp.1.58.1\build\net45\SkiaSharp.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\SkiaSharp.1.58.1\build\net45\SkiaSharp.targets'))" />
+  </Target>
 </Project>

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

@@ -4,7 +4,7 @@
   <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" />
+  <package id="SkiaSharp" version="1.58.1" targetFramework="net46" />
   <package id="SQLitePCLRaw.core" version="1.1.8" targetFramework="net46" />
   <package id="SQLitePCLRaw.provider.sqlite3.net45" version="1.1.8" targetFramework="net46" />
 </packages>

+ 16 - 7
MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj

@@ -85,7 +85,7 @@
       <HintPath>..\packages\SimpleInjector.4.0.8\lib\net45\SimpleInjector.dll</HintPath>
     </Reference>
     <Reference Include="SkiaSharp, Version=1.58.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
-      <HintPath>..\packages\SkiaSharp.1.58.0\lib\net45\SkiaSharp.dll</HintPath>
+      <HintPath>..\packages\SkiaSharp.1.58.1\lib\net45\SkiaSharp.dll</HintPath>
     </Reference>
     <Reference Include="SQLitePCLRaw.core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1488e028ca7ab535, processorArchitecture=MSIL">
       <HintPath>..\packages\SQLitePCLRaw.core.1.1.8\lib\net45\SQLitePCLRaw.core.dll</HintPath>
@@ -162,6 +162,14 @@
     </EmbeddedResource>
   </ItemGroup>
   <ItemGroup>
+    <Content Include="..\packages\SkiaSharp.1.58.1\runtimes\win7-x64\native\libSkiaSharp.dll">
+      <Link>x64\libSkiaSharp.dll</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\packages\SkiaSharp.1.58.1\runtimes\win7-x86\native\libSkiaSharp.dll">
+      <Link>x86\libSkiaSharp.dll</Link>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
     <Content Include="..\Tools\Installation\MediaBrowser.InstallUtil.dll">
       <Link>MediaBrowser.InstallUtil.dll</Link>
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
@@ -174,17 +182,11 @@
       <Link>MediaBrowser.Updater.exe</Link>
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="x64\libSkiaSharp.dll">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </Content>
     <Content Include="x64\sqlite3.dll">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <EmbeddedResource Include="Icon.ico" />
     <Content Include="Resources\Images\mb3logo800.png" />
-    <Content Include="x86\libSkiaSharp.dll">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </Content>
     <Content Include="x86\sqlite3.dll">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
@@ -268,6 +270,13 @@
     <PostBuildEvent>
     </PostBuildEvent>
   </PropertyGroup>
+  <Import Project="..\packages\SkiaSharp.1.58.1\build\net45\SkiaSharp.targets" Condition="Exists('..\packages\SkiaSharp.1.58.1\build\net45\SkiaSharp.targets')" />
+  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+    <PropertyGroup>
+      <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
+    </PropertyGroup>
+    <Error Condition="!Exists('..\packages\SkiaSharp.1.58.1\build\net45\SkiaSharp.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\SkiaSharp.1.58.1\build\net45\SkiaSharp.targets'))" />
+  </Target>
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
        Other similar extension points exist, see Microsoft.Common.targets.
   <Target Name="BeforeBuild">

+ 1 - 1
MediaBrowser.ServerApplication/packages.config

@@ -3,7 +3,7 @@
   <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" />
+  <package id="SkiaSharp" version="1.58.1" targetFramework="net462" />
   <package id="SQLitePCLRaw.core" version="1.1.8" targetFramework="net462" />
   <package id="SQLitePCLRaw.provider.sqlite3.net45" version="1.1.8" targetFramework="net462" />
 </packages>

+ 0 - 1
MediaBrowser.ServerApplication/x64/libSkiaSharp.dll.REMOVED.git-id

@@ -1 +0,0 @@
-20e469be83c5d41bb44d085c36550780e788a8ef