feat(mining): left pool card (Manual/Auto, metrics, scrollable pool list)

Split the pool-mode hashrate card into a 25%-width left card + 75% chart so the
Manual/Auto toggle and pool metrics no longer reflow the tab:
- left card: Manual|Auto toggle (with tooltips), a Local/Pool/Shares/Uptime
  metric stack, and a fixed-height scrolling pool list — rows click-to-select in
  Manual (reusing the existing save+restart path) and show a "mining here" dot in
  Auto. Fixed height keeps the card constant as pools are added.
- mode-toggle row: keep the suggested-pools dropdown + auto-mode URL disable;
  the toggle and pool list moved into the card.
- mining_controls: show the installed/running miner version ("Current: …")
  before and during mining instead of "none".

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-01 14:35:33 -05:00
parent 5c490c8d53
commit 1a00ec3359
5 changed files with 532 additions and 261 deletions

View File

@@ -528,7 +528,18 @@ void RenderMiningControls(App* app, const WalletState& state, const MiningInfo&
// --- Miner update: "Update <latest>" button + current version (left of benchmark) ---
if (s_pool_mode && !benchRunning) {
const std::string curVer = app->settings()->getXmrigVersion();
// "Current" prefers the live version reported by the running miner (so a
// bundled miner with no persisted release tag still shows a version).
// Remembered for the session so it persists after the miner stops; falls
// back to the persisted release tag (set by the updater), else "none".
static std::string s_live_miner_ver;
if (!state.pool_mining.version.empty())
s_live_miner_ver = state.pool_mining.version;
// Live running version → detected installed version (before mining) →
// persisted release tag (updater) → "none".
std::string curVer = s_live_miner_ver;
if (curVer.empty()) curVer = app->poolMiningInstalledVersion();
if (curVer.empty()) curVer = app->settings()->getXmrigVersion();
char xbtn[64];
if (!s_xmrig_latest_tag.empty())
snprintf(xbtn, sizeof(xbtn), "%s %s", TR("xmrig_update_short"), s_xmrig_latest_tag.c_str());