printing and config parsing fixes

This commit is contained in:
theBreadCompany 2025-06-16 16:47:11 +02:00
parent 95e0ebc073
commit 5a8e3a073a
4 changed files with 36 additions and 28 deletions

View file

@ -54,9 +54,10 @@ char *klist_config_name(char *name) {
} }
void klist_config_parse(klist_config *ctx, FILE *config) { void klist_config_parse(klist_config *ctx, FILE *config) {
fseek(config, 0, SEEK_END); fseek(config, 0, SEEK_SET);
int c; int c;
char *key = NULL, *val = NULL; char *key = NULL, *val = NULL;
int key_len = 0, val_len = 0;
bool found_key = false, ignore_line = false; bool found_key = false, ignore_line = false;
while ((c = fgetc(config)) != EOF) { while ((c = fgetc(config)) != EOF) {
switch (c) { switch (c) {
@ -75,8 +76,8 @@ void klist_config_parse(klist_config *ctx, FILE *config) {
} }
free(key); free(key);
free(val); free(val);
key = NULL; key_len = 0, val_len = 0;
val = NULL; key = NULL, val = NULL;
break; break;
case '=': case '=':
if (!found_key) if (!found_key)
@ -86,27 +87,32 @@ void klist_config_parse(klist_config *ctx, FILE *config) {
exit(1); exit(1);
} }
break; break;
default: case '#':
if (!key && !val && c == '#') if (!key && !val)
ignore_line = true; ignore_line = true;
default:
if (ignore_line) if (ignore_line)
continue; continue;
if (found_key) { if (found_key) {
char *_val = val ? realloc(val, (strlen(val) + 2) * sizeof(char)) if (val)
: malloc(2 * sizeof(char)); val = realloc(val, ++val_len * sizeof(char));
if (_val) { else {
val = _val; val_len = 2;
val[strlen(val) - 2] = (char)c; val = malloc(val_len * sizeof(char));
val[strlen(val) - 1] = '\0';
} }
val[val_len - 2] = (char)c;
val[val_len - 1] = '\0';
} else { } else {
char *_key = key ? realloc(key, (strlen(key) + 2) * sizeof(char)) if (key)
: malloc(2 * sizeof(char)); key = realloc(key, ++key_len * sizeof(char));
if (_key) { else {
key = _key; key_len = 2;
key[strlen(key) - 2] = (char)c; key = malloc(key_len * sizeof(char));
key[strlen(key) - 1] = '\0';
} }
key[key_len - 2] = (char)c;
key[key_len - 1] = '\0';
} }
} }
} }

View file

@ -188,12 +188,12 @@ void setup(klist *ctx, int argc, char **argv) {
while ((opt = getopt(argc, argv, "aedgl:n:s:")) != -1) while ((opt = getopt(argc, argv, "aedgl:n:s:")) != -1)
switch (opt) { switch (opt) {
/*case 'a': case 'a':
task_ctx->cmd = TASK_ADD; task_ctx->cmd = TASK_ADD;
break; break;
case 'e': case 'e':
task_ctx->cmd = TASK_EDIT; task_ctx->cmd = TASK_EDIT;
break;*/ break;
case 'd': case 'd':
task_ctx->cmd = TASK_DELETE; task_ctx->cmd = TASK_DELETE;
break; break;
@ -219,6 +219,7 @@ void setup(klist *ctx, int argc, char **argv) {
"-d\tdelete a task" "-d\tdelete a task"
"Not providing a parameter prints all tasks of a list."); "Not providing a parameter prints all tasks of a list.");
} }
if (!task_ctx->cmd) task_ctx->cmd = TASK_ADD;
ctx->cmd_ctx = task_ctx; ctx->cmd_ctx = task_ctx;
break; break;
default: default:

View file

@ -8,7 +8,7 @@ int klist_app_user_get(klist *ctx) {
klist_user *user = klist_user_get_by_local(ctx, getuid()); klist_user *user = klist_user_get_by_local(ctx, getuid());
if (user) { if (user) {
printf("User: %p\nID: %lu\n", user->name, user->id); printf("User: %s\nID: %lu\n", (char*)user->name, user->id);
size_t lists_len = 0; size_t lists_len = 0;
klist_list **lists = klist_list_get_all_by_user(ctx, user->id, &lists_len); klist_list **lists = klist_list_get_all_by_user(ctx, user->id, &lists_len);
printf("Lists: %lu\n", lists_len); printf("Lists: %lu\n", lists_len);

View file

@ -405,15 +405,13 @@ void klist_print_list(klist *ctx, klist_list *list, klist_task **tasks,
klist_stage **stages = klist_stage **stages =
klist_stage_get_all_for_list(ctx, list->id, &stages_len); klist_stage_get_all_for_list(ctx, list->id, &stages_len);
size_t stage_col_width = (width - 2 - (stages_len - 1)) / stages_len;
int max_stages_id = 0; int max_stages_id = 0;
for (i = 0; i < stages_len; i++) for (i = 0; i < stages_len; i++)
if (stages[i]->id > max_stages_id) if (stages[i]->id > max_stages_id)
max_stages_id = stages[i]->id + 1; max_stages_id = stages[i]->id;
int tasks_count_per_stage[max_stages_id]; int tasks_count_per_stage[max_stages_id + 1];
for (i = 0; i < max_stages_id; i++) for (i = 0; i < max_stages_id + 1; i++)
tasks_count_per_stage[i] = 0; tasks_count_per_stage[i] = 0;
u_long task_length = 0, max_task_length = 0; u_long task_length = 0, max_task_length = 0;
@ -423,7 +421,9 @@ void klist_print_list(klist *ctx, klist_list *list, klist_task **tasks,
if (task_length > max_task_length) if (task_length > max_task_length)
max_task_length = task_length; max_task_length = task_length;
} }
width = max_task_length * stages_len; u_int content_width = (int)((double)max_task_length * 1.6 * (double)stages_len);
if (content_width) width = content_width;
size_t stage_col_width = (width - 3 - (stages_len - 1)) / stages_len;
int tasks_max = 0; int tasks_max = 0;
for (i = 0; i < max_stages_id; i++) { for (i = 0; i < max_stages_id; i++) {
@ -436,7 +436,7 @@ void klist_print_list(klist *ctx, klist_list *list, klist_task **tasks,
// list name // list name
printf(""); printf("");
printf(" %s", (char *)list->name); printf(" %s", (char *)list->name);
for (i = 0; i < (width - 3) - strlen((char *)list->name); i++) for (i = 0; i < (stages_len * stage_col_width) - (strlen((char *)list->name + 1)); i++)
printf(" "); printf(" ");
printf("\n"); printf("\n");
@ -479,7 +479,8 @@ void klist_print_list(klist *ctx, klist_list *list, klist_task **tasks,
} }
*/ */
// separator // separator
print_table_line("", stages_len, "", stage_col_width, "", ""); if (tasks_len)
print_table_line("", stages_len, "", stage_col_width, "", "");
// tasks // tasks
int stages_idx[max_stages_id]; int stages_idx[max_stages_id];