enhance(tasks): more transparent task and activity creation
This commit is contained in:
		
					parent
					
						
							
								55d42fc52c
							
						
					
				
			
			
				commit
				
					
						7cedd980fb
					
				
			
		
					 2 changed files with 45 additions and 30 deletions
				
			
		
							
								
								
									
										11
									
								
								src/kinds.rs
									
										
									
									
									
								
							
							
						
						
									
										11
									
								
								src/kinds.rs
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -66,12 +66,11 @@ where
 | 
			
		|||
    )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Build a task with informational output and optional labeled kind
 | 
			
		||||
pub(crate) fn build_task(name: &str, tags: Vec<Tag>, kind: Option<(&str, Kind)>) -> EventBuilder {
 | 
			
		||||
    info!("Created {} \"{name}\" with tags [{}]",
 | 
			
		||||
        kind.map(|k| k.0).unwrap_or("task"),
 | 
			
		||||
        tags.iter().map(format_tag).join(", "));
 | 
			
		||||
    EventBuilder::new(kind.map(|k| k.1).unwrap_or(TASK_KIND), name, tags)
 | 
			
		||||
pub fn join<'a, T>(tags: T) -> String
 | 
			
		||||
where
 | 
			
		||||
    T: IntoIterator<Item=&'a Tag>,
 | 
			
		||||
{
 | 
			
		||||
    tags.into_iter().map(format_tag).join(", ")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Return Hashtags embedded in the string.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										64
									
								
								src/tasks.rs
									
										
									
									
									
								
							
							
						
						
									
										64
									
								
								src/tasks.rs
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -905,14 +905,17 @@ impl TasksRelay {
 | 
			
		|||
        let (input, input_tags) = extract_tags(input.trim());
 | 
			
		||||
        let prio =
 | 
			
		||||
            if input_tags.iter().any(|t| t.kind().to_string() == PRIO) { None } else { self.priority.map(|p| to_prio_tag(p)) };
 | 
			
		||||
        info!("Created task \"{input}\" with tags [{}]", join(&input_tags));
 | 
			
		||||
        let id = self.submit(
 | 
			
		||||
            build_task(&input, input_tags, None)
 | 
			
		||||
            EventBuilder::new(TASK_KIND, &input, input_tags)
 | 
			
		||||
                .add_tags(self.tags.iter().cloned())
 | 
			
		||||
                .add_tags(tags)
 | 
			
		||||
                .add_tags(prio)
 | 
			
		||||
        );
 | 
			
		||||
        if set_state {
 | 
			
		||||
            self.state.as_option().inspect(|s| self.set_state_for_with(id, s));
 | 
			
		||||
            self.state
 | 
			
		||||
                .as_option()
 | 
			
		||||
                .inspect(|s| self.set_state_for_with(id, s));
 | 
			
		||||
        }
 | 
			
		||||
        id
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -1110,23 +1113,27 @@ impl TasksRelay {
 | 
			
		|||
        Some(self.set_state_for(*id, comment, state))
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Creates a note or activity, depending on whether the parent is a task.
 | 
			
		||||
    /// Sanitizes Input.
 | 
			
		||||
    pub(crate) fn make_note(&mut self, note: &str) -> EventId {
 | 
			
		||||
        if let Some(id) = self.get_position_ref() {
 | 
			
		||||
            if self.get_by_id(id).is_some_and(|t| t.is_task()) {
 | 
			
		||||
                let prop = EventBuilder::new(
 | 
			
		||||
                    Kind::TextNote,
 | 
			
		||||
                    note.trim(),
 | 
			
		||||
                    [Tag::event(*id)],
 | 
			
		||||
                );
 | 
			
		||||
                return self.submit(prop);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        let (input, tags) = extract_tags(note.trim());
 | 
			
		||||
        let (name, tags) = extract_tags(note.trim());
 | 
			
		||||
        let format = format!("\"{name}\" with tags [{}]", join(&tags));
 | 
			
		||||
        let mut prop =
 | 
			
		||||
            EventBuilder::new(Kind::TextNote, name, tags);
 | 
			
		||||
        //.filter(|id| self.get_by_id(id).is_some_and(|t| t.is_task()))
 | 
			
		||||
        //.map(|id| 
 | 
			
		||||
        let marker =
 | 
			
		||||
            if self.get_current_task().is_some_and(|t| t.is_task()) {
 | 
			
		||||
                MARKER_PROPERTY
 | 
			
		||||
            } else {
 | 
			
		||||
                // Activity if parent is not a task
 | 
			
		||||
                prop = prop.add_tags(self.tags.iter().cloned());
 | 
			
		||||
                MARKER_PARENT
 | 
			
		||||
            };
 | 
			
		||||
        info!("Created {} {format}", if marker == MARKER_PROPERTY { "note" } else { "activity" } );
 | 
			
		||||
        self.submit(
 | 
			
		||||
            build_task(&input, tags, Some(("activity", Kind::TextNote)))
 | 
			
		||||
                .add_tags(self.parent_tag())
 | 
			
		||||
                .add_tags(self.tags.iter().cloned())
 | 
			
		||||
        )
 | 
			
		||||
            prop.add_tags(
 | 
			
		||||
                self.get_position().map(|pos| self.make_event_tag_from_id(pos, marker))))
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Properties
 | 
			
		||||
| 
						 | 
				
			
			@ -1645,8 +1652,11 @@ mod tasks_test {
 | 
			
		|||
    fn test_sibling_dependency() {
 | 
			
		||||
        let mut tasks = stub_tasks();
 | 
			
		||||
        let parent = tasks.make_task("parent");
 | 
			
		||||
        let sub = tasks.submit(
 | 
			
		||||
            build_task("sub", vec![tasks.make_event_tag_from_id(parent, MARKER_PARENT)], None));
 | 
			
		||||
        let sub = tasks.submit(EventBuilder::new(
 | 
			
		||||
            TASK_KIND,
 | 
			
		||||
            "sub",
 | 
			
		||||
            [tasks.make_event_tag_from_id(parent, MARKER_PARENT)],
 | 
			
		||||
        ));
 | 
			
		||||
        assert_eq!(tasks.visible_tasks().len(), 1);
 | 
			
		||||
        tasks.track_at(Timestamp::now(), Some(sub));
 | 
			
		||||
        assert_eq!(tasks.get_own_events_history().count(), 1);
 | 
			
		||||
| 
						 | 
				
			
			@ -1674,7 +1684,11 @@ mod tasks_test {
 | 
			
		|||
        assert_eq!(tasks.filtered_tasks(Some(&pin), false).len(), 0);
 | 
			
		||||
        assert_eq!(tasks.filtered_tasks(Some(&zero), false).len(), 0);
 | 
			
		||||
 | 
			
		||||
        tasks.submit(EventBuilder::new(Kind::Bookmarks, "", [Tag::event(pin), Tag::event(zero)]));
 | 
			
		||||
        tasks.submit(EventBuilder::new(
 | 
			
		||||
            Kind::Bookmarks,
 | 
			
		||||
            "",
 | 
			
		||||
            [Tag::event(pin), Tag::event(zero)],
 | 
			
		||||
        ));
 | 
			
		||||
        assert_eq!(tasks.visible_tasks().len(), 1);
 | 
			
		||||
        assert_eq!(tasks.filtered_tasks(Some(&pin), true).len(), 0);
 | 
			
		||||
        assert_eq!(tasks.filtered_tasks(Some(&pin), false).len(), 0);
 | 
			
		||||
| 
						 | 
				
			
			@ -1702,10 +1716,12 @@ mod tasks_test {
 | 
			
		|||
        let mut tasks = stub_tasks();
 | 
			
		||||
        tasks.make_task_and_enter("proc # tags", State::Procedure);
 | 
			
		||||
        assert_eq!(tasks.get_own_events_history().count(), 1);
 | 
			
		||||
        let side = tasks.submit(
 | 
			
		||||
            build_task("side", vec![tasks.make_event_tag(&tasks.get_current_task().unwrap().event, MARKER_DEPENDS)], None));
 | 
			
		||||
        assert_eq!(tasks.visible_tasks(),
 | 
			
		||||
                   Vec::<&Task>::new());
 | 
			
		||||
        let side = tasks.submit(EventBuilder::new(
 | 
			
		||||
            TASK_KIND,
 | 
			
		||||
            "side",
 | 
			
		||||
            [tasks.make_event_tag(&tasks.get_current_task().unwrap().event, MARKER_DEPENDS)],
 | 
			
		||||
        ));
 | 
			
		||||
        assert_eq!(tasks.visible_tasks(), Vec::<&Task>::new());
 | 
			
		||||
        let sub_id = tasks.make_task("sub");
 | 
			
		||||
        assert_tasks!(tasks, [sub_id]);
 | 
			
		||||
        assert_eq!(tasks.len(), 3);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue