track message and different date options
This commit is contained in:
parent
ab12d393a1
commit
c18d47298a
10
src/main.rs
10
src/main.rs
@ -83,6 +83,12 @@ enum Command {
|
|||||||
hours : u16,
|
hours : u16,
|
||||||
#[clap(short='M', default_value_t=0)]
|
#[clap(short='M', default_value_t=0)]
|
||||||
minutes : u16,
|
minutes : u16,
|
||||||
|
/// Date for the time entry [default: Today]
|
||||||
|
#[clap(short, long)]
|
||||||
|
date : Option<chrono::NaiveDate>,
|
||||||
|
/// Message to identify the time entry.
|
||||||
|
#[clap(short, long)]
|
||||||
|
message : Option<String>,
|
||||||
},
|
},
|
||||||
/// For statistics about the state of your vault.
|
/// For statistics about the state of your vault.
|
||||||
#[clap(subcommand)]
|
#[clap(subcommand)]
|
||||||
@ -333,10 +339,10 @@ fn program() -> Result<(), error::Error> {
|
|||||||
}
|
}
|
||||||
println!("Updated task {}", colour::text::id(id));
|
println!("Updated task {}", colour::text::id(id));
|
||||||
},
|
},
|
||||||
Track { id_or_name, hours, minutes } => {
|
Track { id_or_name, hours, minutes, date, message } => {
|
||||||
let id = state.data.index.lookup(&id_or_name)?;
|
let id = state.data.index.lookup(&id_or_name)?;
|
||||||
let mut task = tasks::Task::load(id, vault_folder, false)?;
|
let mut task = tasks::Task::load(id, vault_folder, false)?;
|
||||||
let entry = tasks::TimeEntry::new(hours, minutes);
|
let entry = tasks::TimeEntry::new(hours, minutes, date, message);
|
||||||
task.data.time_entries.push(entry);
|
task.data.time_entries.push(entry);
|
||||||
task.save()?;
|
task.save()?;
|
||||||
},
|
},
|
||||||
|
14
src/tasks.rs
14
src/tasks.rs
@ -46,6 +46,7 @@ impl fmt::Display for Priority {
|
|||||||
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct TimeEntry {
|
pub struct TimeEntry {
|
||||||
pub logged_date : chrono::NaiveDate,
|
pub logged_date : chrono::NaiveDate,
|
||||||
|
pub message : Option<String>,
|
||||||
pub duration : Duration,
|
pub duration : Duration,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -291,7 +292,12 @@ impl Task {
|
|||||||
let mut total = Duration::zero();
|
let mut total = Duration::zero();
|
||||||
let mut lines = Vec::with_capacity(entries.len());
|
let mut lines = Vec::with_capacity(entries.len());
|
||||||
for entry in &entries {
|
for entry in &entries {
|
||||||
lines.push(format!(" {} [{}]", entry.duration, entry.logged_date));
|
lines.push(format!(
|
||||||
|
" {} [{}] {}",
|
||||||
|
entry.duration,
|
||||||
|
entry.logged_date,
|
||||||
|
entry.message.as_ref().unwrap_or(&String::new())
|
||||||
|
));
|
||||||
total = total + entry.duration;
|
total = total + entry.duration;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -658,14 +664,16 @@ impl TimeEntry {
|
|||||||
.fold(Duration::zero(), |a, d| a + d)
|
.fold(Duration::zero(), |a, d| a + d)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new(hours : u16, minutes : u16) -> Self {
|
/// Creates a new TimeEntry, correctly validating and setting defaults.
|
||||||
|
pub fn new(hours : u16, minutes : u16, date : Option<chrono::NaiveDate>, message : Option<String>) -> Self {
|
||||||
|
|
||||||
let (hours, minutes) = {
|
let (hours, minutes) = {
|
||||||
(hours + minutes / 60, minutes % 60)
|
(hours + minutes / 60, minutes % 60)
|
||||||
};
|
};
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
logged_date : chrono::Utc::now().naive_local().date(),
|
logged_date : date.unwrap_or(chrono::Utc::now().naive_local().date()),
|
||||||
|
message,
|
||||||
duration : Duration {
|
duration : Duration {
|
||||||
hours,
|
hours,
|
||||||
minutes,
|
minutes,
|
||||||
|
Loading…
Reference in New Issue
Block a user