1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
Task Time Tracker
=================
# notes
- Only one task may be active;
- The log will be a circular array. During app startup the array will be loaded from a csv file. The log array should have a fixed length. Each string in the array should also have fixed length. Loading and storing it to a file will be implemented using readline and writeline operations. In order for the log file to be CSV compatible, we must always use the same format when writing to the log array. Best approach is to use a function that enfores the CSV format. The log should be written to a file every 5 minutes (not set in stone), if required; such may be done using a `log_is_dirty` flag. A possible structure for the log entries is: {uint64_t timestamp; uint8_t action[16]; uint8_t task_name[MAX_TASK_NAME+1]; uint8_t notes[16]; }.
# 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)
# 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.
- [ ] Don't store total_times on database_t:
- Create function to recalculate them. Shouldn't take so long, right?
- Decide when this will run.
- check for overflow/underflow when adding/subtracting times;
- [x] Show a symbol to let the user know when we're seeing the archive.
- [ ] Maybe rename database to something else that goes along with archive: main_db;
- [ ] Cleanup `draw_tui`:
- Selected and active tasks should be drawn after everything else.
- Try printing each row;
- Try printing headers and footers, then each row;
- Allow to repaint just certain parts of the TUI; this should allow to call `draw_tui` with a flag saying which parts need to be drawn;
- [ ] Allow to cancel a rename_task operation.
- [ ] Confirm delete_task operation.
- [ ] Implement logs as described above.
- [ ] Mouse selection is broken due to entire TUI update:
- By drawing only the lines that change, we can make the mouse selection not go away.
- Use DRAW_COMPONENT_FLAG to let draw_tui know what needs to be updated.
- [ ] On compact layout, start task names right after the vertical line, otherwise, add a space (as is now).
- [ ] Allow two view modes: one to iew non-archived tasks; another to view archived tasks.
- [ ] To add a new task, create it and enter the task-name-edit mode. To edit, use the ACS_CKBOARD to show empty spaces and ACS_LARROW and ACS_RARROW to show continuation on horizontal direction.
- [ ] Status of task will allow to keep counting time even when the process gets terminated forcefully;
- [ ] Review code: char !uint8_t;
- [ ] Change task order (use task_t tmp_task + memcpy);
- [ ] Create task using keys: `c` and `C`;
- [ ] Delete task using keys: `d` and `D`;
- [ ] Change task name using keys: `F2`;
- [ ] Add/remove time using keys: `F3`;
- [ ] Add/remove time for any day of week;
- [ ] Toggle task visibility using keys: `v` and `V`; when pressed, all tasks are shown and hidden tasks are shown in a ghosty theme; Ruggin task cannot be hidden;
- [ ] Use TASK_STATUS enum [NONE, RUNNING, ARCHIVED];
- [ ] Clone (replicate) task using keys: `r` and `R`; If task is active, mark newly created task as inactive;
- [ ] Space invaders on konami code;
- [ ] Rethink keys;
- [ ] Make sure that only one task is running at each time;
|