#[cfg(feature = "clap")]
use clap::Parser;
use tracing::debug;
use crate::{
config::PaceConfig,
domain::{activity::ActivityItem, filter::ActivityFilterKind},
error::{PaceResult, UserMessage},
service::activity_store::ActivityStore,
storage::{get_storage_from_config, ActivityQuerying, ActivityReadOps},
};
#[derive(Debug)]
#[cfg_attr(feature = "clap", derive(Parser))]
pub struct NowCommandOptions {}
impl NowCommandOptions {
#[tracing::instrument(skip(self))]
pub fn handle_now(&self, config: &PaceConfig) -> PaceResult<UserMessage> {
let activity_store = ActivityStore::with_storage(get_storage_from_config(config)?)?;
let user_message = (activity_store.list_current_activities(ActivityFilterKind::Active)?)
.map_or_else(
|| "No activities are currently running.".to_string(),
|activities| {
debug!("Current Activities: {:?}", activities);
let activity_items = activities
.iter()
.flat_map(|activity_id| activity_store.read_activity(*activity_id))
.collect::<Vec<ActivityItem>>();
let mut msgs = vec![];
for activity in &activity_items {
msgs.push(format!("{}", activity.activity()));
}
msgs.join("\n")
},
);
Ok(UserMessage::new(user_message))
}
}