2023-01-25
This commit is contained in:
parent
375447ce97
commit
e31506cd37
@ -743,7 +743,7 @@ public partial class DlibDotNet
|
|||||||
if (_Configuration.SaveShortcutsForOutputResolutions.Contains(outputResolution))
|
if (_Configuration.SaveShortcutsForOutputResolutions.Contains(outputResolution))
|
||||||
{
|
{
|
||||||
List<Item> filteredItems = GetItems(argZero, containers);
|
List<Item> filteredItems = GetItems(argZero, containers);
|
||||||
mapLogic.SaveShortcutsForOutputResolutions(personKeyToIds, filteredItems, mappingCollection);
|
mapLogic.SaveShortcutsForOutputResolutionsDuringMapLogic(personKeyToIds, filteredItems, mappingCollection);
|
||||||
}
|
}
|
||||||
if (_Configuration.PersonCharactersCopyCount > 0 && !string.IsNullOrEmpty(_Configuration.PersonCharacters))
|
if (_Configuration.PersonCharactersCopyCount > 0 && !string.IsNullOrEmpty(_Configuration.PersonCharacters))
|
||||||
mapLogic.CopyAtLeastOneMappedFiles(dFacesContentDirectory, a2PeopleSingletonDirectory, mappingCollection);
|
mapLogic.CopyAtLeastOneMappedFiles(dFacesContentDirectory, a2PeopleSingletonDirectory, mappingCollection);
|
||||||
@ -1100,7 +1100,7 @@ public partial class DlibDotNet
|
|||||||
if (_PropertyRootExistedBefore || container is not null)
|
if (_PropertyRootExistedBefore || container is not null)
|
||||||
break;
|
break;
|
||||||
if (!string.IsNullOrEmpty(a2PeopleContentDirectory) && _Configuration.SaveShortcutsForOutputResolutions.Contains(outputResolution))
|
if (!string.IsNullOrEmpty(a2PeopleContentDirectory) && _Configuration.SaveShortcutsForOutputResolutions.Contains(outputResolution))
|
||||||
mapLogic.SaveShortcutsForOutputResolutions(a2PeopleContentDirectory, personKeyToIds, idToLocationContainers, mappingCollection, totalNotMapped);
|
mapLogic.SaveShortcutsForOutputResolutionsPreMapLogic(eDistanceContentDirectory, personKeyToIds, idToLocationContainers, mappingCollection, totalNotMapped);
|
||||||
if (!string.IsNullOrEmpty(a2PeopleContentDirectory) && _Configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions.Contains(outputResolution))
|
if (!string.IsNullOrEmpty(a2PeopleContentDirectory) && _Configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions.Contains(outputResolution))
|
||||||
mapLogic.SaveFilteredOriginalImagesFromJLinks(_Configuration.JLinks, _PersonContainers, a2PeopleContentDirectory, personKeyToIds, mappingCollection, totalNotMapped);
|
mapLogic.SaveFilteredOriginalImagesFromJLinks(_Configuration.JLinks, _PersonContainers, a2PeopleContentDirectory, personKeyToIds, mappingCollection, totalNotMapped);
|
||||||
(cResultsFullGroupDirectory, dResultsFullGroupDirectory, d2ResultsFullGroupDirectory) = GetResultsFullGroupDirectories(outputResolution);
|
(cResultsFullGroupDirectory, dResultsFullGroupDirectory, d2ResultsFullGroupDirectory) = GetResultsFullGroupDirectories(outputResolution);
|
||||||
|
@ -2,6 +2,7 @@ using Humanizer;
|
|||||||
using ShellProgressBar;
|
using ShellProgressBar;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
using View_by_Distance.Shared.Models;
|
using View_by_Distance.Shared.Models;
|
||||||
using View_by_Distance.Shared.Models.Stateless.Methods;
|
using View_by_Distance.Shared.Models.Stateless.Methods;
|
||||||
using WindowsShortcutFactory;
|
using WindowsShortcutFactory;
|
||||||
@ -1082,20 +1083,18 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
SaveContainers(totalNotMapped, null, saveContainers);
|
SaveContainers(totalNotMapped, null, saveContainers);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SaveShortcutsForOutputResolutions(string a2PeopleContentDirectory, Dictionary<long, List<int>> personKeyToIds, Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>> idToLocationContainers, Mapping[] mappingCollection, int totalNotMapped)
|
private List<SaveShortcutsForOutputResolutions> GetCollectionForSaveShortcutsForOutputResolutionsPreMapLogic(string eDistanceContentDirectory, Dictionary<long, List<int>> personKeyToIds, Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>> idToLocationContainers, Mapping[] mappingCollection)
|
||||||
{
|
{
|
||||||
|
List<SaveShortcutsForOutputResolutions> results = new();
|
||||||
if (_Configuration is null)
|
if (_Configuration is null)
|
||||||
throw new NullReferenceException(nameof(_Configuration));
|
throw new NullReferenceException(nameof(_Configuration));
|
||||||
string? model;
|
string? model;
|
||||||
long personKey;
|
long personKey;
|
||||||
string fileName;
|
string fileName;
|
||||||
string directory;
|
string directory;
|
||||||
string hiddenFile;
|
|
||||||
List<long>? personKeys;
|
List<long>? personKeys;
|
||||||
string personKeyFormatted;
|
string personKeyFormatted;
|
||||||
WindowsShortcut windowsShortcut;
|
|
||||||
IReadOnlyList<MetadataExtractor.Directory> directories;
|
IReadOnlyList<MetadataExtractor.Directory> directories;
|
||||||
List<SaveShortcutsForOutputResolutions> collection = new();
|
|
||||||
List<LocationContainer<MetadataExtractor.Directory>>? locationContainers;
|
List<LocationContainer<MetadataExtractor.Directory>>? locationContainers;
|
||||||
Dictionary<int, List<long>> idToPersonKeys = Stateless.Methods.IMapLogic.GetIdToPersonKeys(personKeyToIds);
|
Dictionary<int, List<long>> idToPersonKeys = Stateless.Methods.IMapLogic.GetIdToPersonKeys(personKeyToIds);
|
||||||
foreach (Mapping mapping in mappingCollection)
|
foreach (Mapping mapping in mappingCollection)
|
||||||
@ -1114,9 +1113,10 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
model = Metadata.Models.Stateless.Methods.IMetadata.GetModel(directories);
|
model = Metadata.Models.Stateless.Methods.IMetadata.GetModel(directories);
|
||||||
if (!string.IsNullOrEmpty(model) && !string.IsNullOrEmpty(model.Trim()))
|
if (!string.IsNullOrEmpty(model) && !string.IsNullOrEmpty(model.Trim()))
|
||||||
{
|
{
|
||||||
directory = Path.Combine(a2PeopleContentDirectory, "Model Shortcuts", model, Path.GetFileName(mapping.MappingFromItem.ImageFileHolder.DirectoryName));
|
model = Regex.Replace(model, @"[\\,\/,\:,\*,\?,\"",\<,\>,\|]", "_");
|
||||||
|
directory = Path.Combine(eDistanceContentDirectory, "Model Shortcuts", model, Path.GetFileName(mapping.MappingFromItem.ImageFileHolder.DirectoryName));
|
||||||
fileName = Path.Combine(directory, $"{mapping.MappingFromItem.ImageFileHolder.Name}.lnk");
|
fileName = Path.Combine(directory, $"{mapping.MappingFromItem.ImageFileHolder.Name}.lnk");
|
||||||
collection.Add(new(mapping.MappingFromItem.ImageFileHolder.FullName, directory, mapping.MappingFromItem.MinimumDateTime, fileName, mapping.MappingFromLocation.DeterministicHashCodeKey));
|
results.Add(new(mapping.MappingFromItem.ImageFileHolder.FullName, directory, mapping.MappingFromItem.MinimumDateTime, fileName, mapping.MappingFromLocation.DeterministicHashCodeKey));
|
||||||
}
|
}
|
||||||
if (!idToPersonKeys.TryGetValue(mapping.MappingFromItem.Id, out personKeys))
|
if (!idToPersonKeys.TryGetValue(mapping.MappingFromItem.Id, out personKeys))
|
||||||
continue;
|
continue;
|
||||||
@ -1124,20 +1124,29 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
if (!personKeys.Contains(mapping.MappingFromPerson.PersonBirthday.Value.Ticks))
|
if (!personKeys.Contains(mapping.MappingFromPerson.PersonBirthday.Value.Ticks))
|
||||||
continue;
|
continue;
|
||||||
personKeyFormatted = IPersonBirthday.GetFormatted(_Configuration.PersonBirthdayFormat, mapping.MappingFromPerson.PersonBirthday);
|
personKeyFormatted = IPersonBirthday.GetFormatted(_Configuration.PersonBirthdayFormat, mapping.MappingFromPerson.PersonBirthday);
|
||||||
directory = Path.Combine(a2PeopleContentDirectory, "Person Key Shortcuts", personKeyFormatted, Path.GetFileName(mapping.MappingFromItem.ImageFileHolder.DirectoryName));
|
directory = Path.Combine(eDistanceContentDirectory, "Person Key Shortcuts", personKeyFormatted, Path.GetFileName(mapping.MappingFromItem.ImageFileHolder.DirectoryName));
|
||||||
fileName = Path.Combine(directory, $"{mapping.MappingFromItem.ImageFileHolder.Name}.lnk");
|
fileName = Path.Combine(directory, $"{mapping.MappingFromItem.ImageFileHolder.Name}.lnk");
|
||||||
collection.Add(new(mapping.MappingFromItem.ImageFileHolder.FullName, directory, mapping.MappingFromItem.MinimumDateTime, fileName, mapping.MappingFromLocation.DeterministicHashCodeKey));
|
results.Add(new(mapping.MappingFromItem.ImageFileHolder.FullName, directory, mapping.MappingFromItem.MinimumDateTime, fileName, mapping.MappingFromLocation.DeterministicHashCodeKey));
|
||||||
directory = Path.Combine(a2PeopleContentDirectory, "Name Shortcuts", mapping.MappingFromPerson.DisplayDirectoryName, Path.GetFileName(mapping.MappingFromItem.ImageFileHolder.DirectoryName));
|
directory = Path.Combine(eDistanceContentDirectory, "Name Shortcuts", mapping.MappingFromPerson.DisplayDirectoryName, Path.GetFileName(mapping.MappingFromItem.ImageFileHolder.DirectoryName));
|
||||||
fileName = Path.Combine(directory, $"{mapping.MappingFromItem.ImageFileHolder.Name}.lnk");
|
fileName = Path.Combine(directory, $"{mapping.MappingFromItem.ImageFileHolder.Name}.lnk");
|
||||||
collection.Add(new(mapping.MappingFromItem.ImageFileHolder.FullName, directory, mapping.MappingFromItem.MinimumDateTime, fileName, mapping.MappingFromLocation.DeterministicHashCodeKey));
|
results.Add(new(mapping.MappingFromItem.ImageFileHolder.FullName, directory, mapping.MappingFromItem.MinimumDateTime, fileName, mapping.MappingFromLocation.DeterministicHashCodeKey));
|
||||||
}
|
}
|
||||||
string[] distinctDirectories = (from l in collection select l.Directory).Distinct().ToArray();
|
return results;
|
||||||
foreach (string d in distinctDirectories)
|
}
|
||||||
|
|
||||||
|
public void SaveShortcutsForOutputResolutionsPreMapLogic(string eDistanceContentDirectory, Dictionary<long, List<int>> personKeyToIds, Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>> idToLocationContainers, Mapping[] mappingCollection, int totalNotMapped)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(d))
|
string hiddenFile;
|
||||||
|
WindowsShortcut windowsShortcut;
|
||||||
|
List<SaveShortcutsForOutputResolutions> collection = new();
|
||||||
|
collection = GetCollectionForSaveShortcutsForOutputResolutionsPreMapLogic(eDistanceContentDirectory, personKeyToIds, idToLocationContainers, mappingCollection);
|
||||||
|
string[] distinctDirectories = (from l in collection select l.Directory).Distinct().ToArray();
|
||||||
|
foreach (string directory in distinctDirectories)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(directory))
|
||||||
continue;
|
continue;
|
||||||
if (!Directory.Exists(d))
|
if (!Directory.Exists(directory))
|
||||||
_ = Directory.CreateDirectory(d);
|
_ = Directory.CreateDirectory(directory);
|
||||||
}
|
}
|
||||||
foreach (SaveShortcutsForOutputResolutions s in collection)
|
foreach (SaveShortcutsForOutputResolutions s in collection)
|
||||||
{
|
{
|
||||||
@ -1161,7 +1170,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private (List<(string, DateTime[])>, List<SaveShortcutsForOutputResolutions>) GetCollectionForSaveShortcutsForOutputResolutions(Dictionary<long, List<int>> personKeyToIds, List<Item> filteredItems, Mapping[] mappingCollection)
|
private (List<(string, DateTime[])>, List<SaveShortcutsForOutputResolutions>) GetCollectionForSaveShortcutsForOutputResolutionsDuringMapLogic(Dictionary<long, List<int>> personKeyToIds, List<Item> filteredItems, Mapping[] mappingCollection)
|
||||||
{
|
{
|
||||||
if (_Configuration is null)
|
if (_Configuration is null)
|
||||||
throw new NullReferenceException(nameof(_Configuration));
|
throw new NullReferenceException(nameof(_Configuration));
|
||||||
@ -1242,14 +1251,14 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
return new(directoriesAndDateTimes, collection);
|
return new(directoriesAndDateTimes, collection);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SaveShortcutsForOutputResolutions(Dictionary<long, List<int>> personKeyToIds, List<Item> filteredItems, Mapping[] mappingCollection)
|
public void SaveShortcutsForOutputResolutionsDuringMapLogic(Dictionary<long, List<int>> personKeyToIds, List<Item> filteredItems, Mapping[] mappingCollection)
|
||||||
{
|
{
|
||||||
if (_Configuration is null)
|
if (_Configuration is null)
|
||||||
throw new NullReferenceException(nameof(_Configuration));
|
throw new NullReferenceException(nameof(_Configuration));
|
||||||
WindowsShortcut windowsShortcut;
|
WindowsShortcut windowsShortcut;
|
||||||
List<(string, DateTime[])> directoriesAndDateTimes;
|
List<(string, DateTime[])> directoriesAndDateTimes;
|
||||||
List<SaveShortcutsForOutputResolutions> collection;
|
List<SaveShortcutsForOutputResolutions> collection;
|
||||||
(directoriesAndDateTimes, collection) = GetCollectionForSaveShortcutsForOutputResolutions(personKeyToIds, filteredItems, mappingCollection);
|
(directoriesAndDateTimes, collection) = GetCollectionForSaveShortcutsForOutputResolutionsDuringMapLogic(personKeyToIds, filteredItems, mappingCollection);
|
||||||
string[] directories = (from l in collection select l.Directory).Distinct().ToArray();
|
string[] directories = (from l in collection select l.Directory).Distinct().ToArray();
|
||||||
foreach (string directory in directories)
|
foreach (string directory in directories)
|
||||||
{
|
{
|
||||||
@ -1258,15 +1267,16 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
if (!Directory.Exists(directory))
|
if (!Directory.Exists(directory))
|
||||||
_ = Directory.CreateDirectory(directory);
|
_ = Directory.CreateDirectory(directory);
|
||||||
}
|
}
|
||||||
foreach (SaveShortcutsForOutputResolutions saveShortcutsForOutputResolutions in collection)
|
foreach (SaveShortcutsForOutputResolutions s in collection)
|
||||||
{
|
{
|
||||||
if (File.Exists(saveShortcutsForOutputResolutions.FileName))
|
if (File.Exists(s.FileName))
|
||||||
continue;
|
continue;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
windowsShortcut = new() { Path = saveShortcutsForOutputResolutions.FullName, Description = saveShortcutsForOutputResolutions.Description };
|
windowsShortcut = new() { Path = s.FullName, Description = s.Description };
|
||||||
windowsShortcut.Save(saveShortcutsForOutputResolutions.FileName);
|
windowsShortcut.Save(s.FileName);
|
||||||
windowsShortcut.Dispose();
|
windowsShortcut.Dispose();
|
||||||
|
File.SetLastWriteTime(s.FileName, s.DateTime);
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{ }
|
{ }
|
||||||
|
@ -10,15 +10,22 @@ public class AppSettings
|
|||||||
public string CopyTo { init; get; }
|
public string CopyTo { init; get; }
|
||||||
public string ComparePathsFile { init; get; }
|
public string ComparePathsFile { init; get; }
|
||||||
public int MaxDegreeOfParallelism { init; get; }
|
public int MaxDegreeOfParallelism { init; get; }
|
||||||
|
public int MaxMinutesDelta { init; get; }
|
||||||
public string WorkingDirectoryName { init; get; }
|
public string WorkingDirectoryName { init; get; }
|
||||||
|
|
||||||
[JsonConstructor]
|
[JsonConstructor]
|
||||||
public AppSettings(string company, string copyTo, string comparePathsFile, int maxDegreeOfParallelism, string workingDirectoryName)
|
public AppSettings(string company,
|
||||||
|
string copyTo,
|
||||||
|
string comparePathsFile,
|
||||||
|
int maxDegreeOfParallelism,
|
||||||
|
int maxMinutesDelta,
|
||||||
|
string workingDirectoryName)
|
||||||
{
|
{
|
||||||
Company = company;
|
Company = company;
|
||||||
CopyTo = copyTo;
|
CopyTo = copyTo;
|
||||||
ComparePathsFile = comparePathsFile;
|
ComparePathsFile = comparePathsFile;
|
||||||
MaxDegreeOfParallelism = maxDegreeOfParallelism;
|
MaxDegreeOfParallelism = maxDegreeOfParallelism;
|
||||||
|
MaxMinutesDelta = maxMinutesDelta;
|
||||||
WorkingDirectoryName = workingDirectoryName;
|
WorkingDirectoryName = workingDirectoryName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@ public class AppSettings
|
|||||||
public string CopyTo { get; set; }
|
public string CopyTo { get; set; }
|
||||||
public string ComparePathsFile { get; set; }
|
public string ComparePathsFile { get; set; }
|
||||||
public int? MaxDegreeOfParallelism { get; set; }
|
public int? MaxDegreeOfParallelism { get; set; }
|
||||||
|
public int? MaxMinutesDelta { get; set; }
|
||||||
public string WorkingDirectoryName { get; set; }
|
public string WorkingDirectoryName { get; set; }
|
||||||
|
|
||||||
#nullable restore
|
#nullable restore
|
||||||
@ -27,11 +28,14 @@ public class AppSettings
|
|||||||
Models.AppSettings result;
|
Models.AppSettings result;
|
||||||
if (appSettings?.MaxDegreeOfParallelism is null)
|
if (appSettings?.MaxDegreeOfParallelism is null)
|
||||||
throw new NullReferenceException(nameof(appSettings.MaxDegreeOfParallelism));
|
throw new NullReferenceException(nameof(appSettings.MaxDegreeOfParallelism));
|
||||||
|
if (appSettings?.MaxMinutesDelta is null)
|
||||||
|
throw new NullReferenceException(nameof(appSettings.MaxMinutesDelta));
|
||||||
result = new(
|
result = new(
|
||||||
appSettings.Company,
|
appSettings.Company,
|
||||||
appSettings.CopyTo,
|
appSettings.CopyTo,
|
||||||
appSettings.ComparePathsFile,
|
appSettings.ComparePathsFile,
|
||||||
appSettings.MaxDegreeOfParallelism.Value,
|
appSettings.MaxDegreeOfParallelism.Value,
|
||||||
|
appSettings.MaxMinutesDelta.Value,
|
||||||
appSettings.WorkingDirectoryName
|
appSettings.WorkingDirectoryName
|
||||||
);
|
);
|
||||||
return result;
|
return result;
|
||||||
|
@ -176,7 +176,7 @@ public class Rename
|
|||||||
dateTime = Metadata.Models.Stateless.Methods.IMetadata.GetMinimumDateTime(dateTimes, year, directories);
|
dateTime = Metadata.Models.Stateless.Methods.IMetadata.GetMinimumDateTime(dateTimes, year, directories);
|
||||||
timeSpan = new TimeSpan(int.MaxValue);
|
timeSpan = new TimeSpan(int.MaxValue);
|
||||||
}
|
}
|
||||||
if (dateTime is not null && string.IsNullOrEmpty(_AppSettings.CopyTo) && timeSpan.TotalMinutes > 2)
|
if (dateTime is not null && string.IsNullOrEmpty(_AppSettings.CopyTo) && timeSpan.TotalMinutes > _AppSettings.MaxMinutesDelta)
|
||||||
{
|
{
|
||||||
checkFileExtension = fileHolder.ExtensionLowered == jpeg ? jpg : fileHolder.ExtensionLowered;
|
checkFileExtension = fileHolder.ExtensionLowered == jpeg ? jpg : fileHolder.ExtensionLowered;
|
||||||
checkFile = Path.Combine(fileHolder.DirectoryName, $"{dateTime.Value:yyyy-MM-dd}.{dateTime.Value.Ticks}.{fileHolder.Length}{checkFileExtension}");
|
checkFile = Path.Combine(fileHolder.DirectoryName, $"{dateTime.Value:yyyy-MM-dd}.{dateTime.Value.Ticks}.{fileHolder.Length}{checkFileExtension}");
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
{
|
{
|
||||||
"ComparePathsFile": "C:/Users/mikep/AppData/Local/PharesApps/Drag-Drop-Explorer/2023_03/638095825580115652.json",
|
"ComparePathsFile": "C:/Users/mikep/AppData/Local/PharesApps/Drag-Drop-Explorer/2023_04/638105008748068423.json",
|
||||||
"CopyTo": "",
|
"CopyTo": "L",
|
||||||
"Logging": {
|
"Logging": {
|
||||||
"LogLevel": {
|
"LogLevel": {
|
||||||
"Log4netProvider": "Debug"
|
"Log4netProvider": "Debug"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"MaxDegreeOfParallelism": 6,
|
"MaxDegreeOfParallelism": 6,
|
||||||
|
"MaxMinutesDelta": 2,
|
||||||
"Serilog": {
|
"Serilog": {
|
||||||
"MinimumLevel": "Debug"
|
"MinimumLevel": "Debug"
|
||||||
},
|
},
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"MaxDegreeOfParallelism": 6,
|
"MaxDegreeOfParallelism": 6,
|
||||||
|
"MaxMinutesDelta": 2,
|
||||||
"Serilog": {
|
"Serilog": {
|
||||||
"Using": [
|
"Using": [
|
||||||
"Serilog.Sinks.Console",
|
"Serilog.Sinks.Console",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user