diff --git a/src/cli/process.c b/src/cli/process.c index 1b09f27..02b1ea0 100644 --- a/src/cli/process.c +++ b/src/cli/process.c @@ -235,11 +235,14 @@ int klist_app_task_get(klist *ctx) { int i = 0; for (; i < tasks_len; i++) - free(tasks[i]); + klist_task_deinit(tasks[i]); free(tasks); } } else klist_print(ctx, KLIST_LOG_ERROR, "list not found\n"); + klist_user_deinit(user); + if (list) + klist_list_deinit(list); return 0; } diff --git a/src/libklist/models.c b/src/libklist/models.c index 6443d5e..03fa080 100644 --- a/src/libklist/models.c +++ b/src/libklist/models.c @@ -373,20 +373,6 @@ void klist_task_deinit(klist_task *task) { * printing */ -void repeat(size_t len, const char *sign) { - int i = 0; - for (; i < len; i++) - printf(sign); -} - -size_t longest_str(char **strings, size_t strings_len) { - size_t len = 0, i = 0; - for (; i < strings_len; i++) - if (strlen(strings[i]) > len) - len = strlen(strings[i]); - return len; -} - void klist_print_user(klist *ctx, const klist_user *user) { printf("" "Name: %s\n" @@ -403,17 +389,17 @@ void print_table_line(char *left, size_t cols, char *filler, size_t col_width, for (; j < col_width; j++) printf("%s", filler); if (i + 1 != cols) - printf("%s", col_delim); + printf("%s%s", filler, col_delim); } printf("%s\n", right); } void klist_print_list(klist *ctx, klist_list *list, klist_task **tasks, - size_t count) { + size_t tasks_len) { struct winsize w; int i = 0; ioctl(STDOUT_FILENO, TIOCGWINSZ, &w); - int width = w.ws_col > 0 ? w.ws_col : 80; + int width = w.ws_col > 0 ? w.ws_col : 40; size_t stages_len = 0; klist_stage **stages = @@ -430,7 +416,7 @@ void klist_print_list(klist *ctx, klist_list *list, klist_task **tasks, for (i = 0; i < max_stages_id; i++) tasks_count_per_stage[i] = 0; - for (i = 0; i < count; i++) + for (i = 0; i < tasks_len; i++) tasks_count_per_stage[tasks[i]->stage_id]++; int tasks_max = 0; @@ -443,25 +429,52 @@ void klist_print_list(klist *ctx, klist_list *list, klist_task **tasks, // list name printf("│"); printf(" %s", (char *)list->name); - for (i = 0; i < width - 4 - strlen((char *)list->name); i++) + for (i = 0; i < (width - 3) - strlen((char *)list->name); i++) printf(" "); printf("│\n"); + // separator print_table_line("├", stages_len, "─", stage_col_width, "┬", "┤"); + // stage name printf("│"); for (i = 0; i < stages_len; i++) { int j = 0; printf(" %s", (char *)stages[i]->name); - for (; j < stage_col_width - (strlen((char *)stages[i]->name) + 1); j++) + for (; j < (stage_col_width - 1) - strlen((char *)stages[i]->name); j++) printf(" "); if (i + 1 != stages_len) - printf("│"); + printf(" │"); } printf("│\n"); + /* + const char *crossings[] = { "┬", "┼", "┴" }; + const char *headers[] = { "Name", "due" }; + for (i = 0; i < 3; i++) { + printf("%s", (i + 1) % 2 ? "├" : "│"); + int j = 0; + for (j = 0; j < stages_len * 2; j++) { + int k = 0, printed = 0; + if (i == 1) { + printf(" %s", headers[j % 2]); + printed = strlen(headers[j % 2]) + 1; + } + for (; k < ((stage_col_width / 2) - 1) - printed; k++) + printf("%s", (i + 1) % 2 ? "─" : " "); + if (j + 1 != stages_len * 2) + if ((i + 1) % 2) + printf("─%s", j % 2 ? crossings[1] : crossings[i > 1]); + else + printf(" │"); + } + printf("%s\n", (i + 1) % 2 ? "┤" : "│"); + } + */ + // separator print_table_line("├", stages_len, "─", stage_col_width, "┼", "┤"); + // tasks int stages_idx[max_stages_id]; for (i = 0; i < max_stages_id; i++) stages_idx[i] = 0; @@ -471,7 +484,7 @@ void klist_print_list(klist *ctx, klist_list *list, klist_task **tasks, for (; j < stages_len; j++) { int k = stages_idx[stages[j]->id]; u_long printed = 0; - for (; k < count; k++) + for (; k < tasks_len; k++) if (tasks[k]->stage_id == stages[j]->id) { printf(" %s", (char *)tasks[k]->name); printed = strlen((char *)tasks[k]->name) + 1; @@ -481,15 +494,18 @@ void klist_print_list(klist *ctx, klist_list *list, klist_task **tasks, int l = 0; for (; l < stage_col_width - printed; l++) printf(" "); - if (j + 1 != stages_len) - printf("│"); + if (j + 1 != stages_len) { + printf(" │"); + } } printf("│\n"); } + // end line print_table_line("╰", stages_len, "─", stage_col_width, "┴", "╯"); + // cleanup for (i = 0; i < stages_len; i++) - free(stages[i]); + klist_stage_deinit(stages[i]); free(stages); }