feat: info feedback on what you are doing

This commit is contained in:
xeruf 2024-08-06 22:11:34 +03:00
parent b5b57b7ac9
commit f4f1b56f02
3 changed files with 22 additions and 9 deletions

View File

@ -79,6 +79,10 @@ impl Drop for EventSender {
}
}
fn some_non_empty(str: &str) -> Option<String> {
if str.is_empty() { None } else { Some(str.to_owned()) }
}
fn or_print<T, U: Display>(result: Result<T, U>) -> Option<T> {
match result {
Ok(value) => Some(value),
@ -330,7 +334,7 @@ async fn main() {
}
Some('?') => {
tasks.set_state_filter(Some(arg.to_string()).filter(|s| !s.is_empty()));
tasks.set_state_filter(some_non_empty(arg).filter(|s| !s.is_empty()));
}
Some('!') => match tasks.get_position() {
@ -348,10 +352,12 @@ async fn main() {
Some('#') | Some('+') => {
tasks.add_tag(arg.to_string());
info!("Added tag filter for #{arg}")
}
Some('-') => {
tasks.remove_tag(arg.to_string());
info!("Removed tag filter for #{arg}")
}
Some('*') => {
@ -436,7 +442,7 @@ async fn main() {
fn print_event(event: &Event) {
debug!(
"At {} found {} kind {} '{}' {:?}",
"At {} found {} kind {} \"{}\" {:?}",
event.created_at, event.id, event.kind, event.content, event.tags
);
}

View File

@ -9,6 +9,7 @@ use log::{debug, error, info, trace, warn};
use nostr_sdk::{Alphabet, Event, EventBuilder, EventId, Kind, Tag, TagStandard, Timestamp};
use crate::kinds::is_hashtag;
use crate::some_non_empty;
#[derive(Debug, Clone, PartialEq)]
pub(crate) struct Task {
@ -62,7 +63,7 @@ impl Task {
fn states(&self) -> impl Iterator<Item=TaskState> + '_ {
self.props.iter().filter_map(|event| {
event.kind.try_into().ok().map(|s| TaskState {
name: Some(event.content.clone()).filter(|c| !c.is_empty()),
name: some_non_empty(&event.content),
state: s,
time: event.created_at.clone(),
})
@ -117,7 +118,7 @@ impl Task {
"{:?}",
self.props
.iter()
.map(|e| format!("{} kind {} '{}'", e.created_at, e.kind, e.content))
.map(|e| format!("{} kind {} \"{}\"", e.created_at, e.kind, e.content))
.collect::<Vec<String>>()
)),
"descriptions" => Some(format!(
@ -138,12 +139,14 @@ pub(crate) struct TaskState {
pub(crate) time: Timestamp,
}
impl TaskState {
pub(crate) fn get_label_for(state: &State, comment: &str) -> String {
some_non_empty(comment).unwrap_or_else(|| state.to_string())
}
pub(crate) fn get_label(&self) -> String {
self.name.clone().unwrap_or_else(|| self.state.to_string())
}
pub(crate) fn matches_label(&self, label: &str) -> bool {
self.state == State::Active
|| self.name.as_ref().is_some_and(|n| n.eq_ignore_ascii_case(label))
self.name.as_ref().is_some_and(|n| n.eq_ignore_ascii_case(label))
|| self.state.to_string().eq_ignore_ascii_case(label)
}
}

View File

@ -13,7 +13,7 @@ use TagStandard::Hashtag;
use crate::EventSender;
use crate::kinds::*;
use crate::task::{State, Task};
use crate::task::{State, Task, TaskState};
type TaskMap = HashMap<EventId, Task>;
#[derive(Debug, Clone)]
@ -550,9 +550,12 @@ impl Tasks {
}
pub(crate) fn undo(&mut self) {
let mut count = 0;
self.sender.clear().into_iter().rev().for_each(|event| {
count += 1;
self.remove(&event)
});
info!("Reverted last {count} actions!")
}
fn remove(&mut self, event: &Event) {
@ -572,6 +575,7 @@ impl Tasks {
comment,
id,
);
info!("Task status {} set for \"{}\"", TaskState::get_label_for(&state, comment), self.get_task_title(&id));
self.submit(prop)
}
@ -582,7 +586,7 @@ impl Tasks {
pub(crate) fn make_note(&mut self, note: &str) {
match self.position {
None => warn!("Cannot add note '{}' without active task", note),
None => warn!("Cannot add note \"{}\" without active task", note),
Some(id) => {
let prop = self.build_prop(Kind::TextNote, note, id);
self.submit(prop);