diff --git a/Services/SyncService.cs b/Services/SyncService.cs index ca6c9b9..691eb37 100644 --- a/Services/SyncService.cs +++ b/Services/SyncService.cs @@ -6,12 +6,6 @@ public sealed class SyncService(AppDbContext dbContext) { - private static readonly string[] DefaultKeywords = - { - "ユウリ","セレナ","ヒカリ","リーリエ","ミヅキ","メイ","マリィ","ルチア","コトネ", - "大苦戦","敗北","拘束","差分","差分セット" - }; - private readonly AppDbContext _dbContext = dbContext; public async Task SyncFanboxFoldersAsync( @@ -27,6 +21,7 @@ var inserted = 0; var pending = new List(); + var existingKeywords = await LoadExistingKeywordsAsync(cancellationToken); foreach (var dir in Directory.GetDirectories(root)) { @@ -46,7 +41,7 @@ continue; var title = folderName.Substring(11); - var keywordsStr = BuildKeywords(title); + var keywordsStr = BuildKeywords(title, existingKeywords); var fileCount = Directory.GetFiles(dir).Length; var exists = await _dbContext.FanboxFolders.AsNoTracking().AnyAsync( @@ -75,7 +70,7 @@ return inserted; } - private static string? BuildKeywords(string title) + private static string? BuildKeywords(string title, IReadOnlyCollection existingKeywords) { var hit = new HashSet(StringComparer.Ordinal); @@ -98,7 +93,7 @@ hit.Add(w); } - foreach (var k in DefaultKeywords) + foreach (var k in existingKeywords) { if (title.Contains(k, StringComparison.Ordinal)) hit.Add(k); @@ -106,4 +101,27 @@ return hit.Count > 0 ? string.Join(",", hit) : null; } + + private async Task> LoadExistingKeywordsAsync(CancellationToken cancellationToken) + { + var keywordLists = await _dbContext.FanboxFolders.AsNoTracking() + .Select(x => x.Keywords) + .Where(x => x != null && x != string.Empty) + .Distinct() + .ToListAsync(cancellationToken); + + var keywords = new HashSet(StringComparer.Ordinal); + foreach (var list in keywordLists) + { + if (string.IsNullOrWhiteSpace(list)) + continue; + + foreach (var keyword in list.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries)) + { + keywords.Add(keyword); + } + } + + return keywords; + } } diff --git a/Services/ThumbnailService.cs b/Services/ThumbnailService.cs index 7b10351..3ceb9a7 100644 --- a/Services/ThumbnailService.cs +++ b/Services/ThumbnailService.cs @@ -9,7 +9,7 @@ ".jpg", ".jpeg", ".png", ".gif", ".webp", ".bmp" }; - private const int MinSize = 250; + private const int MinSize = 640; private const int JpegQuality = 82; private readonly string? _rootPath; private readonly string? _thumbnailRoot;