feat(panel-v3): integración ECOIN — daemon, wallet info y GUI

- Detección de ecoind via JSON-RPC (puerto 7474, lee ~/.ecoin/ecoin.conf)
- Botones INICIAR/DETENER/ABRIR GUI/VER INFO en pestaña ECOIN
- ABRIR GUI para ecoind antes de lanzar ecoin-qt (no pueden coexistir)
- Compilación automática de ecoin-qt con qmake si no está compilado
- Grid en tiempo real: balance ECO, bloques, conexiones, wallet, daemon
- ecoin_rpc() helper para llamadas JSON-RPC al daemon
- _start_ecoin/_stop_ecoin/_open_ecoin_gui/_ecoin_info en panel.py

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
SITO 2026-03-30 20:13:32 +02:00
parent 68b3ceff8d
commit fe030f2066
7 changed files with 235 additions and 35 deletions

View file

@ -59,27 +59,38 @@ function updateStatus(data) {
document.getElementById('globalDot').dataset.state = state;
// --- ECOIN ---
const eCard = document.getElementById('ecoinCard');
const estate = data.ecoin_installed ? 'running' : 'unknown';
eCard.dataset.state = estate;
const eCard = document.getElementById('ecoinCard');
eCard.dataset.state = data.ecoin_running ? 'running' : (data.ecoin_installed ? 'stopped' : 'unknown');
if (data.ecoin_installed) {
document.getElementById('ecoinState').textContent = 'COMPILADO';
document.getElementById('ecoinSub').textContent = 'wallet ECOIN disponible';
_btn('btnEGui', false);
_btn('btnEWallet', false);
_btn('btnEConnect', false);
if (data.ecoin_running) {
document.getElementById('ecoinState').textContent = 'ACTIVO';
document.getElementById('ecoinSub').textContent = 'daemon corriendo (headless)';
_btn('btnEStart', true);
_btn('btnEStop', false);
_btn('btnEGui', false);
_btn('btnEInfo', false);
} else if (data.ecoin_installed) {
document.getElementById('ecoinState').textContent = 'INSTALADO';
document.getElementById('ecoinSub').textContent = 'daemon detenido';
_btn('btnEStart', false);
_btn('btnEStop', true);
_btn('btnEGui', false);
_btn('btnEInfo', true);
} else {
document.getElementById('ecoinState').textContent = 'NO INSTALADO';
document.getElementById('ecoinSub').textContent = 'instala ECOIN para comenzar';
_btn('btnEGui', true);
_btn('btnEWallet', true);
_btn('btnEConnect', true);
_btn('btnEStart', true);
_btn('btnEStop', true);
_btn('btnEGui', true);
_btn('btnEInfo', true);
}
document.getElementById('eWallet').textContent = data.ecoin_wallet ? 'Si' : 'No';
document.getElementById('eQt').textContent = data.ecoin_qt ? 'Si' : 'No';
document.getElementById('eDaemon').textContent = data.ecoin_daemon ? 'Si' : 'No';
// Info grid ecoin
document.getElementById('eBalance').textContent = data.ecoin_balance != null ? data.ecoin_balance + ' ECO' : '—';
document.getElementById('eBlocks').textContent = data.ecoin_blocks != null ? data.ecoin_blocks : '—';
document.getElementById('eConns').textContent = data.ecoin_connections != null ? data.ecoin_connections : '—';
document.getElementById('eWallet').textContent = data.ecoin_wallet ? 'Si' : 'No';
document.getElementById('eDaemon').textContent = data.ecoin_daemon ? 'Si' : 'No';
}
// ── Log (llamado desde Python) ────────────────────────────────

View file

@ -72,19 +72,21 @@
<div class="actions">
<div class="action-row">
<button class="btn primary" id="btnEInstall" onclick="send('ecoin-install')">⬇ INSTALAR</button>
<button class="btn" id="btnEGui" onclick="send('ecoin-gui')" disabled>◈ ABRIR GUI</button>
<button class="btn primary" id="btnEStart" onclick="send('ecoin-start')" disabled>▶ INICIAR</button>
<button class="btn" id="btnEStop" onclick="send('ecoin-stop')" disabled>■ DETENER</button>
</div>
<div class="action-row">
<button class="btn" id="btnEWallet" onclick="send('ecoin-wallet')" disabled>✦ CREAR WALLET</button>
<button class="btn" id="btnEConnect" onclick="send('ecoin-connect')" disabled>⟳ CONECTAR</button>
<button class="btn" id="btnEGui" onclick="send('ecoin-gui')" disabled>◈ ABRIR GUI</button>
<button class="btn" id="btnEInfo" onclick="send('ecoin-info')" disabled>≡ VER INFO</button>
</div>
</div>
<div class="infobox">
<div class="info-row"><span class="ik">WALLET</span> <span class="iv" id="eWallet"></span></div>
<div class="info-row"><span class="ik">ECOIN-QT</span><span class="iv" id="eQt"></span></div>
<div class="info-row"><span class="ik">ECOIND</span> <span class="iv" id="eDaemon"></span></div>
<div class="info-row"><span class="ik">BALANCE</span> <span class="iv" id="eBalance"></span></div>
<div class="info-row"><span class="ik">BLOQUES</span> <span class="iv" id="eBlocks"></span></div>
<div class="info-row"><span class="ik">CONEXIONES</span> <span class="iv" id="eConns"></span></div>
<div class="info-row"><span class="ik">WALLET</span> <span class="iv" id="eWallet"></span></div>
<div class="info-row"><span class="ik">ECOIND</span> <span class="iv" id="eDaemon"></span></div>
</div>
</section>