GetAlternateFileLines
This commit is contained in:
@ -338,9 +338,9 @@ internal abstract partial class XDirectory
|
||||
return (from l in results orderby l.FileHolder.CreationTime, l.FileHolder.FullName.Length descending select l).ToArray();
|
||||
}
|
||||
|
||||
internal static (string[], List<(Models.FileHolder, string)>) GetToDoCollection(Properties.IPropertyConfiguration propertyConfiguration, bool copyDuplicates, bool ifCanUseId, List<string[]> filesCollection, string[] directories, Action? tick)
|
||||
internal static (string[], List<(Models.FileHolder, string?, string)>) GetToDoCollection(Properties.IPropertyConfiguration propertyConfiguration, bool copyDuplicates, bool ifCanUseId, List<string[]> filesCollection, string[] directories, Action? tick)
|
||||
{
|
||||
List<(Models.FileHolder, string)> results = new();
|
||||
List<(Models.FileHolder, string?, string)> results = new();
|
||||
string paddedId;
|
||||
string checkFile;
|
||||
string directory;
|
||||
@ -350,7 +350,10 @@ internal abstract partial class XDirectory
|
||||
bool wrapped = false;
|
||||
string directoryName;
|
||||
bool paddedCheck = false;
|
||||
string fileDirectoryName;
|
||||
SortedRecord sortedRecord;
|
||||
string? alternateCheckFile;
|
||||
string? alternateDirectory;
|
||||
Models.FileHolder fileHolder;
|
||||
List<int> distinctIds = new();
|
||||
List<string> distinct = new();
|
||||
@ -358,6 +361,7 @@ internal abstract partial class XDirectory
|
||||
List<string> distinctDirectories = new();
|
||||
int intMinValueLength = int.MinValue.ToString().Length;
|
||||
SortedRecord[] sortedRecords = GetSortedRecords(filesCollection);
|
||||
string? alternateResultAllInOne = !propertyConfiguration.ResultAllInOne.Contains(' ') ? null : propertyConfiguration.ResultAllInOne.Replace(' ', '-');
|
||||
for (int i = 0; i < sortedRecords.Length; i++)
|
||||
{
|
||||
tick?.Invoke();
|
||||
@ -365,19 +369,24 @@ internal abstract partial class XDirectory
|
||||
fileHolder = sortedRecord.FileHolder;
|
||||
if (fileHolder.Name.EndsWith("len") || fileHolder.ExtensionLowered == ".id" || fileHolder.ExtensionLowered == ".lsv" || fileHolder.DirectoryName is null)
|
||||
continue;
|
||||
(_, directoryIndex) = IPath.GetDirectoryNameAndIndex(propertyConfiguration.ResultAllInOneSubdirectoryLength, fileHolder.NameWithoutExtension);
|
||||
directoryName = Path.GetFileName(fileHolder.DirectoryName);
|
||||
if (directoryName.Length < propertyConfiguration.ResultAllInOneSubdirectoryLength + 3 || !fileHolder.Name.StartsWith(directoryName))
|
||||
(directoryName, directoryIndex) = IPath.GetDirectoryNameAndIndex(propertyConfiguration.ResultAllInOneSubdirectoryLength, fileHolder.NameWithoutExtension);
|
||||
fileDirectoryName = Path.GetFileName(fileHolder.DirectoryName);
|
||||
if (fileDirectoryName.Length < propertyConfiguration.ResultAllInOneSubdirectoryLength + 3 || !fileHolder.Name.StartsWith(fileDirectoryName))
|
||||
{
|
||||
if (wrapped)
|
||||
continue;
|
||||
directory = directories[directoryIndex];
|
||||
if (alternateResultAllInOne is null)
|
||||
alternateDirectory = null;
|
||||
else
|
||||
alternateDirectory = Path.Combine(Path.GetDirectoryName(Path.GetDirectoryName(directory)) ?? directory, alternateResultAllInOne, directoryName);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!wrapped)
|
||||
wrapped = true;
|
||||
directory = Path.Combine(directories[directoryIndex], directoryName);
|
||||
alternateDirectory = null;
|
||||
directory = Path.Combine(directories[directoryIndex], fileDirectoryName);
|
||||
}
|
||||
if (ifCanUseId && sortedRecord.NameWithoutExtensionIsIdFormat && sortedRecord.Id is not null && fileHolder.DirectoryName is not null)
|
||||
{
|
||||
@ -401,6 +410,7 @@ internal abstract partial class XDirectory
|
||||
continue;
|
||||
if (!copyDuplicates)
|
||||
continue;
|
||||
alternateDirectory = null;
|
||||
for (int j = 1; j < int.MaxValue; j++)
|
||||
{
|
||||
fileInfo = new(checkFile);
|
||||
@ -416,8 +426,9 @@ internal abstract partial class XDirectory
|
||||
}
|
||||
if (distinct.Contains(checkFile))
|
||||
continue;
|
||||
alternateCheckFile = null;
|
||||
distinct.Add(checkFile);
|
||||
results.Add(new(fileHolder, checkFile));
|
||||
results.Add(new(fileHolder, alternateCheckFile, checkFile));
|
||||
if (!distinctDirectories.Contains(directory))
|
||||
distinctDirectories.Add(directory);
|
||||
break;
|
||||
@ -427,7 +438,15 @@ internal abstract partial class XDirectory
|
||||
distinct.Add(checkFile);
|
||||
if (sortedRecord.Id is not null)
|
||||
distinctIds.Add(sortedRecord.Id.Value);
|
||||
results.Add(new(fileHolder, checkFile));
|
||||
if (string.IsNullOrEmpty(alternateDirectory))
|
||||
alternateCheckFile = null;
|
||||
else
|
||||
{
|
||||
alternateCheckFile = Path.Combine(alternateDirectory, $"{sortedRecord.Id}{fileHolder.ExtensionLowered}.tsv");
|
||||
if (!distinctDirectories.Contains(alternateDirectory))
|
||||
distinctDirectories.Add(alternateDirectory);
|
||||
}
|
||||
results.Add(new(fileHolder, alternateCheckFile, checkFile));
|
||||
if (!distinctDirectories.Contains(directory))
|
||||
distinctDirectories.Add(directory);
|
||||
}
|
||||
@ -436,13 +455,15 @@ internal abstract partial class XDirectory
|
||||
return (distinctDirectories.ToArray(), results);
|
||||
}
|
||||
|
||||
internal static List<string> CopyOrMove(List<(Models.FileHolder, string)> toDoCollection, bool move, bool moveBack, Action? tick)
|
||||
internal static List<string> CopyOrMove(List<(Models.FileHolder, string?, string)> toDoCollection, bool move, bool moveBack, Action? tick)
|
||||
{
|
||||
List<string> results = new();
|
||||
FileInfo fileInfo;
|
||||
foreach ((Models.FileHolder fileHolder, string to) in toDoCollection)
|
||||
foreach ((Models.FileHolder fileHolder, string? alternateFile, string to) in toDoCollection)
|
||||
{
|
||||
tick?.Invoke();
|
||||
if (alternateFile is not null)
|
||||
_ = XPath.WriteAllText(alternateFile, fileHolder.FullName, updateDateWhenMatches: false, compareBeforeWrite: true, updateToWhenMatches: null);
|
||||
fileInfo = new(to);
|
||||
if (fileInfo.Exists)
|
||||
{
|
||||
|
Reference in New Issue
Block a user