Drag-Drop-Move
This commit is contained in:
@ -7,16 +7,16 @@ internal abstract class Container
|
||||
|
||||
private record FilePair(string Path, string? Directory, bool IsUnique, List<string> Collection, Models.Item Item) { }
|
||||
|
||||
internal static DateTime[] GetContainerDateTimes(Models.Item[] filteredItems)
|
||||
internal static DateTime[] GetContainerDateTimes(IEnumerable<Models.Item> items)
|
||||
{
|
||||
DateTime[] results;
|
||||
DateTime? containerMinimumDateTime;
|
||||
DateTime? containerMaximumDateTime;
|
||||
containerMinimumDateTime = (from l in filteredItems select l.ImageFileHolder.LastWriteTime).Min();
|
||||
containerMinimumDateTime = (from l in items select l.ImageFileHolder.LastWriteTime).Min();
|
||||
if (containerMinimumDateTime is null)
|
||||
containerMaximumDateTime = null;
|
||||
else
|
||||
containerMaximumDateTime = (from l in filteredItems select l.ImageFileHolder.LastWriteTime).Max();
|
||||
containerMaximumDateTime = (from l in items select l.ImageFileHolder.LastWriteTime).Max();
|
||||
if (containerMinimumDateTime is null || containerMaximumDateTime is null)
|
||||
results = Array.Empty<DateTime>();
|
||||
else
|
||||
@ -94,10 +94,7 @@ internal abstract class Container
|
||||
filePairs = IDirectory.GetFiles(filesCollection, fileNamesToFiles, extension, compareFileNamesToFiles);
|
||||
renamed += IDirectory.MaybeMove(propertyConfiguration.RootDirectory, propertyConfiguration.ResultAllInOne, filePairs, aPropertySingletonDirectory, extension);
|
||||
if (renamed == 0)
|
||||
{
|
||||
_ = IPath.DeleteEmptyDirectories(aPropertySingletonDirectory);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (filePairs is null || jsonFilesCollection is null || compareFileNamesToFiles is null)
|
||||
throw new NullReferenceException(nameof(filePairs));
|
||||
@ -228,7 +225,7 @@ internal abstract class Container
|
||||
return (collection.Count, results.ToArray());
|
||||
}
|
||||
|
||||
internal static List<int> GetFilteredDistinct(Properties.IPropertyConfiguration propertyConfiguration, Models.Container[] containers)
|
||||
internal static List<int> GetFilteredDistinctIds(Properties.IPropertyConfiguration propertyConfiguration, Models.Container[] containers)
|
||||
{
|
||||
List<int> results = new();
|
||||
Models.Item[] filteredItems;
|
||||
@ -251,4 +248,37 @@ internal abstract class Container
|
||||
return results;
|
||||
}
|
||||
|
||||
internal static List<Models.Item> GetItems(Properties.IPropertyConfiguration propertyConfiguration, Models.Container[] containers, bool distinctItems, bool filterItems)
|
||||
{
|
||||
List<Models.Item> results = new();
|
||||
List<int> distinct = new();
|
||||
IEnumerable<Models.Item> filteredItems;
|
||||
foreach (Models.Container container in containers)
|
||||
{
|
||||
if (!container.Items.Any())
|
||||
continue;
|
||||
if (!filterItems)
|
||||
filteredItems = container.Items;
|
||||
else
|
||||
{
|
||||
filteredItems = GetFilterItems(propertyConfiguration, container);
|
||||
if (!filteredItems.Any())
|
||||
continue;
|
||||
}
|
||||
foreach (Models.Item item in filteredItems)
|
||||
{
|
||||
if (item.Property?.Id is null || item.ResizedFileHolder is null)
|
||||
continue;
|
||||
if (distinctItems)
|
||||
{
|
||||
if (distinct.Contains(item.Property.Id.Value))
|
||||
continue;
|
||||
distinct.Add(item.Property.Id.Value);
|
||||
}
|
||||
results.Add(item);
|
||||
}
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
}
|
@ -3,10 +3,10 @@ namespace View_by_Distance.Shared.Models.Stateless.Methods;
|
||||
public interface IContainer
|
||||
{
|
||||
|
||||
DateTime[] TestStatic_GetContainerDateTimes(Models.Item[] filteredItems) =>
|
||||
GetContainerDateTimes(filteredItems);
|
||||
static DateTime[] GetContainerDateTimes(Models.Item[] filteredItems) =>
|
||||
Container.GetContainerDateTimes(filteredItems);
|
||||
DateTime[] TestStatic_GetContainerDateTimes(IEnumerable<Models.Item> items) =>
|
||||
GetContainerDateTimes(items);
|
||||
static DateTime[] GetContainerDateTimes(IEnumerable<Models.Item> items) =>
|
||||
Container.GetContainerDateTimes(items);
|
||||
|
||||
Models.Item[] TestStatic_GetFilterItems(Properties.IPropertyConfiguration propertyConfiguration, Models.Container container) =>
|
||||
GetFilterItems(propertyConfiguration, container);
|
||||
@ -33,9 +33,14 @@ public interface IContainer
|
||||
static (int, Models.Container[]) GetContainers(Properties.IPropertyConfiguration propertyConfiguration, string aPropertySingletonDirectory) =>
|
||||
Container.GetContainers(propertyConfiguration, aPropertySingletonDirectory);
|
||||
|
||||
List<int> TestStatic_GetFilteredDistinct(Properties.IPropertyConfiguration propertyConfiguration, Models.Container[] containers) =>
|
||||
GetFilteredDistinct(propertyConfiguration, containers);
|
||||
static List<int> GetFilteredDistinct(Properties.IPropertyConfiguration propertyConfiguration, Models.Container[] containers) =>
|
||||
Container.GetFilteredDistinct(propertyConfiguration, containers);
|
||||
List<int> TestStatic_GetFilteredDistinctIds(Properties.IPropertyConfiguration propertyConfiguration, Models.Container[] containers) =>
|
||||
GetFilteredDistinctIds(propertyConfiguration, containers);
|
||||
static List<int> GetFilteredDistinctIds(Properties.IPropertyConfiguration propertyConfiguration, Models.Container[] containers) =>
|
||||
Container.GetFilteredDistinctIds(propertyConfiguration, containers);
|
||||
|
||||
List<Models.Item> TestStatic_GetItems(Properties.IPropertyConfiguration propertyConfiguration, Models.Container[] containers, bool distinctItems, bool filterItems) =>
|
||||
GetItems(propertyConfiguration, containers, distinctItems, filterItems);
|
||||
static List<Models.Item> GetItems(Properties.IPropertyConfiguration propertyConfiguration, Models.Container[] containers, bool distinctItems, bool filterItems) =>
|
||||
Container.GetItems(propertyConfiguration, containers, distinctItems, filterItems);
|
||||
|
||||
}
|
@ -95,6 +95,11 @@ public interface ILocation
|
||||
static int GetNormalizedRectangle(Models.Location location, int locationDigits, Models.OutputResolution outputResolution) =>
|
||||
Location.GetNormalizedRectangle(location.Bottom, OutputResolution.Get(outputResolution).Height, location.Left, locationDigits, location.Right, location.Top, OutputResolution.Get(outputResolution).Width, zCount: 1);
|
||||
|
||||
int TestStatic_GetNormalizedRectangle(int locationDigits) =>
|
||||
GetNormalizedRectangle(locationDigits);
|
||||
static int GetNormalizedRectangle(int locationDigits) =>
|
||||
Location.GetNormalizedRectangle(1, 1, 0, locationDigits, 1, 0, 1, zCount: 1);
|
||||
|
||||
int TestStatic_GetNormalizedRectangle(int bottom, int height, int left, int locationDigits, int right, int top, int width) =>
|
||||
GetNormalizedRectangle(bottom, height, left, locationDigits, right, top, width);
|
||||
static int GetNormalizedRectangle(int bottom, int height, int left, int locationDigits, int right, int top, int width) =>
|
||||
|
@ -28,6 +28,11 @@ public interface IMapping
|
||||
static string GetDeterministicHashCodeKey(int id, Models.Location location, int locationDigits, Models.OutputResolution outputResolution)
|
||||
=> $"{id}.{ILocation.GetLeftPadded(locationDigits, ILocation.GetNormalizedRectangle(location, locationDigits, outputResolution))}";
|
||||
|
||||
string TestStatic_GetDeterministicHashCodeKey(int id, int locationDigits)
|
||||
=> GetDeterministicHashCodeKey(id, locationDigits);
|
||||
static string GetDeterministicHashCodeKey(int id, int locationDigits)
|
||||
=> $"{id}.{ILocation.GetLeftPadded(locationDigits, ILocation.GetNormalizedRectangle(locationDigits))}";
|
||||
|
||||
(int?, int?) TestStatic_GetConverted(string facesFileNameExtension, string file) =>
|
||||
GetConverted(facesFileNameExtension, file);
|
||||
static (int?, int?) GetConverted(string facesFileNameExtension, string file) =>
|
||||
|
@ -34,6 +34,11 @@ public interface IPath
|
||||
static string[] GetDirectoryNames(string directory) =>
|
||||
XPath.GetDirectoryNames(directory).ToArray();
|
||||
|
||||
string[] TestStatic_GetDirectories(string directory) =>
|
||||
GetDirectories(directory);
|
||||
static string[] GetDirectories(string directory) =>
|
||||
XPath.GetDirectories(directory).ToArray();
|
||||
|
||||
string TestStatic_GetRelativePath(string path, int length, bool forceExtensionToLower) =>
|
||||
GetRelativePath(path, length, forceExtensionToLower);
|
||||
static string GetRelativePath(string path, int length, bool forceExtensionToLower) =>
|
||||
|
@ -138,6 +138,27 @@ internal abstract class XPath
|
||||
return results;
|
||||
}
|
||||
|
||||
internal static List<string> GetDirectories(string directory)
|
||||
{
|
||||
List<string> results = new();
|
||||
string? checkDirectory = directory;
|
||||
string? pathRoot = Path.GetPathRoot(directory);
|
||||
if (string.IsNullOrEmpty(pathRoot))
|
||||
throw new NullReferenceException(nameof(pathRoot));
|
||||
if (Directory.Exists(directory))
|
||||
results.Add(directory);
|
||||
for (int i = 0; i < int.MaxValue; i++)
|
||||
{
|
||||
checkDirectory = Path.GetDirectoryName(checkDirectory);
|
||||
if (string.IsNullOrEmpty(checkDirectory) || checkDirectory == pathRoot)
|
||||
break;
|
||||
results.Add(checkDirectory);
|
||||
}
|
||||
results.Add(pathRoot);
|
||||
results.Reverse();
|
||||
return results;
|
||||
}
|
||||
|
||||
internal static (int level, List<string> directories) Get(string rootDirectory, string sourceDirectory)
|
||||
{
|
||||
int result = 0;
|
||||
|
Reference in New Issue
Block a user