forked from janek/mostr
feat(task): more accessors and modifiers
This commit is contained in:
parent
c2f1f54170
commit
54e870a93a
31
src/task.rs
31
src/task.rs
|
@ -1,7 +1,9 @@
|
||||||
use std::collections::{BTreeSet, HashSet};
|
use std::collections::{BTreeSet, HashSet};
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
|
||||||
use nostr_sdk::{Event, EventId, Kind, Tag, Timestamp};
|
use nostr_sdk::{Event, EventBuilder, EventId, Kind, Tag, Timestamp};
|
||||||
|
|
||||||
|
use crate::EventSender;
|
||||||
|
|
||||||
pub(crate) struct Task {
|
pub(crate) struct Task {
|
||||||
pub(crate) event: Event,
|
pub(crate) event: Event,
|
||||||
|
@ -10,6 +12,7 @@ pub(crate) struct Task {
|
||||||
/// Cached sorted tags of the event
|
/// Cached sorted tags of the event
|
||||||
pub(crate) tags: Option<BTreeSet<Tag>>,
|
pub(crate) tags: Option<BTreeSet<Tag>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Task {
|
impl Task {
|
||||||
pub(crate) fn new(event: Event) -> Task {
|
pub(crate) fn new(event: Event) -> Task {
|
||||||
Task {
|
Task {
|
||||||
|
@ -24,6 +27,10 @@ impl Task {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(crate) fn get_id(&self) -> &EventId {
|
||||||
|
&self.event.id
|
||||||
|
}
|
||||||
|
|
||||||
pub(crate) fn parent_id(&self) -> Option<EventId> {
|
pub(crate) fn parent_id(&self) -> Option<EventId> {
|
||||||
for tag in self.event.tags.iter() {
|
for tag in self.event.tags.iter() {
|
||||||
match tag {
|
match tag {
|
||||||
|
@ -66,6 +73,23 @@ impl Task {
|
||||||
self.state().map_or(State::Open, |s| s.state)
|
self.state().map_or(State::Open, |s| s.state)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(crate) fn set_state(
|
||||||
|
&mut self,
|
||||||
|
sender: &EventSender,
|
||||||
|
state: State,
|
||||||
|
comment: &str,
|
||||||
|
) -> Option<Event> {
|
||||||
|
sender
|
||||||
|
.submit(EventBuilder::new(
|
||||||
|
state.kind(),
|
||||||
|
comment,
|
||||||
|
vec![Tag::event(self.event.id)],
|
||||||
|
))
|
||||||
|
.inspect(|e| {
|
||||||
|
self.props.insert(e.clone());
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
fn default_state(&self) -> TaskState {
|
fn default_state(&self) -> TaskState {
|
||||||
TaskState {
|
TaskState {
|
||||||
name: None,
|
name: None,
|
||||||
|
@ -136,6 +160,11 @@ impl TaskState {
|
||||||
pub(crate) fn get_label(&self) -> String {
|
pub(crate) fn get_label(&self) -> String {
|
||||||
self.name.clone().unwrap_or_else(|| self.state.to_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 == label)
|
||||||
|
|| self.state.to_string() == label
|
||||||
|
}
|
||||||
}
|
}
|
||||||
impl fmt::Display for TaskState {
|
impl fmt::Display for TaskState {
|
||||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
|
Loading…
Reference in New Issue