better error responses

This commit is contained in:
Felix Kratz 2022-06-09 21:14:57 +02:00
parent e82f2a96e9
commit df86156c1a
11 changed files with 82 additions and 99 deletions

View file

@ -8,8 +8,7 @@ void print_all_menu_items(FILE* rsp) {
kCGNullWindowID );
int window_count = CFArrayGetCount(window_list);
printf("[\n");
fprintf(rsp, "[\n");
respond(rsp, "[\n");
int counter = 0;
for (int i = 0; i < window_count; ++i) {
CFDictionaryRef dictionary = CFArrayGetValueAtIndex(window_list, i);
@ -42,17 +41,14 @@ void print_all_menu_items(FILE* rsp) {
if (strcmp(name, "") == 0) continue;
if (counter++ > 0) {
fprintf(rsp, ", \n");
printf(", \n");
respond(rsp, ", \n");
}
fprintf(rsp, "\t\"%s,%s\"", owner, name);
printf("\t\"%s,%s\"", owner, name);
respond(rsp, "\t\"%s,%s\"", owner, name);
free(owner);
free(name);
}
printf("\n]\n");
fprintf(rsp, "\n]\n");
respond(rsp, "\n]\n");
CFRelease(window_list);
}
@ -217,8 +213,7 @@ bool alias_parse_sub_domain(struct alias* alias, FILE* rsp, struct token propert
entry,
message );
else {
fprintf(rsp, "Invalid subdomain: %s \n", subdom.text);
printf("Invalid subdomain: %s \n", subdom.text);
respond(rsp, "[!] Alias: Invalid subdomain '%s'\n", subdom.text);
}
}
else if (token_equals(property, PROPERTY_COLOR)) {
@ -226,8 +221,7 @@ bool alias_parse_sub_domain(struct alias* alias, FILE* rsp, struct token propert
alias->color_override = true;
return true;
} else {
fprintf(rsp, "Unknown property: %s \n", property.text);
printf("Unknown property: %s \n", property.text);
respond(rsp, "[!] Alias: Invalid property '%s' \n", property.text);
}
return false;
}

View file

@ -193,10 +193,11 @@ bool background_parse_sub_domain(struct background* background, FILE* rsp, struc
background->y_offset,
token_to_int(token) );
}
else if (token_equals(property, SUB_DOMAIN_IMAGE))
else if (token_equals(property, SUB_DOMAIN_IMAGE)) {
return image_load(&background->image,
token_to_string(get_token(&message)),
rsp );
}
else {
struct key_value_pair key_value_pair = get_key_value_pair(property.text,
'.' );
@ -211,13 +212,11 @@ bool background_parse_sub_domain(struct background* background, FILE* rsp, struc
else if (token_equals(subdom, SUB_DOMAIN_IMAGE))
return image_parse_sub_domain(&background->image, rsp, entry, message);
else {
fprintf(rsp, "Invalid subdomain: %s \n", subdom.text);
printf("Invalid subdomain: %s \n", subdom.text);
respond(rsp, "[!] Background: Invalid subdomain '%s'\n", subdom.text);
}
}
else {
fprintf(rsp, "Unknown property: %s \n", property.text);
printf("Unknown property: %s \n", property.text);
respond(rsp, "[!] Background: Invalid property '%s'\n", property.text);
}
}
return needs_refresh;

View file

@ -715,8 +715,7 @@ void bar_item_parse_set_message(struct bar_item* bar_item, char* message, FILE*
message );
else {
fprintf(rsp, "Invalid subdomain: %s \n", subdom.text);
printf("Invalid subdomain: %s \n", subdom.text);
respond(rsp, "[!] Item (%s): Invalid subdomain '%s'\n", bar_item->name, subdom.text);
}
}
else if (token_equals(property, PROPERTY_ICON)) {
@ -772,8 +771,7 @@ void bar_item_parse_set_message(struct bar_item* bar_item, char* message, FILE*
int item_index_for_name = bar_manager_get_item_index_for_name(&g_bar_manager,
key_value_pair.value);
if (item_index_for_name < 0) {
fprintf(rsp, "Name: %s not found in bar items \n", key_value_pair.value);
printf("Name: %s not found in bar items \n", key_value_pair.value);
respond(rsp, "[!] Item Position (%s): Item '%s' is not a valid popup host\n", bar_item->name, key_value_pair.value);
return;
}
struct bar_item* target_item = g_bar_manager.bar_items[item_index_for_name];
@ -831,8 +829,7 @@ void bar_item_parse_set_message(struct bar_item* bar_item, char* message, FILE*
} else if (token_equals(property, COMMAND_DEFAULT_RESET)) {
bar_item_init(&g_bar_manager.default_item, NULL);
} else {
fprintf(rsp, "Invalid propery: %s \n", property.text);
printf("Invalid propery: %s \n", property.text);
respond(rsp, "[!] Item (%s): Invalid property '%s' \n", bar_item->name, property.text);
}
if (needs_refresh) bar_item_needs_update(bar_item);

View file

@ -143,8 +143,7 @@ bool graph_parse_sub_domain(struct graph* graph, FILE* rsp, struct token propert
return true;
}
else {
fprintf(rsp, "Unknown property: %s \n", property.text);
printf("Unknown property: %s \n", property.text);
respond(rsp, "[!] Graph: Invalid property '%s'\n", property.text);
}
return false;
}

View file

@ -22,8 +22,7 @@ bool image_set_enabled(struct image* image, bool enabled) {
bool image_load(struct image* image, char* path, FILE* rsp) {
char* res_path = resolve_path(path);
if (!file_exists(res_path)) {
printf("File %s not found!\n", res_path);
fprintf(rsp, "File %s not found!\n", res_path);
respond(rsp, "[!] Image: File '%s' not found\n", res_path);
free(res_path);
return false;
}

View file

@ -10,7 +10,10 @@ static void handle_domain_subscribe(FILE* rsp, struct token domain, char* messag
int item_index_for_name = bar_manager_get_item_index_for_name(&g_bar_manager,
name.text );
if (item_index_for_name < 0) return;
if (item_index_for_name < 0) {
respond(rsp, "[!] Subscribe: Item not found '%s'\n", name.text);
return;
}
struct bar_item* bar_item = g_bar_manager.bar_items[item_index_for_name];
bar_item_parse_subscribe_message(bar_item, message);
@ -42,7 +45,11 @@ static void handle_domain_push(FILE* rsp, struct token domain, char* message) {
int item_index_for_name = bar_manager_get_item_index_for_name(&g_bar_manager,
name.text );
if (item_index_for_name < 0) return;
if (item_index_for_name < 0) {
respond(rsp, "[!] Push: Item '%s' not found", name.text);
return;
}
struct bar_item* bar_item = g_bar_manager.bar_items[item_index_for_name];
graph_push_back(&bar_item->graph, token_to_float(y));
bar_item_needs_update(bar_item);
@ -56,11 +63,8 @@ static void handle_domain_rename(FILE* rsp, struct token domain, char* message)
int item_index_for_new_name = bar_manager_get_item_index_for_name(&g_bar_manager,
new_name.text);
if (item_index_for_old_name < 0 || item_index_for_new_name >= 0) {
fprintf(rsp, "Could not rename item: %s -> %s \n", old_name.text,
new_name.text);
printf("Could not rename item: %s -> %s \n", old_name.text,
new_name.text);
respond(rsp, "[!] Rename: Failed to rename item: %s -> %s\n", old_name.text,
new_name.text);
return;
}
bar_item_set_name(g_bar_manager.bar_items[item_index_for_old_name],
@ -79,13 +83,12 @@ static void handle_domain_clone(FILE* rsp, struct token domain, char* message) {
if (parent_index >= 0)
parent_item = g_bar_manager.bar_items[parent_index];
else {
printf("Parent Item: %s does not exist \n", parent.text);
fprintf(rsp, "Parent Item: %s does not exist \n", parent.text);
respond(rsp, "[!] Clone: Parent Item '%s' not found\n", parent.text);
return;
}
if (bar_manager_get_item_index_for_name(&g_bar_manager, name.text) >= 0) {
fprintf(rsp, "Item %s already exists \n", name.text);
respond(rsp, "[?] Clone: Item '%s' already exists\n", name.text);
return;
}
struct bar_item* bar_item = bar_manager_create_item(&g_bar_manager);
@ -117,7 +120,7 @@ static void handle_domain_add(FILE* rsp, struct token domain, char* message) {
struct token position = get_token(&message);
if (bar_manager_get_item_index_for_name(&g_bar_manager, name.text) >= 0) {
fprintf(rsp, "Item %s already exists \n", name.text);
respond(rsp, "[?] Add: Item '%s' already exists\n", name.text);
return;
}
struct bar_item* bar_item = bar_manager_create_item(&g_bar_manager);
@ -153,15 +156,13 @@ static void handle_domain_add(FILE* rsp, struct token domain, char* message) {
if (index >= 0)
group_add_member(bar_item->group, g_bar_manager.bar_items[index]);
else {
printf("Item %s not found! \n", member.text);
fprintf(rsp, "Item %s not found! \n", member.text);
respond(rsp, "[?] Add (Group) %s: Failed to add member '%s', item not found\n", bar_item->name, member.text);
}
member = get_token(&message);
}
}
} else {
printf("Command: %s not found \n", command.text);
fprintf(rsp, "Command: %s not found \n", command.text);
respond(rsp, "[!] Add %s: Invalid item type '%s'\n", bar_item->name, command.text);
return;
}
@ -172,13 +173,11 @@ static void handle_domain_add(FILE* rsp, struct token domain, char* message) {
int item_index_for_name = bar_manager_get_item_index_for_name(&g_bar_manager,
key_value_pair.value);
if (item_index_for_name < 0) {
fprintf(rsp,
"Parent Name: %s for %s not found in bar items. Placing left instead\n",
respond(rsp,
"[!] Add (Popup) %s: Item '%s' is not a valid popup host\n",
bar_item->name,
key_value_pair.value,
bar_item->name );
printf("Parent Name: %s for %s not found in bar items. Placing left instead\n",
key_value_pair.value,
bar_item->name );
free(pair);
bar_item_set_position(bar_item, POSITION_LEFT);
@ -265,18 +264,10 @@ static bool handle_domain_bar(FILE *rsp, struct token domain, char *message) {
if (position.length > 0)
needs_refresh = bar_manager_set_display(&g_bar_manager,
position.text[0]);
else {
printf("value for %s must be either 'main' or 'all'.\n", command.text);
fprintf(rsp, "value for %s must be either 'main' or 'all'.\n", command.text);
}
} else if (token_equals(command, PROPERTY_POSITION)) {
struct token position = get_token(&message);
if (position.length > 0)
needs_refresh = bar_manager_set_position(&g_bar_manager, position.text[0]);
else {
printf("value for %s must be either 'top' or 'bottom'.\n", command.text);
fprintf(rsp, "value for %s must be either 'top' or 'bottom'.\n", command.text);
}
}
else
needs_refresh = background_parse_sub_domain(&g_bar_manager.background, rsp, command, message);
@ -328,8 +319,7 @@ static void handle_domain_query(FILE* rsp, struct token domain, char* message) {
int item_index_for_name = bar_manager_get_item_index_for_name(&g_bar_manager,
name.text );
if (item_index_for_name < 0) {
fprintf(rsp, "Name: %s not found in bar items \n", name.text);
printf("Name: %s not found in bar items \n", name.text);
respond(rsp, "[!] Query: Item '%s' not found\n", name.text);
return;
}
bar_item_serialize(g_bar_manager.bar_items[item_index_for_name], rsp);
@ -344,8 +334,7 @@ static void handle_domain_query(FILE* rsp, struct token domain, char* message) {
int item_index_for_name = bar_manager_get_item_index_for_name(&g_bar_manager,
name.text );
if (item_index_for_name < 0) {
fprintf(rsp, "Not a valid query, or item: %s not found \n", name.text);
printf("Not a valid query, or item: %s not found \n", name.text);
respond(rsp, "[!] Query: Invalid query, or item '%s' not found \n", name.text);
return;
}
bar_item_serialize(g_bar_manager.bar_items[item_index_for_name], rsp);
@ -367,8 +356,7 @@ static void handle_domain_remove(FILE* rsp, struct token domain, char* message)
reti = regcomp(&regex, regstring, 0);
free(regstring);
if (reti) {
fprintf(rsp, "Could not compile regex: %s \n", name.text);
printf("Could not compile regex: %s \n", name.text);
respond(rsp, "[!] Remove: Could not compile regex '%s'\n", name.text);
return;
}
@ -384,8 +372,7 @@ static void handle_domain_remove(FILE* rsp, struct token domain, char* message)
else if (reti != REG_NOMATCH) {
char buf[100];
regerror(reti, &regex, buf, sizeof(buf));
fprintf(rsp, "Regex match failed: %s\n", buf);
printf("Regex match failed: %s\n", buf);
respond(rsp, "[!] Remove: Regex match failed '%s'\n", buf);
return;
}
}
@ -395,8 +382,7 @@ static void handle_domain_remove(FILE* rsp, struct token domain, char* message)
int item_index_for_name = bar_manager_get_item_index_for_name(&g_bar_manager,
name.text );
if (item_index_for_name < 0) {
fprintf(rsp, "Name: %s not found in bar items \n", name.text);
printf("Name: %s not found in bar items \n", name.text);
respond(rsp, "[!] Remove: Item '%s' not found\n", name.text);
return;
}
bar_items = realloc(bar_items, sizeof(struct bar_item*));
@ -420,8 +406,7 @@ static void handle_domain_move(FILE* rsp, struct token domain, char* message) {
int item_index = bar_manager_get_item_index_for_name(&g_bar_manager, name.text);
int reference_item_index = bar_manager_get_item_index_for_name(&g_bar_manager, reference.text);
if (item_index < 0 || reference_item_index < 0) {
fprintf(rsp, "Name: %s or %s not found in bar items \n", name.text, reference.text);
printf("Name: %s or %s not found in bar items \n", name.text, reference.text);
respond(rsp, "[!] Move: Item '%s' or '%s' not found\n", name.text, reference.text);
return;
}
@ -442,8 +427,7 @@ static void handle_domain_order(FILE* rsp, struct token domain, char* message) {
while (name.text && name.length > 0) {
int index = bar_manager_get_item_index_for_name(&g_bar_manager, name.text);
if (index < 0) {
fprintf(rsp, "Item: %s does not exist in bar items.\n", name.text);
printf("Item: %s does not exist in bar items.\n", name.text);
respond(rsp, "[!] Order: Item '%s' not found\n", name.text);
name = get_token(&message);
continue;
}
@ -490,8 +474,7 @@ void handle_message_mach(struct mach_buffer* buffer) {
reti = regcomp(&regex, regstring, 0);
free(regstring);
if (reti) {
fprintf(rsp, "Could not compile regex: %s \n", name.text);
printf("Could not compile regex: %s \n", name.text);
respond(rsp, "[!] Set: Could not compile regex '%s'\n", name.text);
break;
}
@ -505,10 +488,9 @@ void handle_message_mach(struct mach_buffer* buffer) {
bar_items[count - 1] = bar_item;
}
else if (reti != REG_NOMATCH) {
char buf[100];
regerror(reti, &regex, buf, sizeof(buf));
fprintf(rsp, "Regex match failed: %s\n", buf);
printf("Regex match failed: %s\n", buf);
char buf[1024];
regerror(reti, &regex, buf, sizeof(char)*1024);
respond(rsp, "[?] Set: No match found for regex '%s'\n", name.text);
break;
}
}
@ -517,8 +499,7 @@ void handle_message_mach(struct mach_buffer* buffer) {
else {
int item_index_for_name = bar_manager_get_item_index_for_name(&g_bar_manager, name.text);
if (item_index_for_name < 0) {
fprintf(rsp, "Name: %s not found in bar items \n", name.text);
printf("Name: %s not found in bar items \n", name.text);
respond(rsp, "[!] Set: Item not found '%s'\n", name.text);
break;
}
bar_items = realloc(bar_items, sizeof(struct bar_item*));
@ -533,7 +514,10 @@ void handle_message_mach(struct mach_buffer* buffer) {
struct token tmp = {string_copy(token.text), token.length};
char* rbr_msg = reformat_batch_key_value_pair(tmp);
free(tmp.text);
if (!rbr_msg) break;
if (!rbr_msg) {
respond(rsp, "[!] Set (%s): Expected <key>=<value> pair, but got: '%s'\n", bar_items[i]->name, token.text);
break;
}
bar_item_parse_set_message(bar_items[i], rbr_msg, rsp);
free(rbr_msg);
}
@ -545,7 +529,10 @@ void handle_message_mach(struct mach_buffer* buffer) {
struct token token = get_token(&message);
while (token.text && token.length > 0) {
char* rbr_msg = reformat_batch_key_value_pair(token);
if (!rbr_msg) break;
if (!rbr_msg) {
respond(rsp, "[!] Set (default): Expected <key>=<value> pair, but got: '%s'\n", token.text);
break;
}
handle_domain_default(rsp, command, rbr_msg);
free(rbr_msg);
if (message && message[0] == '-') break;
@ -558,7 +545,10 @@ void handle_message_mach(struct mach_buffer* buffer) {
struct token token = get_token(&message);
while (token.text && token.length > 0) {
char* rbr_msg = reformat_batch_key_value_pair(token);
if (!rbr_msg) break;
if (!rbr_msg) {
respond(rsp, "[!] Bar: Expected <key>=<value> pair, but got: '%s'\n", token.text);
break;
}
bar_needs_refresh |= handle_domain_bar(rsp, command, rbr_msg);
free(rbr_msg);
if (message && message[0] == '-') break;
@ -614,8 +604,7 @@ void handle_message_mach(struct mach_buffer* buffer) {
exit(0);
} else {
char* rbr_msg = get_batch_line(&message);
fprintf(rsp, "unknown domain %s\n", command.text);
printf("unknown domain %s\n", command.text);
respond(rsp, "[!] Unknown domain '%s'\n", command.text);
free(rbr_msg);
}
command = get_token(&message);

View file

@ -3,6 +3,7 @@
#include <CoreGraphics/CoreGraphics.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <time.h>
#include "env_vars.h"
#include "defines.h"
@ -54,6 +55,23 @@ static inline void notification_destroy(struct notification* notification) {
free(notification);
}
static inline void respond(FILE* rsp, char* response, ...) {
time_t t = time(NULL);
struct tm ltime = *localtime(&t);
printf("[%d-%02d-%02d %02d:%02d:%02d] ", ltime.tm_year + 1900,
ltime.tm_mon + 1,
ltime.tm_mday,
ltime.tm_hour,
ltime.tm_min,
ltime.tm_sec );
va_list args;
va_start(args, response);
vfprintf(rsp, response, args);
vfprintf(stdout, response, args);
va_end(args);
}
static inline uint32_t hex_from_rgba_color(struct rgba_color rgba_color) {
uint32_t result = 0;
result += ((uint32_t)(rgba_color.a * 255.0)) << 24;

View file

@ -12,13 +12,6 @@ static inline void debug(const char *format, ...) {
va_end(args);
}
static inline void warn(const char *format, ...) {
va_list args;
va_start(args, format);
vfprintf(stderr, format, args);
va_end(args);
}
static inline void error(const char *format, ...) {
va_list args;
va_start(args, format);

View file

@ -255,13 +255,11 @@ bool popup_parse_sub_domain(struct popup* popup, FILE* rsp, struct token propert
entry,
message );
else {
fprintf(rsp, "Invalid subdomain: %s \n", subdom.text);
printf("Invalid subdomain: %s \n", subdom.text);
respond(rsp, "[!] Popup: Invalid subdomain '%s'\n", subdom.text);
}
}
else {
fprintf(rsp, "Unknown property: %s \n", property.text);
printf("Unknown property: %s \n", property.text);
respond(rsp, "[!] Popup: Invalid property '%s'\n", property.text);
}
}
return false;

View file

@ -76,8 +76,7 @@ bool shadow_parse_sub_domain(struct shadow* shadow, FILE* rsp, struct token prop
token_to_int(token) );
}
else {
fprintf(rsp, "Unknown property: %s \n", property.text);
printf("Unknown property: %s \n", property.text);
respond(rsp, "[!] Shadow: Invalid property '%s'\n", property.text);
}
return needs_refresh;

View file

@ -383,13 +383,11 @@ bool text_parse_sub_domain(struct text* text, FILE* rsp, struct token property,
else if (token_equals(subdom, SUB_DOMAIN_SHADOW))
return shadow_parse_sub_domain(&text->shadow, rsp, entry, message);
else {
fprintf(rsp, "Invalid subdomain: %s \n", subdom.text);
printf("Invalid subdomain: %s \n", subdom.text);
respond(rsp, "[!] Text: Invalid subdomain '%s' \n", subdom.text);
}
}
else {
fprintf(rsp, "Unknown property: %s \n", property.text);
printf("Unknown property: %s \n", property.text);
respond(rsp, "[!] Text: Invalid property '%s'\n", property.text);
}
}