search tags

loading placeholder items
This commit is contained in:
2025-07-03 21:54:29 -04:00
parent 2a0907cf0d
commit cf55a7d47b
9 changed files with 255 additions and 211 deletions

View File

@@ -9,13 +9,14 @@
<ItemGroup>
<PackageReference Include="FFMpegCore" Version="5.2.0" />
<PackageReference Include="Isopoh.Cryptography.Argon2" Version="2.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.5" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.6" />
<PackageReference Include="MaybeError" Version="1.1.0" />
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="9.0.5" />
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="9.0.6" />
<PackageReference Include="MongoDB.Driver" Version="3.4.0" />
<PackageReference Include="MongoDB.Driver.Core.Extensions.DiagnosticSources" Version="2.1.0" />
<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="2.1.6" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.11.0" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.12.1" />
<PackageReference Include="ZLinq" Version="1.4.12" />
</ItemGroup>
</Project>

View File

@@ -15,6 +15,7 @@ public class Media
public int ViewCount { get; set; }
public ObjectId Owner { get; set; }
public DateTime UploadDate { get; set; }
public string[] Tags { get; set; } = [];
public static readonly Dictionary<string, MediaType> KnownTypes = new()
@@ -66,6 +67,7 @@ public class Media
Owner = owner;
Id = ObjectId.GenerateNewId();
UploadDate = DateTime.UtcNow;
Tags = DeriveTags(filename);
}
public string GetMediaUrl()
@@ -85,6 +87,14 @@ public class Media
else
return MediaType.Raw;
}
public static string[] DeriveTags(string filename)
{
return filename.Split('_')
.SelectMany(v => v.Split('-'))
.SelectMany(v => v.Split(' '))
.ToArray();
}
}
public enum MediaType

View File

@@ -17,7 +17,9 @@ public class AobaIndexCreationService(IMongoDatabase db): BackgroundService
{
BsonSerializer.RegisterSerializer(new EnumSerializer<ThumbnailSize>(BsonType.String));
var textKeys = Builders<Media>.IndexKeys
.Text(m => m.Filename);
.Text(m => m.Filename)
.Text(m => m.Ext)
.Text(m => m.Tags);
var textModel = new CreateIndexModel<Media>(textKeys, new CreateIndexOptions
{

View File

@@ -95,4 +95,17 @@ public class AobaService(IMongoDatabase db)
//ignore if file was not found
}
}
public async Task DeriveTagsAsync(CancellationToken cancellationToken = default)
{
var mediaItems = await _media.Find(Builders<Media>.Filter.Exists(m => m.Tags, false))
.ToListAsync(cancellationToken);
Console.WriteLine($"Derving Tag for {mediaItems.Count} items");
foreach (var mediaItem in mediaItems)
{
mediaItem.Tags = Media.DeriveTags(mediaItem.Filename);
await _media.UpdateOneAsync(m => m.Id == mediaItem.Id, Builders<Media>.Update.Set(m => m.Tags, mediaItem.Tags), null, cancellationToken);
}
Console.WriteLine("All Tags Derived");
}
}