diff --git a/Program.cs b/Program.cs
index 279ba50..1001e23 100644
--- a/Program.cs
+++ b/Program.cs
@@ -1,37 +1,37 @@
// I hereby waive this project under the public domain - see UNLICENSE for details.
+const string banner = "=== Publish Times ===";
-///
-/// Generates a schedule of article publishing times, ensuring a randomized
-/// delay between each while avoiding time conflicts within a 30-minute window.
-///
-/// A list of TimeSpan objects representing scheduled article times.
-List GenerateSchedule()
+var numberOfArticles = 5; // Define how many articles to schedule
+var startTime = new TimeSpan(9, 0, 0); // Starting time at 9:00 AM
+var rng = new Random();
+var scheduledTimes = new List();
+var storeSchedule = new List();
+// App directory is used for config file
+var appDir = Directory.GetCurrentDirectory();
+// File directory is used for file location set in config
+var fileDir = Directory.GetCurrentDirectory();
+var isRestart = false;
+var communities = new[] { "Games", "Politics", "Research", "Technology" };
+var scheduleFile = "schedule.txt";
+var cfgFile = "config.toml";
+
+for (int i = 0; i < numberOfArticles; i++)
{
- var numberOfArticles = 5; // Define how many articles to schedule
- var startTime = new TimeSpan(9, 0, 0); // Starting time at 9:00 AM
- var rng = new Random();
- var scheduledTimes = new List();
+ var baseDelayHours = rng.Next(2, 4); // Randomly choose between 2-3 hours delay
+ var minutesToAdd = rng.Next(0, 60); // Randomly choose minutes (0-59)
- for (int i = 0; i < numberOfArticles; i++)
+ // Calculate new time by adding base delay and random minutes
+ var nextTime = startTime.Add(new TimeSpan(baseDelayHours, minutesToAdd, 0));
+
+ // Check if the new time is within 30 minutes of any existing time
+ while (scheduledTimes.Exists(previousTime => Math.Abs((nextTime - previousTime).TotalMinutes) < 30))
{
- var baseDelayHours = rng.Next(2, 4); // Randomly choose between 2-3 hours delay
- var minutesToAdd = rng.Next(0, 60); // Randomly choose minutes (0-59)
-
- // Calculate new time by adding base delay and random minutes
- var nextTime = startTime.Add(new TimeSpan(baseDelayHours, minutesToAdd, 0));
-
- // Check if the new time is within 30 minutes of any existing time
- while (scheduledTimes.Exists(previousTime => Math.Abs((nextTime - previousTime).TotalMinutes) < 30))
- {
- // If the new time is within 30 minutes of an existing time, adjust it
- nextTime = nextTime.Add(new TimeSpan(0, 30, 0));
- }
-
- scheduledTimes.Add(nextTime);
- startTime = nextTime; // Update start time for the next article
+ // If the new time is within 30 minutes of an existing time, adjust it
+ nextTime = nextTime.Add(new TimeSpan(0, 30, 0));
}
- return scheduledTimes;
+ scheduledTimes.Add(nextTime);
+ startTime = nextTime; // Update start time for the next article
}
///
@@ -39,7 +39,7 @@ List GenerateSchedule()
///
/// The TimeSpan representing the time of day.
/// A formatted string representing the time in AM/PM format.
-string ConvertTo12Hour(TimeSpan time)
+string TimeSpanToAMPM(TimeSpan time)
{
var minutes = time.TotalMinutes;
var hours12 = time.Hours % 12;
@@ -56,22 +56,13 @@ string ConvertTo12Hour(TimeSpan time)
/// the directory, filename, and list of topics based on
/// a configuration file if available.
///
-void ExportSchedule(List storeSchedule)
+void ExportSchedule()
{
- // App directory is used for config file
- var appDir = Directory.GetCurrentDirectory();
- // File directory is used for file location set in config
- var fileDir = Directory.GetCurrentDirectory();
- var communities = new[] { "Games", "Politics", "Research", "Technology" };
- var scheduleFile = "schedule.txt";
- var cfgFile = "config.toml";
-
var cfgPath = Path.Combine(appDir, cfgFile);
var filePath = Path.Combine(fileDir, scheduleFile);
var appendSchedule = false;
var topic = "";
- var rng = new Random();
var chooseTopic = rng.Next(0, communities.Length);
topic = communities[chooseTopic];
@@ -127,18 +118,15 @@ void ExportSchedule(List storeSchedule)
/// Displays the scheduled article times in a formatted manner and provides
/// options to export the schedule or restart the scheduling process.
///
-void PrintSchedule(bool isRestart = false)
+void PrintSchedule()
{
- var storeSchedule = new List();
- var scheduledTimes = GenerateSchedule();
-
if (isRestart)
Console.Clear();
- Console.WriteLine("=== Publish Times ===");
+ Console.WriteLine(banner);
foreach (var time in scheduledTimes)
{
- var articleTime = $"Article {scheduledTimes.IndexOf(time) + 1} Scheduled at: {ConvertTo12Hour(time)}";
+ var articleTime = $"Article {scheduledTimes.IndexOf(time) + 1} Scheduled at: {TimeSpanToAMPM(time)}";
// Correct format string to display time in 12-hour format with AM/PM
Console.WriteLine(articleTime);
// Store the schedule to memory for option export
@@ -148,11 +136,14 @@ void PrintSchedule(bool isRestart = false)
// Give the user an option to export the schedule
Console.WriteLine($"{Environment.NewLine}Export? Y/N");
if (Console.ReadKey().Key == ConsoleKey.Y)
- ExportSchedule(storeSchedule);
+ ExportSchedule();
Console.WriteLine($"{Environment.NewLine}Start Over? Y/N");
if (Console.ReadKey().Key == ConsoleKey.Y)
- PrintSchedule(true);
+ {
+ isRestart = true;
+ PrintSchedule();
+ }
else
{
Console.Clear();
diff --git a/README.md b/README.md
index 658035a..98d5dd7 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,10 @@
# Publish Times
-This is a very simple console application that generates a list of times to publish news articles within a randomized 2-3 hour delay while avoiding time conflicts within a 30-minute window.
+This is a very simple console application that generates a list of times to schedule news with a 2-3 hour delay and a 30 minute time gap per-article.
## Background
-A while back, I [found a tool](https://schedule.lemmings.world) to schedule articles on Lemmy. I've been posting within a few hours apart at random minutes and I wanted to something decide that for me. I had AI write the base algorithm, everything else is my own touches.
+A while back, I [found a tool](https://schedule.lemmings.world) to schedule articles on Lemmy. I've been posting within a few hour apart at random minutes and I wanted to something decide that for me. I had AI write the base algorithm everything else is my own touches.
## License