diff options
Diffstat (limited to 'README.md')
| -rw-r--r-- | README.md | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/README.md b/README.md new file mode 100644 index 0000000..ad1e89d --- /dev/null +++ b/README.md @@ -0,0 +1,84 @@ +Task Time Tracker +================= + +# license + +Code licensed under MIT or ISC. + +SPDX-License-Identifier: MIT OR ISC + +# know how + +- [ncurses colors](https://tldp.org/HOWTO/NCURSES-Programming-HOWTO/color.html#COLORBASICS) +- [pprintf](https://cplusplus.com/reference/cstdio/printf/) +- [intmax_t](https://wiki.sei.cmu.edu/confluence/plugins/servlet/mobile?contentId=87152366#content/view/87152366) +- [hexed.it](https://hexed.it/) + +# 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](https://stackoverflow.com/questions/17580118/signed-saturated-add-of-64-bit-ints). +- [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 to-do items; +- [x] Hide stderr messages from app screen. +- [x] Improve error detection/messages. |
