/TimeFX

GUI application for presenting Timewarrior data on charts.

Primary LanguageJavaGNU General Public License v3.0GPL-3.0

TimeFX

GUI application for presenting Timewarrior data on charts. I was disappointed with the reporting capacity in Timewarrior or Taskwarrior. I’ve tried a few plugins for Timewarrior, but I thought that a GUI application would be way better and more appealing for the eyes.

area chart
Figure 1. Area chart with contexts
pie chart
Figure 2. Pie chart with contexts

Usage

The application requires only Timewarrior for collecting data, but if you want to integrate it with Taskwarrior, you can add a hook for that. In the official documentation is the instruction on how to install hooks. 

Data for graphs are taken from JSON exported by Timewarrior.

timew export :all

Custom hook

If you use my hook, TimeFX can support tags (projects and contexts) from Taskwarrior. The problem with the original script is that it doesn’t recognize Taskwarrior tags. I forked it (it’s in task/hooks directory) and modified it this way: 

Hook with tags for taskwarrior
def extract_tags_from(json_obj):
    # Extract attributes for use as tags.
    tags = [json_obj['description']]
    contexts = ['car', 'cod', 'fin', 'per']

    if 'tags' in json_obj:
        for tag in json_obj['tags']:
            if tag in contexts:
                tags.append('+' + tag)
        # tags.extend(json_obj['tags'])
    if 'project' in json_obj:
        tags.append('%' + json_obj['project'])

	return tags

What can you see, from now on in Timewarrior each project will have a prefix % and context will have + but I limited them to a few ones (contexts array).

Running application

There are two versions of the application:

Native Image The file "timefx" is a Java Native Image, bundled for Linux - it doesn’t require Java. May require additional system dependencies. In order to run the application just run ./timefx in the terminal.

jar The jar file "TimeFX.jar" needs Java 17 with the JavaFX runtime. To accomplish this, install Java 17, download JavaFX library and run belowe command. Detailed quide is on the official website.

java --module-path $PATH_TO_FX --add-modules javafx.controls  -jar "path/to/TimeFX.jar"

There is an option to have Jave with prebuild JavaFX form Liberica, so execution will be simpler:

java -jar "path/to/TimeFX.jar"

Future features and remarks

  • if task has multiple tags without a prefix, TimeFX will count only the first one in the report

  • date ranges do not include the current day

  • ❏ configuration file to change prefixes for tags

  • ❏ report results may differ from Timewarrior because TimeFX does not split tasks at midnight