aboutsummaryrefslogtreecommitdiff
path: root/karld/src/schedule.rs
diff options
context:
space:
mode:
Diffstat (limited to 'karld/src/schedule.rs')
-rw-r--r--karld/src/schedule.rs43
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!()
+ }
}