time tracked in list view
This commit is contained in:
parent
a1a1713c28
commit
ac5da2c16f
@ -38,8 +38,6 @@ Run `--help` alongside any command to get details on what it does.
|
|||||||
- List dependencies as a tree on note view below info
|
- List dependencies as a tree on note view below info
|
||||||
- Automatically added recurring notes system
|
- Automatically added recurring notes system
|
||||||
- Time tracking
|
- Time tracking
|
||||||
- `track` command to track time on a note
|
|
||||||
- Include time entries and totals on note view
|
|
||||||
- Command to give statistics on time tracking (by tag, and for the last x days)
|
- Command to give statistics on time tracking (by tag, and for the last x days)
|
||||||
- Due dates
|
- Due dates
|
||||||
- Taken as input when creating notes
|
- Taken as input when creating notes
|
||||||
|
22
src/tasks.rs
22
src/tasks.rs
@ -58,6 +58,22 @@ pub struct TimeEntry {
|
|||||||
minutes : u16,
|
minutes : u16,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl TimeEntry {
|
||||||
|
/// Adds up a collection of time entries.
|
||||||
|
fn total(entries : &Vec<TimeEntry>) -> (u16, u16) {
|
||||||
|
let (hours, minutes) =
|
||||||
|
entries
|
||||||
|
.into_iter()
|
||||||
|
.fold((0, 0), |a, e| (a.0 + e.hours, a.1 + e.minutes));
|
||||||
|
|
||||||
|
let (hours, minutes) = {
|
||||||
|
(hours + minutes / 60, minutes % 60)
|
||||||
|
};
|
||||||
|
|
||||||
|
(hours, minutes)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl TimeEntry {
|
impl TimeEntry {
|
||||||
pub fn new(hours : u16, minutes : u16) -> Self {
|
pub fn new(hours : u16, minutes : u16) -> Self {
|
||||||
|
|
||||||
@ -308,19 +324,23 @@ pub fn list(vault_folder : &path::Path) -> Result<(), error::Error> {
|
|||||||
.load_preset(comfy_table::presets::UTF8_FULL)
|
.load_preset(comfy_table::presets::UTF8_FULL)
|
||||||
.apply_modifier(comfy_table::modifiers::UTF8_ROUND_CORNERS)
|
.apply_modifier(comfy_table::modifiers::UTF8_ROUND_CORNERS)
|
||||||
.set_content_arrangement(comfy_table::ContentArrangement::Dynamic);
|
.set_content_arrangement(comfy_table::ContentArrangement::Dynamic);
|
||||||
table.set_header(vec!["Id", "Name", "Tags", "Priority"]);
|
table.set_header(vec!["Id", "Name", "Tags", "Priority", "Time"]);
|
||||||
|
|
||||||
let mut tasks = Task::load_all(vault_folder, true)?;
|
let mut tasks = Task::load_all(vault_folder, true)?;
|
||||||
tasks.sort_by(|t1, t2| t2.data.priority.cmp(&t1.data.priority));
|
tasks.sort_by(|t1, t2| t2.data.priority.cmp(&t1.data.priority));
|
||||||
|
|
||||||
for task in tasks {
|
for task in tasks {
|
||||||
if !task.data.discarded && !task.data.complete {
|
if !task.data.discarded && !task.data.complete {
|
||||||
|
|
||||||
|
let (hours, minutes) = TimeEntry::total(&task.data.time_entries);
|
||||||
|
|
||||||
table.add_row(
|
table.add_row(
|
||||||
vec![
|
vec![
|
||||||
task.data.id.to_string(),
|
task.data.id.to_string(),
|
||||||
task.data.name,
|
task.data.name,
|
||||||
format_hash_set(&task.data.tags)?,
|
format_hash_set(&task.data.tags)?,
|
||||||
task.data.priority.to_string(),
|
task.data.priority.to_string(),
|
||||||
|
if (hours, minutes) == (0, 0) { String::new() } else { format!("{}:{:0>2}", hours, minutes) },
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user