From 294b819ff04d17c3301c8a6afe4101e2355bc4eb Mon Sep 17 00:00:00 2001
From: glax <johanna@bernloehr.eu>
Date: Sun, 21 May 2023 03:18:56 +0200
Subject: [PATCH] Created SelectTask menu Created method to enqueue task Added
 option to enqueue task to CLI

---
 Tranga-CLI/Tranga_Cli.cs | 131 ++++++++++++++++-----------------------
 Tranga/TaskManager.cs    |  10 +++
 2 files changed, 62 insertions(+), 79 deletions(-)

diff --git a/Tranga-CLI/Tranga_Cli.cs b/Tranga-CLI/Tranga_Cli.cs
index 7eda62f..08a2232 100644
--- a/Tranga-CLI/Tranga_Cli.cs
+++ b/Tranga-CLI/Tranga_Cli.cs
@@ -125,6 +125,11 @@ public static class Tranga_Cli
                     Console.WriteLine("Press any key.");
                     Console.ReadKey();
                     break;
+                case ConsoleKey.B:
+                    AddTaskToQueue(taskManager, logger);
+                    Console.WriteLine("Press any key.");
+                    Console.ReadKey();
+                    break;
             }
             selection = PrintMenu(taskManager, settings.downloadLocation, logger);
         }
@@ -152,9 +157,9 @@ public static class Tranga_Cli
         Console.WriteLine($"Download Folder: {folderPath}");
         Console.WriteLine($"Tasks (Running/Queue/Total)): {taskRunningCount}/{taskEnqueuedCount}/{taskCount}");
         Console.WriteLine();
-        Console.WriteLine($"{"C: Create Task",-30}{"L: List tasks",-30}{"R: List Running Tasks", -30}");
+        Console.WriteLine($"{"C: Create Task",-30}{"L: List tasks",-30}{"B: Enqueue Task", -30}");
         Console.WriteLine($"{"D: Delete Task",-30}{"S: Search Tasks", -30}{"K: List Task Queue", -30}");
-        Console.WriteLine($"{"",-30}{"E: Execute Task now",-30}{"M: Remove Task from Queue", -30}");
+        Console.WriteLine($"{"E: Execute Task now",-30}{"R: List Running Tasks", -30}{"M: Remove Task from Queue", -30}");
         Console.WriteLine();
         Console.WriteLine($"{"U: Update this Screen",-30}{"F: Show Log",-30}{"Q: Exit",-30}");
         ConsoleKey selection = Console.ReadKey().Key;
@@ -179,18 +184,15 @@ public static class Tranga_Cli
             Console.WriteLine($"{tIndex++:000}: {trangaTask}");
     }
 
-    private static void RemoveTaskFromQueue(TaskManager taskManager, Logger logger)
+    private static TrangaTask? SelectTask(TrangaTask[] tasks, Logger logger)
     {
-        Console.Clear();
-        logger.WriteLine("Tranga_CLI", "Menu: Remove Task from queue");
-        
-        TrangaTask[] tasks = taskManager.GetAllTasks().Where(rTask => rTask.state is TrangaTask.ExecutionState.Enqueued).ToArray();
+        logger.WriteLine("Tranga_CLI", "Menu: Select task");
         if (tasks.Length < 1)
         {
             Console.Clear();
             Console.WriteLine("There are no available Tasks.");
             logger.WriteLine("Tranga_CLI", "No available Tasks.");
-            return;
+            return null;
         }
         PrintTasks(tasks, logger);
         
@@ -207,14 +209,14 @@ public static class Tranga_Cli
             Console.Clear();
             Console.WriteLine("aborted.");
             logger.WriteLine("Tranga_CLI", "aborted");
-            return;
+            return null;
         }
         
         try
         {
             int selectedTaskIndex = Convert.ToInt32(selectedTask);
             logger.WriteLine("Tranga_CLI", "Sending Task to TaskManager");
-            taskManager.RemoveTaskFromQueue(tasks[selectedTaskIndex]);
+            return tasks[selectedTaskIndex];
         }
         catch (Exception e)
         {
@@ -222,8 +224,38 @@ public static class Tranga_Cli
             logger.WriteLine("Tranga_CLI", e.Message);
         }
 
+        return null;
+    }
 
+    private static void AddTaskToQueue(TaskManager taskManager, Logger logger)
+    {
+        Console.Clear();
+        logger.WriteLine("Tranga_CLI", "Menu: Add Task to queue");
+
+        TrangaTask[] tasks = taskManager.GetAllTasks().Where(rTask =>
+            rTask.state is not TrangaTask.ExecutionState.Enqueued and not TrangaTask.ExecutionState.Running).ToArray();
         
+        TrangaTask? selectedTask = SelectTask(tasks, logger);
+        if (selectedTask is null)
+            return;
+        
+        logger.WriteLine("Tranga_CLI", "Sending Task to TaskManager");
+        taskManager.AddTaskToQueue(selectedTask);
+    }
+
+    private static void RemoveTaskFromQueue(TaskManager taskManager, Logger logger)
+    {
+        Console.Clear();
+        logger.WriteLine("Tranga_CLI", "Menu: Remove Task from queue");
+        
+        TrangaTask[] tasks = taskManager.GetAllTasks().Where(rTask => rTask.state is TrangaTask.ExecutionState.Enqueued).ToArray();
+
+        TrangaTask? selectedTask = SelectTask(tasks, logger);
+        if (selectedTask is null)
+            return;
+        
+        logger.WriteLine("Tranga_CLI", "Sending Task to TaskManager");
+        taskManager.RemoveTaskFromQueue(selectedTask);
     }
 
     private static void ShowLastLoglines(Logger logger)
@@ -294,85 +326,26 @@ public static class Tranga_Cli
     {
         logger.WriteLine("Tranga_CLI", "Menu: Executing Task");
         TrangaTask[] tasks = taskManager.GetAllTasks();
-        if (tasks.Length < 1)
-        {
-            Console.Clear();
-            Console.WriteLine("There are no available Tasks.");
-            logger.WriteLine("Tranga_CLI", "No available Tasks.");
+        
+        TrangaTask? selectedTask = SelectTask(tasks, logger);
+        if (selectedTask is null)
             return;
-        }
-        PrintTasks(tasks, logger);
-        
-        logger.WriteLine("Tranga_CLI", "Selecting Task to Execute");
-        Console.WriteLine("Enter q to abort");
-        Console.WriteLine($"Select Task (0-{tasks.Length - 1}):");
-
-        string? selectedTask = Console.ReadLine();
-        while(selectedTask is null || selectedTask.Length < 1)
-            selectedTask = Console.ReadLine();
-        
-        if (selectedTask.Length == 1 && selectedTask.ToLower() == "q")
-        {
-            Console.Clear();
-            Console.WriteLine("aborted.");
-            logger.WriteLine("Tranga_CLI", "aborted");
-            return;
-        }
-        
-        try
-        {
-            int selectedTaskIndex = Convert.ToInt32(selectedTask);
-            logger.WriteLine("Tranga_CLI", "Sending Task to TaskManager");
-            taskManager.ExecuteTaskNow(tasks[selectedTaskIndex]);
-        }
-        catch (Exception e)
-        {
-            Console.WriteLine($"Exception: {e.Message}");
-            logger.WriteLine("Tranga_CLI", e.Message);
-        }
         
+        logger.WriteLine("Tranga_CLI", "Sending Task to TaskManager");
+        taskManager.ExecuteTaskNow(selectedTask);
     }
 
     private static void DeleteTask(TaskManager taskManager, Logger logger)
     {
-        logger.WriteLine("Tranga_CLI", "Menu: Remove Task");
+        logger.WriteLine("Tranga_CLI", "Menu: Delete Task");
         TrangaTask[] tasks = taskManager.GetAllTasks();
-        if (tasks.Length < 1)
-        {
-            Console.Clear();
-            Console.WriteLine("There are no available Tasks.");
-            logger.WriteLine("Tranga_CLI", "No available Tasks");
-            return;
-        }
-        PrintTasks(tasks, logger);
         
-        logger.WriteLine("Tranga_CLI", "Selecting Task");
-        Console.WriteLine("Enter q to abort");
-        Console.WriteLine($"Select Task (0-{tasks.Length - 1}):");
-
-        string? selectedTask = Console.ReadLine();
-        while(selectedTask is null || selectedTask.Length < 1)
-            selectedTask = Console.ReadLine();
-
-        if (selectedTask.Length == 1 && selectedTask.ToLower() == "q")
-        {
-            Console.Clear();
-            Console.WriteLine("aborted.");
-            logger.WriteLine("Tranga_CLI", "aborted.");
+        TrangaTask? selectedTask = SelectTask(tasks, logger);
+        if (selectedTask is null)
             return;
-        }
         
-        try
-        {
-            int selectedTaskIndex = Convert.ToInt32(selectedTask);
-            logger.WriteLine("Tranga_CLI", "Sending Task to TaskManager");
-            taskManager.DeleteTask(tasks[selectedTaskIndex].task, tasks[selectedTaskIndex].connectorName, tasks[selectedTaskIndex].publication);
-        }
-        catch (Exception e)
-        {
-            Console.WriteLine($"Exception: {e.Message}");
-            logger.WriteLine("Tranga_CLI", e.Message);
-        }
+        logger.WriteLine("Tranga_CLI", "Sending Task to TaskManager");
+        taskManager.DeleteTask(selectedTask.task, selectedTask.connectorName, selectedTask.publication);
     }
 
     private static TrangaTask.Task? SelectTaskType(Logger logger)
diff --git a/Tranga/TaskManager.cs b/Tranga/TaskManager.cs
index 8b22faa..38cc17e 100644
--- a/Tranga/TaskManager.cs
+++ b/Tranga/TaskManager.cs
@@ -198,6 +198,16 @@ public class TaskManager
             taskList.Remove(task);
         task.state = TrangaTask.ExecutionState.Waiting;
     }
+
+    /// <summary>
+    /// Sets last execution time to start of time
+    /// Let taskManager handle enqueuing
+    /// </summary>
+    /// <param name="task"></param>
+    public void AddTaskToQueue(TrangaTask task)
+    {
+        task.lastExecuted = DateTime.UnixEpoch;
+    }
     
     /// <returns>All available Connectors</returns>
     public Dictionary<string, Connector> GetAvailableConnectors()