Add an option to only print current projects

This commit is contained in:
Filipp Samoilov 2022-01-10 14:29:45 +02:00
parent c6c9ba17f8
commit f912c90440
3 changed files with 22 additions and 5 deletions

View file

@ -6,10 +6,10 @@ use crate::data::getter;
use crate::view::list;
// lists all currently runninng activities.
pub fn list_running(file_name: &str) -> Result<()> {
pub fn list_running(file_name: &str, only_project: bool) -> Result<()> {
let file_content = bartib_file::get_file_content(file_name)?;
let running_activities = getter::get_running_activities(&file_content);
list::list_running_activities(&running_activities);
list::list_running_activities(&running_activities, only_project);
Ok(())
}

View file

@ -136,7 +136,14 @@ fn main() -> Result<()> {
.about("cancels all currently running activities")
)
.subcommand(
SubCommand::with_name("current").about("lists all currently running activities"),
SubCommand::with_name("current")
.about("lists all currently running activities")
.arg(
Arg::with_name("compact_mode")
.long("compact")
.short("c")
.help("Compact mode. Report only projects names. Nothing if no current project. Useful for shell plugins")
)
)
.subcommand(
SubCommand::with_name("list")
@ -257,7 +264,7 @@ fn run_subcommand(matches: &ArgMatches, file_name: &str) -> Result<()> {
bartib::controller::manipulation::stop(file_name, time)
}
("cancel", Some(_)) => bartib::controller::manipulation::cancel(file_name),
("current", Some(_)) => bartib::controller::list::list_running(file_name),
("current", Some(sub_m)) => bartib::controller::list::list_running(file_name, sub_m.is_present("compact_mode") ),
("list", Some(sub_m)) => {
let filter = create_filter_for_arguments(sub_m);
let do_group_activities = !sub_m.is_present("no_grouping") && filter.date.is_none();

View file

@ -62,7 +62,17 @@ fn create_activites_group(title: &str, activities: &[&activity::Activity]) -> ta
}
// displays a table with running activities (no end time)
pub fn list_running_activities(running_activities: &[&activity::Activity]) {
pub fn list_running_activities(running_activities: &[&activity::Activity], compact_mode: bool) {
if compact_mode {
print!("{}",
running_activities
.iter()
.map(|a|a.project.clone())
.collect::<Vec<_>>()
.join(", ")
);
return
}
if running_activities.is_empty() {
println!("No Activity is currently running");
} else {