diff options
| author | Bond-009 <bond.009@outlook.com> | 2019-09-15 06:27:42 +0200 |
|---|---|---|
| committer | Anthony Lavado <anthony@lavado.ca> | 2019-09-15 00:27:42 -0400 |
| commit | 318b9949f22d4ac061a14d1bf5aa4e8163ccec38 (patch) | |
| tree | c5a7b956f578e861d1d7ff52fc6913ad6b66f8a5 | |
| parent | cc8609d0aace39b1c4198cee8fc9fc077d99a7b2 (diff) | |
Improve Skia error handling (#1752)
| -rw-r--r-- | Jellyfin.Drawing.Skia/SkiaCodecException.cs | 46 | ||||
| -rw-r--r-- | Jellyfin.Drawing.Skia/SkiaEncoder.cs | 12 | ||||
| -rw-r--r-- | Jellyfin.Drawing.Skia/SkiaException.cs | 26 | ||||
| -rw-r--r-- | Jellyfin.Drawing.Skia/SkiaHelper.cs | 23 |
4 files changed, 105 insertions, 2 deletions
diff --git a/Jellyfin.Drawing.Skia/SkiaCodecException.cs b/Jellyfin.Drawing.Skia/SkiaCodecException.cs new file mode 100644 index 000000000..f848636bc --- /dev/null +++ b/Jellyfin.Drawing.Skia/SkiaCodecException.cs @@ -0,0 +1,46 @@ +using System.Globalization; +using SkiaSharp; + +namespace Jellyfin.Drawing.Skia +{ + /// <summary> + /// Represents errors that occur during interaction with Skia codecs. + /// </summary> + public class SkiaCodecException : SkiaException + { + /// <summary> + /// Returns the non-successfull codec result returned by Skia. + /// </summary> + /// <value>The non-successfull codec result returned by Skia.</value> + public SKCodecResult CodecResult { get; } + + /// <summary> + /// Initializes a new instance of the <see cref="SkiaCodecException" /> class. + /// </summary> + /// <param name="result">The non-successfull codec result returned by Skia.</param> + public SkiaCodecException(SKCodecResult result) : base() + { + CodecResult = result; + } + + /// <summary> + /// Initializes a new instance of the <see cref="SkiaCodecException" /> class + /// with a specified error message. + /// </summary> + /// <param name="result">The non-successfull codec result returned by Skia.</param> + /// <param name="message">The message that describes the error.</param> + public SkiaCodecException(SKCodecResult result, string message) + : base(message) + { + CodecResult = result; + } + + /// <inheritdoc /> + public override string ToString() + => string.Format( + CultureInfo.InvariantCulture, + "Non-success codec result: {0}\n{1}", + CodecResult, + base.ToString()); + } +} diff --git a/Jellyfin.Drawing.Skia/SkiaEncoder.cs b/Jellyfin.Drawing.Skia/SkiaEncoder.cs index 80b9974fa..66b814f6e 100644 --- a/Jellyfin.Drawing.Skia/SkiaEncoder.cs +++ b/Jellyfin.Drawing.Skia/SkiaEncoder.cs @@ -9,6 +9,7 @@ using MediaBrowser.Model.Drawing; using MediaBrowser.Model.Globalization; using Microsoft.Extensions.Logging; using SkiaSharp; +using static Jellyfin.Drawing.Skia.SkiaHelper; namespace Jellyfin.Drawing.Skia { @@ -184,16 +185,23 @@ namespace Jellyfin.Drawing.Skia } } + /// <inheritdoc /> public ImageDimensions GetImageSize(string path) { + if (path == null) + { + throw new ArgumentNullException(nameof(path)); + } + if (!File.Exists(path)) { throw new FileNotFoundException("File not found", path); } - using (var s = new SKFileStream(path)) - using (var codec = SKCodec.Create(s)) + using (var codec = SKCodec.Create(path, out SKCodecResult result)) { + EnsureSuccess(result); + var info = codec.Info; return new ImageDimensions(info.Width, info.Height); diff --git a/Jellyfin.Drawing.Skia/SkiaException.cs b/Jellyfin.Drawing.Skia/SkiaException.cs new file mode 100644 index 000000000..7aeaf083e --- /dev/null +++ b/Jellyfin.Drawing.Skia/SkiaException.cs @@ -0,0 +1,26 @@ +using System; + +namespace Jellyfin.Drawing.Skia +{ + /// <summary> + /// Represents errors that occur during interaction with Skia. + /// </summary> + public class SkiaException : Exception + { + /// <inheritdoc /> + public SkiaException() : base() + { + } + + /// <inheritdoc /> + public SkiaException(string message) : base(message) + { + } + + /// <inheritdoc /> + public SkiaException(string message, Exception innerException) + : base(message, innerException) + { + } + } +} diff --git a/Jellyfin.Drawing.Skia/SkiaHelper.cs b/Jellyfin.Drawing.Skia/SkiaHelper.cs new file mode 100644 index 000000000..f9c79c855 --- /dev/null +++ b/Jellyfin.Drawing.Skia/SkiaHelper.cs @@ -0,0 +1,23 @@ +using SkiaSharp; + +namespace Jellyfin.Drawing.Skia +{ + /// <summary> + /// Class containing helper methods for working with SkiaSharp. + /// </summary> + public static class SkiaHelper + { + /// <summary> + /// Ensures the result is a success + /// by throwing an exception when that's not the case. + /// </summary> + /// <param name="result">The result returned by Skia.</param> + public static void EnsureSuccess(SKCodecResult result) + { + if (result != SKCodecResult.Success) + { + throw new SkiaCodecException(result); + } + } + } +} |
