70 lines
2.6 KiB
Markdown
70 lines
2.6 KiB
Markdown
|
### Dir structure
|
||
|
|
||
|
When a directory for the time tracker has been chosen, timepp will automatically
|
||
|
create the following structure inside of it:
|
||
|
|
||
|
```
|
||
|
├── 2018__time_tracker.csv (yearly csv file)
|
||
|
├── TODAY__time_tracker.csv (daily csv file)
|
||
|
└── YEARS__time_tracker (dir containing prev yearly csv files)
|
||
|
└── 2017__time_tracker.csv
|
||
|
└── 2016__time_tracker.csv
|
||
|
└── 2015__time_tracker.csv
|
||
|
.
|
||
|
.
|
||
|
.
|
||
|
```
|
||
|
|
||
|
* The current yearly csv file eventually gets automatically moved into the
|
||
|
`YEARS__time_tracker` dir.
|
||
|
|
||
|
* The daily csv file eventually gets automatically appended to the yearly csv
|
||
|
file.
|
||
|
|
||
|
---
|
||
|
|
||
|
### Tracker csv specification
|
||
|
|
||
|
All csv files have the same structure.
|
||
|
|
||
|
A single line in the csv file is of the form:
|
||
|
|
||
|
```csv
|
||
|
date, total time, type, task or project, intervals (optional)
|
||
|
```
|
||
|
|
||
|
* **date** is in iso format: `yyyy-mm-dd` (e.g., 2000-01-01).
|
||
|
|
||
|
* **total time** is in 24-clock format `hh:mm:ss` or (for backwards
|
||
|
compatibility) `hh:mm`.
|
||
|
|
||
|
* **type** is either `()` or `++`, where `()` means task and `++` means project.
|
||
|
|
||
|
* **task/project** is a task entry or a project keyword inside double quotes.
|
||
|
Quotes inside are escaped by preceding them with another double quote (RFC
|
||
|
4180).
|
||
|
|
||
|
* **intervals** is a sequence of intervals joined by double vert bars `||`:
|
||
|
interval||interval||...||interval
|
||
|
* **interval** is of the form `hh:mm:ss..hh:mm:ss` (`start..stop`).
|
||
|
* If **intervals** ends with a double dot `..`, then the last interval is
|
||
|
'open' (either currently running or was abruptly canceled).
|
||
|
|
||
|
|
||
|
Example:
|
||
|
|
||
|
```csv
|
||
|
2017-02-04, 08:03:29, ++, "+my_project", 12:34:34..12:45:45||15:34:11..16:34:34
|
||
|
2017-02-04, 23:59:33, ++, "+protect_gotham", 12:34:34..12:45:45||15:34:11..16:34:34
|
||
|
2017-02-04, 02:03:56, ++, "+protect_gotham", 12:34:34..12:45:45||15:34:11..16:34:34
|
||
|
2017-02-04, 02:03:32, (), "(A) Watch the world burn.", 12:34:34..12:45:45||15:34:11..16:34:34
|
||
|
2017-02-04, 02:03:03, (), "(A) Catch Joker.", 12:34:34..12:45:45||15:34:11..16:34:34
|
||
|
2017-02-04, 02:03:34, (), "(Z) Take the trash out.", 12:34:34..12:45:45||15:34:11..16:34:34
|
||
|
2017-02-05, 08:03:34, ++, "+my_project", 12:34:34..12:45:45||15:34:11..16:34:34
|
||
|
2017-02-05, 23:59:34, ++, "+protect_gotham", 12:34:34..12:45:45||15:34:11..16:34:34
|
||
|
2017-02-05, 02:03:12, ++, "+protect_gotham", 12:34:34..12:45:45||15:34:11..16:34:34
|
||
|
2017-02-05, 02:03:21, (), "(A) Watch the world burn.", 12:34:34..12:45:45||15:34:11..16:34:34
|
||
|
2017-02-05, 02:03:45, (), "x 2017-02-05 Catch Joker.", 12:34:34..12:45:45||15:34:11..16:34:34
|
||
|
2017-02-05, 02:03:34, (), "(Z) Take the trash out.", 12:34:34..12:45:45||15:34:11..16:34:34
|
||
|
```
|