diff --git a/.config/config.ron b/.config/config.ron index 554d03f..f5230f3 100644 --- a/.config/config.ron +++ b/.config/config.ron @@ -28,11 +28,11 @@ "3": SwitchTo( page: Todo(TaskList), ), - "g": NewSubGroup, "enter": SwitchTo( page: Todo(Inspector), ), "shift-g": NewGroup, + "g": NewSubGroup, "t": NewTask, "j": MoveDown, "2": SwitchTo( @@ -59,6 +59,7 @@ ), "o": OpenZettel, "f": ToggleFinish, + "r": RandomColor }, ), tasklist: ( @@ -83,4 +84,4 @@ }, ), ), -) \ No newline at end of file +) diff --git a/.config/default_config.ron b/.config/default_config.ron index 706335b..28f8e7a 100644 --- a/.config/default_config.ron +++ b/.config/default_config.ron @@ -38,7 +38,8 @@ "p": EditPriority, "d": EditDue, "o": OpenZettel, - "f": ToggleFinish + "f": ToggleFinish, + "r": RandomColor }, ), tasklist: ( diff --git a/src/tui/app.rs b/src/tui/app.rs index 1e2e33c..0760587 100644 --- a/src/tui/app.rs +++ b/src/tui/app.rs @@ -45,7 +45,7 @@ pub enum Page { impl Default for Page { fn default() -> Self { - Self::Todo(TodoRegion::Explorer) + Self::Todo(TodoRegion::TaskList) } } diff --git a/src/tui/components/todo/inspector/mod.rs b/src/tui/components/todo/inspector/mod.rs index 0600c5d..3daa746 100644 --- a/src/tui/components/todo/inspector/mod.rs +++ b/src/tui/components/todo/inspector/mod.rs @@ -15,7 +15,7 @@ use crate::{ Signal, components::{Component, DEFAULT_NAME}, }, - types::{Due, Group, KastenHandle, Priority, Task, TodoNode, TodoNodeKind}, + types::{Due, Group, KastenHandle, Priority, Tag, Task, TodoNode, TodoNodeKind}, }; mod rootview; @@ -311,6 +311,20 @@ impl Component for Inspector<'_> { return Ok(Some(Signal::Refresh)); } + Signal::RandomColor if self.is_active => { + let Some(ref curr) = self.inspecting else { + return Ok(None); + }; + let kt = self.kh.write().await; + let node = kt.todo_tree.get_node_by_nano_id(curr).data(); + let TodoNodeKind::Group(g) = &node.kind else { + return Ok(None); + }; + Tag::randomize_color(g.tag.id.clone(), &kt).await?; + drop(kt); + return Ok(Some(Signal::Refresh)); + } + _ => {} } Ok(None) diff --git a/src/tui/signal.rs b/src/tui/signal.rs index e46dfff..56d47f6 100644 --- a/src/tui/signal.rs +++ b/src/tui/signal.rs @@ -89,6 +89,9 @@ pub enum Signal { /// as signals EnterRawText, + /// Randomly change the color of a `Group`! + RandomColor, + /// this is fucking temporary Helix { path: PathBuf, diff --git a/src/types/color.rs b/src/types/color.rs index bba0d1c..e38fb47 100644 --- a/src/types/color.rs +++ b/src/types/color.rs @@ -20,6 +20,11 @@ impl From for Color { Self(value) } } +impl From for ColorDTO { + fn from(value: Color) -> Self { + value.0 + } +} impl From for RatColor { fn from(value: Color) -> Self { diff --git a/src/types/tag.rs b/src/types/tag.rs index 73afd60..287132e 100644 --- a/src/types/tag.rs +++ b/src/types/tag.rs @@ -55,6 +55,22 @@ impl Tag { Ok(()) } + + pub async fn randomize_color(id: NanoId, kt: &Kasten) -> Result<()> { + let new_color = Color::default(); + + TagEntity::load() + .filter_by_nano_id(id.clone()) + .one(&kt.db) + .await? + .expect("Invariant Broken: Must exist") + .into_active_model() + .set_color(new_color) + .update(&kt.db) + .await?; + + Ok(()) + } } impl From for Tag {