From 4d7f6246b796352f87d4e62a1aec9a7eae283e43 Mon Sep 17 00:00:00 2001 From: dam Date: Tue, 20 Sep 2022 22:10:46 +0000 Subject: Fix input cycle to work with main and archive databases. --- main.c | 79 ++++++++++++++++++++++++++++++++++++++------------------------- readme.md | 3 +-- 2 files changed, 49 insertions(+), 33 deletions(-) diff --git a/main.c b/main.c index ace006b..87f9a4a 100644 --- a/main.c +++ b/main.c @@ -966,7 +966,9 @@ int main(int argc, char *argv[]) { initialize_tui(); - load_database(&database, DB_BIN_PATH_NAME); + if (load_database(&database, DB_BIN_PATH_NAME) == false) { + store_database(&database, DB_BIN_PATH_NAME); + } // TODO // When this is active, it cancels selecting text with the mouse, and breaks the creation of a new task. @@ -975,23 +977,31 @@ int main(int argc, char *argv[]) { int ch = KEY_RESIZE; do { - task_t *active_task = get_active_task(&database); - task_t *selected_task = get_selected_task(&database); + task_t *active_task = get_active_task(db); + task_t *selected_task = get_selected_task(db); update_timers(&database); switch(ch) { - case ERR: // When getch() times out. + // When getch() times out. + case ERR: break; - + + // When terminal is resized. + case KEY_RESIZE: + clear(); + getmaxyx(stdscr, size_y, size_x); + line_buffer = realloc(line_buffer, size_x); + break; + case KEY_F(1): { task_t *new_task; - if (create_task(&database, &new_task) == false) { + if (create_task(db, &new_task) == false) { // ERROR break; } - int row = database.selected_task; + int row = db->selected_task; mvaddch(row, 0, ACS_DIAMOND); clrtoeol(); mvaddch(row, size_x-1, ACS_VLINE); @@ -1024,7 +1034,7 @@ int main(int argc, char *argv[]) { break; } // rename stuff - int row = database.selected_task + 1; + int row = db->selected_task + 1; mvaddch(row, 0, ACS_DIAMOND); clrtoeol(); mvaddch(row, size_x-1, ACS_VLINE); @@ -1039,7 +1049,7 @@ int main(int argc, char *argv[]) { if (selected_task == NULL) { break; } - delete_task(&database, selected_task); + delete_task(db, selected_task); break; } @@ -1052,27 +1062,34 @@ int main(int argc, char *argv[]) { case '\n': case ' ': { + if (db != &database) { + break; + } task_t *next_task = selected_task; if (active_task != NULL) { - update_timers(&database); // TODO Should I keep this even though it always does? - database.active_task = -1; + update_timers(db); // TODO Should I keep this even though it always does? + db->active_task = -1; } if (active_task != next_task) { - database.active_task = next_task - database.tasks; + db->active_task = next_task - db->tasks; } - database.modified_on = time(NULL); - store_database(&database, DB_BIN_PATH_NAME); + db->modified_on = time(NULL); + store_database(db, DB_BIN_PATH_NAME); break; } - - case KEY_RESIZE: - clear(); - getmaxyx(stdscr, size_y, size_x); - line_buffer = realloc(line_buffer, size_x); - break; case KEY_BACKSPACE: - db = db == &archive ? &database : &archive; + if (db == &database) { + if( load_database(&archive, AR_BIN_PATH_NAME) == false) { + store_database(&archive, AR_BIN_PATH_NAME); + } + db = &archive; + } + else { + store_database(&archive, AR_BIN_PATH_NAME); + reset_database(&archive); + db = &database; + } break; case KEY_LEFT: @@ -1088,15 +1105,15 @@ int main(int argc, char *argv[]) { break; case KEY_UP: - if (database.selected_task > 0) { - database.selected_task--; + if (db->selected_task > 0) { + db->selected_task--; } break; case KEY_PPAGE: - database.selected_task -= (size_y - 2); - if (database.selected_task < 0) { - database.selected_task = 0; + db->selected_task -= (size_y - 2); + if (db->selected_task < 0) { + db->selected_task = 0; } break; @@ -1107,15 +1124,15 @@ int main(int argc, char *argv[]) { break; case KEY_DOWN: - if (database.selected_task < database.count - 1) { - database.selected_task++; + if (db->selected_task < db->count - 1) { + db->selected_task++; } break; case KEY_NPAGE: - database.selected_task += (size_y - 2); - if (database.selected_task >= database.count) { - database.selected_task = database.count - 1; + db->selected_task += (size_y - 2); + if (db->selected_task >= db->count) { + db->selected_task = db->count - 1; } break; } diff --git a/readme.md b/readme.md index b1d1a7b..3624b9a 100644 --- a/readme.md +++ b/readme.md @@ -23,12 +23,11 @@ Task Time Tracker - [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; -- [ ] Commit changes to repository. -- [ ] Adapt cycle to work with `database_t *db` to allow pointing to database/archive. - [ ] How to show we're working with database or archive? - When showing archive, change the 1st column name from "TTT v1" to "Archive". Maybe include this on the layout types? - Maybe add a "app_mode" flag; -- cgit v1.2.3