aboutsummaryrefslogtreecommitdiff

Task Time Tracker

know-how

to-do list

  • [x] Include check on number of char bits;
  • [x] Decide once for all if I'll be using uint8_t or char for strings: use char.
  • [x] maybe rename to task-time-tracker?
  • [x] Remove hash stuff;
  • [x] Tasks should have a modified_on timestamp field;
  • [x] Change capacity to size_t.
  • [x] Change active_task to active_task_ptrdiff.
  • [x] Use selected_task_ptrdiff?
  • [x] Make sure task names don't include commas ',';
  • [x] Format time being displayed.
  • [x] Replace max_capacity by its true value;
  • [x] Replace intmax_t by int64_t;
  • [x] Adapt input cycle to work with database_t *db to allow pointing to database/archive.
  • [x] Show a symbol to let the user know when we're seeing the archive.
  • [x] Status of task will allow to keep counting time even when the process gets terminated forcefully;
  • [x] Review code: char !uint8_t;
  • [x] Make sure that only one task is running at each time;
  • [x] Mouse selection is broken due to entire TUI update: No, it was fixed by using erase() on the draw_tui instead of clear();
  • [x] I bet the headers are no longer being used all on a single cycle. Let's separate them and include "header_title_archive";
  • [x] Rename layout members: title_header, archive_header, total_header, days_headers, column_widths, column_alignments, headers_paddings.
  • [x] Using the archive header, we can remove the top-left-corner diamond on the archive.
  • [x] Allow to cancel a rename_task operation: you can do it by leaving it blank.
  • [x] Make sure we are not using strcat and strcpy... or that we are using them wisely (famous last words).
  • [x] Make archive be stored in CSV format: takes less space and allows to quickly archive by appending to end of file;
  • [x] Implement append_to_csv(task_t *task, char *path_name) and use it in archive function;
  • [x] At startup, check for required files and create them if not present.
  • [x] Allow to archive task using keys: a and A;
  • [x] By default, store files on ~/.config/task_time_tracker/ or ~/.local/share/task_time_tracker and allow to store elsewhere if passed by argument --config.
  • [x] Allow usage of ttt: ./ttt --dpath ./ to change the app folder: To changes app data path change the environment variable HOME (USERPROFILE for windows users).
  • [x] Clone (replicate) task; If task is active, mark newly created task as inactive;
  • [x] Check if next/previous is safe against overflows/underflows using https://gcc.gnu.org/onlinedocs/gcc/Integer-Overflow-Builtins.html
  • [x] Confirm delete_task operation by show confirmation message on selected line (horizontally centered).
  • [x] Check totals update speedup using https://gcc.gnu.org/onlinedocs/gcc/Integer-Overflow-Builtins.html
    • For 1M entries, generic C code runs in 12.0ms while special approaches using builtins or SIMD takes around 9.5ms.
    • Used optimization described here.
  • [x] Allow to jump to specific task by index number using key g and G;
  • [x] Move task to (using task_t tmp_task + memcpy) using key m and M;
  • [x] Rethink keys;
    • [x] Create task using keys: n and N;
    • [x] Delete task using key: delete;
    • [x] Change task name using keys: F2;
    • [x] Duplicate task using keys: d and D;
  • [x] Add/remove time using keys: F3;
  • [x] Add/remove time for any day of week;
  • [x] Total times may saturate, but before that the user will see the infinite symbol. Solution: Provide user with possibility to refresh totals.
  • [x] Decide on a INVALID_WINDOW_MESSAGE.
  • [x] Use backspace to clear all timers for current task.
  • [x] Move store_database_partial to misc and save only when leaving or after 15 seconds of inactivity and having dirty flag set.
  • [x] Register kill signals to exit gracefully.
  • [x] Check if string_buffer needs to be cleared. We may be leaking info on the string_buffer.
  • [x] Replaced sprintf by snprintf;
  • [x] Make sure that string_buffer bounds are respected;
  • [x] Rename MAX_TASK_NAME to something more informative;
  • [x] Compress code:
    • [x] Re-do sprint_time5_utf8: -12 delta LOC;
    • [x] Re-do truncate_string_utf8: 0 delta LOC;
    • [x] Implement read_input_to_string_buffer: -24 delta LOC;
    • [x] Wrap malloc (and maybe others) in a function with error checking;
    • [x] Move database actions into functions;
  • [x] Fix bug: archiving/unarchiving task introduces " ," at end of name and increases the number of spaces before comma;
  • [x] Check if draw_tui may be simplified by drawing entire lines of tasks at once and draw columns separators after;
    • By having each column-print job decoulpled, we avoid havint to measure and compensate lengths of UTF8 strings;
  • [x] Review all code for bugs related to auto-cast on ptrdiff_t (signed/unsigned);
  • [x] Review all code for bugs related to auto-cast on size_t (signed/unsigned);
  • [x] Go over all TODO items;
  • [x] Hide stderr messages from app screen.
  • [x] Improve error detection/messages.