aboutsummaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
authordam <dam@gudinoff>2022-09-20 22:10:46 +0000
committerdam <dam@gudinoff>2022-09-20 22:10:46 +0000
commit4d7f6246b796352f87d4e62a1aec9a7eae283e43 (patch)
tree279fd91cc07b14e330c892a0ec49219c4e56072e /main.c
parent98279a2d333e8ed14d036a9d5bd38200aa215b5a (diff)
downloadtask-time-tracker-4d7f6246b796352f87d4e62a1aec9a7eae283e43.tar.zst
task-time-tracker-4d7f6246b796352f87d4e62a1aec9a7eae283e43.zip
Fix input cycle to work with main and archive databases.
Diffstat (limited to 'main.c')
-rw-r--r--main.c79
1 files changed, 48 insertions, 31 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;
}