-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProgram.cs
More file actions
65 lines (61 loc) · 3.34 KB
/
Copy pathProgram.cs
File metadata and controls
65 lines (61 loc) · 3.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
using BibleTech.Model;
using BibleTech.Processors;
using BibleTech.Processors.EsvCompareProcessor;
using BibleTech.Processors.LocationProcessor;
using CommandLine;
using Microsoft.Extensions.Configuration;
using Newtonsoft.Json;
var options = new CLIOptions();
Parser.Default.ParseArguments<CLIOptions>(args).WithParsed(o => { options = o; });
var addEnvironmentVariables = new ConfigurationBuilder().AddJsonFile("appsettings.json", false, true).AddEnvironmentVariables();
var configurationRoot = addEnvironmentVariables.Build();
var appConfig = configurationRoot.GetSection(nameof(AppConfig)).Get<AppConfig>();
if (appConfig is null) throw new Exception("Invalid appsettings.json");
using var httpClient = new HttpClient();
var fullDirectory = new DirectoryInfo(Environment.CurrentDirectory).Parent?.Parent?.Parent?.FullName ??
throw new Exception($"Invalid base directory for run location {Environment.CurrentDirectory}");
var directory = fullDirectory + "\\" + options.DataFolder;
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine($"Reading scripture data from {directory}");
var runCount = 0;
var outputLocation = fullDirectory + "\\output\\" + options.App;
List<string> existingUseCaseFiles;
try {
existingUseCaseFiles = new DirectoryInfo(outputLocation).GetDirectories()
.SelectMany(a => new DirectoryInfo(outputLocation + "\\" + a.Name).GetDirectories()
.SelectMany(b => b.GetFiles())
)
.Select(x => x.Name.Split("-")[0])
.ToList();
}
catch {
existingUseCaseFiles = [];
}
var operationStart = DateTime.UtcNow;
var dataFolder = new DirectoryInfo(directory);
foreach (var dir in dataFolder.GetDirectories()) {
foreach (var file in
dir.GetFiles()) {
var fullFilePath = directory + '\\' + dir.Name + '\\' + file.Name;
using var r = new StreamReader(fullFilePath);
var contents = r.ReadToEnd();
var bibleRoot = JsonConvert.DeserializeObject<BibleSection>(contents) ??
throw new Exception($"Unable to deserialize BibleRoot object at {fullFilePath}");
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine(fullFilePath);
var start = DateTime.UtcNow;
Console.ForegroundColor = ConsoleColor.DarkGreen;
Console.WriteLine($"Chapter start: {start}");
runCount += await UseCaseHandler.Handle(options.App, existingUseCaseFiles, bibleRoot, httpClient, fullDirectory, options, appConfig);
Console.WriteLine($"Run count - top level: {runCount}");
if(runCount >= options.Iterations) break;
var finish = DateTime.UtcNow;
Console.ForegroundColor = ConsoleColor.DarkGreen;
Console.WriteLine($"Chapter finish: {finish}");
Console.WriteLine($"Total Time: {finish - start}");
}
if(runCount >= options.Iterations) break;
}
var operationEnd = DateTime.UtcNow;
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine($"Run complete: {runCount} sections analyzed in {operationEnd - operationStart}");