aboutsummaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'main.c')
-rw-r--r--main.c41
1 files changed, 26 insertions, 15 deletions
diff --git a/main.c b/main.c
index 918d3f0..144f8ad 100644
--- a/main.c
+++ b/main.c
@@ -650,6 +650,7 @@ bool import_from_csv(database_st *db, const char *path) {
// Parse CSV file.
char *csv_buffer = NULL;
size_t csv_buffer_size = 0;
+ bool success = true;
while(getline(&csv_buffer, &csv_buffer_size, file) != -1) { // Check if reached EOF.
// Find task name string limits.
@@ -664,7 +665,7 @@ bool import_from_csv(database_st *db, const char *path) {
// Prepare new task.
task_st *task;
- create_task(db, &task);
+ success &= create_task(db, &task);
// Import task name.
memcpy(task->name, csv_buffer, name_length);
@@ -690,7 +691,7 @@ bool import_from_csv(database_st *db, const char *path) {
fclose(file);
free(csv_buffer);
- return true;
+ return success;
}
// Appends task to the end of the CSV file.
@@ -1337,8 +1338,10 @@ int main(int argc, char *argv[]) {
static layout_st *layout = &layouts[L_COMPACT];
task_st *active_task = get_active_task(db);
task_st *selected_task = get_selected_task(db);
- int selected_task_row = is_terminal_too_small ? 0 : (db->selected_task % layout_tasks_rows) + NUM_HEADER_ROWS;
- int action_style = A_BOLD | COLOR_PAIR(selected_task == active_task ? STYLE_ACTIVE : STYLE_SELECTED_INVERTED);
+ int action_style = A_BOLD | COLOR_PAIR(selected_task == active_task && selected_task != NULL ? STYLE_ACTIVE : STYLE_SELECTED_INVERTED);
+ int selected_task_row = is_terminal_too_small ? 0
+ : (db->selected_task < 0) ? 1
+ : (db->selected_task % layout_tasks_rows) + NUM_HEADER_ROWS;
timeout(INPUT_AWAIT_INF);
update_times(&database);
@@ -1383,13 +1386,15 @@ int main(int argc, char *argv[]) {
case 'n':
case 'N':{
- // Create new task.
- task_st *new_task;
- if (create_task(db, &new_task) == false) {
- // TODO ERROR
+ if (db->count == MAX_DATABASE_TASKS) {
+ read_enter_confirmation(selected_task_row, action_style, " Database is full. ");
break;
}
+ // Create new task.
+ task_st *new_task;
+ create_task(db, &new_task);
+
// Set new task name.
time_t now_utc = time(NULL);
struct tm *now_local = localtime(&now_utc);
@@ -1621,7 +1626,11 @@ int main(int argc, char *argv[]) {
case '\t': {
if (db == &database) {
- import_from_csv(&archive, ar_file_path);
+ if (import_from_csv(&archive, ar_file_path) == false) {
+ reset_database(&archive);
+ read_enter_confirmation(selected_task_row, action_style, " Archive too big. ");
+ break;
+ }
db = &archive;
}
else {
@@ -1637,9 +1646,10 @@ int main(int argc, char *argv[]) {
if (db != &database || selected_task == NULL || selected_task == active_task) {
break;
}
- append_to_csv(selected_task, ar_file_path);
- delete_task(&database, selected_task);
- trigger_autosave();
+ if (append_to_csv(selected_task, ar_file_path) == true) {
+ delete_task(&database, selected_task);
+ trigger_autosave();
+ }
break;
}
@@ -1648,9 +1658,10 @@ int main(int argc, char *argv[]) {
if (db != &archive || selected_task == NULL) {
break;
}
- duplicate_task(&database, selected_task);
- delete_task(&archive, selected_task);
- trigger_autosave();
+ if (duplicate_task(&database, selected_task) == true) {
+ delete_task(&archive, selected_task);
+ trigger_autosave();
+ }
break;
}