Back to before AA

This commit is contained in:
2023-10-22 11:50:01 -07:00
parent a4a92aacd2
commit de18149027
21 changed files with 348 additions and 244 deletions

View File

@ -1,91 +0,0 @@
using MetadataExtractor;
using System.Collections.ObjectModel;
using System.Text.Json;
using View_by_Distance.Shared.Models;
using View_by_Distance.Shared.Models.Methods;
using View_by_Distance.Shared.Models.Properties;
namespace View_by_Distance.Metadata.Models;
public class A_Metadata : IMetadata<MetadataExtractor.Directory>
{
private readonly bool _PropertiesChangedForMetadata;
private readonly IPropertyConfiguration _PropertyConfiguration;
private readonly bool _ForceMetadataLastWriteTimeToCreationTime;
private readonly IReadOnlyDictionary<string, string[]> _FileGroups;
public A_Metadata(IPropertyConfiguration propertyConfiguration, bool forceMetadataLastWriteTimeToCreationTime, bool propertiesChangedForMetadata)
{
_PropertyConfiguration = propertyConfiguration;
_PropertiesChangedForMetadata = propertiesChangedForMetadata;
_ForceMetadataLastWriteTimeToCreationTime = forceMetadataLastWriteTimeToCreationTime;
string bResultsFullGroupDirectory = Property.Models.Stateless.IResult.GetResultsFullGroupDirectory(_PropertyConfiguration,
nameof(A_Metadata),
string.Empty,
includeResizeGroup: false,
includeModel: false,
includePredictorModel: false);
_FileGroups = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(propertyConfiguration, bResultsFullGroupDirectory, [propertyConfiguration.ResultSingleton]);
}
public ReadOnlyDictionary<string, MetadataExtractorDirectory> GetMetadataCollection(string file)
{
Dictionary<string, MetadataExtractorDirectory>? results;
string fileName = Path.GetFileName(file);
string fileExtensionLowered = Path.GetExtension(file).ToLower();
string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(file);
(_, int directoryIndex) = Shared.Models.Stateless.Methods.IPath.GetDirectoryNameAndIndex(_PropertyConfiguration.ResultAllInOneSubdirectoryLength, fileName);
FileInfo fileInfo = new(Path.Combine(_FileGroups[_PropertyConfiguration.ResultSingleton][directoryIndex], $"{fileNameWithoutExtension}{fileExtensionLowered}.json"));
if (_ForceMetadataLastWriteTimeToCreationTime && !fileInfo.Exists && File.Exists(Path.ChangeExtension(fileInfo.FullName, ".delete")))
{
File.Move(Path.ChangeExtension(fileInfo.FullName, ".delete"), fileInfo.FullName);
fileInfo.Refresh();
}
if (_ForceMetadataLastWriteTimeToCreationTime && fileInfo.Exists && fileInfo.LastWriteTime != fileInfo.CreationTime)
{
File.SetLastWriteTime(fileInfo.FullName, fileInfo.CreationTime);
fileInfo.Refresh();
}
if (_PropertiesChangedForMetadata)
results = null;
else if (!fileInfo.Exists)
results = null;
else if (!fileInfo.FullName.EndsWith(".json") && !fileInfo.FullName.EndsWith(".old"))
throw new ArgumentException("must be a *.json file");
else
{
string json = File.ReadAllText(fileInfo.FullName);
try
{
results = Stateless.Methods.Metadata.Deserialize(json);
if (results is null)
throw new Exception();
}
catch (Exception)
{
results = null;
}
}
if (results is null || results.Count == 0)
{
IReadOnlyList<MetadataExtractor.Directory> directories = ImageMetadataReader.ReadMetadata(file);
results = Stateless.Methods.Metadata.Covert(directories);
string json = JsonSerializer.Serialize(results, DictionaryStringMetadataExtractorDirectorySourceGenerationContext.Default.DictionaryStringMetadataExtractorDirectory);
if (Shared.Models.Stateless.Methods.IPath.WriteAllText(fileInfo.FullName, json, updateDateWhenMatches: false, compareBeforeWrite: true, updateToWhenMatches: null) && _ForceMetadataLastWriteTimeToCreationTime)
{
File.SetLastWriteTime(fileInfo.FullName, fileInfo.CreationTime);
fileInfo.Refresh();
}
}
return new(results);
}
(DateTime?, DateTime?[]) IMetadata<MetadataExtractor.Directory>.GetDateTimes(FileHolder fileHolder, IReadOnlyList<MetadataExtractor.Directory> directories)
{
List<DateTime?> results = [];
DateTime? result = null;
return new(result, results.ToArray());
}
}

View File

@ -1,29 +0,0 @@
using System.Text.Json;
using System.Text.Json.Serialization;
namespace View_by_Distance.Metadata.Models;
public record Avi(string? FramesPerSecond1,
string? SamplesPerSecond2,
string? Duration3,
string? VideoCodec4,
string? AudioCodec5,
string? Width6,
string? Height7,
string? Streams8,
string? DateTimeOriginal320)
{
public override string ToString()
{
string result = JsonSerializer.Serialize(this, AviSourceGenerationContext.Default.Avi);
return result;
}
}
[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSerializable(typeof(Avi))]
public partial class AviSourceGenerationContext : JsonSerializerContext
{
}

View File

@ -1,7 +1,4 @@
using MetadataExtractor;
using MetadataExtractor.Formats.Avi;
using MetadataExtractor.Formats.Exif;
using MetadataExtractor.Formats.QuickTime;
using System.Collections.ObjectModel;
using System.Text.Json;
using View_by_Distance.Shared.Models;
@ -90,7 +87,7 @@ public class B_Metadata : IMetadata<MetadataExtractor.Directory>
if (results is null || results.Count == 0)
{
IReadOnlyList<MetadataExtractor.Directory> directories = ImageMetadataReader.ReadMetadata(mappingFromItem.ImageFileHolder.FullName);
results = Stateless.Methods.Metadata.Covert(directories);
results = Stateless.Methods.Metadata.GetKeyValuePairs(directories);
json = JsonSerializer.Serialize(results, DictionaryStringMetadataExtractorDirectorySourceGenerationContext.Default.DictionaryStringMetadataExtractorDirectory);
bool updateDateWhenMatches = dateTimes.Count != 0 && fileInfo.Exists && dateTimes.Max() > fileInfo.LastWriteTime;
DateTime? dateTime = !updateDateWhenMatches ? null : dateTimes.Max();
@ -116,35 +113,35 @@ public class B_Metadata : IMetadata<MetadataExtractor.Directory>
DateTime? dateTime;
DateTime checkDateTime;
string dateTimeFormat = Property.Models.Stateless.IProperty.DateTimeFormat();
ExifDirectoryBase? exifDirectoryBase = directories.OfType<ExifDirectoryBase>().FirstOrDefault();
MetadataExtractor.Formats.Exif.ExifDirectoryBase? exifDirectoryBase = directories.OfType<MetadataExtractor.Formats.Exif.ExifDirectoryBase>().FirstOrDefault();
results.Add(fileHolder.CreationTime);
results.Add(fileHolder.LastWriteTime);
if (exifDirectoryBase is not null)
{
if (exifDirectoryBase.TryGetDateTime(ExifDirectoryBase.TagDateTime, out checkDateTime))
if (exifDirectoryBase.TryGetDateTime(MetadataExtractor.Formats.Exif.ExifDirectoryBase.TagDateTime, out checkDateTime))
results.Add(checkDateTime);
else
{
dateTime = Property.Models.Stateless.IProperty.GetDateTime(dateTimeFormat, exifDirectoryBase.GetString(ExifDirectoryBase.TagDateTime));
dateTime = Property.Models.Stateless.IProperty.GetDateTime(dateTimeFormat, exifDirectoryBase.GetString(MetadataExtractor.Formats.Exif.ExifDirectoryBase.TagDateTime));
if (dateTime is not null)
results.Add(dateTime.Value);
}
if (exifDirectoryBase.TryGetDateTime(ExifDirectoryBase.TagDateTimeDigitized, out checkDateTime))
if (exifDirectoryBase.TryGetDateTime(MetadataExtractor.Formats.Exif.ExifDirectoryBase.TagDateTimeDigitized, out checkDateTime))
results.Add(checkDateTime);
else
{
dateTime = Property.Models.Stateless.IProperty.GetDateTime(dateTimeFormat, exifDirectoryBase.GetString(ExifDirectoryBase.TagDateTimeDigitized));
dateTime = Property.Models.Stateless.IProperty.GetDateTime(dateTimeFormat, exifDirectoryBase.GetString(MetadataExtractor.Formats.Exif.ExifDirectoryBase.TagDateTimeDigitized));
if (dateTime is not null)
results.Add(dateTime.Value);
}
if (exifDirectoryBase.TryGetDateTime(ExifDirectoryBase.TagDateTimeOriginal, out checkDateTime))
if (exifDirectoryBase.TryGetDateTime(MetadataExtractor.Formats.Exif.ExifDirectoryBase.TagDateTimeOriginal, out checkDateTime))
{
result ??= checkDateTime;
results.Add(checkDateTime);
}
else
{
dateTime = Property.Models.Stateless.IProperty.GetDateTime(dateTimeFormat, exifDirectoryBase.GetString(ExifDirectoryBase.TagDateTimeOriginal));
dateTime = Property.Models.Stateless.IProperty.GetDateTime(dateTimeFormat, exifDirectoryBase.GetString(MetadataExtractor.Formats.Exif.ExifDirectoryBase.TagDateTimeOriginal));
if (dateTime is not null)
{
result ??= dateTime.Value;
@ -152,17 +149,17 @@ public class B_Metadata : IMetadata<MetadataExtractor.Directory>
}
}
}
AviDirectory? aviDirectory = directories.OfType<AviDirectory>().FirstOrDefault();
MetadataExtractor.Formats.Avi.AviDirectory? aviDirectory = directories.OfType<MetadataExtractor.Formats.Avi.AviDirectory>().FirstOrDefault();
if (aviDirectory is not null)
{
if (aviDirectory.TryGetDateTime(AviDirectory.TagDateTimeOriginal, out checkDateTime))
if (aviDirectory.TryGetDateTime(MetadataExtractor.Formats.Avi.AviDirectory.TagDateTimeOriginal, out checkDateTime))
{
result ??= checkDateTime;
results.Add(checkDateTime);
}
else
{
dateTime = Property.Models.Stateless.IProperty.GetDateTime(dateTimeFormat, aviDirectory.GetString(AviDirectory.TagDateTimeOriginal));
dateTime = Property.Models.Stateless.IProperty.GetDateTime(dateTimeFormat, aviDirectory.GetString(MetadataExtractor.Formats.Avi.AviDirectory.TagDateTimeOriginal));
if (dateTime is not null)
{
result ??= dateTime.Value;
@ -170,17 +167,17 @@ public class B_Metadata : IMetadata<MetadataExtractor.Directory>
}
}
}
QuickTimeMovieHeaderDirectory? quickTimeMovieHeaderDirectory = directories.OfType<QuickTimeMovieHeaderDirectory>().FirstOrDefault();
MetadataExtractor.Formats.QuickTime.QuickTimeMovieHeaderDirectory? quickTimeMovieHeaderDirectory = directories.OfType<MetadataExtractor.Formats.QuickTime.QuickTimeMovieHeaderDirectory>().FirstOrDefault();
if (quickTimeMovieHeaderDirectory is not null)
{
if (quickTimeMovieHeaderDirectory.TryGetDateTime(QuickTimeMovieHeaderDirectory.TagCreated, out checkDateTime))
if (quickTimeMovieHeaderDirectory.TryGetDateTime(MetadataExtractor.Formats.QuickTime.QuickTimeMovieHeaderDirectory.TagCreated, out checkDateTime))
{
result ??= checkDateTime;
results.Add(checkDateTime);
}
else
{
dateTime = Property.Models.Stateless.IProperty.GetDateTime(dateTimeFormat, quickTimeMovieHeaderDirectory.GetString(QuickTimeMovieHeaderDirectory.TagCreated));
dateTime = Property.Models.Stateless.IProperty.GetDateTime(dateTimeFormat, quickTimeMovieHeaderDirectory.GetString(MetadataExtractor.Formats.QuickTime.QuickTimeMovieHeaderDirectory.TagCreated));
if (dateTime is not null)
{
result ??= dateTime.Value;
@ -188,17 +185,17 @@ public class B_Metadata : IMetadata<MetadataExtractor.Directory>
}
}
}
QuickTimeTrackHeaderDirectory? quickTimeTrackHeaderDirectory = directories.OfType<QuickTimeTrackHeaderDirectory>().FirstOrDefault();
MetadataExtractor.Formats.QuickTime.QuickTimeTrackHeaderDirectory? quickTimeTrackHeaderDirectory = directories.OfType<MetadataExtractor.Formats.QuickTime.QuickTimeTrackHeaderDirectory>().FirstOrDefault();
if (quickTimeTrackHeaderDirectory is not null)
{
if (quickTimeTrackHeaderDirectory.TryGetDateTime(QuickTimeTrackHeaderDirectory.TagCreated, out checkDateTime))
if (quickTimeTrackHeaderDirectory.TryGetDateTime(MetadataExtractor.Formats.QuickTime.QuickTimeTrackHeaderDirectory.TagCreated, out checkDateTime))
{
result ??= checkDateTime;
results.Add(checkDateTime);
}
else
{
dateTime = Property.Models.Stateless.IProperty.GetDateTime(dateTimeFormat, quickTimeTrackHeaderDirectory.GetString(QuickTimeTrackHeaderDirectory.TagCreated));
dateTime = Property.Models.Stateless.IProperty.GetDateTime(dateTimeFormat, quickTimeTrackHeaderDirectory.GetString(MetadataExtractor.Formats.QuickTime.QuickTimeTrackHeaderDirectory.TagCreated));
if (dateTime is not null)
{
result ??= dateTime.Value;

View File

@ -1,36 +0,0 @@
using System.Text.Json;
using System.Text.Json.Serialization;
namespace View_by_Distance.Metadata.Models;
public record QuickTimeMovieHeader(string? Version1,
string? NextTrackId16,
string? CurrentTime15,
string? SelectionDuration14,
string? SelectionTime13,
string? PosterTime12,
string? PreviewDuration11,
string? PreviewTime10,
string? Matrix9,
string? PreferredVolume8,
string? PreferredRate7,
string? Duration6,
string? TimeScale5,
string? Modified4,
string? Created3,
string? Flags2)
{
public override string ToString()
{
string result = JsonSerializer.Serialize(this, QuickTimeMovieHeaderSourceGenerationContext.Default.QuickTimeMovieHeader);
return result;
}
}
[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSerializable(typeof(QuickTimeMovieHeader))]
public partial class QuickTimeMovieHeaderSourceGenerationContext : JsonSerializerContext
{
}

View File

@ -1,33 +0,0 @@
using System.Text.Json;
using System.Text.Json.Serialization;
namespace View_by_Distance.Metadata.Models;
public record QuickTimeTrackHeader(string? Version1,
string? Flags2,
string? Created3,
string? Modified4,
string? TrackId5,
string? Duration6,
string? Layer7,
string? AlternateGroup8,
string? Volume9,
string? Width10,
string? Height11,
string? Matrix12,
string? Rotation13)
{
public override string ToString()
{
string result = JsonSerializer.Serialize(this, QuickTimeTrackHeaderSourceGenerationContext.Default.QuickTimeTrackHeader);
return result;
}
}
[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSerializable(typeof(QuickTimeTrackHeader))]
public partial class QuickTimeTrackHeaderSourceGenerationContext : JsonSerializerContext
{
}

View File

@ -14,10 +14,10 @@ public interface IMetadata
Meters
}
ReadOnlyDictionary<string, MetadataExtractorDirectory> TestStatic_Covert(IReadOnlyList<MetadataExtractor.Directory> directories) =>
Covert(directories);
static ReadOnlyDictionary<string, MetadataExtractorDirectory> Covert(IReadOnlyList<MetadataExtractor.Directory> directories) =>
new(Metadata.Covert(directories));
ReadOnlyDictionary<string, MetadataExtractorDirectory> TestStatic_GetKeyValuePairs(IReadOnlyList<MetadataExtractor.Directory> directories) =>
GetKeyValuePairs(directories);
static ReadOnlyDictionary<string, MetadataExtractorDirectory> GetKeyValuePairs(IReadOnlyList<MetadataExtractor.Directory> directories) =>
new(Metadata.GetKeyValuePairs(directories));
string? TestStatic_GetModel(IReadOnlyList<MetadataExtractor.Directory> directories) =>
GetModel(directories);

View File

@ -9,7 +9,7 @@ namespace View_by_Distance.Metadata.Models.Stateless.Methods;
internal partial class Metadata
{
internal static Dictionary<string, MetadataExtractorDirectory> Covert(IReadOnlyList<MetadataExtractor.Directory> directories)
internal static Dictionary<string, MetadataExtractorDirectory> GetKeyValuePairs(IReadOnlyList<MetadataExtractor.Directory> directories)
{
Dictionary<string, MetadataExtractorDirectory> results = [];
MetadataExtractorTag metadataExtractorTag;