diff --git a/data.json b/data.json index c200d08..d5bc010 100644 --- a/data.json +++ b/data.json @@ -1,37 +1,79 @@ { "monday": { "day_type": "Monday", - "patterns": [] + "patterns": [ + { + "name": "Sleep", + "date_time": "2024-03-18T23:30:00", + "once": false, + "mandatory": true + } + ] }, "tuesday": { "day_type": "Tuesday", - "patterns": [] + "patterns": [ + { + "name": "Sleep", + "date_time": "2024-03-18T23:30:00", + "once": false, + "mandatory": true + } + ] }, "wednesday": { "day_type": "Wednesday", - "patterns": [] + "patterns": [ + { + "name": "Sleep", + "date_time": "2024-03-18T23:30:00", + "once": false, + "mandatory": true + } + ] }, "thursday": { "day_type": "Thursday", - "patterns": [] + "patterns": [ + { + "name": "Sleep", + "date_time": "2024-03-18T23:30:00", + "once": false, + "mandatory": true + } + ] }, "friday": { "day_type": "Friday", - "patterns": [] + "patterns": [ + { + "name": "Sleep", + "date_time": "2024-03-18T23:30:00", + "once": false, + "mandatory": true + } + ] }, "saturday": { "day_type": "Saturday", "patterns": [ { - "name": "o", - "date_time": "2024-03-16T20:00:00", + "name": "Sleep", + "date_time": "2024-03-18T23:30:00", "once": false, - "mandatory": false + "mandatory": true } ] }, "sunday": { "day_type": "Sunday", - "patterns": [] + "patterns": [ + { + "name": "Sleep", + "date_time": "2024-03-18T23:30:00", + "once": false, + "mandatory": true + } + ] } } \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index e9b6643..820ef8c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -182,7 +182,7 @@ fn main() { /* TODO: 1.Timeline of a given day -2.Change pattern command -3.Add mandatory pattern "sleep" +2.Change pattern command CHECK +3.Add mandatory pattern "sleep" CHECK */ \ No newline at end of file diff --git a/src/time/day.rs b/src/time/day.rs index 5b43c8b..d876071 100644 --- a/src/time/day.rs +++ b/src/time/day.rs @@ -1,7 +1,7 @@ -use std::fmt::Display; +use std::{fmt::Display, str::FromStr}; use crate::time::pattern::Pattern; -use chrono::NaiveDateTime; +use chrono::{Local, NaiveDateTime, NaiveTime}; use serde::{Deserialize, Serialize}; use super::PatternInfo; @@ -41,7 +41,14 @@ impl Day { pub fn new(day_type: DayType) -> Self { Self { day_type, - patterns: Vec::new(), + patterns: vec![ + Pattern { + name:"Sleep".to_owned(), + date_time: NaiveDateTime::new(Local::now().date_naive(),NaiveTime::from_str("23:30").unwrap()), + once: false, + mandatory: true + } + ], } } @@ -100,34 +107,45 @@ impl Day { self.patterns.sort(); } + fn remove_pat(&mut self, index:usize){ + if !self.patterns[index].mandatory { + self.patterns.remove(index); + } + } + pub fn remove_pattern(&mut self, name: String, pdt: PatternDetectionType) { - if pdt == PatternDetectionType::All { - if name.is_empty() { - self.patterns.clear(); - return; - } - self.patterns.retain(|x| x.name != name); - }else { - let mut ui = 0; - let mut occurences = 0; - for i in 0..self.patterns.len() { - if self.patterns[i].name == name { - occurences += 1; - ui = i; - if let PatternDetectionType::Nth(x) = pdt { - if x == occurences { - self.patterns.remove(ui); - return; - } + let mut ui = 0; + let mut occurences = 0; + for i in 0..self.patterns.len() { + if self.patterns[i].name == name { + occurences += 1; + ui = i; + if let PatternDetectionType::Nth(x) = pdt { + if x == occurences { + self.remove_pat(ui); + return; } + }else { + self.remove_pat(i) } } - if let PatternDetectionType::Nth(x) = pdt { - if occurences >= x || occurences == 0 { - return; - } - self.patterns.remove(ui); + } + if let PatternDetectionType::Nth(x) = pdt { + if occurences >= x || occurences == 0 { + return; } + self.patterns.remove(ui); + } + } + + fn change_pat(&mut self, index:usize, pi: &PatternInfo){ + if !self.patterns[index].mandatory { + self.patterns[index].from(pi); + }else { + let oldname = self.patterns[index].name.clone(); + self.patterns[index].from(pi); + self.patterns[index].name = oldname; + self.patterns[index].once = false; } } @@ -140,11 +158,11 @@ impl Day { ui = i; if let PatternDetectionType::Nth(x) = pdt { if x == occurences { - self.patterns[ui].from(pi); + self.change_pat(ui,pi); return; } }else { - self.patterns[ui].from(pi); + self.change_pat(i,pi); } } } diff --git a/src/time/pattern.rs b/src/time/pattern.rs index 21c6039..2d86606 100644 --- a/src/time/pattern.rs +++ b/src/time/pattern.rs @@ -91,14 +91,6 @@ impl Ord for Pattern { } impl Pattern { - // pub fn new_empty() -> Self { - // Self { - // name: String::new(), - // date_time:NaiveDateTime::MAX, - // once: false, - // } - // } - pub fn from(&mut self,other:&PatternInfo){ println!("from"); if let PatternInfoType::New(value) = &other.name { @@ -113,13 +105,6 @@ impl Pattern { } } - pub fn change_once(&mut self, new_val:bool){ - if self.mandatory { - return; - } - self.once = new_val; - } - fn cmp_date_time(&self, other: &NaiveDateTime) -> Ordering { let comp = self.date_time.hour().cmp(&other.hour()); if comp.is_eq() { diff --git a/src/time/schedule.rs b/src/time/schedule.rs index 499eddb..1e99c54 100644 --- a/src/time/schedule.rs +++ b/src/time/schedule.rs @@ -419,8 +419,9 @@ impl ScheduleData { if pri.cmib.pdt.as_ref().unwrap() == &PatternDetectionType::All { println!( - "All {} removed from {:?}!", + "All {} named '{}' removed from {:?}!", "Patterns".yellow(), + pri.cmib.pattern_name.as_ref().unwrap(), pri.cmib.valid_daytypes.as_ref().unwrap() ); }else { diff --git a/src/utils.rs b/src/utils.rs index daaa330..f225051 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -93,7 +93,7 @@ pub fn format_time(time: &str) -> Result { let mut formatted_time: String = String::from(time); if formatted_time.len() == 1 { - if !formatted_time.chars().nth(0).unwrap().is_ascii_digit(){ + if !formatted_time.chars().next().unwrap().is_ascii_digit(){ return Err(ArgError::TimeFormat); } let mut full_str:String = "0".to_string(); @@ -165,7 +165,7 @@ pub fn limit_to(string:String,limit:usize)->String{ string } -pub fn process_str_num(mut str:&str) -> Option { +pub fn process_str_num(str:&str) -> Option { let mut processed_str:String = String::new(); for char in str.chars().collect::>() {