InSkipCollection and MakeHiddenIfAllItemsAreHidden

This commit is contained in:
Mike Phares 2023-03-26 12:20:28 -07:00
parent bea7a172c5
commit 7b33fbe050
7 changed files with 75 additions and 10 deletions

View File

@ -340,6 +340,11 @@ public class D2_FaceParts
if (File.Exists(checkFile))
File.Delete(checkFile);
}
else if (face.Mapping?.MappingFromFilter.InSkipCollection is not null && face.Mapping.MappingFromFilter.InSkipCollection.Value)
{
if (File.Exists(checkFile))
File.Delete(checkFile);
}
else
{
if (!hasNotMapped)

View File

@ -268,6 +268,7 @@ public partial class DlibDotNet
bool? isFocusModel;
int faceAreaPermyriad;
int confidencePercent;
bool? inSkipCollection;
int normalizedRectangle;
string deterministicHashCodeKey;
MappingFromFilter mappingFromFilter;
@ -292,11 +293,14 @@ public partial class DlibDotNet
isFocusModel = true;
}
}
mappingFromFilter = new(isFocusModel, isFocusRelativePath, isIgnoreRelativePath);
foreach (Shared.Models.Face face in faces)
{
if (item.Property?.Id is null || face.FaceEncoding is null || face.Location is null || face.OutputResolution is null)
{
inSkipCollection = null;
mappingFromLocation = null;
mappingFromFilter = new(isFocusModel, isFocusRelativePath, isIgnoreRelativePath, inSkipCollection);
}
else
{
confidencePercent = Shared.Models.Stateless.Methods.ILocation.GetConfidencePercent(_Configuration.FaceConfidencePercent, _Configuration.RangeFaceConfidence, face.Location.Confidence);
@ -304,6 +308,8 @@ public partial class DlibDotNet
normalizedRectangle = Shared.Models.Stateless.Methods.ILocation.GetNormalizedRectangle(face.Location, Shared.Models.Stateless.ILocation.Digits, face.OutputResolution);
deterministicHashCodeKey = Shared.Models.Stateless.Methods.IMapping.GetDeterministicHashCodeKey(item.Property.Id.Value, face.Location, Shared.Models.Stateless.ILocation.Digits, face.OutputResolution);
mappingFromLocation = new(faceAreaPermyriad, confidencePercent, deterministicHashCodeKey, normalizedRectangle);
inSkipCollection = mapLogic.InSkipCollection(item.Property.Id.Value, mappingFromLocation);
mappingFromFilter = new(isFocusModel, isFocusRelativePath, isIgnoreRelativePath, inSkipCollection);
}
mapping = new(mappingFromItem, mappingFromFilter, mappingFromLocation, mappingFromPhotoPrismCollection);
_ = mapLogic.UpdateMappingFromPerson(mapping);
@ -770,7 +776,9 @@ public partial class DlibDotNet
{
string dFacesContentDirectory = Path.Combine(dResultsFullGroupDirectory, "()");
string d2FacePartsContentDirectory = Path.Combine(d2ResultsFullGroupDirectory, "()");
string d2FacePartsContentCollectionDirectory = Path.Combine(d2ResultsFullGroupDirectory, "[()]");
Shared.Models.Stateless.Methods.IPath.ChangeDateForEmptyDirectories(d2FacePartsContentDirectory, ticks);
Shared.Models.Stateless.Methods.IPath.MakeHiddenIfAllItemsAreHidden(d2FacePartsContentCollectionDirectory);
string dFacesCollectionDirectory = Path.Combine(dResultsFullGroupDirectory, "[]", _Configuration.PropertyConfiguration.ResultAllInOne);
Dictionary<int, Dictionary<int, Mapping>> idToNormalizedRectangleToMapping = Map.Models.Stateless.Methods.IMapLogic.GetIdToNormalizedRectangleToFace(mappingCollection);
if (Directory.Exists(fPhotoPrismContentDirectory))

View File

@ -180,7 +180,6 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
const int zero = 0;
string mappingSegmentB;
PersonBirthday personBirthday;
List<int>? normalizedRectangles;
PersonContainer[]? personContainers;
Dictionary<int, PersonContainer[]>? normalizedRectangleToPersonContainers;
for (int i = 1; i < 2; i++)
@ -189,14 +188,14 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
continue;
if (!_IdThenNormalizedRectangleToPersonContainers.TryGetValue(mapping.MappingFromItem.Id, out normalizedRectangleToPersonContainers))
{
if (_SkipCollection.TryGetValue(mapping.MappingFromItem.Id, out normalizedRectangles) && normalizedRectangles.Contains(mapping.MappingFromLocation.NormalizedRectangle))
if (mapping.MappingFromFilter.InSkipCollection is not null && mapping.MappingFromFilter.InSkipCollection.Value)
continue;
result += 1;
continue;
}
if (!normalizedRectangleToPersonContainers.TryGetValue(mapping.MappingFromLocation.NormalizedRectangle, out personContainers))
{
if (_SkipCollection.TryGetValue(mapping.MappingFromItem.Id, out normalizedRectangles) && normalizedRectangles.Contains(mapping.MappingFromLocation.NormalizedRectangle))
if (mapping.MappingFromFilter.InSkipCollection is not null && mapping.MappingFromFilter.InSkipCollection.Value)
continue;
result += 1;
continue;
@ -455,9 +454,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
SaveContainer? saveContainer;
FileHolder facePartsFileHolder;
FileHolder hiddenFaceFileHolder;
List<int>? normalizedRectangles;
Dictionary<int, Mapping>? normalizedRectangleToMapping;
bool skipNotSkipDirectoriesAny = _Configuration.SkipNotSkipDirectories.Any();
string forceSingleImageHumanized = nameof(Shared.Models.Stateless.IMapLogic.ForceSingleImage).Humanize(LetterCasing.Title);
foreach (Mapping mapping in mappingCollection)
{
@ -466,9 +463,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
directoryName = Path.GetDirectoryName(mapping.MappingFromItem.RelativePath);
if (directoryName is null)
throw new NotSupportedException();
if (_SkipCollection.TryGetValue(mapping.MappingFromItem.Id, out normalizedRectangles) && normalizedRectangles.Contains(mapping.MappingFromLocation.NormalizedRectangle))
continue;
if (mapping.By is null && skipNotSkipDirectoriesAny)
if (mapping.MappingFromFilter.InSkipCollection is not null && mapping.MappingFromFilter.InSkipCollection.Value)
continue;
(by, isByMapping, isBySorting) = Get(useFiltersCounter, sortingContainersAny, forceSingleImageHumanized, mapping);
if (isByMapping && !saveMapped)
@ -1350,4 +1345,11 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
return results;
}
public bool InSkipCollection(int id, MappingFromLocation mappingFromLocation)
{
bool result;
result = _SkipCollection.TryGetValue(id, out List<int>? normalizedRectangles) && normalizedRectangles.Contains(mappingFromLocation.NormalizedRectangle);
return result;
}
}

View File

@ -80,13 +80,15 @@ public class MappingFromFilter : Properties.IMappingFromFilter
public bool? IsFocusModel { init; get; }
public bool? IsFocusRelativePath { init; get; }
public bool? IsIgnoreRelativePath { init; get; }
public bool? InSkipCollection { init; get; }
[JsonConstructor]
public MappingFromFilter(bool? isFocusModel, bool? isFocusRelativePath, bool? isIgnoreRelativePath)
public MappingFromFilter(bool? isFocusModel, bool? isFocusRelativePath, bool? isIgnoreRelativePath, bool? inSkipCollection)
{
IsFocusModel = isFocusModel;
IsFocusRelativePath = isFocusRelativePath;
IsIgnoreRelativePath = isIgnoreRelativePath;
InSkipCollection = inSkipCollection;
}
public override string ToString()

View File

@ -19,6 +19,7 @@ public interface IMappingFromFilter
public bool? IsFocusModel { init; get; }
public bool? IsFocusRelativePath { init; get; }
public bool? IsIgnoreRelativePath { init; get; }
public bool? InSkipCollection { init; get; }
}

View File

@ -18,6 +18,11 @@ public interface IPath
static void ChangeDateForEmptyDirectories(string rootDirectory, long ticks) =>
XPath.ChangeDateForEmptyDirectories(rootDirectory, ticks);
void TestStatic_MakeHiddenIfAllItemsAreHidden(string rootDirectory) =>
MakeHiddenIfAllItemsAreHidden(rootDirectory);
static void MakeHiddenIfAllItemsAreHidden(string rootDirectory) =>
XPath.MakeHiddenIfAllItemsAreHidden(rootDirectory);
void TestStatic_DeleteEmptyDirectories(string rootDirectory, List<string> deletedDirectories) =>
DeleteEmptyDirectories(rootDirectory, deletedDirectories);
static void DeleteEmptyDirectories(string rootDirectory, List<string> deletedDirectories) =>

View File

@ -190,4 +190,46 @@ internal abstract class XPath
}
}
internal static void MakeHiddenIfAllItemsAreHidden(string rootDirectory)
{
bool check;
FileInfo fileInfo;
IEnumerable<string> files;
DirectoryInfo directoryInfo;
IEnumerable<string> subDirectories;
string[] directories = Directory.GetDirectories(rootDirectory, "*", SearchOption.AllDirectories);
foreach (string directory in directories)
{
directoryInfo = new(directory);
if (directoryInfo.Attributes.HasFlag(FileAttributes.Hidden))
continue;
check = true;
subDirectories = Directory.EnumerateDirectories(directory, "*", SearchOption.TopDirectoryOnly);
foreach (string subDirectory in subDirectories)
{
directoryInfo = new(subDirectory);
if (!directoryInfo.Attributes.HasFlag(FileAttributes.Hidden))
{
check = false;
break;
}
}
if (!check)
continue;
files = Directory.EnumerateFiles(directory, "*", SearchOption.TopDirectoryOnly);
foreach (string file in files)
{
fileInfo = new(file);
if (!fileInfo.Attributes.HasFlag(FileAttributes.Hidden))
{
check = false;
break;
}
}
if (!check)
continue;
directoryInfo.Attributes |= FileAttributes.Hidden;
}
}
}