From 7cd4c8dd3755e349704bf9231afd55e4add66dd9 Mon Sep 17 00:00:00 2001 From: Djuri Baars Date: Tue, 15 Apr 2025 23:17:15 +0200 Subject: [PATCH] feat: Improved LNBits multi currency support --- lib/btclock/data_handler.cpp | 48 +++++++++++++++----- lib/btclock/data_handler.hpp | 70 +++++++++++++++++++++++++++++ test/test_datahandler/test_main.cpp | 2 +- 3 files changed, 108 insertions(+), 12 deletions(-) diff --git a/lib/btclock/data_handler.cpp b/lib/btclock/data_handler.cpp index 437f435..efcce70 100644 --- a/lib/btclock/data_handler.cpp +++ b/lib/btclock/data_handler.cpp @@ -4,24 +4,22 @@ #include #endif + char getCurrencySymbol(char input) { switch (input) { case CURRENCY_EUR: return '['; - break; case CURRENCY_GBP: return ']'; - break; case CURRENCY_JPY: return '^'; - break; + // Dollar symbol currencies case CURRENCY_AUD: case CURRENCY_CAD: case CURRENCY_USD: return '$'; - break; default: return input; } @@ -33,22 +31,16 @@ std::string getCurrencyCode(char input) { case CURRENCY_EUR: return CURRENCY_CODE_EUR; - break; case CURRENCY_GBP: return CURRENCY_CODE_GBP; - break; case CURRENCY_JPY: return CURRENCY_CODE_JPY; - break; case CURRENCY_AUD: return CURRENCY_CODE_AUD; - break; case CURRENCY_CAD: return CURRENCY_CODE_CAD; - break; case CURRENCY_USD: return CURRENCY_CODE_USD; - break; default: return CURRENCY_CODE_UNKNOWN; } @@ -67,7 +59,41 @@ char getCurrencyChar(const std::string& input) else if (input == "CAD") return CURRENCY_CAD; else if (input == "USD") - return CURRENCY_USD; // Assuming USD is the default for unknown inputs + return CURRENCY_USD; + else if (input == "ALL") + return CURRENCY_ALL; + else if (input == "BWP") + return CURRENCY_BWP; + else if (input == "HNL") + return CURRENCY_HNL; + else if (input == "HTG") + return CURRENCY_HTG; + else if (input == "MWK") + return CURRENCY_MWK; + else if (input == "MZN") + return CURRENCY_MZN; + else if (input == "NAD") + return CURRENCY_NAD; + else if (input == "PYG") + return CURRENCY_PYG; + else if (input == "RON") + return CURRENCY_RON; + else if (input == "SZL") + return CURRENCY_SZL; + else if (input == "ZAR") + return CURRENCY_ZAR; + else if (input == "ZMW") + return CURRENCY_ZMW; + // Map dollar-symbol currencies to USD character code + else if (input == "NZD" || input == "SGD" || input == "HKD" || + input == "BND" || input == "FJD" || input == "SBD" || + input == "TTD" || input == "XCD" || input == "KYD" || + input == "GYD" || input == "BBD" || input == "BSD" || + input == "BMD" || input == "LRD" || input == "ZWL" || + input == "ARS" || input == "CLP" || input == "COP" || + input == "MXN" || input == "UYU" || input == "DOP" || + input == "SVC" || input == "SRD") + return CURRENCY_USD; else return ' '; } diff --git a/lib/btclock/data_handler.hpp b/lib/btclock/data_handler.hpp index d1dabc5..2cb2574 100644 --- a/lib/btclock/data_handler.hpp +++ b/lib/btclock/data_handler.hpp @@ -14,6 +14,41 @@ const char CURRENCY_GBP = ']'; const char CURRENCY_JPY = '^'; const char CURRENCY_AUD = '_'; const char CURRENCY_CAD = '`'; +const char CURRENCY_ALL = 'L'; +const char CURRENCY_BWP = 'P'; +const char CURRENCY_HNL = 'L'; +const char CURRENCY_HTG = 'G'; +const char CURRENCY_MWK = 'K'; +const char CURRENCY_MZN = 'M'; +const char CURRENCY_NAD = 'N'; +const char CURRENCY_PYG = 'G'; +const char CURRENCY_RON = 'L'; +const char CURRENCY_SZL = 'E'; +const char CURRENCY_ZAR = 'R'; +const char CURRENCY_ZMW = 'K'; +// const char CURRENCY_NZD = '$'; +// const char CURRENCY_SGD = '$'; +// const char CURRENCY_HKD = '$'; +// const char CURRENCY_BND = '$'; +// const char CURRENCY_FJD = '$'; +// const char CURRENCY_SBD = '$'; +// const char CURRENCY_TTD = '$'; +// const char CURRENCY_XCD = '$'; +// const char CURRENCY_KYD = '$'; +// const char CURRENCY_GYD = '$'; +// const char CURRENCY_BBD = '$'; +// const char CURRENCY_BSD = '$'; +// const char CURRENCY_BMD = '$'; +// const char CURRENCY_LRD = '$'; +// const char CURRENCY_ZWL = '$'; +// const char CURRENCY_ARS = '$'; +// const char CURRENCY_CLP = '$'; +// const char CURRENCY_COP = '$'; +// const char CURRENCY_MXN = '$'; +// const char CURRENCY_UYU = '$'; +// const char CURRENCY_DOP = '$'; +// const char CURRENCY_SVC = '$'; +// const char CURRENCY_SRD = '$'; const std::string CURRENCY_CODE_USD = "USD"; const std::string CURRENCY_CODE_EUR = "EUR"; @@ -21,6 +56,41 @@ const std::string CURRENCY_CODE_GBP = "GBP"; const std::string CURRENCY_CODE_JPY = "JPY"; const std::string CURRENCY_CODE_AUD = "AUD"; const std::string CURRENCY_CODE_CAD = "CAD"; +// const std::string CURRENCY_CODE_ALL = "ALL"; +// const std::string CURRENCY_CODE_BWP = "BWP"; +// const std::string CURRENCY_CODE_HNL = "HNL"; +// const std::string CURRENCY_CODE_HTG = "HTG"; +// const std::string CURRENCY_CODE_MWK = "MWK"; +// const std::string CURRENCY_CODE_MZN = "MZN"; +// const std::string CURRENCY_CODE_NAD = "NAD"; +// const std::string CURRENCY_CODE_PYG = "PYG"; +// const std::string CURRENCY_CODE_RON = "RON"; +// const std::string CURRENCY_CODE_SZL = "SZL"; +// const std::string CURRENCY_CODE_ZAR = "ZAR"; +// const std::string CURRENCY_CODE_ZMW = "ZMW"; +// const std::string CURRENCY_CODE_NZD = "NZD"; +// const std::string CURRENCY_CODE_SGD = "SGD"; +// const std::string CURRENCY_CODE_HKD = "HKD"; +// const std::string CURRENCY_CODE_BND = "BND"; +// const std::string CURRENCY_CODE_FJD = "FJD"; +// const std::string CURRENCY_CODE_SBD = "SBD"; +// const std::string CURRENCY_CODE_TTD = "TTD"; +// const std::string CURRENCY_CODE_XCD = "XCD"; +// const std::string CURRENCY_CODE_KYD = "KYD"; +// const std::string CURRENCY_CODE_GYD = "GYD"; +// const std::string CURRENCY_CODE_BBD = "BBD"; +// const std::string CURRENCY_CODE_BSD = "BSD"; +// const std::string CURRENCY_CODE_BMD = "BMD"; +// const std::string CURRENCY_CODE_LRD = "LRD"; +// const std::string CURRENCY_CODE_ZWL = "ZWL"; +// const std::string CURRENCY_CODE_ARS = "ARS"; +// const std::string CURRENCY_CODE_CLP = "CLP"; +// const std::string CURRENCY_CODE_COP = "COP"; +// const std::string CURRENCY_CODE_MXN = "MXN"; +// const std::string CURRENCY_CODE_UYU = "UYU"; +// const std::string CURRENCY_CODE_DOP = "DOP"; +// const std::string CURRENCY_CODE_SVC = "SVC"; +// const std::string CURRENCY_CODE_SRD = "SRD"; const std::string CURRENCY_CODE_UNKNOWN = " "; // Public methods diff --git a/test/test_datahandler/test_main.cpp b/test/test_datahandler/test_main.cpp index 9a127ac..80b2ea5 100644 --- a/test/test_datahandler/test_main.cpp +++ b/test/test_datahandler/test_main.cpp @@ -277,7 +277,7 @@ void test_Mcap1TrillionJpySmallChars(void) void test_PriceDataWithCurrencyCode(void) { - std::array output = parsePriceData(100000, "PYG", false, false, false); + std::array output = parsePriceData(10000, "PYG", false, false, false); TEST_ASSERT_EQUAL_STRING("BTC/PYG", output[0].c_str()); }