mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-06-05 14:44:46 -04:00
Improve Skia error handling (#1752)
This commit is contained in:
parent
cc8609d0aa
commit
318b9949f2
46
Jellyfin.Drawing.Skia/SkiaCodecException.cs
Normal file
46
Jellyfin.Drawing.Skia/SkiaCodecException.cs
Normal file
@ -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());
|
||||||
|
}
|
||||||
|
}
|
@ -9,6 +9,7 @@ using MediaBrowser.Model.Drawing;
|
|||||||
using MediaBrowser.Model.Globalization;
|
using MediaBrowser.Model.Globalization;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using SkiaSharp;
|
using SkiaSharp;
|
||||||
|
using static Jellyfin.Drawing.Skia.SkiaHelper;
|
||||||
|
|
||||||
namespace Jellyfin.Drawing.Skia
|
namespace Jellyfin.Drawing.Skia
|
||||||
{
|
{
|
||||||
@ -184,16 +185,23 @@ namespace Jellyfin.Drawing.Skia
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
public ImageDimensions GetImageSize(string path)
|
public ImageDimensions GetImageSize(string path)
|
||||||
{
|
{
|
||||||
|
if (path == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(path));
|
||||||
|
}
|
||||||
|
|
||||||
if (!File.Exists(path))
|
if (!File.Exists(path))
|
||||||
{
|
{
|
||||||
throw new FileNotFoundException("File not found", path);
|
throw new FileNotFoundException("File not found", path);
|
||||||
}
|
}
|
||||||
|
|
||||||
using (var s = new SKFileStream(path))
|
using (var codec = SKCodec.Create(path, out SKCodecResult result))
|
||||||
using (var codec = SKCodec.Create(s))
|
|
||||||
{
|
{
|
||||||
|
EnsureSuccess(result);
|
||||||
|
|
||||||
var info = codec.Info;
|
var info = codec.Info;
|
||||||
|
|
||||||
return new ImageDimensions(info.Width, info.Height);
|
return new ImageDimensions(info.Width, info.Height);
|
||||||
|
26
Jellyfin.Drawing.Skia/SkiaException.cs
Normal file
26
Jellyfin.Drawing.Skia/SkiaException.cs
Normal file
@ -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)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
23
Jellyfin.Drawing.Skia/SkiaHelper.cs
Normal file
23
Jellyfin.Drawing.Skia/SkiaHelper.cs
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user