fix: Windows identity, async address creation, mining UI, and chart artifacts
Windows identity: - Add VERSIONINFO resource (.rc) with ObsidianDragon file description - Embed application manifest for DPI awareness and shell identity - Patch libwinpthread/libpthread to remove competing VERSIONINFO - Set AppUserModelID and HWND property store to override Task Manager cache - Link patched pthread libs to eliminate "POSIX WinThreads" description Address creation (+New button): - Move z_getnewaddress/getnewaddress off UI thread to async worker - Inject new address into state immediately for instant UI selection - Trigger background refresh for balance updates Mining tab: - Add pool mining dropdown with saved URLs/workers and bookmarks - Add solo mining log panel from daemon output with chart/log toggle - Fix toggle button cursor (render after InputTextMultiline) - Auto-restart miner on pool config change - Migrate default pool URL to include stratum port Transactions: - Sort pending (0-conf) transactions to top of history - Fall back to timereceived when timestamp is missing Shutdown: - Replace blocking sleep_for calls with 100ms polling loops - Check shutting_down_ flag throughout daemon restart/bootstrap flows - Reduce daemon stop timeout from 30s to 10s Other: - Fix market chart fill artifact (single concave polygon vs per-segment quads) - Add bootstrap checksum verification state display - Rename daemon client identifier to ObsidianDragon
This commit is contained in:
@@ -4,8 +4,10 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <algorithm>
|
||||
#include <string>
|
||||
#include <set>
|
||||
#include <vector>
|
||||
|
||||
namespace dragonx {
|
||||
namespace config {
|
||||
@@ -206,6 +208,31 @@ public:
|
||||
bool getPoolMode() const { return pool_mode_; }
|
||||
void setPoolMode(bool v) { pool_mode_ = v; }
|
||||
|
||||
// Saved pool URLs (user-managed favorites dropdown)
|
||||
const std::vector<std::string>& getSavedPoolUrls() const { return saved_pool_urls_; }
|
||||
void addSavedPoolUrl(const std::string& url) {
|
||||
// Don't add duplicates
|
||||
for (const auto& u : saved_pool_urls_) if (u == url) return;
|
||||
saved_pool_urls_.push_back(url);
|
||||
}
|
||||
void removeSavedPoolUrl(const std::string& url) {
|
||||
saved_pool_urls_.erase(
|
||||
std::remove(saved_pool_urls_.begin(), saved_pool_urls_.end(), url),
|
||||
saved_pool_urls_.end());
|
||||
}
|
||||
|
||||
// Saved pool worker addresses (user-managed favorites dropdown)
|
||||
const std::vector<std::string>& getSavedPoolWorkers() const { return saved_pool_workers_; }
|
||||
void addSavedPoolWorker(const std::string& addr) {
|
||||
for (const auto& a : saved_pool_workers_) if (a == addr) return;
|
||||
saved_pool_workers_.push_back(addr);
|
||||
}
|
||||
void removeSavedPoolWorker(const std::string& addr) {
|
||||
saved_pool_workers_.erase(
|
||||
std::remove(saved_pool_workers_.begin(), saved_pool_workers_.end(), addr),
|
||||
saved_pool_workers_.end());
|
||||
}
|
||||
|
||||
// Font scale (user accessibility setting, 1.0–1.5)
|
||||
float getFontScale() const { return font_scale_; }
|
||||
void setFontScale(float v) { font_scale_ = std::max(1.0f, std::min(1.5f, v)); }
|
||||
@@ -255,13 +282,15 @@ private:
|
||||
std::string selected_pair_ = "DRGX/BTC";
|
||||
|
||||
// Pool mining
|
||||
std::string pool_url_ = "pool.dragonx.is";
|
||||
std::string pool_url_ = "pool.dragonx.is:3433";
|
||||
std::string pool_algo_ = "rx/hush";
|
||||
std::string pool_worker_ = "x";
|
||||
int pool_threads_ = 0;
|
||||
bool pool_tls_ = false;
|
||||
bool pool_hugepages_ = true;
|
||||
bool pool_mode_ = false; // false=solo, true=pool
|
||||
std::vector<std::string> saved_pool_urls_; // user-saved pool URL favorites
|
||||
std::vector<std::string> saved_pool_workers_; // user-saved worker address favorites
|
||||
|
||||
// Font scale (user accessibility, 1.0–3.0; 1.0 = default)
|
||||
float font_scale_ = 1.0f;
|
||||
|
||||
Reference in New Issue
Block a user