diff options
| -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); + } + } + } +} |
