1 // See https://aka.ms/new-console-template for more information
5 using System.Text.Json;
7 //we need to get every page then iterate through them to generate particle json pages for them.
8 //there's the index, then for folders theres entries, projects, diversions, diversions/hentaigames
10 var fileInfos = new List<Tuple<FileInfo, string>>();
11 var index = FindFile("index.html");
12 fileInfos.Add(new Tuple<FileInfo, string>(new FileInfo(index), "https://athene.gay"));
14 var folder = FindDirectory("entries");
15 var filePaths = Directory.EnumerateFiles(folder);
18 foreach (var path in filePaths)
20 if (Path.GetFileNameWithoutExtension(path).Equals("template", StringComparison.InvariantCultureIgnoreCase))
22 fileInfos.Add(new Tuple<FileInfo, string>(new FileInfo(path), "https://athene.gay/entries"));
26 folder = FindDirectory("projects");
27 filePaths = Directory.EnumerateFiles(folder);
30 foreach (var path in filePaths)
32 if (Path.GetFileNameWithoutExtension(path).Equals("template", StringComparison.InvariantCultureIgnoreCase))
34 fileInfos.Add(new Tuple<FileInfo, string>(new FileInfo(path), "https://athene.gay/projects"));
38 folder = FindDirectory("diversions");
39 filePaths = Directory.EnumerateFiles(folder);
42 foreach (var path in filePaths)
44 if (Path.GetFileNameWithoutExtension(path).Equals("template", StringComparison.InvariantCultureIgnoreCase))
46 fileInfos.Add(new Tuple<FileInfo, string>(new FileInfo(path), "https://athene.gay/diversions"));
50 folder = FindDirectory("diversions/hentaigames");
51 filePaths = Directory.EnumerateFiles(folder);
54 foreach (var path in filePaths)
56 if (Path.GetFileNameWithoutExtension(path).Equals("template", StringComparison.InvariantCultureIgnoreCase))
58 fileInfos.Add(new Tuple<FileInfo, string>(new FileInfo(path), "https://athene.gay/diversions/hentaigames"));
62 List<string> textTags = new List<string>() {"p", "h1", "h2", "h3", "h4"};
64 foreach (var file in fileInfos)
66 var doc = new HtmlDocument();
67 doc.Load(file.Item1.FullName);
68 var particleRoot = new ParticleRoot()
71 Title = doc.DocumentNode.SelectSingleNode("//title").InnerText,
72 Content = new List<Content>()
75 TraverseHTML(doc.DocumentNode.SelectSingleNode("//body"), particleRoot, file.Item2);
76 File.WriteAllText(file.Item1.FullName.Replace(".html", ".json"), JsonSerializer.Serialize(particleRoot));
79 void TraverseHTML(HtmlNode traversalNode, ParticleRoot particleRoot, string uriPath)
81 if (textTags.Contains(traversalNode.Name))
83 particleRoot.Content.Add(new Content()
86 Text = traversalNode.InnerText.Replace(" ", "").Replace("\n", " ").Replace("\r", " ").Trim(),
90 if (traversalNode.Name == "a" && traversalNode.GetAttributeValue("href", "").EndsWith("html"))
92 particleRoot.Content.Add(new Content()
95 Label = traversalNode.InnerText.Replace(" ", "").Replace("\n", " ").Replace("\r", " ").Trim(),
96 Action = $"{uriPath}/{traversalNode.GetAttributeValue("href", "").Replace(".html", ".json")}"
99 if (traversalNode.HasChildNodes)
101 foreach (var node in traversalNode.ChildNodes)
103 TraverseHTML(node, particleRoot, uriPath);
108 string FindFile(string fileName)
110 var file = Path.Combine(Directory.GetCurrentDirectory(), $"../{fileName}");
111 if (!File.Exists(file))
113 file = Path.Combine(Directory.GetCurrentDirectory(), $"../../../../../{fileName}");
119 string FindDirectory(string folderName)
121 var folder = Path.Combine(Directory.GetCurrentDirectory(), $"../{folderName}");
122 if (!Directory.Exists(folder))
124 folder = Path.Combine(Directory.GetCurrentDirectory(), $"../../../../../{folderName}");