tasky_cli/
commands.rs

1use crate::storage::save_tasks;
2use crate::task::Task;
3use chrono::DateTime;
4use chrono::offset::Utc;
5use colored::*;
6
7pub fn add_task(tasks: &mut Vec<Task>, text: String, date_string: String) {
8    let new_task = Task::new(text.clone(), date_string.clone());
9    println!("Adding task: {}", new_task.date_string);
10    tasks.push(new_task.clone());
11    save_tasks(tasks);
12    println!("Added: {} --due {}", text.green(), date_string.blue());
13}
14
15pub fn list_tasks(tasks: &[Task]) {
16    if tasks.is_empty() {
17        println!("No tasks yet!");
18    } else {
19        let now: DateTime<Utc> = Utc::now();
20        let current_date = now.format("%Y-%m-%d").to_string();
21
22        for (i, task) in tasks.iter().enumerate() {
23            let status = if task.done { "[X]" } else { "[ ]" };
24            let (task_text, date_text) = if current_date > task.date_string {
25                // Overdue
26                (task.text.blue(), task.date_string.red())
27            } else {
28                // Due today or in the future
29                (task.text.blue(), task.date_string.yellow())
30            };
31            println!("{}: {} {} due {}", i, status, task_text, date_text);
32        }
33    }
34}
35
36pub fn remove_task(tasks: &mut Vec<Task>, index: usize) {
37    if index < tasks.len() {
38        let task = tasks.remove(index);
39        save_tasks(tasks);
40        println!("Removed: {}", task.text.red());
41    } else {
42        println!("Error: Invalid index {}", index);
43    }
44}
45
46pub fn done_task(tasks: &mut Vec<Task>, index: usize) {
47    if index < tasks.len() {
48        tasks[index].mark_done();
49        save_tasks(tasks);
50        println!("Marked as done: {}", tasks[index].text.green());
51    } else {
52        println!("Error: Invalid index {}", index);
53    }
54}
55pub fn edit_task(tasks: &mut Vec<Task>, index: usize, new_text: String) {
56    if index < tasks.len() {
57        let old_text = tasks[index].text.clone();
58        tasks[index].text = new_text.clone();
59        save_tasks(tasks);
60        println!(
61            "Edited task {}: '{}' -> '{}'",
62            index,
63            old_text.yellow(),
64            new_text.green()
65        );
66    } else {
67        println!("Error: Invalid index {index}");
68    }
69}