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:
+16
-24
@@ -267,6 +267,7 @@ function switchTab(name) {
|
||||
btn.setAttribute("aria-selected", String(active));
|
||||
});
|
||||
if (name === "models") renderModelList();
|
||||
if (name === "trilhas") trilhasAoAbrir();
|
||||
if (name === "projeto") projetoListarSequencias();
|
||||
if (name === "silence") { syncTranscribeModelSelect(); syncLanguageInfo(); renderizarTiposDeVideoParaEdicao(); }
|
||||
if (name === "settings") renderEditorPersonalities();
|
||||
@@ -1149,6 +1150,7 @@ var scannerCancelSolicitado = false;
|
||||
var SCANNER_ENGINE_SCRIPT = "/Volumes/Merongo/SISTEMAS/GENIAL SISTEMAS/Jhonny/code/engine/executar_scanner.py";
|
||||
var TRILHAS_ENGINE_SCRIPT = "/Volumes/Merongo/SISTEMAS/GENIAL SISTEMAS/Jhonny/code/engine/analisar_trilhas.py";
|
||||
var TRILHAS_BANCO_PATH = "";
|
||||
var TRILHAS_MODELOS_PATH = "";
|
||||
var TRILHAS_CONFIG_KEY = "mcp_trilhas_config_v1";
|
||||
|
||||
// `path` e `os` são carregados mais abaixo, junto com o runtime Node do CEP.
|
||||
@@ -1506,7 +1508,8 @@ var path = nodeRequire("path");
|
||||
var os = nodeRequire("os");
|
||||
var https = nodeRequire("https");
|
||||
var childProcess = nodeRequire("child_process");
|
||||
TRILHAS_BANCO_PATH = path.join(os.homedir(), ".premiere-mcp", "analises.db");
|
||||
TRILHAS_BANCO_PATH = path.join(os.homedir(), ".premiere-mcp", "trilhas.db");
|
||||
TRILHAS_MODELOS_PATH = path.join(os.homedir(), ".premiere-mcp", "modelos-essentia");
|
||||
function defaultBridgeDirectory() {
|
||||
try {
|
||||
var nodeProcess = nodeRequire("process");
|
||||
@@ -2312,7 +2315,8 @@ function silenceLocalizarMidiaNoRelatorio(caminhoDoRelatorio, dadosDoRelatorio)
|
||||
var dadosDoAudio = JSON.parse(fs.readFileSync(path.join(path.dirname(caminhoDoRelatorio), arquivosDeAudio[indice]), "utf-8"));
|
||||
var clipes = dadosDoAudio.faixa && dadosDoAudio.faixa.clipes || [];
|
||||
for (var indiceDoClipe = 0; indiceDoClipe < clipes.length; indiceDoClipe++) {
|
||||
if (clipes[indiceDoClipe].sourceFile) return clipes[indiceDoClipe].sourceFile;
|
||||
var arquivoDoClipe = clipes[indiceDoClipe].sourceFile || clipes[indiceDoClipe].arquivo || clipes[indiceDoClipe].arquivo_original;
|
||||
if (arquivoDoClipe) return arquivoDoClipe;
|
||||
}
|
||||
} catch (_) {}
|
||||
}
|
||||
@@ -2875,16 +2879,14 @@ function trilhasCarregarConfiguracao() {
|
||||
try { return JSON.parse(localStorage.getItem(TRILHAS_CONFIG_KEY) || "{}") || {}; } catch (_) { return {}; }
|
||||
}
|
||||
|
||||
function trilhasSalvarConfiguracao(pasta, modelos) {
|
||||
localStorage.setItem(TRILHAS_CONFIG_KEY, JSON.stringify({ pasta: pasta, modelos: modelos || "" }));
|
||||
function trilhasSalvarConfiguracao(pasta) {
|
||||
localStorage.setItem(TRILHAS_CONFIG_KEY, JSON.stringify({ pasta: pasta }));
|
||||
}
|
||||
|
||||
function trilhasAoAbrir() {
|
||||
var configuracao = trilhasCarregarConfiguracao();
|
||||
var pasta = document.getElementById("trilhasPasta");
|
||||
var modelos = document.getElementById("trilhasModelos");
|
||||
if (pasta && configuracao.pasta) pasta.value = configuracao.pasta;
|
||||
if (modelos && configuracao.modelos) modelos.value = configuracao.modelos;
|
||||
trilhasAtualizarEstado();
|
||||
}
|
||||
|
||||
@@ -2896,23 +2898,11 @@ function trilhasSelecionarPasta() {
|
||||
var escolhida = resultado && resultado.data && resultado.data.length ? toFsPath(resultado.data[0]) : "";
|
||||
if (!escolhida) return;
|
||||
document.getElementById("trilhasPasta").value = escolhida;
|
||||
trilhasSalvarConfiguracao(escolhida, document.getElementById("trilhasModelos").value.trim());
|
||||
trilhasSalvarConfiguracao(escolhida);
|
||||
trilhasAtualizarEstado();
|
||||
} catch (erro) { showToast("err", erro.message); }
|
||||
}
|
||||
|
||||
function trilhasSelecionarModelos() {
|
||||
try {
|
||||
var api = window.cep && window.cep.fs;
|
||||
if (!api || typeof api.showOpenDialog !== "function") throw new Error("Seletor de pastas indisponível.");
|
||||
var resultado = api.showOpenDialog(false, true, "Escolha a pasta dos modelos Essentia", "", []);
|
||||
var escolhida = resultado && resultado.data && resultado.data.length ? toFsPath(resultado.data[0]) : "";
|
||||
if (!escolhida) return;
|
||||
document.getElementById("trilhasModelos").value = escolhida;
|
||||
trilhasSalvarConfiguracao(document.getElementById("trilhasPasta").value.trim(), escolhida);
|
||||
} catch (erro) { showToast("err", erro.message); }
|
||||
}
|
||||
|
||||
function trilhasAtualizarEstado() {
|
||||
var pasta = document.getElementById("trilhasPasta");
|
||||
var botao = document.getElementById("btnTrilhasAnalisar");
|
||||
@@ -2946,17 +2936,19 @@ function trilhasAtualizarEvento(evento) {
|
||||
if (!item) return;
|
||||
var estado = evento.evento === "trilha_concluida" ? "concluida" : evento.evento === "trilha_com_erro" ? "erro" : "analisando";
|
||||
item.setAttribute("data-state", estado);
|
||||
item.querySelector("span:not(.trilha-check)").textContent = estado === "concluida" ? "Analisada" : estado === "erro" ? "Erro: " + (evento.erro || "falha") : "Analisando…";
|
||||
if (typeof evento.percentual === "number") item.querySelector(".progress-fill").style.width = evento.percentual + "%";
|
||||
item.querySelector(".trilha-info > span").textContent = estado === "concluida" ? "Analisada" : estado === "erro" ? "Erro: " + (evento.erro || "falha") : "Analisando…";
|
||||
var faixa = item.querySelector(".progress-track");
|
||||
var preenchimento = item.querySelector(".progress-fill");
|
||||
faixa.setAttribute("data-mode", estado === "analisando" ? "indeterminate" : "normal");
|
||||
preenchimento.style.width = estado === "concluida" ? "100%" : estado === "erro" ? "100%" : "0%";
|
||||
}
|
||||
|
||||
function trilhasAnalisar() {
|
||||
var pasta = document.getElementById("trilhasPasta").value.trim();
|
||||
var modelos = document.getElementById("trilhasModelos").value.trim();
|
||||
if (!pasta || !fs.existsSync(pasta) || !fs.statSync(pasta).isDirectory()) { showToast("err", "Selecione uma pasta existente."); return; }
|
||||
trilhasSalvarConfiguracao(pasta, modelos);
|
||||
trilhasSalvarConfiguracao(pasta);
|
||||
var argumentos = [TRILHAS_ENGINE_SCRIPT, pasta, "--banco", TRILHAS_BANCO_PATH];
|
||||
if (modelos) argumentos.push("--modelos", modelos);
|
||||
argumentos.push("--modelos", TRILHAS_MODELOS_PATH);
|
||||
setBusy("btnTrilhasAnalisar", true);
|
||||
taskStart("Analisando trilhas musicais", "Descobrindo arquivos", function (evento) { trilhasAtualizarEvento(evento); }, function () { if (trilhasProcesso) trilhasProcesso.kill("SIGTERM"); });
|
||||
trilhasProcesso = runStreamed(SCANNER_PYTHON_BIN, argumentos, function () {}, function (codigo, erro) {
|
||||
|
||||
Reference in New Issue
Block a user