using File_Folder_Helper.Models; using File_Folder_Helper.Models.Exif; using File_Folder_Helper.Models.Face; using Microsoft.Extensions.Logging; using System.Collections.ObjectModel; using System.Text.Json; namespace File_Folder_Helper.Helpers.Exif; internal static class HelperExif { private static ReadOnlyCollection GetCollection(ExifDirectoryBase[]? exifDirectoryBases) { List results = []; if (exifDirectoryBases is not null) { string? json; FaceFile[]? collection; foreach (ExifDirectoryBase exifDirectoryBase in exifDirectoryBases) { json = exifDirectoryBase.Artist; if (string.IsNullOrEmpty(json)) continue; collection = JsonSerializer.Deserialize(json, FaceFileCollectionGenerationContext.Default.FaceFileArray); if (collection is null) continue; results.AddRange(collection); } } return new(results); } internal static void DragAndDrop(ILogger logger, string argZero) { FileInfo fileInfo = new(argZero); logger.LogInformation("<{argZero}> exists", argZero); ExifDirectory exifDirectory = Exif.GetExifDirectory(fileInfo); string directory = Path.GetDirectoryName(argZero) ?? throw new Exception(); string[] files = Directory.GetFiles(directory, "*.json", SearchOption.TopDirectoryOnly); string? json = files.Length != 1 ? string.Empty : File.ReadAllText(files[0]); ReadOnlyCollection collection = GetCollection(exifDirectory.ExifBaseDirectories); logger.LogInformation("<{collection}> value", collection.Count); Dictionary? people = string.IsNullOrEmpty(json) ? [] : JsonSerializer.Deserialize(json, PeopleSourceGenerationContext.Default.DictionaryInt64Person) ?? throw new NullReferenceException(); logger.LogInformation("<{people}> value", people?.Count); foreach (FaceFile faceFile in collection) { if (faceFile.MappingFromPerson is null) logger.LogInformation("<{Confidence}> value", faceFile.Location?.Confidence); else logger.LogInformation("<{DisplayDirectoryName}> value", faceFile.MappingFromPerson.DisplayDirectoryName); } } }