This commit is contained in:
Mike Phares 2023-07-31 12:09:53 -07:00
parent c06435abf9
commit f62825d9aa
39 changed files with 206 additions and 125 deletions

View File

@ -1,15 +0,0 @@
---
created: "2023-07-21T18:26:38.894Z"
updated: "2023-07-30T04:45:55.208Z"
assigned: ""
progress: 0
started: "2023-07-21T04:38:02.640Z"
type: "kanbn"
---
# Console for Markdown to Genealogical Data Communication
- This will allow for more information about a person
- [ ] Copy concept done in ~~~File-Folder-Helper~~~ use File-Folder-Helper
- [ ] Look at Id, Sex and body links (maybe use linkIndex.json)

View File

@ -1,15 +0,0 @@
---
created: 2023-07-30T04:46:47.436Z
updated: 2023-07-30T04:46:47.431Z
assigned: ""
progress: 0
tags: []
started: 2023-07-30T04:46:47.436Z
---
# GED as Golden
[ ] From directories create one *.pged file to compare
[x] From *.rmtree file export *.ged file
[ ] Read *.ged and write five files
[?] Create directories to compare with current

40
.vscode/settings.json vendored
View File

@ -51,45 +51,5 @@
"extensions.ignoreRecommendations": true,
"[markdown]": {
"editor.wordWrap": "off"
},
"foam.files.ignore": [
".foam/**/*",
".stfolder/**/*",
".UserSecrets/**/*",
"**/_layouts/**/*",
"**/_site/**/*",
"**/.vscode/**/*",
"**/node_modules/**/*"
],
"kanbn.showBurndownButton": false,
"kanbn.showSprintButton": false,
"foam.links.hover.enable": false,
"foam.placeholders.exclude": [
".kanbn/Archive/**/*"
],
"foam.orphans.exclude": [
".Applications/**/*",
".DevOps/**/*",
".Fab/**/*",
".journal/**/*"
],
"foam.graph.style": {
"background": "#202020",
"node": {
"topic": "#bc2a3c",
"kanbn": "#ff7b00",
"basic-note": "#773b93",
"daily-note": "#ff9d00",
"note": "#f2cb1d",
"placeholder": "#ff9d00",
"tag": "#0494c1",
"bug": "#bc2a3c",
"epic": "#ff7b00",
"feature": "#773b93",
"issue": "#ff9d00",
"task": "#f2cb1d",
"test-case": "#ff9d00",
"user-story": "#0494c1"
}
}
}

12
.vscode/tasks.json vendored
View File

@ -57,13 +57,19 @@
{
"label": "File-Folder-Helper AOT s M Self .Kanbn Tasks",
"type": "shell",
"command": "& L:/DevOps/Mesa_FI/File-Folder-Helper/bin/Release/net7.0/win-x64/publish/File-Folder-Helper.exe s M '.kanbn/tasks'",
"command": "& L:/DevOps/Mesa_FI/File-Folder-Helper/bin/Release/net7.0/win-x64/publish/File-Folder-Helper.exe s M .kanbn/tasks",
"problemMatcher": []
},
{
"label": "File-Folder-Helper AOT s M Self .Kanbn Tasks",
"label": "File-Folder-Helper AOT s G 638263275367065735",
"type": "shell",
"command": "& L:/DevOps/Mesa_FI/File-Folder-Helper/bin/Release/net7.0/win-x64/publish/File-Folder-Helper.exe s G D:/1-Images-A/Images-dd514b88-Results/A2) People/dd514b88/{} -g D:/1-Images-A/Images-dd514b88-Results/A2) People/dd514b88/([])/Code-638160743318283885/aaa/638160743318283885.ged -d D:/1-Images-A/Images-dd514b88-Results/A2) People/dd514b88/{2}",
"command": "& L:/DevOps/Mesa_FI/File-Folder-Helper/bin/Release/net7.0/win-x64/publish/File-Folder-Helper.exe s G 'D:/1-Images-A/Images-dd514b88-Results/A2) People/dd514b88/{}' -g 'D:/1-Images-A/Images-dd514b88-Results/A2) People/dd514b88/([])/File-Folder-Helper/638263275367065735/638263275367065735.ged' -d 'D:/1-Images-A/Images-dd514b88-Results/A2) People/dd514b88/{2}'",
"problemMatcher": []
},
{
"label": "File-Folder-Helper AOT s C Backup",
"type": "shell",
"command": "& L:/DevOps/Mesa_FI/File-Folder-Helper/bin/Release/net7.0/win-x64/publish/File-Folder-Helper.exe s C C:/1-Images-A/Images-dd514b88-Results-30/()",
"problemMatcher": []
}
]

View File

@ -18,6 +18,11 @@ internal abstract class MapLogic
bool IsDefault,
string MappedFaceFile);
private record TicksDirectory(string Directory,
string DirectoryName,
long DirectoryTicks,
float? TotalDays);
private record PersonKeyFormattedIdThenWholePercentages(string PersonKeyFormatted,
string[] PersonDisplayDirectoryNames,
bool IsDefault,
@ -70,11 +75,11 @@ internal abstract class MapLogic
}
}
private static void MoveTo(string actionDirectory, string ticksDirectory, string directory, string personKeyFormatted, string yearDirectoryName, string alphaDirectoryName, string[] files, string[] facesFileNames)
private static void MoveTo(string actionDirectory, TicksDirectory ticksDirectory, string directory, string personKeyFormatted, string yearDirectoryName, string alphaDirectoryName, string[] files, string[] facesFileNames)
{
string checkFile;
string actionDirectoryName = Path.GetFileName(actionDirectory);
string checkDirectory = actionDirectoryName.StartsWith("y", StringComparison.CurrentCultureIgnoreCase) ? Path.Combine(ticksDirectory, personKeyFormatted, yearDirectoryName, alphaDirectoryName) : Path.Combine(directory, actionDirectoryName);
string checkDirectory = actionDirectoryName.StartsWith("y", StringComparison.CurrentCultureIgnoreCase) ? Path.Combine(ticksDirectory.Directory, personKeyFormatted, yearDirectoryName, alphaDirectoryName) : Path.Combine(directory, actionDirectoryName);
if (!Directory.Exists(checkDirectory))
_ = Directory.CreateDirectory(checkDirectory);
foreach (string file in files)
@ -91,7 +96,7 @@ internal abstract class MapLogic
}
}
private static void Individually(Configuration configuration, string ticksDirectory, string directory)
private static void Individually(Configuration configuration, TicksDirectory ticksDirectory, string directory)
{
bool isDefault;
string[] files;
@ -196,9 +201,9 @@ internal abstract class MapLogic
}
}
private static void MovedToNewestPersonKeyFormatted(string personKeyFormatted, string newestPersonKeyFormatted, string ticksDirectory, string personKeyDirectory)
private static void MovedToNewestPersonKeyFormatted(string personKeyFormatted, string newestPersonKeyFormatted, TicksDirectory ticksDirectory, string personKeyDirectory)
{
string newestPersonKeyDirectory = Path.Combine(ticksDirectory, newestPersonKeyFormatted);
string newestPersonKeyDirectory = Path.Combine(ticksDirectory.Directory, newestPersonKeyFormatted);
if (Directory.Exists(newestPersonKeyDirectory))
MoveFiles(personKeyFormatted, personKeyDirectory, newestPersonKeyFormatted, newestPersonKeyDirectory);
else
@ -215,11 +220,10 @@ internal abstract class MapLogic
}
}
private static List<Record> DeleteEmptyDirectoriesAndGetCollection(Configuration configuration, Dictionary<string, string> personKeyFormattedToNewestPersonKeyFormatted, List<string> personKeyFormattedCollection, string[] ticksDirectories, string message)
private static List<Record> DeleteEmptyDirectoriesAndGetCollection(Configuration configuration, Dictionary<string, string> personKeyFormattedToNewestPersonKeyFormatted, List<string> personKeyFormattedCollection, List<TicksDirectory> ticksDirectories, string message)
{
List<Record> results = new();
int? id;
long ticks;
bool isDefault;
string[] files;
string fileName;
@ -230,7 +234,6 @@ internal abstract class MapLogic
string checkDirectory;
string[] yearDirectories;
string personKeyFormatted;
string ticksDirectoryName;
string? personFirstInitial;
bool isReservedDirectoryName;
List<string> distinct = new();
@ -243,16 +246,11 @@ internal abstract class MapLogic
string manualCopyHumanized = nameof(Shared.Models.Stateless.IMapLogic.ManualCopy).Humanize(LetterCasing.Title);
string forceSingleImageHumanized = nameof(Shared.Models.Stateless.IMapLogic.ForceSingleImage).Humanize(LetterCasing.Title);
ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true };
using ProgressBar progressBar = new(ticksDirectories.Length, message, options);
foreach (string ticksDirectory in ticksDirectories)
using ProgressBar progressBar = new(ticksDirectories.Count, message, options);
foreach (TicksDirectory ticksDirectory in ticksDirectories)
{
progressBar.Tick();
ticksDirectoryName = Path.GetFileName(ticksDirectory);
if (ticksDirectoryName.Length < 3 || ticksDirectoryName.First() != '(' || ticksDirectoryName[^1] != ')')
continue;
if (!long.TryParse(ticksDirectoryName[1..^1], out ticks))
continue;
personKeyDirectories = Directory.GetDirectories(ticksDirectory, "*", SearchOption.TopDirectoryOnly);
personKeyDirectories = Directory.GetDirectories(ticksDirectory.Directory, "*", SearchOption.TopDirectoryOnly);
foreach (string personKeyDirectory in personKeyDirectories)
{
personKeyFormatted = Path.GetFileName(personKeyDirectory);
@ -265,7 +263,7 @@ internal abstract class MapLogic
_ = personKeyFormattedToNewestPersonKeyFormatted.TryGetValue(personKeyFormatted, out newestPersonKeyFormatted);
if (personKeyFormattedToNewestPersonKeyFormatted.Count > 0 && newestPersonKeyFormatted is null)
{
timeSpan = new TimeSpan(DateTime.Now.Ticks - ticks);
timeSpan = new TimeSpan(DateTime.Now.Ticks - ticksDirectory.DirectoryTicks);
if (timeSpan.TotalDays > 3)
throw new Exception($"{configuration.MappingDefaultName} are only allowed within x days!");
}
@ -375,8 +373,8 @@ internal abstract class MapLogic
}
_ = IPath.DeleteEmptyDirectories(personKeyDirectory);
}
_ = IPath.DeleteEmptyDirectories(ticksDirectory);
_ = IPath.DeleteEmptyDirectories(ticksDirectory);
_ = IPath.DeleteEmptyDirectories(ticksDirectory.Directory);
_ = IPath.DeleteEmptyDirectories(ticksDirectory.Directory);
}
if (check)
throw new Exception("PersonKey director(ies) where renamed. Please restart!");
@ -676,19 +674,19 @@ internal abstract class MapLogic
}
}
private static string[] UpdateDateVerifyAndGetTicksDirectories(string eDistanceContentDirectory)
private static List<TicksDirectory> UpdateDateVerifyAndGetTicksDirectories(string eDistanceContentDirectory)
{
const int zero = 0;
List<TicksDirectory> results = new();
float? totalDays;
string ticksDirectoryName;
DirectoryInfo directoryInfo;
long? lastDirectoryTicks = null;
DateTime dateTime = DateTime.Now;
List<(string Directory, TimeSpan TimeSpan)> collection = new();
string[] results = Directory.GetDirectories(eDistanceContentDirectory, "*", SearchOption.TopDirectoryOnly);
foreach (string ticksDirectory in results)
string[] ticksDirectories = Directory.GetDirectories(eDistanceContentDirectory, "*", SearchOption.TopDirectoryOnly);
foreach (string ticksDirectory in ticksDirectories)
{
ticksDirectoryName = Path.GetFileName(ticksDirectory);
if (ticksDirectoryName.Length < 3 || ticksDirectoryName[zero] != '(' || ticksDirectoryName[^1] != ')')
if (ticksDirectoryName.Length < 3 || ticksDirectoryName.First() != '(' || ticksDirectoryName[^1] != ')')
continue;
if (!long.TryParse(ticksDirectoryName[1..^1], out long directoryTicks))
{
@ -700,11 +698,11 @@ internal abstract class MapLogic
Directory.SetCreationTime(ticksDirectory, new DateTime(directoryTicks));
if (directoryInfo.LastWriteTime.Ticks != directoryTicks)
Directory.SetLastWriteTime(ticksDirectory, new DateTime(directoryTicks));
if (lastDirectoryTicks is not null && new TimeSpan(dateTime.Ticks - directoryTicks).TotalDays > 1)
collection.Add((ticksDirectory, new TimeSpan(directoryTicks - lastDirectoryTicks.Value)));
totalDays = lastDirectoryTicks is null || new TimeSpan(dateTime.Ticks - directoryTicks).TotalDays < 1 ? null : (float)new TimeSpan(directoryTicks - lastDirectoryTicks.Value).TotalDays;
results.Add(new(ticksDirectory, ticksDirectoryName, directoryTicks, totalDays));
lastDirectoryTicks = directoryTicks;
}
string[] compare = (from l in collection where l.TimeSpan.TotalDays < 3.95 select l.Directory).ToArray();
string[] compare = (from l in results where l.TotalDays is not null and < 3.95f select l.Directory).ToArray();
if (compare.Any())
throw new Exception($"Please Consolidate <{string.Join(Environment.NewLine, compare)}>");
return results;
@ -895,12 +893,12 @@ internal abstract class MapLogic
Dictionary<string, string> personKeyFormattedToNewestPersonKeyFormatted = new();
Dictionary<string, PersonContainer> personKeyFormattedToPersonContainer = new();
Dictionary<long, List<PersonContainer>> personKeyToPersonContainerCollection = new();
string[] ticksDirectories = UpdateDateVerifyAndGetTicksDirectories(eDistanceContentDirectory);
List<TicksDirectory> ticksDirectories = UpdateDateVerifyAndGetTicksDirectories(eDistanceContentDirectory);
List<PersonKeyFormattedIdThenWholePercentages> personKeyFormattedIdThenWholePercentagesCollection = new();
List<(PersonKeyFormattedIdThenWholePercentages, PersonContainer)> possiblyNewPersonDisplayDirectoryNamesAndPersonContainer = new();
SetPersonCollections(configuration, personContainers, a2PeopleSingletonDirectory, personKeyFormattedToNewestPersonKeyFormatted, personKeyFormattedCollection, skipCollection, skipNotSkipCollection);
totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds);
message = $") {ticksDirectories.Length:000} compile from and clean ticks Director(ies) - B - {totalSeconds} total second(s)";
message = $") {ticksDirectories.Count:000} compile from and clean ticks Director(ies) - B - {totalSeconds} total second(s)";
List<Record> records = DeleteEmptyDirectoriesAndGetCollection(configuration, personKeyFormattedToNewestPersonKeyFormatted, personKeyFormattedCollection, ticksDirectories, message);
locationContainers.AddRange(GetLocationContainers(maxDegreeOfParallelism, configuration, ticks, personContainers, eDistanceContentDirectory, records));
int unableToMatchCount = SetCollectionsAndGetUnableToConvertCount(configuration, ticks, personKeyFormattedIdThenWholePercentagesCollection, records);

View File

@ -10,7 +10,7 @@ dateFormat: mm/dd
taskTemplate: '^+^_${overdue ? ''^R'' : ''''}${name}^: ${relations ? (''\n^-^/^g'' + relations.reduce((accumulator, currentValue) => accumulator.task + currentValue.task + '' '', '''')) : ''''}'
---
# View-by-Distance
# View-by-Distance-Shared
## Backlog
@ -20,14 +20,15 @@ taskTemplate: '^+^_${overdue ? ''^R'' : ''''}${name}^: ${relations ? (''\n^-^/^g
- [setup-syncthing-server](tasks/setup-syncthing-server.md)
- [photoview-in-docker-for-a-viewer-only](tasks/photoview-in-docker-for-a-viewer-only.md)
- [image-size-distribution-per-exif-model-directory-when-no-model](tasks/image-size-distribution-per-exif-model-directory-when-no-model.md)
- [import-know-faces-into-db](tasks/import-know-faces-into-db.md)
- [skip-metadata-load-after-first-each-day](tasks/skip-metadata-load-after-first-each-day.md)
- [determine-if-location-container-collection-is-needed-in-get-faces](tasks/determine-if-location-container-collection-is-needed-in-get-faces.md)
- [cluster-questioning](tasks/cluster-questioning.md)
- [console-for-markdown-to-genealogical-data-communication](tasks/console-for-markdown-to-genealogical-data-communication.md)
## Todo
- [determine-if-location-container-collection-is-needed-in-get-faces](tasks/determine-if-location-container-collection-is-needed-in-get-faces.md)
- [import-know-faces-into-db](tasks/import-know-faces-into-db.md)
- [look-for-family-from-jlink-in-z-mapped](tasks/look-for-family-from-jlink-in-z-mapped.md)
- [verify-ignore-is-working-for-one-half-of-sort-without-person](tasks/verify-ignore-is-working-for-one-half-of-sort-without-person.md)
- [use-eyes-to-find-orientation](tasks/use-eyes-to-find-orientation.md)
- [find-incorrectly-mapped-faces](tasks/find-incorrectly-mapped-faces.md)
- [nef-support](tasks/nef-support.md)
@ -36,7 +37,7 @@ taskTemplate: '^+^_${overdue ? ''^R'' : ''''}${name}^: ${relations ? (''\n^-^/^g
- [merge-kristy-files](tasks/merge-kristy-files.md)
- [set-date-taken-when-missing](tasks/set-date-taken-when-missing.md)
- [ged-as-golden](tasks/ged-as-golden.md)
- [genealogical-data-communication-as-golden](tasks/genealogical-data-communication-as-golden.md)
## Done

View File

@ -1,10 +1,10 @@
---
created: "2023-07-21T18:26:38.896Z"
updated: "2023-07-21T18:26:38.896Z"
created: 2023-07-21T18:26:38.896Z
updated: 2023-07-31T19:09:19.529Z
assigned: ""
progress: 0
status: "2-Todo"
type: "kanbn"
status: 2-Todo
type: kanbn
---
# Determine if Location Container Collection Is Needed in Get Faces

View File

@ -0,0 +1,23 @@
---
created: 2023-07-30T04:46:47.436Z
updated: 2023-07-30T04:46:47.431Z
assigned: ""
progress: 0
tags: []
started: 2023-07-30T04:46:47.436Z
---
# Genealogical Data Communication as Golden
[ ] From directories create one *.pged file to compare
[x] From *.rmtree file export *.ged file
[ ] Read *.ged and write five files
[?] Create directories to compare with current
[ ] Make File-Folder-Helper work without a directory
## Console for Markdown to Genealogical Data Communication
- This will allow for more information about a person
- [ ] Copy concept done in ~~~File-Folder-Helper~~~ use File-Folder-Helper
- [ ] Look at Id, Sex and body links (maybe use linkIndex.json)

View File

@ -1,22 +1,38 @@
---
created: "2023-07-21T18:26:38.908Z"
updated: "2023-07-21T18:26:38.909Z"
created: 2023-07-21T18:26:38.908Z
updated: 2023-07-31T19:09:25.585Z
assigned: ""
progress: 0
status: "2-Todo"
type: "kanbn"
status: 2-Todo
type: kanbn
---
# Import Know Faces Into Db
```bash
# locating data volumes in docker desktop windows
# https://stackoverflow.com/questions/43181654/locating-data-volumes-in-docker-desktop-windows
# phpmyadmin mariadb docker compose
# https://david.dev/how-to-install-mariadb-phpmyadmin-with-docker-compose
# https://docs.photoprism.app/user-guide/backups/
docker compose exec photoprism photoprism backup -i -f
# https://docs.photoprism.app/user-guide/backups/restore/
docker compose exec photoprism photoprism restore -i -f
```

View File

@ -0,0 +1,9 @@
---
created: 2023-07-31T19:08:57.684Z
updated: 2023-07-31T19:09:07.842Z
assigned: ""
progress: 0
tags: []
---
# Look for family from jlink in Z] mapped

View File

@ -0,0 +1,9 @@
---
created: 2023-07-31T18:54:50.692Z
updated: 2023-07-31T19:09:12.889Z
assigned: ""
progress: 0
tags: []
---
# Verify Ignore Is Working For One Half of Sort Without Person

View File

@ -1,6 +1,95 @@
{
"cSpell.words": [
"Permyriad",
"Phares"
]
"appsettings",
"Argb",
"ASPNETCORE",
"Barrick",
"bcdfghjklmnpqrstvwxyz",
"Bday",
"Beichler",
"Bohdi",
"Cobertura",
"cref",
"CUDA",
"Dlib",
"DSCN",
"Exif",
"Getα",
"Greyscale",
"Hasher",
"jfif",
"JOSN",
"mmod",
"Nicéphore",
"Niépce",
"nosj",
"paramref",
"permille",
"permyriad",
"Phares",
"Phgtv",
"RDHC",
"Rects",
"resnet",
"Serilog",
"Subfile",
"Subfiles",
"Syncthing",
"Unmanaged",
"Upsample",
"Vericruz"
],
"files.watcherExclude": {
"**/node_modules": true
},
"cSpell.enabled": true,
"files.exclude": {
"**/.git": false,
"**/node_modules": true
},
"coverage-gutters.coverageBaseDir": "./.vscode/ReportGenerator/Cobertura/*",
"extensions.ignoreRecommendations": true,
"[markdown]": {
"editor.wordWrap": "off"
},
"foam.files.ignore": [
".foam/**/*",
".stfolder/**/*",
".UserSecrets/**/*",
"**/_layouts/**/*",
"**/_site/**/*",
"**/.vscode/**/*",
"**/node_modules/**/*"
],
"kanbn.showBurndownButton": false,
"kanbn.showSprintButton": false,
"foam.links.hover.enable": false,
"foam.placeholders.exclude": [
".kanbn/Archive/**/*"
],
"foam.orphans.exclude": [
".Applications/**/*",
".DevOps/**/*",
".Fab/**/*",
".journal/**/*"
],
"foam.graph.style": {
"background": "#202020",
"node": {
"topic": "#bc2a3c",
"kanbn": "#ff7b00",
"basic-note": "#773b93",
"daily-note": "#ff9d00",
"note": "#f2cb1d",
"placeholder": "#ff9d00",
"tag": "#0494c1",
"bug": "#bc2a3c",
"epic": "#ff7b00",
"feature": "#773b93",
"issue": "#ff9d00",
"task": "#f2cb1d",
"test-case": "#ff9d00",
"user-story": "#0494c1"
}
}
}