aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--main.c79
-rw-r--r--readme.md3
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;