diff options
author | metamuffin <yvchraiqi@protonmail.com> | 2022-06-13 10:07:36 +0200 |
---|---|---|
committer | metamuffin <yvchraiqi@protonmail.com> | 2022-06-13 10:07:36 +0200 |
commit | 1441b718c9bbf8016f563cfc89f4ee322e4f42e4 (patch) | |
tree | 32d30f1a503d5582bcba421279a31b4356740db2 | |
parent | 163052cd25d927c9437a2234befd22c9d143c4d4 (diff) | |
download | karlender-1441b718c9bbf8016f563cfc89f4ee322e4f42e4.tar karlender-1441b718c9bbf8016f563cfc89f4ee322e4f42e4.tar.bz2 karlender-1441b718c9bbf8016f563cfc89f4ee322e4f42e4.tar.zst |
started dynamic schedule
-rw-r--r-- | karlcommon/src/lib.rs | 5 | ||||
-rw-r--r-- | karlcommon/src/protocol.rs | 8 | ||||
-rw-r--r-- | karld/src/schedule.rs | 20 |
3 files changed, 30 insertions, 3 deletions
diff --git a/karlcommon/src/lib.rs b/karlcommon/src/lib.rs index 66df90d..f5e0798 100644 --- a/karlcommon/src/lib.rs +++ b/karlcommon/src/lib.rs @@ -7,8 +7,9 @@ use std::{ pub use protocol::*; pub fn socket_path() -> PathBuf { - Path::new("/run/user") - .join(format!("{}", getuid())) + std::env::var("XDG_RUNTIME_DIR") + .map(|p| Path::new(p.as_str()).to_path_buf()) + .unwrap_or_else(|_| Path::new("/run/user").join(format!("{}", getuid()))) .join("calendar") } fn getuid() -> u32 { diff --git a/karlcommon/src/protocol.rs b/karlcommon/src/protocol.rs index 25dfc66..4dc8724 100644 --- a/karlcommon/src/protocol.rs +++ b/karlcommon/src/protocol.rs @@ -59,6 +59,14 @@ pub enum Schedule { Static(Range<i64>), } +impl Schedule { + /// Returns `true` if the schedule is [`Dynamic`]. + /// + /// [`Dynamic`]: Schedule::Dynamic + pub fn is_dynamic(&self) -> bool { + matches!(self, Self::Dynamic { .. }) + } +} #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "snake_case")] diff --git a/karld/src/schedule.rs b/karld/src/schedule.rs index 1f3c479..0d0e783 100644 --- a/karld/src/schedule.rs +++ b/karld/src/schedule.rs @@ -1,5 +1,23 @@ +use chrono::NaiveDateTime; +use karlcommon::{Schedule, Task}; +use crate::TASKS; pub fn schedule_dynamic() { - + let 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<_>>(); + + dynamic.sort_by_key(|t| { + if let Schedule::Dynamic { priority, .. } = t.schedule { + // TODO increase precision by using floats + (priority * 1000.0) as i64 + } else { + 0 + } + }) } |