From f10246a56776ced49befbf19bdf00e75799ce38c Mon Sep 17 00:00:00 2001 From: naezith Date: Wed, 8 Jul 2020 15:38:49 +0300 Subject: [PATCH 01/14] feat(gui): mm2 init wait from 750ms to 2s --- src/atomic.dex.mm2.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/atomic.dex.mm2.cpp b/src/atomic.dex.mm2.cpp index af458a60c0..7847f77953 100644 --- a/src/atomic.dex.mm2.cpp +++ b/src/atomic.dex.mm2.cpp @@ -634,7 +634,7 @@ namespace atomic_dex using namespace std::chrono_literals; // loguru::set_thread_name("mm2 init thread"); - const auto wait_ec = m_mm2_instance.wait(750ms).second; + const auto wait_ec = m_mm2_instance.wait(2s).second; fs::remove(mm2_cfg_path); if (wait_ec.value() == static_cast(std::errc::timed_out) || wait_ec.value() == 258) { From f99d9bc4e174af5d45c77f4ba30b0483efc72027 Mon Sep 17 00:00:00 2001 From: naezith Date: Wed, 8 Jul 2020 15:56:09 +0300 Subject: [PATCH 02/14] feat(gui): better fiat selection with more options --- atomic_qt_design/qml/Constants/API.qml | 2 ++ atomic_qt_design/qml/Constants/General.qml | 4 +++- atomic_qt_design/qml/Settings/Settings.qml | 14 +++++++++++++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/atomic_qt_design/qml/Constants/API.qml b/atomic_qt_design/qml/Constants/API.qml index 932310daff..893a158c5e 100644 --- a/atomic_qt_design/qml/Constants/API.qml +++ b/atomic_qt_design/qml/Constants/API.qml @@ -29,6 +29,8 @@ QtObject { balance_fiat_all: "12345678.90", fiat: "EUR", + get_available_fiats: () => ["USD", "EUR"], + lang: "en", get_available_langs: () => ["en", "fr", "tr"], diff --git a/atomic_qt_design/qml/Constants/General.qml b/atomic_qt_design/qml/Constants/General.qml index 9f82b89ca6..f4ac35c980 100644 --- a/atomic_qt_design/qml/Constants/General.qml +++ b/atomic_qt_design/qml/Constants/General.qml @@ -86,7 +86,9 @@ QtObject { function formatFiat(received, amount, fiat) { const symbols = { "USD": "$", - "EUR": "€" + "EUR": "€", + "BTC": "₿", + "KMD": "KMD", } return diffPrefix(received) + symbols[fiat] + " " + amount diff --git a/atomic_qt_design/qml/Settings/Settings.qml b/atomic_qt_design/qml/Settings/Settings.qml index e8b9865227..e98f40a3b7 100644 --- a/atomic_qt_design/qml/Settings/Settings.qml +++ b/atomic_qt_design/qml/Settings/Settings.qml @@ -7,6 +7,7 @@ import "../Components" import "../Constants" Item { + id: root function disconnect() { API.get().disconnect() onDisconnect() @@ -21,7 +22,8 @@ Item { } property string mm2_version: '' - property var fiats: (["USD", "EUR"]) + property var fiats: API.get().get_available_fiats() + property string api_fiat: API.get().fiat InnerBackground { id: layout_background @@ -50,6 +52,16 @@ Item { field.currentIndex = fiats.indexOf(API.get().fiat) initialized = true } + + Connections { + target: root + + onApi_fiatChanged: { + const target_index = fiats.indexOf(api_fiat) + if(combo_fiat.field.currentIndex !== target_index) + combo_fiat.field.currentIndex = target_index + } + } } Languages { From 846ab5dd932455e9d3f9c4de333dcf40b15835d2 Mon Sep 17 00:00:00 2001 From: naezith Date: Wed, 8 Jul 2020 15:56:29 +0300 Subject: [PATCH 03/14] feat(gui): fiat toggle on banner click --- atomic_qt_design/qml/Portfolio/Portfolio.qml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/atomic_qt_design/qml/Portfolio/Portfolio.qml b/atomic_qt_design/qml/Portfolio/Portfolio.qml index d108a545db..6b5e5acdf5 100644 --- a/atomic_qt_design/qml/Portfolio/Portfolio.qml +++ b/atomic_qt_design/qml/Portfolio/Portfolio.qml @@ -73,6 +73,7 @@ ColumnLayout { height: 200 ColumnLayout { + id: top_layout anchors.centerIn: parent // Total Title @@ -94,6 +95,18 @@ ColumnLayout { } } + MouseArea { + anchors.fill: top_layout + + onClicked: { + const current_fiat = API.get().fiat + const available_fiats = API.get().get_available_fiats() + const current_index = available_fiats.indexOf(current_fiat) + const next_index = (current_index + 1) % available_fiats.length + const next_fiat = available_fiats[next_index] + API.get().fiat = next_fiat + } + } // Add button PlusButton { From 498bd33a7fdc35d6dc1b1a67bee165d6b46cd9a0 Mon Sep 17 00:00:00 2001 From: naezith Date: Wed, 8 Jul 2020 16:31:49 +0300 Subject: [PATCH 04/14] feat(gui): better connections function --- atomic_qt_design/qml/Settings/Settings.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atomic_qt_design/qml/Settings/Settings.qml b/atomic_qt_design/qml/Settings/Settings.qml index e98f40a3b7..bcb668bc6f 100644 --- a/atomic_qt_design/qml/Settings/Settings.qml +++ b/atomic_qt_design/qml/Settings/Settings.qml @@ -56,7 +56,7 @@ Item { Connections { target: root - onApi_fiatChanged: { + function onApi_fiatChanged() { const target_index = fiats.indexOf(api_fiat) if(combo_fiat.field.currentIndex !== target_index) combo_fiat.field.currentIndex = target_index From 685abf23c555b83cb25b2ce8372aff4b0aecce1b Mon Sep 17 00:00:00 2001 From: romanszterg Date: Wed, 8 Jul 2020 15:39:48 +0200 Subject: [PATCH 05/14] feat(paprika): adjust precision with new fiats Signed-off-by: romanszterg --- src/atomic.dex.provider.coinpaprika.cpp | 43 +++++++++++++++++-------- 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/src/atomic.dex.provider.coinpaprika.cpp b/src/atomic.dex.provider.coinpaprika.cpp index 8a1ad85592..c793d71581 100644 --- a/src/atomic.dex.provider.coinpaprika.cpp +++ b/src/atomic.dex.provider.coinpaprika.cpp @@ -41,7 +41,7 @@ namespace void process_ticker_infos(const atomic_dex::coin_config& current_coin, atomic_dex::coinpaprika_provider::t_ticker_infos_registry& reg) { - const ticker_infos_request request{.ticker_currency_id = current_coin.coinpaprika_id, .ticker_quotes = {"USD", "EUR"}}; + const ticker_infos_request request{.ticker_currency_id = current_coin.coinpaprika_id, .ticker_quotes = {"USD", "EUR", "BTC"}}; auto answer = tickers_info(request); retry(answer, request, [&answer](const ticker_infos_request& request) { answer = tickers_info(request); }); @@ -203,11 +203,12 @@ namespace atomic_dex if (not skip_precision) { - if (auto final_price_str = final_price.str(2, std::ios_base::fixed); final_price_str == "0.00" && final_price > 0.00000000) + std::size_t default_precision = (fiat == "USD" || fiat == "EUR") ? 2 : 8; + if (auto final_price_str = final_price.str(default_precision, std::ios_base::fixed); final_price_str == "0.00" && final_price > 0.00000000) { - return final_price.str(2); + return final_price.str(default_precision); } - ss.precision(2); + ss.precision(default_precision); } ss << std::fixed << final_price; @@ -248,9 +249,13 @@ namespace atomic_dex } } - ss.precision(2); + std::size_t default_precision = (fiat == "USD" || fiat == "EUR") ? 2 : 8; + ss.precision(default_precision); ss << std::fixed << final_price_f; - return ss.str(); + std::string result = ss.str(); + boost::trim_right_if(result, boost::is_any_of("0")); + boost::trim_right_if(result, boost::is_any_of(".")); + return result; } catch (const std::exception& error) { @@ -274,12 +279,13 @@ namespace atomic_dex } const t_float_50 amount_f(amount); const t_float_50 current_price_f(current_price); - const t_float_50 final_price = amount_f * current_price_f; - if (auto final_price_str = final_price.str(2, std::ios_base::fixed); final_price_str == "0.00" && final_price > 0.00000000) + const t_float_50 final_price = amount_f * current_price_f; + std::size_t default_precision = (fiat == "USD" || fiat == "EUR") ? 2 : 8; + if (auto final_price_str = final_price.str(default_precision, std::ios_base::fixed); final_price_str == "0.00" && final_price > 0.00000000) { - return final_price.str(2); + return final_price.str(default_precision); } - return final_price.str(2, std::ios_base::fixed); + return final_price.str(default_precision, std::ios_base::fixed); } std::string @@ -335,13 +341,22 @@ namespace atomic_dex if (adjusted) { + std::size_t default_precision = (fiat == "USD" || fiat == "EUR") ? 2 : 8; + t_float_50 current_price_f(current_price); + if (fiat == "USD" || fiat == "EUR") + { + if (current_price_f < 1.0) + { + default_precision = 5; + } + } //! Trick: If there conversion in a fixed representation is 0.00 then use a default precision to 2 without fixed ios flags - if (auto fixed_str = current_price_f.str(2, std::ios_base::fixed); fixed_str == "0.00" && current_price_f > 0.00000000) + if (auto fixed_str = current_price_f.str(default_precision, std::ios_base::fixed); fixed_str == "0.00" && current_price_f > 0.00000000) { - return current_price_f.str(2); + return current_price_f.str(default_precision); } - return current_price_f.str(2, std::ios_base::fixed); + return current_price_f.str(default_precision, std::ios::fixed); } return current_price; } @@ -402,5 +417,5 @@ namespace atomic_dex return m_ticker_historical_registry.find(ticker) != m_ticker_historical_registry.cend() ? m_ticker_historical_registry.at(ticker) : t_ticker_historical_answer{.answer = nlohmann::json::array()}; } - + } // namespace atomic_dex From 1d25c4cfc0cbe98e2ca7b0dd72ee00b8676d0966 Mon Sep 17 00:00:00 2001 From: naezith Date: Wed, 8 Jul 2020 16:53:48 +0300 Subject: [PATCH 06/14] feat(gui): safer coinpaprika use --- atomic_qt_design/qml/Constants/General.qml | 4 ++++ atomic_qt_design/qml/Portfolio/Portfolio.qml | 14 +++++++++----- atomic_qt_design/qml/Wallet/Main.qml | 10 ++++++---- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/atomic_qt_design/qml/Constants/General.qml b/atomic_qt_design/qml/Constants/General.qml index f4ac35c980..ebb6a545e6 100644 --- a/atomic_qt_design/qml/Constants/General.qml +++ b/atomic_qt_design/qml/Constants/General.qml @@ -83,6 +83,10 @@ QtObject { return list.find(c => c.ticker === ticker) } + function validFiatRates(data, fiat) { + return data && data.rates && data.rates[fiat] + } + function formatFiat(received, amount, fiat) { const symbols = { "USD": "$", diff --git a/atomic_qt_design/qml/Portfolio/Portfolio.qml b/atomic_qt_design/qml/Portfolio/Portfolio.qml index 6b5e5acdf5..a5ad9099a2 100644 --- a/atomic_qt_design/qml/Portfolio/Portfolio.qml +++ b/atomic_qt_design/qml/Portfolio/Portfolio.qml @@ -34,8 +34,12 @@ ColumnLayout { } function getColor(data) { - return data.rates === null || data.rates[API.get().fiat].percent_change_24h === 0 ? Style.colorWhite4 : - data.rates[API.get().fiat].percent_change_24h > 0 ? Style.colorGreen : Style.colorRed + const fiat = API.get().fiat + + if(General.validFiatRates(data, fiat) && data.rates[fiat].percent_change_24h !== 0) + return data.rates[fiat].percent_change_24h > 0 ? Style.colorGreen : Style.colorRed + + return Style.colorWhite4 } function updateChart(chart, historical) { @@ -279,8 +283,8 @@ ColumnLayout { case sort_by_balance: return (parseFloat(b.balance) - parseFloat(a.balance)) * order case sort_by_trend: return (parseFloat(b.price) - parseFloat(a.price)) * order case sort_by_change: - val_a = a.rates === null ? -9999999 : a.rates[API.get().fiat].percent_change_24h - val_b = b.rates === null ? -9999999 : b.rates[API.get().fiat].percent_change_24h + val_a = General.validFiatRates(a, API.get().fiat) ? a.rates[API.get().fiat].percent_change_24h : -9999999 + val_b = General.validFiatRates(b, API.get().fiat) ? b.rates[API.get().fiat].percent_change_24h : -9999999 return (val_b - val_a) * order } @@ -378,7 +382,7 @@ ColumnLayout { anchors.right: parent.right anchors.rightMargin: change_24h_header.anchors.rightMargin - text_value: API.get().empty_string + (model.modelData.rates === null ? '-' : General.formatPercent(model.modelData.rates[API.get().fiat].percent_change_24h)) + text_value: API.get().empty_string + (General.validFiatRates(model.modelData, API.get().fiat) ? General.formatPercent(model.modelData.rates[API.get().fiat].percent_change_24h) : '-') color: getColor(model.modelData) anchors.verticalCenter: parent.verticalCenter } diff --git a/atomic_qt_design/qml/Wallet/Main.qml b/atomic_qt_design/qml/Wallet/Main.qml index b62d487849..431652de80 100644 --- a/atomic_qt_design/qml/Wallet/Main.qml +++ b/atomic_qt_design/qml/Wallet/Main.qml @@ -143,9 +143,10 @@ Item { DefaultText { text_value: { const c = General.getCoin(portfolio_coins, API.get().current_coin_info.ticker) - if(c === undefined || c.rates === null) return "-" + const fiat = API.get().fiat + if(!General.validFiatRates(c, fiat)) return "-" - return API.get().empty_string + (General.formatPercent(c.rates[API.get().fiat].percent_change_24h)) + return API.get().empty_string + (General.formatPercent(c.rates[fiat].percent_change_24h)) } Layout.alignment: Qt.AlignLeft font.pixelSize: name.font.pixelSize @@ -153,9 +154,10 @@ Item { const c = General.getCoin(portfolio_coins, API.get().current_coin_info.ticker) const def_color = Style.colorWhite4 - if(c === undefined || c.rates === null) return def_color + const fiat = API.get().fiat + if(!General.validFiatRates(c, fiat)) return def_color - const v = parseFloat(c.rates[API.get().fiat].percent_change_24h) + const v = parseFloat(c.rates[fiat].percent_change_24h) return v === 0 ? def_color : v > 0 ? Style.colorGreen : Style.colorRed } } From 3b1374d5e7559f678a2d8432cf76b2e535abe8c9 Mon Sep 17 00:00:00 2001 From: naezith Date: Wed, 8 Jul 2020 16:57:16 +0300 Subject: [PATCH 07/14] feat(gui): adjust margins for longer precise amounts --- atomic_qt_design/qml/Portfolio/Portfolio.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/atomic_qt_design/qml/Portfolio/Portfolio.qml b/atomic_qt_design/qml/Portfolio/Portfolio.qml index a5ad9099a2..48df96fe7b 100644 --- a/atomic_qt_design/qml/Portfolio/Portfolio.qml +++ b/atomic_qt_design/qml/Portfolio/Portfolio.qml @@ -187,7 +187,7 @@ ColumnLayout { id: change_24h_header icon_at_left: false anchors.right: parent.right - anchors.rightMargin: parent.width * 0.27 + anchors.rightMargin: parent.width * 0.31 anchors.verticalCenter: parent.verticalCenter text: API.get().empty_string + (qsTr("Change 24h")) @@ -199,7 +199,7 @@ ColumnLayout { id: trend_7d_header icon_at_left: false anchors.right: parent.right - anchors.rightMargin: parent.width * 0.15 + anchors.rightMargin: parent.width * 0.18 anchors.verticalCenter: parent.verticalCenter text: API.get().empty_string + (qsTr("Trend 7d")) From bb9805f8726dd9a17f7450f1d2b3cddeb2b964ba Mon Sep 17 00:00:00 2001 From: naezith Date: Wed, 8 Jul 2020 17:04:05 +0300 Subject: [PATCH 08/14] feat(gui): adjust margins for bigger numbers --- atomic_qt_design/qml/Portfolio/Portfolio.qml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/atomic_qt_design/qml/Portfolio/Portfolio.qml b/atomic_qt_design/qml/Portfolio/Portfolio.qml index 48df96fe7b..f821aca1e0 100644 --- a/atomic_qt_design/qml/Portfolio/Portfolio.qml +++ b/atomic_qt_design/qml/Portfolio/Portfolio.qml @@ -175,7 +175,7 @@ ColumnLayout { id: balance_header icon_at_left: true anchors.left: parent.left - anchors.leftMargin: parent.width * 0.3 + anchors.leftMargin: parent.width * 0.265 anchors.verticalCenter: parent.verticalCenter text: API.get().empty_string + (qsTr("Balance")) @@ -187,7 +187,7 @@ ColumnLayout { id: change_24h_header icon_at_left: false anchors.right: parent.right - anchors.rightMargin: parent.width * 0.31 + anchors.rightMargin: parent.width * 0.37 anchors.verticalCenter: parent.verticalCenter text: API.get().empty_string + (qsTr("Change 24h")) @@ -199,7 +199,7 @@ ColumnLayout { id: trend_7d_header icon_at_left: false anchors.right: parent.right - anchors.rightMargin: parent.width * 0.18 + anchors.rightMargin: parent.width * 0.24 anchors.verticalCenter: parent.verticalCenter text: API.get().empty_string + (qsTr("Trend 7d")) From a1feec2488e461953c20a092a50dbb6069c5e8f7 Mon Sep 17 00:00:00 2001 From: romanszterg Date: Wed, 8 Jul 2020 17:42:27 +0200 Subject: [PATCH 09/14] feat(paprika): use spawn in coinpaprika api Signed-off-by: romanszterg --- src/atomic.dex.provider.coinpaprika.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/atomic.dex.provider.coinpaprika.cpp b/src/atomic.dex.provider.coinpaprika.cpp index c793d71581..a4e88d5e5e 100644 --- a/src/atomic.dex.provider.coinpaprika.cpp +++ b/src/atomic.dex.provider.coinpaprika.cpp @@ -141,26 +141,29 @@ namespace atomic_dex t_coins coins = m_mm2_instance.get_enabled_coins(); + std::vector> out_fut; + + out_fut.reserve(coins.size() * 6); for (auto&& current_coin: coins) { if (current_coin.coinpaprika_id == "test-coin") { continue; } - spawn([this, cur_coin = current_coin]() { process_ticker_infos(cur_coin, this->m_ticker_infos_registry); }); - spawn([this, cur_coin = current_coin]() { process_ticker_historical(cur_coin, this->m_ticker_historical_registry); }); - process_provider(current_coin, m_usd_rate_providers, "usd-us-dollars"); + out_fut.push_back(spawn([this, cur_coin = current_coin]() { process_ticker_infos(cur_coin, this->m_ticker_infos_registry); })); + out_fut.push_back(spawn([this, cur_coin = current_coin]() { process_ticker_historical(cur_coin, this->m_ticker_historical_registry); })); + out_fut.push_back(spawn([this, cur_coin = current_coin]() { process_provider(cur_coin, m_usd_rate_providers, "usd-us-dollars"); })); if (current_coin.ticker != "BTC") { - process_provider(current_coin, m_btc_rate_providers, "btc-bitcoin"); + out_fut.push_back(spawn([this, cur_coin = current_coin]() { process_provider(cur_coin, m_btc_rate_providers, "btc-bitcoin"); })); } if (current_coin.ticker != "KMD") { - process_provider(current_coin, m_kmd_rate_providers, "kmd-komodo"); + out_fut.push_back(spawn([this, cur_coin = current_coin]() { process_provider(cur_coin, m_kmd_rate_providers, "kmd-komodo"); })); } - process_provider(current_coin, m_eur_rate_providers, "eur-euro"); + out_fut.push_back(spawn([this, cur_coin = current_coin]() { process_provider(cur_coin, m_eur_rate_providers, "eur-euro"); })); } - + for (auto&& cur_fut: out_fut) { cur_fut.get(); } } while (not m_provider_thread_timer.wait_for(120s)); }); } From d4803fa06196c0e43f72c0a9bdf6b41c501a9976 Mon Sep 17 00:00:00 2001 From: romanszterg Date: Thu, 9 Jul 2020 12:56:47 +0200 Subject: [PATCH 10/14] feat(toggle): invert EUR and BTC Signed-off-by: romanszterg --- assets/config/cfg.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/config/cfg.json b/assets/config/cfg.json index 9ccfe013e8..a17b22c2ef 100644 --- a/assets/config/cfg.json +++ b/assets/config/cfg.json @@ -8,8 +8,8 @@ "current_fiat": "USD", "available_fiat": [ "USD", - "BTC", "EUR", + "BTC", "KMD" ] } \ No newline at end of file From 7d98f7debc094f86069f7041fff7e7b722bc6633 Mon Sep 17 00:00:00 2001 From: romanszterg Date: Thu, 9 Jul 2020 13:36:04 +0200 Subject: [PATCH 11/14] enhancements(currencies): add a differentiation between currencies and fiat Signed-off-by: romanszterg --- assets/config/cfg.json | 6 +++++- src/atomic.dex.app.cpp | 37 +++++++++++++++++++++++-------------- src/atomic.dex.app.hpp | 7 ++++--- src/atomic.dex.cfg.cpp | 20 +++++++++++++++----- src/atomic.dex.cfg.hpp | 12 +++++++----- 5 files changed, 54 insertions(+), 28 deletions(-) diff --git a/assets/config/cfg.json b/assets/config/cfg.json index a17b22c2ef..dd43e26fd6 100644 --- a/assets/config/cfg.json +++ b/assets/config/cfg.json @@ -5,10 +5,14 @@ "fr", "tr" ], + "current_currency": "USD", "current_fiat": "USD", "available_fiat": [ "USD", - "EUR", + "EUR" + ], + "possible_currencies": [ + "USD", "BTC", "KMD" ] diff --git a/src/atomic.dex.app.cpp b/src/atomic.dex.app.cpp index e815cb97f9..658f937570 100644 --- a/src/atomic.dex.app.cpp +++ b/src/atomic.dex.app.cpp @@ -274,7 +274,7 @@ namespace atomic_dex } std::error_code ec; - auto fiat_balance_std = paprika.get_price_in_fiat_all(m_config.current_fiat, ec); + auto fiat_balance_std = paprika.get_price_in_fiat_all(m_config.current_currency, ec); if (!ec) { @@ -303,12 +303,12 @@ namespace atomic_dex QString target_balance = QString::fromStdString(mm2.my_balance(m_coin_info->get_ticker().toStdString(), ec)); m_coin_info->set_balance(target_balance); - if (std::any_of(begin(m_config.available_fiat), end(m_config.available_fiat), [this](const std::string& cur_fiat) { - return cur_fiat == m_config.current_fiat; + if (std::any_of(begin(m_config.possible_currencies), end(m_config.possible_currencies), [this](const std::string& cur_fiat) { + return cur_fiat == m_config.current_currency; })) { ec = std::error_code(); - auto amount = QString::fromStdString(paprika.get_price_in_fiat(m_config.current_fiat, m_coin_info->get_ticker().toStdString(), ec)); + auto amount = QString::fromStdString(paprika.get_price_in_fiat(m_config.current_currency, m_coin_info->get_ticker().toStdString(), ec)); if (!ec) { m_coin_info->set_fiat_amount(amount); @@ -325,7 +325,7 @@ namespace atomic_dex if (!ec) { m_coin_info->set_transactions( - to_qt_binding(std::move(txs), this, get_paprika(), QString::fromStdString(m_config.current_fiat), m_coin_info->get_ticker().toStdString())); + to_qt_binding(std::move(txs), this, get_paprika(), QString::fromStdString(m_config.current_currency), m_coin_info->get_ticker().toStdString())); } auto tx_state = mm2.get_tx_state(m_coin_info->get_ticker().toStdString(), ec); @@ -453,18 +453,18 @@ namespace atomic_dex } QString - application::get_current_fiat() const noexcept + application::get_current_currency() const noexcept { - return QString::fromStdString(this->m_config.current_fiat); + return QString::fromStdString(this->m_config.current_currency); } void - application::set_current_fiat(QString current_fiat) noexcept + application::set_current_currency(QString current_currency) noexcept { - if (current_fiat.toStdString() != m_config.current_fiat) + if (current_currency.toStdString() != m_config.current_currency) { - spdlog::info("change lang {} to {}", m_config.current_fiat, current_fiat.toStdString()); - atomic_dex::change_fiat(m_config, current_fiat.toStdString()); + spdlog::info("change lang {} to {}", m_config.current_currency, current_currency.toStdString()); + atomic_dex::change_currency(m_config, current_currency.toStdString()); emit on_fiat_changed(); } } @@ -880,9 +880,9 @@ namespace atomic_dex nlohmann::json cur_obj{ {"ticker", coin.ticker}, {"name", coin.name}, - {"price", get_paprika().get_rate_conversion(m_config.current_fiat, coin.ticker, ec, true)}, + {"price", get_paprika().get_rate_conversion(m_config.current_currency, coin.ticker, ec, true)}, {"balance", get_mm2().my_balance(coin.ticker, ec)}, - {"balance_fiat", get_paprika().get_price_in_fiat(m_config.current_fiat, coin.ticker, ec)}, + {"balance_fiat", get_paprika().get_price_in_fiat(m_config.current_currency, coin.ticker, ec)}, {"rates", get_paprika().get_ticker_infos(coin.ticker).answer}, {"historical", get_paprika().get_ticker_historical(coin.ticker).answer}}; j.push_back(cur_obj); @@ -957,6 +957,15 @@ namespace atomic_dex return out; } + QStringList + application::get_available_currencies() const + { + QStringList out; + out.reserve(m_config.possible_currencies.size()); + for (auto&& cur_currency: m_config.possible_currencies) { out.push_back(QString::fromStdString(cur_currency)); } + return out; + } + const QString& application::get_empty_string() const { @@ -1165,7 +1174,7 @@ namespace atomic_dex std::error_code ec; return QString::fromStdString(get_paprika().get_cex_rates(base.toStdString(), rel.toStdString(), ec)); } -} +} // namespace atomic_dex //! OHLC Relative functions namespace atomic_dex diff --git a/src/atomic.dex.app.hpp b/src/atomic.dex.app.hpp index 1aa27f87c2..5046fa026d 100644 --- a/src/atomic.dex.app.hpp +++ b/src/atomic.dex.app.hpp @@ -48,7 +48,7 @@ namespace atomic_dex Q_PROPERTY(QList enabled_coins READ get_enabled_coins NOTIFY enabledCoinsChanged) Q_PROPERTY(QList enableable_coins READ get_enableable_coins NOTIFY enableableCoinsChanged) Q_PROPERTY(QObject* current_coin_info READ get_current_coin_info NOTIFY coinInfoChanged) - Q_PROPERTY(QString fiat READ get_current_fiat WRITE set_current_fiat NOTIFY on_fiat_changed) + Q_PROPERTY(QString fiat READ get_current_currency WRITE set_current_currency NOTIFY on_fiat_changed) // Q_PROPERTY(QString second_fiat READ get_second_current_fiat WRITE set_second_current_fiat NOTIFY on_second_fiat_changed) Q_PROPERTY(QString lang READ get_current_lang WRITE set_current_lang NOTIFY on_lang_changed) Q_PROPERTY(QString wallet_default_name READ get_wallet_default_name WRITE set_wallet_default_name NOTIFY on_wallet_default_name_changed) @@ -89,7 +89,7 @@ namespace atomic_dex QObject* get_current_coin_info() const noexcept; QObjectList get_enabled_coins() const noexcept; QObjectList get_enableable_coins() const noexcept; - QString get_current_fiat() const noexcept; + QString get_current_currency() const noexcept; QString get_current_lang() const noexcept; QString get_balance_fiat_all() const noexcept; QString get_second_balance_fiat_all() const noexcept; @@ -98,7 +98,7 @@ namespace atomic_dex Q_INVOKABLE QString get_version() const noexcept; //! Properties Setter - void set_current_fiat(QString current_fiat) noexcept; + void set_current_currency(QString current_currency) noexcept; void set_current_lang(const QString& current_lang) noexcept; void set_wallet_default_name(QString wallet_default_name) noexcept; void set_current_balance_fiat_all(QString current_fiat_all_balance) noexcept; @@ -131,6 +131,7 @@ namespace atomic_dex Q_INVOKABLE QString get_export_folder() const; Q_INVOKABLE QStringList get_available_langs() const; Q_INVOKABLE QStringList get_available_fiats() const; + Q_INVOKABLE QStringList get_available_currencies() const; Q_INVOKABLE static void change_state(int visibility); //! Portfolio QML API Bindings diff --git a/src/atomic.dex.cfg.cpp b/src/atomic.dex.cfg.cpp index 06aca1a323..75047fdeeb 100644 --- a/src/atomic.dex.cfg.cpp +++ b/src/atomic.dex.cfg.cpp @@ -27,8 +27,10 @@ namespace assert(ifs.is_open()); ifs >> config_json_data; - config_json_data["lang"] = config.current_lang; - config_json_data["current_fiat"] = config.current_fiat; + config_json_data["lang"] = config.current_lang; + config_json_data["current_currency"] = config.current_currency; + config_json_data["current_fiat"] = config.current_fiat; + config_json_data["possible_currencies"] = config.possible_currencies; ifs.close(); @@ -37,7 +39,7 @@ namespace assert(ofs.is_open()); ofs << config_json_data; } -} +} // namespace namespace atomic_dex { @@ -46,8 +48,10 @@ namespace atomic_dex { j.at("lang").get_to(config.current_lang); j.at("available_lang").get_to(config.available_lang); + j.at("current_currency").get_to(config.current_currency); j.at("current_fiat").get_to(config.current_fiat); j.at("available_fiat").get_to(config.available_fiat); + j.at("possible_currencies").get_to(config.possible_currencies); } void @@ -73,9 +77,15 @@ namespace atomic_dex } void - change_fiat(cfg& config, const std::string& new_fiat) + change_currency(cfg& config, const std::string& new_currency) { - config.current_fiat = new_fiat; + config.current_currency = new_currency; + + if (ranges::any_of(config.available_fiat, [new_currency](const std::string& current_fiat) { return current_fiat == new_currency; })) + { + config.current_fiat = new_currency; + config.possible_currencies[0] = new_currency; + } upgrade_cfg(config); } } // namespace atomic_dex diff --git a/src/atomic.dex.cfg.hpp b/src/atomic.dex.cfg.hpp index 97913bf56a..35d43119f6 100644 --- a/src/atomic.dex.cfg.hpp +++ b/src/atomic.dex.cfg.hpp @@ -22,14 +22,16 @@ namespace atomic_dex { struct cfg { - std::string current_lang{"en"}; - std::string current_fiat; - std::vector available_lang; - std::vector available_fiat; + std::string current_lang{"en"}; + std::string current_currency; + std::string current_fiat; + std::vector available_lang; + std::vector available_fiat; + std::array possible_currencies; }; void from_json(const nlohmann::json& j, cfg& config); void change_lang(cfg& config, const std::string& new_lang); - void change_fiat(cfg& config, const std::string& new_fiat); + void change_currency(cfg& config, const std::string& new_currency); cfg load_cfg(); } // namespace atomic_dex \ No newline at end of file From dd859bde6c29ea416a894645cb0a97747f41d83b Mon Sep 17 00:00:00 2001 From: romanszterg Date: Thu, 9 Jul 2020 13:41:34 +0200 Subject: [PATCH 12/14] feat(currency): add some logs and comments Signed-off-by: romanszterg --- src/atomic.dex.app.cpp | 2 +- src/atomic.dex.cfg.cpp | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/atomic.dex.app.cpp b/src/atomic.dex.app.cpp index 658f937570..9d2c076518 100644 --- a/src/atomic.dex.app.cpp +++ b/src/atomic.dex.app.cpp @@ -463,7 +463,7 @@ namespace atomic_dex { if (current_currency.toStdString() != m_config.current_currency) { - spdlog::info("change lang {} to {}", m_config.current_currency, current_currency.toStdString()); + spdlog::info("change currency {} to {}", m_config.current_currency, current_currency.toStdString()); atomic_dex::change_currency(m_config, current_currency.toStdString()); emit on_fiat_changed(); } diff --git a/src/atomic.dex.cfg.cpp b/src/atomic.dex.cfg.cpp index 75047fdeeb..1474b03f69 100644 --- a/src/atomic.dex.cfg.cpp +++ b/src/atomic.dex.cfg.cpp @@ -81,8 +81,10 @@ namespace atomic_dex { config.current_currency = new_currency; + //! If it's fiat, i set the first element of the possible currencies to the new currency (the new fiat here) and i also set the current fiat if (ranges::any_of(config.available_fiat, [new_currency](const std::string& current_fiat) { return current_fiat == new_currency; })) { + spdlog::info("{} is fiat, setting it as current fiat and possible currencies", new_currency); config.current_fiat = new_currency; config.possible_currencies[0] = new_currency; } From 0ac555b0d5321b0d3636003388adac6c1f6de7cb Mon Sep 17 00:00:00 2001 From: romanszterg Date: Thu, 9 Jul 2020 13:53:59 +0200 Subject: [PATCH 13/14] feat(currency): change fiat to current_currency Signed-off-by: romanszterg --- src/atomic.dex.app.cpp | 2 +- src/atomic.dex.app.hpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/atomic.dex.app.cpp b/src/atomic.dex.app.cpp index 9d2c076518..562b2fba40 100644 --- a/src/atomic.dex.app.cpp +++ b/src/atomic.dex.app.cpp @@ -465,7 +465,7 @@ namespace atomic_dex { spdlog::info("change currency {} to {}", m_config.current_currency, current_currency.toStdString()); atomic_dex::change_currency(m_config, current_currency.toStdString()); - emit on_fiat_changed(); + emit on_currency_changed(); } } diff --git a/src/atomic.dex.app.hpp b/src/atomic.dex.app.hpp index 5046fa026d..9684556c0b 100644 --- a/src/atomic.dex.app.hpp +++ b/src/atomic.dex.app.hpp @@ -48,7 +48,7 @@ namespace atomic_dex Q_PROPERTY(QList enabled_coins READ get_enabled_coins NOTIFY enabledCoinsChanged) Q_PROPERTY(QList enableable_coins READ get_enableable_coins NOTIFY enableableCoinsChanged) Q_PROPERTY(QObject* current_coin_info READ get_current_coin_info NOTIFY coinInfoChanged) - Q_PROPERTY(QString fiat READ get_current_currency WRITE set_current_currency NOTIFY on_fiat_changed) + Q_PROPERTY(QString current_currency READ get_current_currency WRITE set_current_currency NOTIFY on_currency_changed) // Q_PROPERTY(QString second_fiat READ get_second_current_fiat WRITE set_second_current_fiat NOTIFY on_second_fiat_changed) Q_PROPERTY(QString lang READ get_current_lang WRITE set_current_lang NOTIFY on_lang_changed) Q_PROPERTY(QString wallet_default_name READ get_wallet_default_name WRITE set_wallet_default_name NOTIFY on_wallet_default_name_changed) @@ -191,7 +191,7 @@ namespace atomic_dex void enabledCoinsChanged(); void enableableCoinsChanged(); void coinInfoChanged(); - void on_fiat_changed(); + void on_currency_changed(); void on_second_fiat_changed(); void on_lang_changed(); void lang_changed(); From bb136f71cf7288b72fd7be283d8440eb92f4a073 Mon Sep 17 00:00:00 2001 From: naezith Date: Thu, 9 Jul 2020 19:25:27 +0300 Subject: [PATCH 14/14] feat(gui): toggle only the selected fiat among other coins --- atomic_qt_design/qml/Constants/API.qml | 3 ++- atomic_qt_design/qml/Portfolio/Portfolio.qml | 20 +++++++++---------- atomic_qt_design/qml/Settings/Settings.qml | 15 ++------------ atomic_qt_design/qml/Wallet/Main.qml | 8 ++++---- .../qml/Wallet/TransactionDetailsModal.qml | 2 +- atomic_qt_design/qml/Wallet/Transactions.qml | 2 +- 6 files changed, 20 insertions(+), 30 deletions(-) diff --git a/atomic_qt_design/qml/Constants/API.qml b/atomic_qt_design/qml/Constants/API.qml index 893a158c5e..71528cfd9b 100644 --- a/atomic_qt_design/qml/Constants/API.qml +++ b/atomic_qt_design/qml/Constants/API.qml @@ -28,8 +28,9 @@ QtObject { balance_fiat_all: "12345678.90", - fiat: "EUR", + current_currency: "EUR", get_available_fiats: () => ["USD", "EUR"], + get_available_currencies: () => ["EUR", "BTC", "KMD"], lang: "en", get_available_langs: () => ["en", "fr", "tr"], diff --git a/atomic_qt_design/qml/Portfolio/Portfolio.qml b/atomic_qt_design/qml/Portfolio/Portfolio.qml index f821aca1e0..26aedf4c63 100644 --- a/atomic_qt_design/qml/Portfolio/Portfolio.qml +++ b/atomic_qt_design/qml/Portfolio/Portfolio.qml @@ -34,7 +34,7 @@ ColumnLayout { } function getColor(data) { - const fiat = API.get().fiat + const fiat = API.get().current_currency if(General.validFiatRates(data, fiat) && data.rates[fiat].percent_change_24h !== 0) return data.rates[fiat].percent_change_24h > 0 ? Style.colorGreen : Style.colorRed @@ -94,7 +94,7 @@ ColumnLayout { DefaultText { Layout.alignment: Qt.AlignHCenter Layout.bottomMargin: 30 - text_value: API.get().empty_string + (General.formatFiat("", API.get().balance_fiat_all, API.get().fiat)) + text_value: API.get().empty_string + (General.formatFiat("", API.get().balance_fiat_all, API.get().current_currency)) font.pixelSize: Style.textSize4 } } @@ -103,12 +103,12 @@ ColumnLayout { anchors.fill: top_layout onClicked: { - const current_fiat = API.get().fiat - const available_fiats = API.get().get_available_fiats() + const current_fiat = API.get().current_currency + const available_fiats = API.get().get_available_currencies() const current_index = available_fiats.indexOf(current_fiat) const next_index = (current_index + 1) % available_fiats.length const next_fiat = available_fiats[next_index] - API.get().fiat = next_fiat + API.get().current_currency = next_fiat } } @@ -283,8 +283,8 @@ ColumnLayout { case sort_by_balance: return (parseFloat(b.balance) - parseFloat(a.balance)) * order case sort_by_trend: return (parseFloat(b.price) - parseFloat(a.price)) * order case sort_by_change: - val_a = General.validFiatRates(a, API.get().fiat) ? a.rates[API.get().fiat].percent_change_24h : -9999999 - val_b = General.validFiatRates(b, API.get().fiat) ? b.rates[API.get().fiat].percent_change_24h : -9999999 + val_a = General.validFiatRates(a, API.get().current_currency) ? a.rates[API.get().current_currency].percent_change_24h : -9999999 + val_b = General.validFiatRates(b, API.get().current_currency) ? b.rates[API.get().current_currency].percent_change_24h : -9999999 return (val_b - val_a) * order } @@ -372,7 +372,7 @@ ColumnLayout { anchors.left: balance_ticker.right anchors.leftMargin: 10 - text_value: API.get().empty_string + ("(" + General.formatFiat('', model.modelData.balance_fiat, API.get().fiat) + ")") + text_value: API.get().empty_string + ("(" + General.formatFiat('', model.modelData.balance_fiat, API.get().current_currency) + ")") color: Style.colorWhite5 anchors.verticalCenter: parent.verticalCenter } @@ -382,7 +382,7 @@ ColumnLayout { anchors.right: parent.right anchors.rightMargin: change_24h_header.anchors.rightMargin - text_value: API.get().empty_string + (General.validFiatRates(model.modelData, API.get().fiat) ? General.formatPercent(model.modelData.rates[API.get().fiat].percent_change_24h) : '-') + text_value: API.get().empty_string + (General.validFiatRates(model.modelData, API.get().current_currency) ? General.formatPercent(model.modelData.rates[API.get().current_currency].percent_change_24h) : '-') color: getColor(model.modelData) anchors.verticalCenter: parent.verticalCenter } @@ -392,7 +392,7 @@ ColumnLayout { anchors.right: parent.right anchors.rightMargin: price_header.anchors.rightMargin - text_value: API.get().empty_string + (General.formatFiat('', model.modelData.price, API.get().fiat)) + text_value: API.get().empty_string + (General.formatFiat('', model.modelData.price, API.get().current_currency)) color: Style.colorThemeDarkLight anchors.verticalCenter: parent.verticalCenter } diff --git a/atomic_qt_design/qml/Settings/Settings.qml b/atomic_qt_design/qml/Settings/Settings.qml index bcb668bc6f..9b65977cc9 100644 --- a/atomic_qt_design/qml/Settings/Settings.qml +++ b/atomic_qt_design/qml/Settings/Settings.qml @@ -23,7 +23,6 @@ Item { property string mm2_version: '' property var fiats: API.get().get_available_fiats() - property string api_fiat: API.get().fiat InnerBackground { id: layout_background @@ -46,22 +45,12 @@ Item { property bool initialized: false field.onCurrentIndexChanged: { - if(initialized) API.get().fiat = fiats[field.currentIndex] + if(initialized) API.get().current_currency = fiats[field.currentIndex] } Component.onCompleted: { - field.currentIndex = fiats.indexOf(API.get().fiat) + field.currentIndex = fiats.indexOf(API.get().current_currency) initialized = true } - - Connections { - target: root - - function onApi_fiatChanged() { - const target_index = fiats.indexOf(api_fiat) - if(combo_fiat.field.currentIndex !== target_index) - combo_fiat.field.currentIndex = target_index - } - } } Languages { diff --git a/atomic_qt_design/qml/Wallet/Main.qml b/atomic_qt_design/qml/Wallet/Main.qml index 431652de80..3ad85152af 100644 --- a/atomic_qt_design/qml/Wallet/Main.qml +++ b/atomic_qt_design/qml/Wallet/Main.qml @@ -91,7 +91,7 @@ Item { } DefaultText { - text_value: API.get().empty_string + (General.formatFiat("", API.get().current_coin_info.fiat_amount, API.get().fiat)) + text_value: API.get().empty_string + (General.formatFiat("", API.get().current_coin_info.current_currency_amount, API.get().current_currency)) Layout.alignment: Qt.AlignLeft font.pixelSize: name.font.pixelSize } @@ -121,7 +121,7 @@ Item { const c = General.getCoin(portfolio_coins, API.get().current_coin_info.ticker) if(c === undefined) return "-" - return API.get().empty_string + (General.formatFiat('', c.price, API.get().fiat)) + return API.get().empty_string + (General.formatFiat('', c.price, API.get().current_currency)) } Layout.alignment: Qt.AlignLeft @@ -143,7 +143,7 @@ Item { DefaultText { text_value: { const c = General.getCoin(portfolio_coins, API.get().current_coin_info.ticker) - const fiat = API.get().fiat + const fiat = API.get().current_currency if(!General.validFiatRates(c, fiat)) return "-" return API.get().empty_string + (General.formatPercent(c.rates[fiat].percent_change_24h)) @@ -154,7 +154,7 @@ Item { const c = General.getCoin(portfolio_coins, API.get().current_coin_info.ticker) const def_color = Style.colorWhite4 - const fiat = API.get().fiat + const fiat = API.get().current_currency if(!General.validFiatRates(c, fiat)) return def_color const v = parseFloat(c.rates[fiat].percent_change_24h) diff --git a/atomic_qt_design/qml/Wallet/TransactionDetailsModal.qml b/atomic_qt_design/qml/Wallet/TransactionDetailsModal.qml index 6c21b823aa..013fe34883 100644 --- a/atomic_qt_design/qml/Wallet/TransactionDetailsModal.qml +++ b/atomic_qt_design/qml/Wallet/TransactionDetailsModal.qml @@ -24,7 +24,7 @@ DefaultModal { // Amount TextWithTitle { title: API.get().empty_string + (qsTr("Amount")) - text: API.get().empty_string + (General.formatCrypto(details.received, details.amount, API.get().current_coin_info.ticker, details.amount_fiat, API.get().fiat)) + text: API.get().empty_string + (General.formatCrypto(details.received, details.amount, API.get().current_coin_info.ticker, details.amount_fiat, API.get().current_currency)) value_color: details.received ? Style.colorGreen : Style.colorRed } diff --git a/atomic_qt_design/qml/Wallet/Transactions.qml b/atomic_qt_design/qml/Wallet/Transactions.qml index f4d0364691..bf6f9d1857 100644 --- a/atomic_qt_design/qml/Wallet/Transactions.qml +++ b/atomic_qt_design/qml/Wallet/Transactions.qml @@ -68,7 +68,7 @@ DefaultListView { // Fiat DefaultText { - text_value: API.get().empty_string + (General.formatFiat(model.modelData.received, model.modelData.amount_fiat, API.get().fiat)) + text_value: API.get().empty_string + (General.formatFiat(model.modelData.received, model.modelData.amount_fiat, API.get().current_currency)) font.pixelSize: description.font.pixelSize anchors.verticalCenter: parent.verticalCenter anchors.left: parent.left