diff --git a/Move-By-Id/MoveById.cs b/Move-By-Id/MoveById.cs index ae88a51..83e7783 100644 --- a/Move-By-Id/MoveById.cs +++ b/Move-By-Id/MoveById.cs @@ -119,7 +119,7 @@ public class MoveById if (allFiles.Contains($"{fileHolder.FullName}.id")) continue; isValidImageFormatExtension = _PropertyConfiguration.ValidImageFormatExtensions.Contains(fileHolder.ExtensionLowered); - isIgnoreExtension = isValidImageFormatExtension && _Configuration.IgnoreExtensions.Contains(fileHolder.ExtensionLowered); + isIgnoreExtension = isValidImageFormatExtension && _PropertyConfiguration.IgnoreExtensions.Contains(fileHolder.ExtensionLowered); nameWithoutExtensionIsIdFormat = Shared.Models.Stateless.Methods.IProperty.NameWithoutExtensionIsIdFormat(fileHolder); if (!isIgnoreExtension && isValidImageFormatExtension) { diff --git a/Rename/Rename.cs b/Rename/Rename.cs index 64ef3db..7578c5a 100644 --- a/Rename/Rename.cs +++ b/Rename/Rename.cs @@ -1,4 +1,5 @@ -using Microsoft.Extensions.Configuration; +using CliWrap; +using Microsoft.Extensions.Configuration; using Phares.Shared; using Serilog; using ShellProgressBar; @@ -149,6 +150,7 @@ public class Rename DateTime? dateTime; DateTime?[] dateTimes; FileHolder fileHolder; + string[]? ffmpegFiles; bool isIgnoreExtension; string checkFileExtension; DateTime? minimumDateTime; @@ -187,13 +189,41 @@ public class Rename results.Add(new(fileHolder, checkFile)); continue; } - if (fileHolder.ExtensionLowered == ".id" || fileHolder.DirectoryName is null) + if (fileHolder.ExtensionLowered == ".id" || fileHolder.ExtensionLowered == ".lsv" || fileHolder.DirectoryName is null) continue; if (files.Contains($"{fileHolder.FullName}.id")) continue; - isValidImageFormatExtension = _PropertyConfiguration.ValidImageFormatExtensions.Contains(fileHolder.ExtensionLowered); - isIgnoreExtension = isValidImageFormatExtension && _Configuration.IgnoreExtensions.Contains(fileHolder.ExtensionLowered); nameWithoutExtensionIsIdFormat = Shared.Models.Stateless.Methods.IProperty.NameWithoutExtensionIsIdFormat(fileHolder); + if (nameWithoutExtensionIsIdFormat) + continue; + isValidImageFormatExtension = _PropertyConfiguration.ValidImageFormatExtensions.Contains(fileHolder.ExtensionLowered); + isIgnoreExtension = isValidImageFormatExtension && _PropertyConfiguration.IgnoreExtensions.Contains(fileHolder.ExtensionLowered); + if (!isIgnoreExtension && isValidImageFormatExtension) + ffmpegFiles = null; + else + { + try + { directories = MetadataExtractor.ImageMetadataReader.ReadMetadata(file); } + catch (Exception) { continue; } + CommandTask result = Cli.Wrap("ffmpeg.exe") + // .WithArguments(new[] { "-ss", "00:00:00", "-t", "00:00:00", "-i", file, "-qscale:v", "2", "-r", "0.01", $"{fileHolder.Name}-%4d.jpg" }) + .WithArguments(new[] { "-i", file, "-vframes", "1", $"{fileHolder.Name}-%4d.jpg" }) + .WithWorkingDirectory(fileHolder.DirectoryName) + .ExecuteAsync(); + result.Task.Wait(); + ffmpegFiles = Directory.GetFiles(fileHolder.DirectoryName, $"{fileHolder.Name}-*.jpg", SearchOption.TopDirectoryOnly); + if (!ffmpegFiles.Any()) + continue; + fileHolder = new(ffmpegFiles.First()); + if (!fileHolder.Name.EndsWith("-0001.jpg")) + throw new Exception(); + isValidImageFormatExtension = _PropertyConfiguration.ValidImageFormatExtensions.Contains(fileHolder.ExtensionLowered); + isIgnoreExtension = isValidImageFormatExtension && _PropertyConfiguration.IgnoreExtensions.Contains(fileHolder.ExtensionLowered); + if (isIgnoreExtension || !isValidImageFormatExtension) + continue; + if (fileHolder.DirectoryName is null) + continue; + } if (!isIgnoreExtension && isValidImageFormatExtension) { if (fileHolder.ExtensionLowered == jpeg) @@ -222,8 +252,6 @@ public class Rename if (fileHolder.DirectoryName is null) continue; } - if (nameWithoutExtensionIsIdFormat) - continue; } (dateTimes, id, message) = Shared.Models.Stateless.Methods.IProperty.Get(fileHolder, isIgnoreExtension, isValidImageFormatExtension); minimumDateTime = dateTimes.Min(); @@ -240,7 +268,7 @@ public class Rename fileName = Path.GetFileName(fileHolder.DirectoryName); if (fileName.Length < 4 || !int.TryParse(fileName[..4], out int year)) year = minimumDateTime.Value.Year; - if (_Configuration.IgnoreExtensions.Contains(fileHolder.ExtensionLowered)) + if (_PropertyConfiguration.IgnoreExtensions.Contains(fileHolder.ExtensionLowered)) continue; try { directories = MetadataExtractor.ImageMetadataReader.ReadMetadata(file); } @@ -262,6 +290,14 @@ public class Rename } if (id is null) continue; + if (ffmpegFiles is not null) + { + foreach (string ffmpegFile in ffmpegFiles) + File.Delete(ffmpegFile); + fileHolder = new(file); + if (fileHolder.DirectoryName is null) + continue; + } checkFileExtension = fileHolder.ExtensionLowered == jpeg ? jpg : fileHolder.ExtensionLowered; checkFile = Path.Combine(fileHolder.DirectoryName, $"{id.Value}{checkFileExtension}"); if (checkFile == fileHolder.FullName) diff --git a/Rename/Rename.csproj b/Rename/Rename.csproj index 149874d..a60d072 100644 --- a/Rename/Rename.csproj +++ b/Rename/Rename.csproj @@ -35,6 +35,7 @@ +