/
Program.cs
138 lines (109 loc) · 5.45 KB
/
Program.cs
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
using System.Text;
using Microsoft.Extensions.Configuration;
using ReadingLogGenerator.Configuration;
using ReadingLogGenerator.Models;
using ReadingLogGenerator.Services;
namespace ReadingLogGenerator;
internal class Program
{
private static DirectoriesConfiguration? _directoriesConfiguration;
private static NotionConfiguration? _notifonConfiguration;
private static List<Article> _articles = new();
private static readonly StringBuilder MarkdownBuilder = new ();
static async Task Main()
{
IConfiguration config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.AddEnvironmentVariables()
.Build();
_directoriesConfiguration = config.GetRequiredSection("Directories").Get<DirectoriesConfiguration>();
_notifonConfiguration = config.GetRequiredSection("Notion").Get<NotionConfiguration>();
if (_directoriesConfiguration is null || _notifonConfiguration is null)
{
Console.WriteLine("Unable to read settings");
return;
}
Console.Write("Please Enter Reading Log Number: ");
var logNumberString = Console.ReadLine();
if (!int.TryParse(logNumberString, out int logNumber) || logNumber == 0)
{
Console.WriteLine("Invalid input");
return;
}
var notionService = new NotionService(_notifonConfiguration);
_articles = await notionService.GetReadingLogArticles(logNumber);
var markdown = GetMarkdownString(logNumber);
var path = Path.Join(_directoriesConfiguration.Output, $"{logNumber}.md");
await using var sw = new StreamWriter(path, true);
await sw.WriteAsync(markdown);
}
private static string GetMarkdownString(int logNumber)
{
MarkdownBuilder.AppendLine("---");
MarkdownBuilder.AppendLine($"title: 'Reading Log - {DateTime.Now.ToString("MMMM d, yyyy")} (#{logNumber})'");
MarkdownBuilder.AppendLine($"date: '{DateTime.Now.ToString("yyyy-MM-dd")}'");
MarkdownBuilder.AppendLine("tags:");
MarkdownBuilder.AppendLine(" - Reading Log");
MarkdownBuilder.AppendLine("---");
MarkdownBuilder.AppendLine("");
MarkdownBuilder.AppendLine("Introduction Text");
MarkdownBuilder.AppendLine("<!-- excerpt -->");
MarkdownBuilder.AppendLine("");
AddSection(ReadingLogCategory.DotNet, "🖥 .NET");
AddSection(ReadingLogCategory.WebDevelopment, "🌐 Web Development");
AddSection(ReadingLogCategory.Development, "💻 General Development");
AddSection(ReadingLogCategory.Design, "🎨 Design");
AddSection(ReadingLogCategory.Internet, "📡 The Internet");
AddSection(ReadingLogCategory.Technology, "🔌 Technology");
AddSection(ReadingLogCategory.Science, "🔬 Science");
AddSection(ReadingLogCategory.Space, "🚀 Space");
AddSection(ReadingLogCategory.ClimateChange, "🌎 Climate Change");
AddSection(ReadingLogCategory.Gaming, "🎮 Gaming");
AddSection(ReadingLogCategory.Business, "📈 Business & Finance");
AddSection(ReadingLogCategory.Sports, "⚾️ Sports");
AddSection(ReadingLogCategory.Fitness, "🏃 Health & Fitness");
if (_articles.Any(a => a.Category == ReadingLogCategory.Podcasts))
{
MarkdownBuilder.AppendLine("## 🎧 Podcasts");
MarkdownBuilder.AppendLine("");
foreach (var article in _articles.Where(a => a.Category == ReadingLogCategory.Podcasts))
{
MarkdownBuilder.AppendLine($"[{article.Author}: {article.Title}]({article.Url})");
MarkdownBuilder.AppendLine("");
}
MarkdownBuilder.AppendLine("---");
MarkdownBuilder.AppendLine("");
}
AddSection(ReadingLogCategory.Entertainment, "📺 Media & Entertainment");
AddSection(ReadingLogCategory.Longform, "📝 Longform");
AddSection(ReadingLogCategory.Journalism, "📰 Journalism");
AddSection(ReadingLogCategory.Politics, "🏛️ Politics");
AddSection(ReadingLogCategory.Everything, "🎒 Everything Else");
MarkdownBuilder.AppendLine("## 🎵 A Song to Leave You With");
MarkdownBuilder.AppendLine("");
MarkdownBuilder.AppendLine("<h3 class=\"music\">Artist - Song</h3>");
MarkdownBuilder.AppendLine("");
MarkdownBuilder.AppendLine($"{{% youTubeEmbed \"\" \"\" %}}");
MarkdownBuilder.AppendLine("");
return MarkdownBuilder.ToString();
}
private static void AddSection(ReadingLogCategory category, string title)
{
if (_articles.Any(a => a.Category == category))
{
MarkdownBuilder.AppendLine($"## {title}");
MarkdownBuilder.AppendLine("");
AddLinks(_articles.Where(a => a.Category == category));
MarkdownBuilder.AppendLine("---");
MarkdownBuilder.AppendLine("");
}
}
private static void AddLinks(IEnumerable<Article> articles)
{
foreach (var article in articles)
{
MarkdownBuilder.AppendLine($"[{article.Title}]({article.Url}) - *{article.Author}*");
MarkdownBuilder.AppendLine("");
}
}
}