diff options
author | saturneric <[email protected]> | 2024-01-12 06:02:37 +0000 |
---|---|---|
committer | saturneric <[email protected]> | 2024-01-12 06:02:37 +0000 |
commit | bf538056b24a68b8fd235b1c50991ee8eb46a776 (patch) | |
tree | e1bab54095b80df62b321fb5bd69453f9f951b05 /src/core/function/CharsetOperator.cpp | |
parent | feat: improve api and ui of keys import and export (diff) | |
download | GpgFrontend-bf538056b24a68b8fd235b1c50991ee8eb46a776.tar.gz GpgFrontend-bf538056b24a68b8fd235b1c50991ee8eb46a776.zip |
refactor: use QString instead of std::string and improve threading system
Diffstat (limited to 'src/core/function/CharsetOperator.cpp')
-rw-r--r-- | src/core/function/CharsetOperator.cpp | 102 |
1 files changed, 6 insertions, 96 deletions
diff --git a/src/core/function/CharsetOperator.cpp b/src/core/function/CharsetOperator.cpp index 40978701..023fcd10 100644 --- a/src/core/function/CharsetOperator.cpp +++ b/src/core/function/CharsetOperator.cpp @@ -28,109 +28,19 @@ #include "core/function/CharsetOperator.h" -#include <unicode/ucnv.h> -#include <unicode/ucsdet.h> -#include <unicode/ustring.h> -#include <unicode/utypes.h> - -#include <cstddef> - #include "core/utils/LogUtils.h" namespace GpgFrontend { -auto CharsetOperator::Detect(const std::string &buffer) +auto CharsetOperator::Detect(const QString &buffer) -> CharsetOperator::CharsetInfo { - const UCharsetMatch *ucm; - UErrorCode status = U_ZERO_ERROR; - UCharsetDetector *csd = ucsdet_open(&status); - - status = U_ZERO_ERROR; - if (U_FAILURE(status) != 0) { - GF_CORE_LOG_ERROR("failed to open charset detector: {}", - u_errorName(status)); - return {"unknown", "unknown", 0}; - } - - status = U_ZERO_ERROR; - ucsdet_setText(csd, buffer.data(), buffer.size(), &status); - if (U_FAILURE(status) != 0) { - GF_CORE_LOG_ERROR("failed to set text to charset detector: {}", - u_errorName(status)); - return {"unknown", "unknown", 0}; - } - - status = U_ZERO_ERROR; - ucm = ucsdet_detect(csd, &status); - - if (U_FAILURE(status) != 0) return {"unknown", "unknown", 0}; - - status = U_ZERO_ERROR; - const char *name = ucsdet_getName(ucm, &status); - if (U_FAILURE(status) != 0) return {"unknown", "unknown", 0}; - - status = U_ZERO_ERROR; - int confidence = ucsdet_getConfidence(ucm, &status); - if (U_FAILURE(status) != 0) return {name, "unknown", 0}; - - status = U_ZERO_ERROR; - const char *language = ucsdet_getLanguage(ucm, &status); - if (U_FAILURE(status) != 0) return {name, "unknown", confidence}; - - GF_CORE_LOG_DEBUG("detected charset: {} {} {}", name, language, confidence); - return {name, language, confidence}; + // TODO + return {"", "", 0}; } -auto CharsetOperator::Convert2Utf8(const std::string &buffer, - std::string &out_buffer, - std::string from_charset_name) -> bool { - UErrorCode status = U_ZERO_ERROR; - const auto from_encode = std::string("utf-8"); - const auto &to_encode = from_charset_name; - - GF_CORE_LOG_DEBUG("Converting buffer: {}", buffer.size()); - - // test if the charset is supported - UConverter *conv = ucnv_open(from_encode.c_str(), &status); - ucnv_close(conv); - if (U_FAILURE(status) != 0) { - GF_CORE_LOG_ERROR("failed to open converter: {}, from encode: {}", - u_errorName(status), from_encode); - return false; - } - - // test if the charset is supported - conv = ucnv_open(to_encode.c_str(), &status); - ucnv_close(conv); - if (U_FAILURE(status) != 0) { - GF_CORE_LOG_ERROR("failed to open converter: {}, to encode: {}", - u_errorName(status), to_encode); - return false; - } - - status = U_ZERO_ERROR; - int32_t target_limit = 0; - int32_t target_capacity = 0; - - target_capacity = - ucnv_convert(from_encode.c_str(), to_encode.c_str(), nullptr, - target_limit, buffer.data(), buffer.size(), &status); - - if (status == U_BUFFER_OVERFLOW_ERROR) { - status = U_ZERO_ERROR; - out_buffer.clear(); - out_buffer.resize(target_capacity); - ucnv_convert(from_encode.c_str(), to_encode.c_str(), out_buffer.data(), - out_buffer.size(), buffer.data(), buffer.size(), &status); - } - - if (U_FAILURE(status) != 0) { - GF_CORE_LOG_ERROR("failed to convert to utf-8: {}", u_errorName(status)); - return false; - } - - GF_CORE_LOG_DEBUG("converted buffer: {} bytes", out_buffer.size()); - return true; +auto CharsetOperator::Convert2Utf8(const QString &buffer, QString &out_buffer, + QString from_charset_name) -> bool { + // TODO } } // namespace GpgFrontend
\ No newline at end of file |