[backend/drive] Add flag that skips image processing; skip image processing for emojis by default
This commit is contained in:
parent
c0835d0cc7
commit
12cbc40f99
2 changed files with 17 additions and 8 deletions
|
@ -25,7 +25,7 @@ public class DriveService(
|
||||||
{
|
{
|
||||||
public async Task<DriveFile?> StoreFile(
|
public async Task<DriveFile?> StoreFile(
|
||||||
string? uri, User user, bool sensitive, string? description = null, string? mimeType = null,
|
string? uri, User user, bool sensitive, string? description = null, string? mimeType = null,
|
||||||
bool logExisting = true, bool forceStore = false
|
bool logExisting = true, bool forceStore = false, bool skipImageProcessing = false
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (uri == null) return null;
|
if (uri == null) return null;
|
||||||
|
@ -104,7 +104,7 @@ public class DriveService(
|
||||||
MimeType = CleanMimeType(mimeType ?? res.Content.Headers.ContentType?.MediaType)
|
MimeType = CleanMimeType(mimeType ?? res.Content.Headers.ContentType?.MediaType)
|
||||||
};
|
};
|
||||||
|
|
||||||
return await StoreFile(await res.Content.ReadAsStreamAsync(), user, request);
|
return await StoreFile(await res.Content.ReadAsStreamAsync(), user, request, skipImageProcessing);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@ -138,7 +138,9 @@ public class DriveService(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<DriveFile> StoreFile(Stream input, User user, DriveFileCreationRequest request)
|
public async Task<DriveFile> StoreFile(
|
||||||
|
Stream input, User user, DriveFileCreationRequest request, bool skipImageProcessing = false
|
||||||
|
)
|
||||||
{
|
{
|
||||||
if (user.IsLocalUser && input.Length > storageConfig.Value.MaxUploadSizeBytes)
|
if (user.IsLocalUser && input.Length > storageConfig.Value.MaxUploadSizeBytes)
|
||||||
throw GracefulException.UnprocessableEntity("Attachment is too large.");
|
throw GracefulException.UnprocessableEntity("Attachment is too large.");
|
||||||
|
@ -229,8 +231,9 @@ public class DriveService(
|
||||||
{
|
{
|
||||||
if (isImage && isReasonableSize)
|
if (isImage && isReasonableSize)
|
||||||
{
|
{
|
||||||
var genWebp = user.IsLocalUser;
|
var genThumb = !skipImageProcessing;
|
||||||
var res = await imageProcessor.ProcessImage(data, request, true, genWebp);
|
var genWebp = user.IsLocalUser && !skipImageProcessing;
|
||||||
|
var res = await imageProcessor.ProcessImage(data, request, genThumb, genWebp);
|
||||||
properties = res?.Properties ?? properties;
|
properties = res?.Properties ?? properties;
|
||||||
|
|
||||||
blurhash = res?.Blurhash;
|
blurhash = res?.Blurhash;
|
||||||
|
|
|
@ -13,7 +13,12 @@ using Microsoft.Extensions.Options;
|
||||||
|
|
||||||
namespace Iceshrimp.Backend.Core.Services;
|
namespace Iceshrimp.Backend.Core.Services;
|
||||||
|
|
||||||
public partial class EmojiService(DatabaseContext db, DriveService driveSvc, SystemUserService sysUserSvc, IOptions<Config.InstanceSection> config)
|
public partial class EmojiService(
|
||||||
|
DatabaseContext db,
|
||||||
|
DriveService driveSvc,
|
||||||
|
SystemUserService sysUserSvc,
|
||||||
|
IOptions<Config.InstanceSection> config
|
||||||
|
)
|
||||||
{
|
{
|
||||||
private static readonly AsyncKeyedLocker<string> KeyedLocker = new(o =>
|
private static readonly AsyncKeyedLocker<string> KeyedLocker = new(o =>
|
||||||
{
|
{
|
||||||
|
@ -38,7 +43,7 @@ public partial class EmojiService(DatabaseContext db, DriveService driveSvc, Sys
|
||||||
MimeType = mimeType,
|
MimeType = mimeType,
|
||||||
IsSensitive = false
|
IsSensitive = false
|
||||||
};
|
};
|
||||||
var driveFile = await driveSvc.StoreFile(input, user, request);
|
var driveFile = await driveSvc.StoreFile(input, user, request, skipImageProcessing: true);
|
||||||
|
|
||||||
var id = IdHelpers.GenerateSlowflakeId();
|
var id = IdHelpers.GenerateSlowflakeId();
|
||||||
var emoji = new Emoji
|
var emoji = new Emoji
|
||||||
|
@ -64,7 +69,8 @@ public partial class EmojiService(DatabaseContext db, DriveService driveSvc, Sys
|
||||||
public async Task<Emoji> CloneEmoji(Emoji existing)
|
public async Task<Emoji> CloneEmoji(Emoji existing)
|
||||||
{
|
{
|
||||||
var user = await sysUserSvc.GetInstanceActorAsync();
|
var user = await sysUserSvc.GetInstanceActorAsync();
|
||||||
var driveFile = await driveSvc.StoreFile(existing.OriginalUrl, user, sensitive: false, forceStore: true) ??
|
var driveFile = await driveSvc.StoreFile(existing.OriginalUrl, user, sensitive: false, forceStore: true,
|
||||||
|
skipImageProcessing: false) ??
|
||||||
throw new Exception("Error storing emoji file");
|
throw new Exception("Error storing emoji file");
|
||||||
|
|
||||||
var emoji = new Emoji
|
var emoji = new Emoji
|
||||||
|
|
Loading…
Add table
Reference in a new issue