diff options
Diffstat (limited to 'karld/src/schedule.rs')
-rw-r--r-- | karld/src/schedule.rs | 43 |
1 files changed, 34 insertions, 9 deletions
diff --git a/karld/src/schedule.rs b/karld/src/schedule.rs index 0d0e783..971c63a 100644 --- a/karld/src/schedule.rs +++ b/karld/src/schedule.rs @@ -1,16 +1,19 @@ -use chrono::NaiveDateTime; -use karlcommon::{Schedule, Task}; +use karlcommon::{Condition, Schedule}; use crate::TASKS; pub fn schedule_dynamic() { - let tasks = TASKS.write().unwrap(); + let mut tasks = TASKS.write().unwrap(); - let colliders = tasks.values().filter(|t| !t.schedule.is_dynamic()); - let mut dynamic = tasks - .values() - .filter(|t| t.schedule.is_dynamic()) - .collect::<Vec<_>>(); + let mut colliders = vec![]; + let mut dynamic = vec![]; + for t in tasks.values_mut() { + if t.schedule.is_dynamic() { + dynamic.push(t) + } else { + colliders.push(t) + } + } dynamic.sort_by_key(|t| { if let Schedule::Dynamic { priority, .. } = t.schedule { @@ -19,5 +22,27 @@ pub fn schedule_dynamic() { } else { 0 } - }) + }); + + let cond = Condition::Invert(box Condition::Or( + colliders + .iter() + .map(|c| match &c.schedule { + Schedule::Never => Condition::Never, + Schedule::Condition(c) => c.clone(), + Schedule::Static(r) => Condition::Range { + min: r.start, + max: r.end, + modulus: None, + prop: karlcommon::Property::Unix, + }, + Schedule::Dynamic { .. } => unreachable!(), + }) + .collect(), + )); + println!("{:?}", cond); + + while dynamic.len() != 0 { + todo!() + } } |