fix(panel-v3): detección de puerto, botones y limpieza de warnings

- oasis_running() usa ss en lugar de pgrep (evita falsos positivos)
- _start_oasis() lanza oasis.sh en background y espera el puerto
- INSTALAR se deshabilita cuando OASIS ya está instalado/activo
- Corrige DeprecationWarning: override_background_color → CssProvider
- Corrige DeprecationWarning: run_javascript → evaluate_javascript
- Desactiva caché de WebKit, carga por URI directa
- Inspector de WebKit activado para depuración

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
SITO 2026-03-30 12:26:24 +02:00
parent ae79e45c19
commit 67acbf1add
17 changed files with 2692 additions and 0 deletions

102
INSTALLER_V3/ui/index.html Normal file
View file

@ -0,0 +1,102 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>OASIS</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- HEADER -->
<header>
<div class="header-left">
<img src="../oasis-logo.png" class="logo" alt="OASIS">
<div class="header-titles">
<span class="app-title">OASIS</span>
<span class="app-sub">SOLAR NET HUB PANEL</span>
</div>
</div>
<div class="status-dot" id="globalDot" data-state="unknown"></div>
</header>
<!-- TABS -->
<nav class="tabbar">
<button class="tabBtn active" data-tab="oasis" onclick="switchTab('oasis')">OASIS</button>
<button class="tabBtn" data-tab="ecoin" onclick="switchTab('ecoin')">ECOIN</button>
<button class="tabBtn" data-tab="sistema" onclick="switchTab('sistema')">SISTEMA</button>
</nav>
<!-- CONTENIDO -->
<main>
<!-- ── OASIS ── -->
<section class="tab-panel active" id="tab-oasis">
<div class="status-card" id="oasisCard" data-state="unknown">
<div class="card-stripe"></div>
<div class="card-body">
<div class="card-state" id="oasisState">COMPROBANDO</div>
<div class="card-sub" id="oasisSub">iniciando...</div>
</div>
</div>
<div class="actions">
<div class="action-row">
<button class="btn primary" id="btnStart" onclick="send('oasis-start')" disabled>▶ INICIAR</button>
<button class="btn" id="btnStop" onclick="send('oasis-stop')" disabled>■ DETENER</button>
</div>
<div class="action-row">
<button class="btn" id="btnInstall" onclick="send('oasis-install')">⬇ INSTALAR</button>
<button class="btn" id="btnBrowser" onclick="send('oasis-browser')" disabled>◎ ABRIR WEB</button>
</div>
</div>
<div class="infobox">
<div class="info-row"><span class="ik">VERSION</span><span class="iv" id="iVer"></span></div>
<div class="info-row"><span class="ik">NODE.JS</span><span class="iv" id="iNode"></span></div>
<div class="info-row"><span class="ik">RUTA</span> <span class="iv" id="iDir"></span></div>
</div>
</section>
<!-- ── ECOIN ── -->
<section class="tab-panel" id="tab-ecoin">
<div class="status-card" id="ecoinCard" data-state="unknown">
<div class="card-stripe"></div>
<div class="card-body">
<div class="card-state" id="ecoinState">COMPROBANDO</div>
<div class="card-sub" id="ecoinSub">iniciando...</div>
</div>
</div>
<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>
</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>
</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>
</section>
<!-- ── SISTEMA ── -->
<section class="tab-panel" id="tab-sistema">
<div class="log-header">LOG DE ACTIVIDAD</div>
<div class="log-area" id="logArea"></div>
<button class="btn btn-clear" onclick="clearLog()">LIMPIAR LOG</button>
</section>
</main>
<script src="app.js"></script>
</body>
</html>