Sidecar
This commit is contained in:
@ -2,7 +2,6 @@ using System.Collections.ObjectModel;
|
||||
using System.Text.Json;
|
||||
using View_by_Distance.Metadata.Models.Stateless;
|
||||
using View_by_Distance.Shared.Models;
|
||||
using View_by_Distance.Shared.Models.Properties;
|
||||
using View_by_Distance.Shared.Models.Stateless.Methods;
|
||||
|
||||
namespace View_by_Distance.Metadata.Models;
|
||||
@ -132,42 +131,4 @@ public class A_Metadata
|
||||
return (fileInfo, result);
|
||||
}
|
||||
|
||||
public static Action<string> SetExifDirectoryCollection(IRename rename, IRenameConfiguration renameConfiguration, A_Metadata metadata, List<(FilePath, FileInfo, ExifDirectory)> exifDirectories)
|
||||
{
|
||||
return file =>
|
||||
{
|
||||
rename.Tick();
|
||||
FileInfo fileInfo;
|
||||
FilePath? ffmpegFilePath;
|
||||
ExifDirectory exifDirectory;
|
||||
FileHolder fileHolder = new(file);
|
||||
ReadOnlyCollection<string>? ffmpegFiles;
|
||||
DeterministicHashCode deterministicHashCode;
|
||||
FilePath filePath = FilePath.Get(renameConfiguration.MetadataConfiguration, fileHolder, index: null);
|
||||
if (!renameConfiguration.SkipIdFiles || filePath.Id is null || !filePath.IsIntelligentIdFormat && filePath.SortOrder is not null)
|
||||
{
|
||||
if (filePath.Id is not null)
|
||||
{
|
||||
ffmpegFiles = null;
|
||||
deterministicHashCode = new(null, filePath.Id, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
ffmpegFiles = rename.ConvertAndGetFfmpegFiles(renameConfiguration, filePath);
|
||||
ffmpegFilePath = ffmpegFiles.Count == 0 ? null : FilePath.Get(renameConfiguration.MetadataConfiguration, new(ffmpegFiles[0]), index: null);
|
||||
deterministicHashCode = ffmpegFilePath is null ? rename.GetDeterministicHashCode(filePath) : rename.GetDeterministicHashCode(ffmpegFilePath);
|
||||
}
|
||||
(fileInfo, exifDirectory) = metadata.GetMetadataCollection(renameConfiguration.MetadataConfiguration, filePath, deterministicHashCode);
|
||||
lock (exifDirectories)
|
||||
exifDirectories.Add(new(filePath, fileInfo, exifDirectory));
|
||||
if (ffmpegFiles is not null)
|
||||
{
|
||||
foreach (string ffmpegFile in ffmpegFiles)
|
||||
File.Delete(ffmpegFile);
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
}
|
75
Metadata/Models/Stateless/Get.cs
Normal file
75
Metadata/Models/Stateless/Get.cs
Normal file
@ -0,0 +1,75 @@
|
||||
using System.Collections.ObjectModel;
|
||||
using View_by_Distance.Shared.Models;
|
||||
using View_by_Distance.Shared.Models.Properties;
|
||||
using View_by_Distance.Shared.Models.Stateless.Methods;
|
||||
|
||||
namespace View_by_Distance.Metadata.Models.Stateless.Methods;
|
||||
|
||||
internal static class Get
|
||||
{
|
||||
|
||||
internal static ReadOnlyDictionary<string, List<FileHolder>> GetKeyValuePairs(IEnumerable<string> files)
|
||||
{
|
||||
Dictionary<string, List<FileHolder>> results = [];
|
||||
string key;
|
||||
FileHolder fileHolder;
|
||||
List<FileHolder>? fileHolders;
|
||||
foreach (string file in files)
|
||||
{
|
||||
fileHolder = FileHolder.Get(file);
|
||||
if (fileHolder.DirectoryName is null)
|
||||
continue;
|
||||
key = $"{Path.Combine(fileHolder.DirectoryName, fileHolder.NameWithoutExtension)}";
|
||||
if (!results.TryGetValue(key, out fileHolders))
|
||||
{
|
||||
results.Add(key, []);
|
||||
if (!results.TryGetValue(key, out fileHolders))
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
fileHolders.Add(fileHolder);
|
||||
}
|
||||
return new(results);
|
||||
}
|
||||
|
||||
internal static Action<string> SetExifDirectoryCollection(IRename rename, IRenameConfiguration renameConfiguration, A_Metadata metadata, List<string> distinct, List<(FilePath, FileInfo, ExifDirectory, ReadOnlyCollection<FileHolder>)> collection)
|
||||
{
|
||||
return file =>
|
||||
{
|
||||
rename.Tick();
|
||||
FileInfo fileInfo;
|
||||
FilePath? ffmpegFilePath;
|
||||
ExifDirectory exifDirectory;
|
||||
ReadOnlyCollection<string>? ffmpegFiles;
|
||||
DeterministicHashCode deterministicHashCode;
|
||||
FileHolder fileHolder = FileHolder.Get(file);
|
||||
FilePath filePath = FilePath.Get(renameConfiguration.MetadataConfiguration, fileHolder, index: null);
|
||||
string key = $"{Path.Combine(fileHolder.DirectoryName ?? throw new NotSupportedException(), fileHolder.NameWithoutExtension)}";
|
||||
if (distinct.Contains(key))
|
||||
throw new NotSupportedException("Turn off parallelism when sidecar files are present!");
|
||||
if (!renameConfiguration.SkipIdFiles || filePath.Id is null || !filePath.IsIntelligentIdFormat && filePath.SortOrder is not null)
|
||||
{
|
||||
if (filePath.Id is not null)
|
||||
{
|
||||
ffmpegFiles = null;
|
||||
deterministicHashCode = new(null, filePath.Id, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
ffmpegFiles = rename.ConvertAndGetFfmpegFiles(renameConfiguration, filePath);
|
||||
ffmpegFilePath = ffmpegFiles.Count == 0 ? null : FilePath.Get(renameConfiguration.MetadataConfiguration, FileHolder.Get(ffmpegFiles[0]), index: null);
|
||||
deterministicHashCode = ffmpegFilePath is null ? rename.GetDeterministicHashCode(filePath) : rename.GetDeterministicHashCode(ffmpegFilePath);
|
||||
}
|
||||
(fileInfo, exifDirectory) = metadata.GetMetadataCollection(renameConfiguration.MetadataConfiguration, filePath, deterministicHashCode);
|
||||
lock (collection)
|
||||
collection.Add(new(filePath, fileInfo, exifDirectory, new([])));
|
||||
if (ffmpegFiles is not null)
|
||||
{
|
||||
foreach (string ffmpegFile in ffmpegFiles)
|
||||
File.Delete(ffmpegFile);
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
}
|
@ -1,6 +1,8 @@
|
||||
using MetadataExtractor;
|
||||
using System.Collections.ObjectModel;
|
||||
using View_by_Distance.Shared.Models;
|
||||
using View_by_Distance.Shared.Models.Properties;
|
||||
using View_by_Distance.Shared.Models.Stateless.Methods;
|
||||
|
||||
namespace View_by_Distance.Metadata.Models.Stateless.Methods;
|
||||
|
||||
@ -55,4 +57,14 @@ public interface IMetadata
|
||||
static double? GetDistance(double originLatitude, double originLongitude, double destinationLatitude, double destinationLongitude, int decimalPlaces = 1, DistanceUnit distanceUnit = DistanceUnit.Miles) =>
|
||||
GPS.GetDistance(originLatitude, originLongitude, destinationLatitude, destinationLongitude, decimalPlaces, distanceUnit);
|
||||
|
||||
Action<string> TestStatic_SetExifDirectoryCollection(IRename rename, IRenameConfiguration renameConfiguration, A_Metadata metadata, List<string> distinct, List<(FilePath, FileInfo, ExifDirectory, ReadOnlyCollection<FileHolder>)> collection) =>
|
||||
SetExifDirectoryCollection(rename, renameConfiguration, metadata, distinct, collection);
|
||||
static Action<string> SetExifDirectoryCollection(IRename rename, IRenameConfiguration renameConfiguration, A_Metadata metadata, List<string> distinct, List<(FilePath, FileInfo, ExifDirectory, ReadOnlyCollection<FileHolder>)> collection) =>
|
||||
Get.SetExifDirectoryCollection(rename, renameConfiguration, metadata, distinct, collection);
|
||||
|
||||
ReadOnlyDictionary<string, List<FileHolder>> TestStatic_GetKeyValuePairs(IEnumerable<string> files) =>
|
||||
GetKeyValuePairs(files);
|
||||
static ReadOnlyDictionary<string, List<FileHolder>> GetKeyValuePairs(IEnumerable<string> files) =>
|
||||
Get.GetKeyValuePairs(files);
|
||||
|
||||
}
|
Reference in New Issue
Block a user