Back to before AA
This commit is contained in:
@ -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());
|
||||
}
|
||||
|
||||
}
|
@ -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
|
||||
{
|
||||
}
|
@ -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;
|
||||
|
@ -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
|
||||
{
|
||||
}
|
@ -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
|
||||
{
|
||||
}
|
@ -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);
|
||||
|
@ -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;
|
||||
|
Reference in New Issue
Block a user