|
1 | 1 | use crate::storage::save_tasks; |
2 | 2 | use crate::task::Task; |
| 3 | +use chrono::DateTime; |
| 4 | +use chrono::offset::Utc; |
3 | 5 | use colored::*; |
4 | 6 |
|
5 | | -pub fn add_task(tasks: &mut Vec<Task>, text: String) { |
6 | | - let new_task = Task::new(text.clone()); |
7 | | - tasks.push(new_task); |
| 7 | +pub 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()); |
8 | 11 | save_tasks(tasks); |
9 | | - println!("Added: {}", text.green()); |
| 12 | + println!("Added: {} --due {}", text.green(), date_string.blue()); |
10 | 13 | } |
11 | 14 |
|
12 | 15 | pub fn list_tasks(tasks: &[Task]) { |
13 | 16 | if tasks.is_empty() { |
14 | 17 | println!("No tasks yet!"); |
15 | 18 | } else { |
| 19 | + let now: DateTime<Utc> = Utc::now(); |
| 20 | + let current_date = now.format("%Y-%m-%d").to_string(); |
| 21 | + |
16 | 22 | for (i, task) in tasks.iter().enumerate() { |
17 | 23 | let status = if task.done { "[X]" } else { "[ ]" }; |
18 | | - println!("{}: {} {}", i, status.yellow(), task.text.blue()); |
| 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); |
19 | 32 | } |
20 | 33 | } |
21 | 34 | } |
@@ -51,6 +64,6 @@ pub fn edit_task(tasks: &mut Vec<Task>, index: usize, new_text: String) { |
51 | 64 | new_text.green() |
52 | 65 | ); |
53 | 66 | } else { |
54 | | - println!("Error: Invalid index {}", index); |
| 67 | + println!("Error: Invalid index {index}"); |
55 | 68 | } |
56 | 69 | } |
0 commit comments