imag/lib/domain/libimagtimetrack
Matthias Beyer cb4d5367e4 Rewrite all usages of ModuleEntryPath
Because the code was so complex before, we had to create an object and
then cast that object into a `StoreId` rather than just creating a
`StoreId` object right away.

With this patch, we're using the code-generation approach to generate a
function that creates a `StoreId` object based on the name of the
current module. That's way easier and error handling was also improved
by the switch to the new implementation.

The patch also includes a rewrite of all usages of ModuleEntryPath and
changes them to `module_path::new_id()` calls.

Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2019-04-13 22:39:39 +02:00
..
src Rewrite all usages of ModuleEntryPath 2019-04-13 22:39:39 +02:00
Cargo.toml Update lazy_static to 1.2 2018-11-11 13:05:55 +01:00
README.md libimagentrytimetrack -> libimagtimetrack 2017-08-27 18:23:47 +02:00

libimagtimetrack

A library for tracking time events in the imag store.

Store format

Events are stored with a store id like this:

/timetrack/<insert-date-year>/<insert-date-month>/<insert-date-day>/<insert-date-time>-<tag>.ext

Timetrackings contain

  • a comment (optional, free text)
  • a start date
  • an end date
  • a tag

by default and might be extended with more header fields as one likes.

The header of a timetrack "work" entry looks like this:

[event]
tag = "work"
start = "2017-01-02T03:04:05"
end = "2017-01-02T06:07:08"

Normal tags (as in libimagentrytag) are explicitely not used for tagging, so the user has the possibility to use normal tags on these entries as well.

The tag field is of type string, as for one tag, one entry is created. This way, one can track overlapping tags, as in:

imag timetrack start foo
imag timetrack start bar
imag timetrack stop foo
imag timetrack start baz
imag timetrack stop bar
imag timetrack stop baz

The end field is, of course, only set if the event already ended.

Library functionality

The library uses the libimagentrydatetime::datepath::DatePathBuilder for building StoreId objects.

The library offers two central traits:

  • TimeTrackStore, which extends a Store object with functionality to create FileLockEntry objects with a certain setting that is used for time-tracking, and
  • TimeTracking, which extends Entry with helper functions to query the entry-metadata that is used for the time tracking functionality

The library does not provide functionality to implement imag-timetrack or so, as the core functionality is already given and the commandline application can implement the missing bits in few lines of code.

Aggregating functionality might be provided at a later point in time.