diff --git a/Metadata/Models/Stateless/Exif.cs b/Metadata/Models/Stateless/Exif.cs index 3353013..5555023 100644 --- a/Metadata/Models/Stateless/Exif.cs +++ b/Metadata/Models/Stateless/Exif.cs @@ -520,8 +520,12 @@ internal abstract class Exif internal static Shared.Models.ExifDirectory GetExifDirectory(Shared.Models.FilePath filePath, Shared.Models.DeterministicHashCode deterministicHashCode) { - Shared.Models.ExifDirectory? result; - System.Drawing.Size? size = Dimensions.GetDimensions(filePath.FullName); + Shared.Models.ExifDirectory result; + System.Drawing.Size? size; + try + { size = Dimensions.GetDimensions(filePath.FullName); } + catch (Exception) + { size = null; } IReadOnlyList directories = ImageMetadataReader.ReadMetadata(filePath.FullName); result = Covert(filePath, deterministicHashCode, size, directories); return result; diff --git a/Rename/Models/Binder/RenameConfiguration.cs b/Rename/Models/Binder/RenameConfiguration.cs index c972136..d31cdd8 100644 --- a/Rename/Models/Binder/RenameConfiguration.cs +++ b/Rename/Models/Binder/RenameConfiguration.cs @@ -10,6 +10,7 @@ public class RenameConfiguration public string? DefaultMaker { get; set; } public bool? ForceNewId { get; set; } public string[]? IgnoreExtensions { get; set; } + public bool? OnlySaveIdentifiersToDisk { get; set; } public string? RelativePropertyCollectionFile { get; set; } public string[]? SidecarExtensions { get; set; } public bool? SkipIdFiles { get; set; } @@ -53,6 +54,7 @@ public class RenameConfiguration if (configuration.DefaultMaker is null) throw new NullReferenceException(nameof(configuration.DefaultMaker)); if (configuration.ForceNewId is null) throw new NullReferenceException(nameof(configuration.ForceNewId)); if (configuration.IgnoreExtensions is null) throw new NullReferenceException(nameof(configuration.IgnoreExtensions)); + if (configuration.OnlySaveIdentifiersToDisk is null) throw new NullReferenceException(nameof(configuration.OnlySaveIdentifiersToDisk)); if (configuration.RelativePropertyCollectionFile is null) throw new NullReferenceException(nameof(configuration.RelativePropertyCollectionFile)); if (configuration.SidecarExtensions is null) throw new NullReferenceException(nameof(configuration.SidecarExtensions)); if (configuration.SkipIdFiles is null) throw new NullReferenceException(nameof(configuration.SkipIdFiles)); @@ -63,6 +65,7 @@ public class RenameConfiguration configuration.DefaultMaker, configuration.ForceNewId.Value, configuration.IgnoreExtensions, + configuration.OnlySaveIdentifiersToDisk.Value, configuration.RelativePropertyCollectionFile, configuration.SidecarExtensions, configuration.SkipIdFiles.Value, diff --git a/Rename/Models/Identifier.cs b/Rename/Models/Identifier.cs index 69941f9..6da5c06 100644 --- a/Rename/Models/Identifier.cs +++ b/Rename/Models/Identifier.cs @@ -3,7 +3,7 @@ using System.Text.Json.Serialization; namespace View_by_Distance.Rename.Models; -internal sealed record Identifier(int Id, string PaddedId) +internal sealed record Identifier(int Id, long Length, string PaddedId, long Ticks) { public override string ToString() diff --git a/Rename/Models/RenameConfiguration.cs b/Rename/Models/RenameConfiguration.cs index 5ddc92c..eb7d329 100644 --- a/Rename/Models/RenameConfiguration.cs +++ b/Rename/Models/RenameConfiguration.cs @@ -8,6 +8,7 @@ public record RenameConfiguration(Shared.Models.MetadataConfiguration MetadataCo string DefaultMaker, bool ForceNewId, string[] IgnoreExtensions, + bool OnlySaveIdentifiersToDisk, string RelativePropertyCollectionFile, string[] SidecarExtensions, bool SkipIdFiles, diff --git a/Rename/Rename.cs b/Rename/Rename.cs index 26511cb..3df4ed8 100644 --- a/Rename/Rename.cs +++ b/Rename/Rename.cs @@ -439,7 +439,7 @@ public partial class Rename : IRename, IDisposable if (record.ExifDirectory.Id is null) continue; paddedId = IId.GetPaddedId(renameConfiguration.MetadataConfiguration, record.ExifDirectory.Id.Value, record.FilePath.IsIgnore, index: null); - identifiers.Add(new(record.ExifDirectory.Id.Value, paddedId)); + identifiers.Add(new(record.ExifDirectory.Id.Value, record.FilePath.Length, paddedId, record.DateTime.Ticks)); } string json = JsonSerializer.Serialize(identifiers.OrderBy(l => l.PaddedId).ToArray(), IdentifierCollectionSourceGenerationContext.Default.IdentifierArray); _ = IPath.WriteAllText(Path.Combine(aMetadataCollectionDirectory, $"{ticks}.json"), json, updateDateWhenMatches: false, compareBeforeWrite: true, updateToWhenMatches: null); @@ -457,12 +457,15 @@ public partial class Rename : IRename, IDisposable logger?.LogInformation("{Ticks} {RootDirectory}", ticks, directoryInfo.FullName); ReadOnlyCollection recordBCollection = GetRecordBCollection(rename, appSettings, renameConfiguration, directoryInfo); SaveIdentifiersToDisk(ticks, renameConfiguration, aMetadataCollectionDirectory, recordBCollection); - ReadOnlyCollection toDoCollection = GetToDoCollection(renameConfiguration, identifiers, recordBCollection); - ReadOnlyCollection lines = RenameFilesInDirectories(toDoCollection); - if (lines.Count != 0) + if (!renameConfiguration.OnlySaveIdentifiersToDisk) { - File.WriteAllLines($"D:/Tmp/Phares/{DateTime.Now.Ticks}.tsv", lines); - _ = IPath.DeleteEmptyDirectories(directoryInfo.FullName); + ReadOnlyCollection toDoCollection = GetToDoCollection(renameConfiguration, identifiers, recordBCollection); + ReadOnlyCollection lines = RenameFilesInDirectories(toDoCollection); + if (lines.Count != 0) + { + File.WriteAllLines($"D:/Tmp/Phares/{DateTime.Now.Ticks}.tsv", lines); + _ = IPath.DeleteEmptyDirectories(directoryInfo.FullName); + } } }