diff --git a/Shared/Models/Stateless/Methods/GenealogicalDataCommunication.cs b/Shared/Models/Stateless/Methods/GenealogicalDataCommunication.cs index 0c4bc30..4bd04ab 100644 --- a/Shared/Models/Stateless/Methods/GenealogicalDataCommunication.cs +++ b/Shared/Models/Stateless/Methods/GenealogicalDataCommunication.cs @@ -1,4 +1,5 @@ using System.Collections.ObjectModel; +using System.Globalization; namespace View_by_Distance.Shared.Models.Stateless.Methods; @@ -407,7 +408,10 @@ internal abstract class GenealogicalDataCommunication List lines = new(); List distinct = new(); List individualsLines; + DateTime dateTime = new(ticks); Models.PersonBirthday personBirthday; + Calendar calendar = new CultureInfo("en-US").Calendar; + string weekOfYear = calendar.GetWeekOfYear(dateTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00"); lines.AddRange(headerLines); foreach (Models.PersonContainer personContainer in personContainers) { @@ -468,7 +472,7 @@ internal abstract class GenealogicalDataCommunication for (int i = 0; i < familyGroupLines.Count; i++) lines.AddRange(familyGroupLines[i]); lines.AddRange(footerLines); - File.WriteAllLines(Path.Combine(a2PeopleContentDirectory, $"{ticks}.ged"), lines); + File.WriteAllLines(Path.Combine(a2PeopleContentDirectory, $"{dateTime.Year}-ged", $"{dateTime.Year}-Week-{weekOfYear}", $"{ticks}.ged"), lines); return result; } diff --git a/Shared/Models/Stateless/Methods/MarkDown.cs b/Shared/Models/Stateless/Methods/MarkDown.cs index 7a1a687..0ed0646 100644 --- a/Shared/Models/Stateless/Methods/MarkDown.cs +++ b/Shared/Models/Stateless/Methods/MarkDown.cs @@ -1,4 +1,5 @@ using System.Collections.ObjectModel; +using System.Globalization; using System.Text; using System.Text.RegularExpressions; @@ -9,7 +10,7 @@ internal abstract class MarkDown // ... - internal static void WriteFile(string personKeyFormatted, long ticks, Models.PersonName personName, List genealogicalDataCommunicationRelations, string a2PeopleContentDirectory, ReadOnlyDictionary personKeyFormattedToPersonFullName, ReadOnlyDictionary> familyIndexToCollection, bool isDefaultName, Models.GenealogicalDataCommunication genealogicalDataCommunication, bool first) + internal static void WriteFile(string personKeyFormatted, long ticks, Models.PersonName personName, List genealogicalDataCommunicationRelations, string a2PeopleContentDirectory, Calendar calendar, ReadOnlyDictionary personKeyFormattedToPersonFullName, ReadOnlyDictionary> familyIndexToCollection, bool isDefaultName, Models.GenealogicalDataCommunication genealogicalDataCommunication, bool first) { string decade; string jrOrSr; @@ -22,9 +23,10 @@ internal abstract class MarkDown const string child = "CHIL"; const string husband = "HUSB"; const string person = "person"; + DateTime dateTime = new(ticks); string fullName = PersonName.GetFullName(personName); List? relations; - string now = DateTime.Now.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffZ"); + string now = dateTime.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffZ"); string lowerHyphenFullName = $"{Regex.Replace(fullName.ToLower(), "[^a-z0-9-]", "-")}"; string code = IPersonBirthday.GetHour(genealogicalDataCommunication.Death is null, genealogicalDataCommunication.Sex).ToString("00"); List lines = new() @@ -143,7 +145,8 @@ internal abstract class MarkDown if (hasRelation) lines.Add(string.Empty); string text = string.Join(Environment.NewLine, lines); - string directory = Path.Combine(a2PeopleContentDirectory, $"content-{ticks}", person, personKeyFormatted[..3]); + string weekOfYear = calendar.GetWeekOfYear(dateTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00"); + string directory = Path.Combine(a2PeopleContentDirectory, $"{dateTime.Year}-Markdown", $"{dateTime.Year}-Week-{weekOfYear}", ticks.ToString(), person, personKeyFormatted[..3]); if (!Directory.Exists(directory)) _ = Directory.CreateDirectory(directory); _ = IPath.WriteAllText(Path.Combine(directory, $"{lowerHyphenFullName}.md"), text, updateDateWhenMatches: false, compareBeforeWrite: true); diff --git a/Shared/Models/Stateless/Methods/PersonContainer.cs b/Shared/Models/Stateless/Methods/PersonContainer.cs index e810a5d..2a33b43 100644 --- a/Shared/Models/Stateless/Methods/PersonContainer.cs +++ b/Shared/Models/Stateless/Methods/PersonContainer.cs @@ -1,4 +1,5 @@ using System.Collections.ObjectModel; +using System.Globalization; namespace View_by_Distance.Shared.Models.Stateless.Methods; @@ -400,6 +401,7 @@ internal abstract class PersonContainer bool verify = true; const int zero = 0; string personKeyFormatted; + Calendar calendar = new CultureInfo("en-US").Calendar; Models.GenealogicalDataCommunication genealogicalDataCommunication; GenealogicalDataCommunicationLines? genealogicalDataCommunicationLines; ReadOnlyDictionary personKeyFormattedToPersonFullName = GetPersonKeyFormattedToPersonFullName(personBirthdayFormat, personContainers); @@ -429,7 +431,7 @@ internal abstract class PersonContainer if (genealogicalDataCommunication.Death is null && personContainer.PersonDirectory.Status == 'D' || genealogicalDataCommunication.Death is not null && personContainer.PersonDirectory.Status == 'A') continue; GenealogicalDataCommunication.WriteFile(personKeyFormatted, personContainer.Person.Name, personContainer.GenealogicalDataCommunicationRelationIndividualsLines, isDefaultName, directory, genealogicalDataCommunication, verify, first.Value); - MarkDown.WriteFile(personKeyFormatted, ticks, personContainer.Person.Name, genealogicalDataCommunicationRelations, a2PeopleContentDirectory, personKeyFormattedToPersonFullName, familyIndexToCollection, isDefaultName, genealogicalDataCommunication, first.Value); + MarkDown.WriteFile(personKeyFormatted, ticks, personContainer.Person.Name, genealogicalDataCommunicationRelations, a2PeopleContentDirectory, calendar, personKeyFormattedToPersonFullName, familyIndexToCollection, isDefaultName, genealogicalDataCommunication, first.Value); } } diff --git a/Tests/UnitTestHardCoded.cs b/Tests/UnitTestHardCoded.cs index 1ef43c5..71c9b99 100644 --- a/Tests/UnitTestHardCoded.cs +++ b/Tests/UnitTestHardCoded.cs @@ -4,6 +4,7 @@ using Phares.Shared; using Serilog; using System.Collections.ObjectModel; using System.Diagnostics; +using System.Globalization; using System.Reflection; using View_by_Distance.Shared.Models; using View_by_Distance.Shared.Models.Stateless.Methods; @@ -85,7 +86,7 @@ public partial class UnitTestHardCoded [TestMethod] public void TestMethodDel() { - string directory = @"F:\Tmp\Phares\Compare\Images 2022-09-15 - 7390c13 - III - Results\E) Distance\2022-09-15\7680 x 4320\7680x4320 - Hog - Large\()\(637992984751968513)"; + string directory = "F:/Tmp/Phares/Compare/Images 2022-09-15 - 7390c13 - III - Results/E) Distance/2022-09-15/7680 x 4320/7680x4320 - Hog - Large/()/(637992984751968513)"; if (Directory.Exists(Path.GetPathRoot(directory)) && Directory.Exists(directory)) { for (int i = 1; i < 11; i++) @@ -98,7 +99,7 @@ public partial class UnitTestHardCoded [TestMethod] public void TestMethodGetApproximateYears() { - string personDisplayDirectory = @"D:\1-Images-A\Images-dd514b88-Results\A2) People\dd514b88\{}\^\Sydney Dupray^9"; + string personDisplayDirectory = "D:/1-Images-A/Images-dd514b88-Results/A2) People/dd514b88/{}/^/Sydney Dupray^9"; if (Directory.Exists(Directory.GetDirectoryRoot(personDisplayDirectory)) && Directory.Exists(personDisplayDirectory)) { char numberSign = '#'; @@ -122,7 +123,7 @@ public partial class UnitTestHardCoded [TestMethod] public void TestMethodDel2() { - string directory = @"F:\Tmp\Phares\Compare\Images 2022-09-15 - 7390c13 - III - Results\E) Distance\2022-09-15\7680 x 4320\7680x4320 - Hog - Large\()\(637992984751968513)"; + string directory = "F:/Tmp/Phares/Compare/Images 2022-09-15 - 7390c13 - III - Results/E) Distance/2022-09-15/7680 x 4320/7680x4320 - Hog - Large/()/(637992984751968513)"; if (Directory.Exists(Path.GetPathRoot(directory)) && Directory.Exists(directory)) { for (int i = 1; i < 11; i++) @@ -201,7 +202,7 @@ public partial class UnitTestHardCoded [TestMethod] public void TestMethodRenameAbandoned() { - string directory = @"D:\1-Images-A\Images-dd514b88-Results\A2) People\dd514b88\{}\!\Abandoned"; + string directory = "D:/1-Images-A/Images-dd514b88-Results/A2) People/dd514b88/{}/!/Abandoned"; if (Directory.Exists(Path.GetPathRoot(directory)) && Directory.Exists(directory)) { string checkFile; @@ -221,7 +222,7 @@ public partial class UnitTestHardCoded [TestMethod] public void TestMethodRenameDelete() { - string directory = @"D:\1-Images-A\Images-dd514b88-Results\A) Property\dd514b88\{}"; + string directory = "D:/1-Images-A/Images-dd514b88-Results/A) Property/dd514b88/{}"; if (Directory.Exists(Path.GetPathRoot(directory)) && Directory.Exists(directory)) { string checkFile; @@ -241,7 +242,7 @@ public partial class UnitTestHardCoded [TestMethod] public void TestMethodRenameOld() { - string directory = @"D:\2-Images-B\Not-Copy-Copy-dd514b88-Results\E) Distance\dd514b88\()"; + string directory = "D:/2-Images-B/Not-Copy-Copy-dd514b88-Results/E) Distance/dd514b88/()"; if (Directory.Exists(Path.GetPathRoot(directory)) && Directory.Exists(directory)) { string checkFile; @@ -756,9 +757,9 @@ public partial class UnitTestHardCoded [TestMethod] public void TestMethodRename() { - // string directory = @"D:\2-Images-B\Not-Copy-Copy-dd514b88"; - string directory = @"D:\1-Images-A\Images-dd514b88"; - // string directory = @"D:\2-Images-B\Not-Copy-Copy-dd514b88"; + // string directory = "D:/2-Images-B/Not-Copy-Copy-dd514b88"; + string directory = "D:/1-Images-A/Images-dd514b88"; + // string directory = "D:/2-Images-B/Not-Copy-Copy-dd514b88"; if (Directory.Exists(Path.GetPathRoot(directory)) && Directory.Exists(directory)) { string[] directories = Directory.GetDirectories(directory, "*;*", SearchOption.AllDirectories); @@ -775,7 +776,7 @@ public partial class UnitTestHardCoded [TestMethod] public void TestMethodRenameForUnkown() { - string directory = @"D:\1-Images-A\Images-dd514b88-Results\E) Distance\dd514b88\(RectInt-2023-06-19-less-0.99)"; + string directory = "D:/1-Images-A/Images-dd514b88-Results/E) Distance/dd514b88/(RectInt-2023-06-19-less-0.99)"; if (Directory.Exists(Path.GetPathRoot(directory)) && Directory.Exists(directory)) { string[] files = Directory.GetFiles(directory, "*.unk", SearchOption.AllDirectories); @@ -785,4 +786,34 @@ public partial class UnitTestHardCoded NonThrowTryCatch(); } + [TestMethod] + public void TestMethodRenameForTicks() + { + string directory = "D:/1-Images-A/Images-dd514b88-Results/A2) People/dd514b88/([])/ged"; + if (Directory.Exists(Path.GetPathRoot(directory)) && Directory.Exists(directory)) + { + string checkName; + DateTime dateTime; + string weekOfYear; + string checkDirectoy; + Calendar calendar = new CultureInfo("en-US").Calendar; + string[] files = Directory.GetFiles(directory, "*.ged", SearchOption.TopDirectoryOnly); + foreach (string file in files) + { + if (!long.TryParse(Path.GetFileNameWithoutExtension(file), out long ticks)) + continue; + dateTime = new(ticks); + weekOfYear = calendar.GetWeekOfYear(dateTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00"); + checkDirectoy = Path.Combine(directory, dateTime.Year.ToString(), $"{dateTime.Year}-Week-{weekOfYear}"); + checkName = Path.Combine(checkDirectoy, Path.GetFileName(file)); + if (!Directory.Exists(checkDirectoy)) + _ = Directory.CreateDirectory(checkDirectoy); + if (File.Exists(checkName)) + continue; + File.Move(file, checkName); + } + } + NonThrowTryCatch(); + } + } \ No newline at end of file