mirror of
https://github.com/nikolassv/bartib
synced 2024-09-20 22:21:57 +00:00
Added project option for list and report
This commit is contained in:
parent
8a74fb6486
commit
73f76d9637
4 changed files with 37 additions and 23 deletions
21
README.md
21
README.md
|
@ -91,13 +91,14 @@ This will create a report of how much time has been spent on which projects and
|
|||
bartib report
|
||||
```
|
||||
|
||||
The `report` subcommand accepts most of the arguments that the `list` subcommand accepts:
|
||||
The `report` subcommand accepts several arguments to refine the selection of activities:
|
||||
|
||||
```
|
||||
bartib report --today
|
||||
bartib report --yesterday
|
||||
bartib report --from 2021-09-01 --to 2021-09-05
|
||||
bartib report --date 2021-09-03
|
||||
bartib report --project "The most exciting project"
|
||||
```
|
||||
|
||||
#### List activities
|
||||
|
@ -114,28 +115,18 @@ Do not group activities by date:
|
|||
bartib list --no_grouping
|
||||
```
|
||||
|
||||
List activities in a given time range:
|
||||
|
||||
```
|
||||
bartib list --from 2021-03-01 --to 2021-11-01
|
||||
```
|
||||
|
||||
List activities on a given day:
|
||||
|
||||
```
|
||||
bartib list --date 2021-05-17
|
||||
```
|
||||
|
||||
List activities of special days:
|
||||
The `list` subcommand accepts several arguments to refine the selection of activities:
|
||||
|
||||
```
|
||||
bartib list --today
|
||||
bartib list --yesterday
|
||||
bartib list --from 2021-09-01 --to 2021-09-05
|
||||
bartib list --date 2021-09-03
|
||||
bartib list --project "The most exciting project"
|
||||
```
|
||||
|
||||
### Miscellaneous commands
|
||||
|
||||
|
||||
#### Edit activities
|
||||
|
||||
To change tracked activities, just open the file with your activities log in any text editor. To facilitate this, bartib offers the `edit` subcommand:
|
||||
|
|
|
@ -25,7 +25,7 @@ pub fn list(file_name: &str, filter: getter::ActivityFilter, do_group_activities
|
|||
|
||||
filtered_activities.sort_by_key(|activity| activity.start);
|
||||
|
||||
let first_element =filtered_activities.len().saturating_sub(filter.number_of_activities.unwrap_or(filtered_activities.len()));
|
||||
let first_element = filtered_activities.len().saturating_sub(filter.number_of_activities.unwrap_or(filtered_activities.len()));
|
||||
|
||||
if do_group_activities {
|
||||
list::list_activities_grouped_by_date(
|
||||
|
|
|
@ -5,11 +5,12 @@ use crate::data::activity;
|
|||
use crate::data::bartib_file;
|
||||
use crate::data::activity::Activity;
|
||||
|
||||
pub struct ActivityFilter {
|
||||
pub struct ActivityFilter<'a> {
|
||||
pub number_of_activities: Option<usize>,
|
||||
pub from_date: Option<NaiveDate>,
|
||||
pub to_date: Option<NaiveDate>,
|
||||
pub date: Option<NaiveDate>,
|
||||
pub project: Option<&'a str>
|
||||
}
|
||||
|
||||
pub fn get_descriptions_and_projects(file_content: &[bartib_file::Line]) -> Vec<(&String, &String)> {
|
||||
|
@ -59,7 +60,7 @@ pub fn get_activities(file_content: &[bartib_file::Line]) -> impl Iterator<Item
|
|||
|
||||
pub fn filter_activities<'a>(
|
||||
activities: impl Iterator<Item = &'a activity::Activity>,
|
||||
filter: &ActivityFilter,
|
||||
filter: &'a ActivityFilter,
|
||||
) -> impl Iterator<Item = &'a activity::Activity> {
|
||||
let from_date: NaiveDate;
|
||||
let to_date: NaiveDate;
|
||||
|
@ -72,9 +73,9 @@ pub fn filter_activities<'a>(
|
|||
to_date = filter.to_date.unwrap_or(naive::MAX_DATE);
|
||||
}
|
||||
|
||||
activities.filter(move |activity| {
|
||||
activity.start.date() >= from_date && activity.start.date() <= to_date
|
||||
})
|
||||
activities
|
||||
.filter(move |activity| {activity.start.date() >= from_date && activity.start.date() <= to_date})
|
||||
.filter(move |activity| filter.project.map(|p| activity.project == *p).unwrap_or(true))
|
||||
}
|
||||
|
||||
pub fn get_last_activity_by_end(file_content: &[bartib_file::Line]) -> Option<&activity::Activity> {
|
||||
|
|
26
src/main.rs
26
src/main.rs
|
@ -55,12 +55,14 @@ fn main() -> Result<()> {
|
|||
|
||||
let arg_description = Arg::with_name("description")
|
||||
.short("d")
|
||||
.long("description")
|
||||
.value_name("DESCRIPTION")
|
||||
.help("the description of the new activity")
|
||||
.takes_value(true);
|
||||
|
||||
let arg_project = Arg::with_name("project")
|
||||
.short("p")
|
||||
.long("project")
|
||||
.value_name("PROJECT")
|
||||
.help("the project to which the new activity belongs")
|
||||
.takes_value(true);
|
||||
|
@ -121,6 +123,15 @@ fn main() -> Result<()> {
|
|||
.arg(&arg_date)
|
||||
.arg(&arg_today)
|
||||
.arg(&arg_yesterday)
|
||||
.arg(
|
||||
Arg::with_name("project")
|
||||
.short("p")
|
||||
.long("project")
|
||||
.value_name("PROJECT")
|
||||
.help("do list activities for this project only")
|
||||
.takes_value(true)
|
||||
.required(false)
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("no_grouping")
|
||||
.long("no_grouping")
|
||||
|
@ -143,8 +154,17 @@ fn main() -> Result<()> {
|
|||
.arg(&arg_to_date)
|
||||
.arg(&arg_date)
|
||||
.arg(&arg_today)
|
||||
.arg(&arg_yesterday),
|
||||
)
|
||||
.arg(&arg_yesterday)
|
||||
.arg(
|
||||
Arg::with_name("project")
|
||||
.short("p")
|
||||
.long("project")
|
||||
.value_name("PROJECT")
|
||||
.help("do report activities for this project only")
|
||||
.takes_value(true)
|
||||
.required(false)
|
||||
)
|
||||
)
|
||||
.subcommand(
|
||||
SubCommand::with_name("last")
|
||||
.about("displays the descriptions and projects of recent activities")
|
||||
|
@ -219,6 +239,7 @@ fn run_subcommand(matches: &ArgMatches, file_name: &str) -> Result<()> {
|
|||
from_date: get_date_argument_or_ignore(sub_m.value_of("from_date"), "--from"),
|
||||
to_date: get_date_argument_or_ignore(sub_m.value_of("to_date"), "--to"),
|
||||
date: get_date_argument_or_ignore(sub_m.value_of("date"), "-d/--date"),
|
||||
project: sub_m.value_of("project")
|
||||
};
|
||||
|
||||
if sub_m.is_present("today") {
|
||||
|
@ -238,6 +259,7 @@ fn run_subcommand(matches: &ArgMatches, file_name: &str) -> Result<()> {
|
|||
from_date: get_date_argument_or_ignore(sub_m.value_of("from_date"), "--from"),
|
||||
to_date: get_date_argument_or_ignore(sub_m.value_of("to_date"), "--to"),
|
||||
date: get_date_argument_or_ignore(sub_m.value_of("date"), "-d/--date"),
|
||||
project: sub_m.value_of("project")
|
||||
};
|
||||
|
||||
if sub_m.is_present("today") {
|
||||
|
|
Loading…
Reference in a new issue