Import habits upon creating habitmgr.

This commit is contained in:
Nicolás A. Ortega Froysa 2022-07-27 10:42:48 +02:00
parent 2e84cdb3d2
commit adbff32546

View File

@ -55,23 +55,27 @@ impl HabitMgr
habits_path.display(), e); habits_path.display(), e);
}); });
} }
Self
{
habits: Vec::new(),
habits_path,
}
}
fn import_habits(&mut self) /*
{ * The list of active habits is necessary for all functions, thus they're
* imported here, allowing member functions which only wish to access
* information to be constant.
*/
let habits_file = OpenOptions::new() let habits_file = OpenOptions::new()
.read(true) .read(true)
.open(&self.habits_path) .open(&habits_path)
.unwrap_or_else(|e| { .unwrap_or_else(|e| {
panic!("Error opening file {}:\n{}", self.habits_path.display(), e); panic!("Error opening file {}:\n{}", habits_path.display(), e);
}); });
let habits_reader = BufReader::new(&habits_file); let habits_reader = BufReader::new(&habits_file);
self.habits = serde_json::from_reader(habits_reader).unwrap();
let habits:Vec<Habit> = serde_json::from_reader(habits_reader).unwrap();
Self
{
habits,
habits_path,
}
} }
fn export_habits(&self) fn export_habits(&self)
@ -93,7 +97,6 @@ impl HabitMgr
pub fn add(&mut self, name:String, bad:bool, weight:u8, _days:String) pub fn add(&mut self, name:String, bad:bool, weight:u8, _days:String)
{ {
self.import_habits();
self.habits.push(Habit::new(name.clone(), bad, weight)); self.habits.push(Habit::new(name.clone(), bad, weight));
self.export_habits(); self.export_habits();
@ -102,15 +105,13 @@ impl HabitMgr
pub fn delete(&mut self, id:usize) pub fn delete(&mut self, id:usize)
{ {
self.import_habits();
let old_habit = self.habits.remove(id); let old_habit = self.habits.remove(id);
self.export_habits(); self.export_habits();
println!("Removed habit {}", old_habit.get_name()); println!("Removed habit {}", old_habit.get_name());
} }
pub fn habit_info(&mut self, id:usize) pub fn habit_info(&self, id:usize)
{ {
self.import_habits();
let habit = &self.habits[id]; let habit = &self.habits[id];
println!("Name: {}", habit.get_name()); println!("Name: {}", habit.get_name());
println!("ID: {}", id); println!("ID: {}", id);
@ -125,7 +126,6 @@ impl HabitMgr
weight:Option<u8>, weight:Option<u8>,
_days:Option<String>) _days:Option<String>)
{ {
self.import_habits();
if name.is_some() if name.is_some()
{ {
self.habits[id].set_name(name.unwrap()); self.habits[id].set_name(name.unwrap());
@ -142,9 +142,8 @@ impl HabitMgr
self.export_habits(); self.export_habits();
} }
pub fn list(&mut self, _all:bool) pub fn list(&self, _all:bool)
{ {
self.import_habits();
if self.habits.is_empty() if self.habits.is_empty()
{ {
println!("There are no habits. Add one!"); println!("There are no habits. Add one!");