2023-01-02 14:58:22 -07:00

68 lines
2.3 KiB
C#

using View_by_Distance.Shared.Models;
namespace View_by_Distance.Drag_Drop;
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
ApplicationConfiguration.Initialize();
Application.Run(new DragDropSearch());
}
private static Item[] GetFilterItems(Models.Configuration configuration, Container container)
{
List<Item> results = new();
foreach (Item item in container.Items)
{
if (item.ImageFileHolder is not null
&& (item.Abandoned is null || !item.Abandoned.Value)
&& item.ValidImageFormatExtension
&& !configuration.IgnoreExtensions.Contains(item.ImageFileHolder.ExtensionLowered))
results.Add(item);
}
return results.ToArray();
}
private static bool IsIgnoreRelativePath(Models.Configuration configuration, string directory)
{
bool result = false;
string? checkDirectory = Path.GetFullPath(directory);
for (int i = 0; i < int.MaxValue; i++)
{
if (configuration.IgnoreRelativePaths.Contains(Path.GetFileName(checkDirectory)))
{
result = true;
break;
}
checkDirectory = Path.GetDirectoryName(checkDirectory);
if (string.IsNullOrEmpty(checkDirectory) || checkDirectory == configuration.PropertyConfiguration.RootDirectory)
break;
}
return result;
}
public static List<Item> GetItemCollection(Models.Configuration configuration, Container[] containers)
{
List<Item> results = new();
Item[] filteredItems;
foreach (Container container in containers)
{
if (!container.Items.Any())
continue;
if (configuration.IgnoreRelativePaths.Any(l => container.SourceDirectory.Contains(l)) && IsIgnoreRelativePath(configuration, container.SourceDirectory))
continue;
filteredItems = GetFilterItems(configuration, container);
if (!filteredItems.Any())
continue;
foreach (Item item in filteredItems)
results.Add(item);
}
return results;
}
}