feat: criada a guia Trilhas com processamento em lote e progresso

- criada a guia Trilhas com processamento em lote e progresso por música
- simplificada a guia Trilhas para ocultar a configuração interna dos modelos

Resumo:
- 12 arquivos alterados
- 1 novos
- 11 modificados
- 0 removidos

 11 files changed, 173 insertions(+), 41 deletions(-)

Arquivos:
  - .jhonny/analises.db
  - code/cep-plugin/index.html
  - code/cep-plugin/main.js
  - code/cep-plugin/styles.css
  - code/engine/analisar_trilhas.py
  - code/engine/carregar_plano_de_edicao.py
  - code/engine/executar_scanner.py
  - code/engine/persistencia/__init__.py
  - code/engine/persistencia/repositorio_de_trilhas.py
  - code/engine/testes/test_carregar_plano_de_edicao.py
  - code/engine/testes/test_executar_scanner.py
  - code/engine/testes/test_repositorio_de_trilhas.py
This commit is contained in:
João Henrique
2026-09-10 13:59:25 -04:00
parent b1272a5e6e
commit 4c04365934
12 changed files with 236 additions and 41 deletions
+20
View File
@@ -252,6 +252,26 @@ h1, h2, h3 { margin: 0; }
.task-dock[data-result="ok"] .progress-fill { background: var(--green); }
.task-dock[data-result="err"] .progress-fill { background: var(--red); }
/* --------------------- Catálogo de trilhas ------------------------------- */
.trilhas-lista { display: grid; gap: 7px; margin-top: 10px; }
.trilha-item { display: flex; align-items: flex-start; gap: 9px; padding: 9px; border: 1px solid var(--border); border-radius: 6px; background: var(--surface-deep); }
.trilha-check { display: inline-flex; align-items: center; justify-content: center; flex: 0 0 auto; width: 16px; height: 16px; margin-top: 1px; border: 1px solid var(--text-muted); border-radius: 50%; color: #10240f; font-size: 10px; font-weight: 800; }
.trilha-info { min-width: 0; flex: 1; }
.trilha-info strong { display: block; overflow: hidden; color: var(--text); font-size: 10.5px; text-overflow: ellipsis; white-space: nowrap; }
.trilha-info > span { display: block; margin: 3px 0 6px; overflow: hidden; color: var(--text-muted); font-size: 9px; text-overflow: ellipsis; white-space: nowrap; }
.trilha-item .progress-track { height: 4px; }
.trilha-item[data-state="analisando"] { border-color: rgba(155, 108, 255, .45); }
.trilha-item[data-state="analisando"] .progress-track[data-mode="indeterminate"] .progress-fill { background: var(--violet); }
.trilha-item[data-state="concluida"] { border-color: rgba(112, 217, 135, .35); }
.trilha-item[data-state="concluida"] .trilha-check { border-color: var(--green); background: var(--green); }
.trilha-item[data-state="concluida"] .trilha-check::after { content: "✓"; }
.trilha-item[data-state="concluida"] .trilha-info > span { color: var(--green); }
.trilha-item[data-state="concluida"] .progress-fill { background: var(--green); }
.trilha-item[data-state="erro"] { border-color: rgba(255, 101, 101, .35); }
.trilha-item[data-state="erro"] .trilha-check { border-color: var(--red); }
.trilha-item[data-state="erro"] .trilha-info > span { color: #ffb0b0; }
.trilha-item[data-state="erro"] .progress-fill { background: var(--red); }
.task-foot { display: flex; align-items: baseline; gap: 8px; margin-top: 7px; }
.task-stage { flex: 1; min-width: 0; overflow: hidden; color: var(--text-secondary); font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }
.task-pct { flex: 0 0 auto; color: var(--text); font: 600 10px var(--font-mono); }