aboutsummaryrefslogtreecommitdiff
path: root/readme.md
blob: 24f3f41641929748db08194a9d11a8c2289a0e2d (plain)
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
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.
- [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;
- [ ] Improve total_times:
	- Create function to recalculate them. Shouldn't take so long, right?
	- Decide when this will run.
	- Check for overflow/underflow when adding/subtracting times;
	- Only recalculate when we're potentially exiting a saturation point;
- [ ] Allow to cancel a rename_task operation.
- [ ] 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;
- [ ] 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.
- [ ] 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;
- [ ] Clone (replicate) task using keys: `r` and `R`; If task is active, mark newly created task as inactive;
- [ ] Rethink keys;
- [ ] Space invaders on konami code;