From 397e1fa4244fe5a3e429d81bfb5ab626881d821b Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Wed, 8 Oct 2025 18:45:52 +0200 Subject: [PATCH] change refactor load config --- src/kds_s2000w_handler_opts.c | 122 ++++++++++++++++------------------ 1 file changed, 59 insertions(+), 63 deletions(-) diff --git a/src/kds_s2000w_handler_opts.c b/src/kds_s2000w_handler_opts.c index 93bb0fd..f9692e4 100644 --- a/src/kds_s2000w_handler_opts.c +++ b/src/kds_s2000w_handler_opts.c @@ -38,6 +38,63 @@ void _kds_s2000w_handler_opts_write_value(json_object* value_object, SANE_Value_ } } +void _kds_s2000w_handler_opts_load_options(handler* h) +{ + json_object_put(h->current_scanner_config); + h->current_scanner_config = NULL; + + response* resp = kds_s2000w_client_response_init(); + uint8_t result = kds_s2000w_client_get_option(h->sessionid, resp); + + if (result != 0 || resp->code != 200) { + kds_s2000w_debug_printf_int(ERROR, "load options response code", resp->code); + kds_s2000w_client_response_free(resp); + resp = NULL; + return; + } + + h->current_scanner_config = json_tokener_parse(resp->data); + + kds_s2000w_client_response_free(resp); + resp = NULL; +} + +void _kds_s2000w_handler_opts_set_autostart_on(json_object* config) +{ + uint32_t auto_start_value = AUTOSTART_ON; + json_object* value_object = json_object_object_get(config, AUTOSTART); + _kds_s2000w_handler_opts_write_value_to_json(value_object, SANE_TYPE_INT, &auto_start_value); +} + +void _kds_s2000w_handler_opts_set_options(handler* h) +{ + const char* json_string = json_object_to_json_string_ext(h->current_scanner_config, JSON_C_TO_STRING_PLAIN); + response* resp = kds_s2000w_client_response_init(); + resp->size = sizeof(char) * strlen(json_string); + resp->code = 0; + resp->data = realloc(resp->data, resp->size); + resp->data = memcpy(resp->data, json_string, resp->size); + kds_s2000w_client_set_option(h->sessionid, resp); + if (resp->code != 200) + kds_s2000w_debug_printf_int(ERROR, "set options response code", resp->code); + + kds_s2000w_client_response_free(resp); + resp = NULL; +} + +json_object* _kds_s2000w_handler_opts_load_config(handler* h) +{ + if (h->current_scanner_config != NULL) + return json_object_object_get(h->current_scanner_config, CONFIGURATION); + + _kds_s2000w_handler_opts_load_options(h); + json_object* config = json_object_object_get(h->current_scanner_config, CONFIGURATION); + _kds_s2000w_handler_opts_set_autostart_on(config); + _kds_s2000w_handler_opts_set_options(h); + + return config; +} + void _kds_s2000w_handler_opts_set_valid_coord_x(option_descriptor* descriptor, handler* h) { bool valid = h->coord->offset_x >= 0 && h->coord->offset_x <= 75; @@ -78,34 +135,6 @@ void _kds_s2000w_handler_opts_set_valid_coord_y(option_descriptor* descriptor, h json_object_set_int(value_object, h->coord->height); } -void _kds_s2000w_handler_opts_load_options(handler* h) -{ - json_object_put(h->current_scanner_config); - h->current_scanner_config = NULL; - - response* resp = kds_s2000w_client_response_init(); - uint8_t result = kds_s2000w_client_get_option(h->sessionid, resp); - - if (result != 0 || resp->code != 200) { - kds_s2000w_debug_printf_int(ERROR, "load options response code", resp->code); - kds_s2000w_client_response_free(resp); - resp = NULL; - return; - } - - h->current_scanner_config = json_tokener_parse(resp->data); - - kds_s2000w_client_response_free(resp); - resp = NULL; -} - -void _kds_s2000w_handler_opts_set_autostart_on(json_object* config) -{ - uint32_t auto_start_value = AUTOSTART_ON; - json_object* value_object = json_object_object_get(config, AUTOSTART); - _kds_s2000w_handler_opts_write_value_to_json(value_object, SANE_TYPE_INT, &auto_start_value); -} - void _kds_s2000w_handler_opts_set_option_to_default(handler* h) { response* resp = kds_s2000w_client_response_init(); @@ -124,22 +153,6 @@ void _kds_s2000w_handler_opts_set_option_to_default(handler* h) resp = NULL; } -void _kds_s2000w_handler_opts_set_options(handler* h) -{ - const char* json_string = json_object_to_json_string_ext(h->current_scanner_config, JSON_C_TO_STRING_PLAIN); - response* resp = kds_s2000w_client_response_init(); - resp->size = sizeof(char) * strlen(json_string); - resp->code = 0; - resp->data = realloc(resp->data, resp->size); - resp->data = memcpy(resp->data, json_string, resp->size); - kds_s2000w_client_set_option(h->sessionid, resp); - if (resp->code != 200) - kds_s2000w_debug_printf_int(ERROR, "set options response code", resp->code); - - kds_s2000w_client_response_free(resp); - resp = NULL; -} - void _kds_s2000w_handler_opts_set_enable_cropping_image(json_object* config) { json_object* cropping_mode = json_object_object_get(config, CROPPING_MODE); @@ -415,15 +428,7 @@ void _kds_s2000w_handler_opts_set_depends_opts(handler* h, void kds_s2000w_handler_opts_get_option(handler* h, uint32_t option, void* value, int32_t* info) { - json_object* config = NULL; - if (h->current_scanner_config == NULL) { - _kds_s2000w_handler_opts_load_options(h); - config = json_object_object_get(h->current_scanner_config, CONFIGURATION); - _kds_s2000w_handler_opts_set_autostart_on(config); - _kds_s2000w_handler_opts_set_options(h); - } - - config = json_object_object_get(h->current_scanner_config, CONFIGURATION); + json_object* config = _kds_s2000w_handler_opts_load_config(h); option_descriptor* descriptor = kds_s2000w_option_descriptors_full_get_by_number(option); if (strcmp(descriptor->config_name, OPTION_COUNT) == 0) { @@ -494,16 +499,7 @@ void kds_s2000w_handler_opts_set_option(handler* h, uint32_t option, void* value if (h->read_info->scan_started) return; - json_object* config = NULL; - if (h->current_scanner_config == NULL) { - _kds_s2000w_handler_opts_load_options(h); - config = json_object_object_get(h->current_scanner_config, CONFIGURATION); - _kds_s2000w_handler_opts_set_autostart_on(config); - } - - if (h->current_scanner_config != NULL) - config = json_object_object_get(h->current_scanner_config, CONFIGURATION); - + json_object* config = _kds_s2000w_handler_opts_load_config(h); option_descriptor* descriptor = kds_s2000w_option_descriptors_full_get_by_number(option); json_object* value_object = json_object_object_get(config, descriptor->config_name); -- 2.47.3