diff --git a/src/main.rs b/src/main.rs index 2aed11e..614c785 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,102 +1,145 @@ -use std::vec; +use std::fs; use std::io; -struct Task{ +struct Task { name: String, priority: usize, description: String, done: bool, } -impl Task{ - fn new(name: String, priority: usize, description: String)-> Task{ - Task{name,priority,description, done: false} +impl Task { + fn new(name: String, priority: usize, description: String) -> Task { + Task { + name, + priority, + description, + done: false, + } } - fn display(&self){ - println!("Tâche: {}. + fn display(&self) { + println!( + "Tâche: {}. Priorité: {} - Description: {}", self.name, self.priority,self.description) + Description: {}", + self.name, self.priority, self.description + ) } - fn task_done(&mut self){ - if !self.done{ + fn task_done(&mut self) { + if !self.done { println!("La tâche {} à été effectué, bravo !", self.name); self.done = true; - } - else{ + } else { println!("La tâche {} à déjà été effectué.", self.name); } - - } - } -struct TodoList{ +struct TodoList { list_tasks: Vec, } -impl TodoList{ - fn new()->TodoList{ - TodoList { list_tasks: Vec::new() } +impl TodoList { + fn new() -> TodoList { + TodoList { + list_tasks: Vec::new(), + } } - fn create_task(&mut self,name: String, priority: usize, description: String){ + fn create_task(&mut self, name: String, priority: usize, description: String) { let task = Task::new(name, priority, description); self.list_tasks.push(task); } - fn add(&mut self, task: Task){ - self.list_tasks.push(task); - } - fn delete(&mut self, number: usize){ + fn delete(&mut self, number: usize) { self.list_tasks.remove(number); } - fn list(&self){ - for (i,task) in self.list_tasks.iter().enumerate(){ + fn list(&self) { + for (i, task) in self.list_tasks.iter().enumerate() { println!("{}: {} - Priorité: {}", i, task.name, task.priority); } } + fn save(&self) { + let mut output = String::new(); + for (i, task) in self.list_tasks.iter().enumerate() { + output.push_str(&format!( + "{},{},{},{}\n", + task.name, task.priority, task.description, task.done + )); + } + fs::write("tasks.txt", output).expect("Could not save"); + } + fn load() -> TodoList { + match fs::read_to_string("tasks.txt") { + Ok(content) => { + let mut list = TodoList::new(); + for line in content.lines() { + let parts: Vec<&str> = line.split(',').collect(); + if parts.len() == 4 { + let name = parts[0].to_string(); + let priority: usize = parts[1].parse().expect("Bad priority"); + let description = parts[2].to_string(); + let done: bool = parts[3].parse().expect("Bad done value"); + let mut task = Task::new(name, priority, description); + task.done = done; + list.list_tasks.push(task); + } + } + list + } + Err(_) => TodoList::new(), + } +} } - - fn main() { - println!("Bienvenue dans le menu de la ToDoList APP !"); - let mut s1 = TodoList::new(); - - loop{ - println!("\n--- ToDoList APP ---"); - println!("Voici la liste des tâches"); - s1.list(); - println!("Vous pouvez; \n Pressez 1 pour créer une tâche.\n Pressez 2 pour supprimer une tâche \n Pressez 3 pour revoir la liste de tâche.\n Et écrire quit pour quitter l'application"); - let mut input = String::new(); - io::stdin().read_line(&mut input).expect("Failed to read"); - let input = input.trim(); - if(input=="1") { - let mut input2 = String::new(); - println!("Créons une tâche, veuillez entrer: Le nom de la tâche"); - io::stdin().read_line(&mut input2).expect("Failed to read"); - let input2 = input2.trim(); - let TacheName = input2; - println!("Créons une tâche, veuillez entrer: la priorité de cette dernière (chiffre de 1 à 5)"); - let mut input3 = String::new(); - io::stdin().read_line(&mut input3).expect("Failed to read"); - let input3 = input3.trim(); - let priority = input3; - println!("Créons une tâche, veuillez entrer: Une petite description"); - let mut input4 = String::new(); - io::stdin().read_line(&mut input4).expect("Failed to read"); - let input4 = input4.trim(); - let description = input4; - s1.create_task(TacheName.to_string(), priority.trim().parse().expect("Not a number!"), description.to_string()); - println!("La tâche à bien été crée !"); + println!("Bienvenue dans le menu de la ToDoList APP !"); + let mut s1 = TodoList::load(); + + loop { + println!("\n--- ToDoList APP ---"); + println!("Voici la liste des tâches"); s1.list(); - } - if(input=="2"){ - s1.list(); - println!("Veuillez choisir une tâche à supprimer"); + println!( + "Vous pouvez; \n Pressez 1 pour créer une tâche.\n Pressez 2 pour supprimer une tâche \n Pressez 3 pour revoir la liste de tâche.\n Et écrire quit pour quitter l'application" + ); let mut input = String::new(); io::stdin().read_line(&mut input).expect("Failed to read"); - let input = input.trim(); - s1.delete(input.trim().parse().expect("Not a number !")); + let input = input.trim(); + if input == "1" { + let mut input2 = String::new(); + println!("Créons une tâche, veuillez entrer: Le nom de la tâche"); + io::stdin().read_line(&mut input2).expect("Failed to read"); + let input2 = input2.trim(); + let TacheName = input2; + println!( + "Créons une tâche, veuillez entrer: la priorité de cette dernière (chiffre de 1 à 5)" + ); + let mut input3 = String::new(); + io::stdin().read_line(&mut input3).expect("Failed to read"); + let input3 = input3.trim(); + let priority = input3; + println!("Créons une tâche, veuillez entrer: Une petite description"); + let mut input4 = String::new(); + io::stdin().read_line(&mut input4).expect("Failed to read"); + let input4 = input4.trim(); + let description = input4; + s1.create_task( + TacheName.to_string(), + priority.trim().parse().expect("Not a number!"), + description.to_string(), + ); + println!("La tâche à bien été crée !"); + s1.list(); + } + if input == "2" { + s1.list(); + println!("Veuillez choisir une tâche à supprimer"); + let mut input = String::new(); + io::stdin().read_line(&mut input).expect("Failed to read"); + let input = input.trim(); + s1.delete(input.trim().parse().expect("Not a number !")); + } + if input == "3" { + s1.list(); + } + if input == "quit" { + s1.save(); + break; } - if(input =="3"){ - s1.list(); } - } -} \ No newline at end of file diff --git a/tasks.txt b/tasks.txt new file mode 100644 index 0000000..430c2ba --- /dev/null +++ b/tasks.txt @@ -0,0 +1 @@ +EHEHEH,1,EHHEHEHEH,false