feat: supports correct UTF-8 printing on windows (#1101)

This commit is contained in:
leejet authored and GitHub committed 2025-12-16 23:00:41 +08:00
1 parent 9fa7f415df
commit ebe9d26a72
3 files changed
+204 -189

No files matched your search

+14 -54
View File
@@ -151,12 +151,12 @@ struct SDSvrParams {
bool process_and_check() {
if (listen_ip.empty()) {
fprintf(stderr, "error: the following arguments are required: listen_ip\n");
LOG_ERROR("error: the following arguments are required: listen_ip");
return false;
}
if (listen_port < 0 || listen_port > 65535) {
fprintf(stderr, "error: listen_port should be in the range [0, 65535]\n");
LOG_ERROR("error: listen_port should be in the range [0, 65535]");
return false;
}
return true;
@@ -256,47 +256,9 @@ std::vector<uint8_t> write_image_to_vector(
return buffer;
}
/* Enables Printing the log level tag in color using ANSI escape codes */
void sd_log_cb(enum sd_log_level_t level, const char* log, void* data) {
SDSvrParams* svr_params = (SDSvrParams*)data;
int tag_color;
const char* level_str;
FILE* out_stream = (level == SD_LOG_ERROR) ? stderr : stdout;
if (!log || (!svr_params->verbose && level <= SD_LOG_DEBUG)) {
return;
}
switch (level) {
case SD_LOG_DEBUG:
tag_color = 37;
level_str = "DEBUG";
break;
case SD_LOG_INFO:
tag_color = 34;
level_str = "INFO";
break;
case SD_LOG_WARN:
tag_color = 35;
level_str = "WARN";
break;
case SD_LOG_ERROR:
tag_color = 31;
level_str = "ERROR";
break;
default: /* Potential future-proofing */
tag_color = 33;
level_str = "?????";
break;
}
if (svr_params->color == true) {
fprintf(out_stream, "\033[%d;1m[%-5s]\033[0m ", tag_color, level_str);
} else {
fprintf(out_stream, "[%-5s] ", level_str);
}
fputs(log, out_stream);
fflush(out_stream);
log_print(level, log, svr_params->verbose, svr_params->color);
}
int main(int argc, const char** argv) {
@@ -306,19 +268,21 @@ int main(int argc, const char** argv) {
parse_args(argc, argv, svr_params, ctx_params, default_gen_params);
sd_set_log_callback(sd_log_cb, (void*)&svr_params);
log_verbose = svr_params.verbose;
log_color = svr_params.color;
if (svr_params.verbose) {
printf("%s", sd_get_system_info());
printf("%s\n", svr_params.to_string().c_str());
printf("%s\n", ctx_params.to_string().c_str());
printf("%s\n", default_gen_params.to_string().c_str());
LOG_INFO("%s", sd_get_system_info());
LOG_INFO("%s", svr_params.to_string().c_str());
LOG_INFO("%s", ctx_params.to_string().c_str());
LOG_INFO("%s", default_gen_params.to_string().c_str());
}
sd_ctx_params_t sd_ctx_params = ctx_params.to_sd_ctx_params_t(false, false, false);
sd_ctx_t* sd_ctx = new_sd_ctx(&sd_ctx_params);
if (sd_ctx == nullptr) {
printf("new_sd_ctx_t failed\n");
LOG_ERROR("new_sd_ctx_t failed");
return 1;
}
@@ -431,9 +395,7 @@ int main(int argc, const char** argv) {
return;
}
if (svr_params.verbose) {
printf("%s\n", gen_params.to_string().c_str());
}
LOG_DEBUG("%s\n", gen_params.to_string().c_str());
sd_image_t init_image = {(uint32_t)gen_params.width, (uint32_t)gen_params.height, 3, nullptr};
sd_image_t control_image = {(uint32_t)gen_params.width, (uint32_t)gen_params.height, 3, nullptr};
@@ -490,7 +452,7 @@ int main(int argc, const char** argv) {
results[i].channel,
output_compression);
if (image_bytes.empty()) {
printf("write image to mem failed\n");
LOG_ERROR("write image to mem failed");
continue;
}
@@ -611,9 +573,7 @@ int main(int argc, const char** argv) {
return;
}
if (svr_params.verbose) {
printf("%s\n", gen_params.to_string().c_str());
}
LOG_DEBUG("%s\n", gen_params.to_string().c_str());
sd_image_t init_image = {(uint32_t)gen_params.width, (uint32_t)gen_params.height, 3, nullptr};
sd_image_t control_image = {(uint32_t)gen_params.width, (uint32_t)gen_params.height, 3, nullptr};
@@ -735,7 +695,7 @@ int main(int argc, const char** argv) {
}
});
printf("listening on: %s:%d\n", svr_params.listen_ip.c_str(), svr_params.listen_port);
LOG_INFO("listening on: %s:%d\n", svr_params.listen_ip.c_str(), svr_params.listen_port);
svr.listen(svr_params.listen_ip, svr_params.listen_port);
// cleanup