Compare commits

..

2 Commits

Author SHA1 Message Date
Amatsugu e81d432b1f added missing thumbnail deletion on media delete
Build and Push Image / build-and-push (push) Failing after 4m14s
2026-05-02 13:42:52 -04:00
Amatsugu 61d70aee28 update packages
Build and Push Image / build-and-push (push) Successful in 4m55s
2026-05-01 15:10:46 -04:00
6 changed files with 55 additions and 14 deletions
+4 -4
View File
@@ -10,13 +10,13 @@
<PackageReference Include="FFMpegCore" Version="5.4.0" />
<PackageReference Include="Fido2.Models" Version="4.0.1" />
<PackageReference Include="Isopoh.Cryptography.Argon2" Version="2.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.5" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.7" />
<PackageReference Include="MaybeError" Version="1.2.0" />
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="10.0.5" />
<PackageReference Include="MongoDB.Driver" Version="3.7.1" />
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="10.0.7" />
<PackageReference Include="MongoDB.Driver" Version="3.8.0" />
<PackageReference Include="MongoDB.Driver.Core.Extensions.DiagnosticSources" Version="3.0.0" />
<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="2.1.7" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.17.0" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.18.0" />
<PackageReference Include="ZLinq" Version="1.5.6" />
</ItemGroup>
+5
View File
@@ -25,6 +25,11 @@ public class AobaService(IMongoDatabase db)
return await _media.Find(m => m.MediaId == id).FirstOrDefaultAsync(cancellationToken);
}
public async Task<List<Media>> GetMediaAsync(IEnumerable<ObjectId> ids, CancellationToken cancellationToken = default)
{
return await _media.Find(m => ids.Contains(m.MediaId)).ToListAsync(cancellationToken);
}
public async Task<PagedResult<Media>> FindMediaAsync(string? query, ObjectId userId, int page = 1, int pageSize = 100, CancellationToken cancellationToken = default)
{
var filters = new List<FilterDefinition<Media>>()
+18
View File
@@ -20,6 +20,7 @@ using SixLabors.ImageSharp.Processing;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Net.Http.Headers;
using System.Text;
@@ -53,6 +54,23 @@ public class ThumbnailService(IMongoDatabase db, AobaService aobaService)
return null;
}
public async Task<Error?> DeleteThumbnailDirectAsync(ObjectId thumbnailId)
{
try
{
await _gridfs.DeleteAsync(thumbnailId);
}
catch (GridFSFileNotFoundException)
{
//Ignore if the file was not found (somehow already deleted)
}
catch (Exception e)
{
return new ExceptionError(e);
}
return null;
}
/// <summary>
///
/// </summary>
+8 -8
View File
@@ -10,22 +10,22 @@
<ItemGroup>
<PackageReference Include="Fido2.AspNet" Version="4.0.1" />
<PackageReference Include="Grpc.AspNetCore" Version="2.76.0" />
<PackageReference Include="Grpc.AspNetCore.Web" Version="2.76.0" />
<PackageReference Include="Grpc.AspNetCore" Version="2.80.0" />
<PackageReference Include="Grpc.AspNetCore.Web" Version="2.80.0" />
<PackageReference Include="Grpc.Tools" Version="2.80.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Isopoh.Cryptography.Argon2" Version="2.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.5" />
<PackageReference Include="Microsoft.IdentityModel.JsonWebTokens" Version="8.17.0" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.7" />
<PackageReference Include="Microsoft.IdentityModel.JsonWebTokens" Version="8.18.0" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.23.0" />
<PackageReference Include="MimeTypesMap" Version="1.0.9" />
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.15.2" />
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.15.3" />
<PackageReference Include="OpenTelemetry.Exporter.Prometheus.AspNetCore" Version="1.9.0-beta.2" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.15.2" />
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.15.1" />
<PackageReference Include="OpenTelemetry.Instrumentation.Http" Version="1.15.0" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.15.3" />
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.15.2" />
<PackageReference Include="OpenTelemetry.Instrumentation.Http" Version="1.15.1" />
</ItemGroup>
<ItemGroup>
+19 -2
View File
@@ -13,7 +13,7 @@ using System.Text.Json;
namespace AobaServer.Services;
public class AobaRpcService(AobaService aobaService, AccountsService accountsService, AuthConfigService authConfig) : AobaRpc.AobaRpcBase
public class AobaRpcService(AobaService aobaService, ThumbnailService thumbnailService, AccountsService accountsService, AuthConfigService authConfig) : AobaRpc.AobaRpcBase
{
public override async Task<MediaResponse> GetMedia(Id request, ServerCallContext context)
{
@@ -59,13 +59,30 @@ public class AobaRpcService(AobaService aobaService, AccountsService accountsSer
public override async Task<Empty> DeleteMedia(Id request, ServerCallContext context)
{
await aobaService.DeleteFileAsync(request.ToObjectId(), context.CancellationToken);
var media = await aobaService.GetMediaAsync(request.ToObjectId());
if (media == null)
return new Empty();
await aobaService.DeleteFileAsync(media.MediaId, context.CancellationToken);
foreach (var (_, id) in media.Thumbnails)
{
await thumbnailService.DeleteThumbnailDirectAsync(id);
}
return new Empty();
}
public override async Task<Empty> DeleteMediaBulk(IdList request, ServerCallContext context)
{
var media = await aobaService.GetMediaAsync(request.ToObjectId(), context.CancellationToken);
if(media.Count == 0)
return new Empty();
await aobaService.DeleteFilesAsync(request.ToObjectId(), context.CancellationToken);
foreach (var item in media)
{
foreach (var (_, id) in item.Thumbnails)
{
await thumbnailService.DeleteThumbnailDirectAsync(id);
}
}
return new Empty();
}
}
+1
View File
@@ -8,5 +8,6 @@ public class DebugService(AobaService aobaService, ThumbnailService thumbnailSer
{
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
//todo: clean up orphaned thumbnails
}
}