aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormetamuffin <yvchraiqi@protonmail.com>2022-06-13 10:07:36 +0200
committermetamuffin <yvchraiqi@protonmail.com>2022-06-13 10:07:36 +0200
commit1441b718c9bbf8016f563cfc89f4ee322e4f42e4 (patch)
tree32d30f1a503d5582bcba421279a31b4356740db2
parent163052cd25d927c9437a2234befd22c9d143c4d4 (diff)
downloadkarlender-1441b718c9bbf8016f563cfc89f4ee322e4f42e4.tar
karlender-1441b718c9bbf8016f563cfc89f4ee322e4f42e4.tar.bz2
karlender-1441b718c9bbf8016f563cfc89f4ee322e4f42e4.tar.zst
started dynamic schedule
-rw-r--r--karlcommon/src/lib.rs5
-rw-r--r--karlcommon/src/protocol.rs8
-rw-r--r--karld/src/schedule.rs20
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
+ }
+ })
}