From: Bastian Dehn Date: Tue, 6 Feb 2024 18:21:28 +0000 (+0100) Subject: move get metdata to private mathod X-Git-Tag: v1.0.0^2~332 X-Git-Url: https://gitweb.hhaalo.de/?a=commitdiff_plain;h=1958328e7d8bcdbecb1440a52ec3ce6b785ea85d;p=sane-kds-s2000w-net.git move get metdata to private mathod --- diff --git a/src/kds_s2000w_handler.c b/src/kds_s2000w_handler.c index b610502..714e9a2 100644 --- a/src/kds_s2000w_handler.c +++ b/src/kds_s2000w_handler.c @@ -19,10 +19,68 @@ typedef struct { int available_images; int downloaded_images; int complete_scanned; + metadata mdata; } scan_status; scan_status current_scan_status; +void _get_current_metadata() +{ + current_scan_status.mdata.valid = 0; + json_object* metadataResp = NULL; + json_object* metadata = NULL; + json_object* mdata_value = NULL; + int channels = 1; + + metadataResp = json_tokener_parse(resp->data); + metadata = json_object_object_get(metadataResp, "Metadata"); + mdata_value = json_object_object_get(metadata, "BitDepth"); + current_scan_status.mdata.depth = json_object_get_int(mdata_value); + mdata_value = NULL; + + mdata_value = json_object_object_get(metadata, "ImageSize"); + current_scan_status.mdata.size = json_object_get_int(mdata_value); + mdata_value = NULL; + + mdata_value = json_object_object_get(metadata, "ImageWidth"); + current_scan_status.mdata.pixels_per_line = json_object_get_int(mdata_value); + mdata_value = NULL; + + mdata_value = json_object_object_get(metadata, "ImageHeight"); + current_scan_status.mdata.lines = json_object_get_int(mdata_value); + mdata_value = NULL; + + json_object_put(metadataResp); + metadata = NULL; + metadata = json_object_object_get(config, "ColorMode"); + const char* color_value = json_object_get_string(metadata); + mdata_value = NULL; + + if (strcmp(color_value, "Color") == 0) + current_scan_status.mdata.format = 1; + + if (strcmp(color_value, "Gray") == 0) + current_scan_status.mdata.format = 0; + + if (strcmp(color_value, "BW") == 0) + current_scan_status.mdata.format = 0; + + if (current_scan_status.mdata.format == 1) + channels = 3; + + if (current_scan_status.mdata.depth == 1) + current_scan_status.mdata.bytes_per_line = channels * ((current_scan_status.mdata.pixels_per_line + 7) / 8); + else + current_scan_status.mdata.bytes_per_line = channels * current_scan_status.mdata.pixels_per_line * current_scan_status.mdata.depth / 8; + + current_scan_status.mdata.valid = 1; + + metadata = NULL; + kds_s2000w_client_response_free(resp); + resp = NULL; + sleep(1); +} + void _delete_current_image() { resp = kds_s2000w_client_response_init(); @@ -171,22 +229,16 @@ void kds_s2000w_handler_stop_scan() resp = NULL; } -metadata kds_s2000w_handler_get_parameters(int image_number) +metadata kds_s2000w_handler_get_parameters() { - metadata mdata; - json_object* metadataResp = NULL; - json_object* metadata = NULL; - json_object* mdata_value = NULL; - int channels = 1; - if (!current_scan_status.complete_scanned && current_scan_status.downloaded_images == current_scan_status.available_images) { _get_current_scan_status(); } if (current_scan_status.downloaded_images >= current_scan_status.available_images) { - mdata.valid = 0; - return mdata; + current_scan_status.mdata.valid = 0; + return current_scan_status.mdata; } _download_current_image(); @@ -196,62 +248,17 @@ metadata kds_s2000w_handler_get_parameters(int image_number) printf("complete_scanned: %i\n", current_scan_status.complete_scanned); resp = kds_s2000w_client_response_init(); - kds_s2000w_client_get_metadata(state->sessionid, image_number, resp); + kds_s2000w_client_get_metadata(state->sessionid, current_scan_status.current_image_number, resp); if (resp->code != 200) { - mdata.valid = 0; + current_scan_status.mdata.valid = 0; kds_s2000w_client_response_free(resp); resp = NULL; - return mdata; + return current_scan_status.mdata; } - mdata.valid = 1; - metadataResp = json_tokener_parse(resp->data); - metadata = json_object_object_get(metadataResp, "Metadata"); - mdata_value = json_object_object_get(metadata, "BitDepth"); - mdata.depth = json_object_get_int(mdata_value); - mdata_value = NULL; - - mdata_value = json_object_object_get(metadata, "ImageSize"); - mdata.size = json_object_get_int(mdata_value); - mdata_value = NULL; - - mdata_value = json_object_object_get(metadata, "ImageWidth"); - mdata.pixels_per_line = json_object_get_int(mdata_value); - mdata_value = NULL; - - mdata_value = json_object_object_get(metadata, "ImageHeight"); - mdata.lines = json_object_get_int(mdata_value); - mdata_value = NULL; - - json_object_put(metadataResp); - metadata = NULL; - metadata = json_object_object_get(config, "ColorMode"); - const char* color_value = json_object_get_string(metadata); - mdata_value = NULL; - - if (strcmp(color_value, "Color") == 0) - mdata.format = 1; - - if (strcmp(color_value, "Gray") == 0) - mdata.format = 0; - - if (strcmp(color_value, "BW") == 0) - mdata.format = 0; - - if (mdata.format == 1) - channels = 3; - - if (mdata.depth == 1) - mdata.bytes_per_line = channels * ((mdata.pixels_per_line + 7) / 8); - else - mdata.bytes_per_line = channels * mdata.pixels_per_line * mdata.depth / 8; - - metadata = NULL; - kds_s2000w_client_response_free(resp); - resp = NULL; - sleep(1); + _get_current_metadata(); _delete_current_image(); - return mdata; + return current_scan_status.mdata; } \ No newline at end of file diff --git a/src/kds_s2000w_handler.h b/src/kds_s2000w_handler.h index d1a181b..5323c1c 100644 --- a/src/kds_s2000w_handler.h +++ b/src/kds_s2000w_handler.h @@ -34,5 +34,5 @@ void kds_s2000w_handler_set_option(int option, void* value, int* info); void kds_s2000w_handler_set_option_auto(int option); void kds_s2000w_handler_start_scan(); void kds_s2000w_handler_stop_scan(); -metadata kds_s2000w_handler_get_parameters(int image_number); +metadata kds_s2000w_handler_get_parameters(); #endif \ No newline at end of file diff --git a/src/kds_s2000w_net.c b/src/kds_s2000w_net.c index fa31f8c..6bd0177 100644 --- a/src/kds_s2000w_net.c +++ b/src/kds_s2000w_net.c @@ -177,7 +177,7 @@ SANE_Status _sane_kds_s2000w_net_get_parameters(SANE_Handle handle, for (int i = 0; i < 10; i++) { sleep(1); - current_metadata = kds_s2000w_handler_get_parameters(1); + current_metadata = kds_s2000w_handler_get_parameters(); printf("valid %i\n", current_metadata.valid); if (current_metadata.valid) break;