From 1fb0e33f57a30ca50069ae8a69ffcb634eb0d069 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Henrique?= Date: Thu, 10 Sep 2026 09:44:25 -0400 Subject: [PATCH] feat: aprimorado o preview de falantes na tela Refinar para reprod MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - aprimorado o preview de falantes na tela Refinar para reproduzir os trechos do vídeo - corrigida a leitura dos timestamps do preview de falantes usando os clipes do banco - alterado o preview de falantes para reproduzir diretamente na timeline ativa do Premiere - evitadas reinicializações concorrentes durante o monitoramento do preview na timeline Resumo: - 2 arquivos alterados - 0 novos - 2 modificados - 0 removidos 2 files changed, 49 insertions(+), 24 deletions(-) Arquivos: - .jhonny/analises.db - code/cep-plugin/main.js --- .jhonny/analises.db | Bin 1069056 -> 1069056 bytes code/cep-plugin/main.js | 75 ++++++++++++++++++++++++++-------------- 2 files changed, 50 insertions(+), 25 deletions(-) diff --git a/.jhonny/analises.db b/.jhonny/analises.db index 46f530281790c1dd5956e55657402a4f73ada769..f3e0b50315e59265fecbae6e861612006bc0faa7 100644 GIT binary patch delta 83 zcmWN=IT3(B6hy(l-1iYPbgG@=!q=x>IwewpeQmH+?% delta 83 zcmWN=ITe5~6h*-w_I)X+ut0}`D8Ry%5{lP@gP6b#Vqngh5PgXLT4!(Oax;7X&MaB( fZFl}eIFX1{WFi-ZC`Bb|(TG-bq8Ec0AEtPGX>S(9 diff --git a/code/cep-plugin/main.js b/code/cep-plugin/main.js index 50af95c..60181db 100755 --- a/code/cep-plugin/main.js +++ b/code/cep-plugin/main.js @@ -3072,13 +3072,16 @@ function stopSpeakerAudio() { } speakerAudioPlayer = null; speakerAudioQueue = null; + var haviaPreviewNaTimeline = !!speakerTimelineQueue; speakerTimelineToken += 1; if (speakerTimelinePoll) { - clearInterval(speakerTimelinePoll); + clearTimeout(speakerTimelinePoll); speakerTimelinePoll = null; } speakerTimelineQueue = null; - cs.evalScript("(function(){try{if(typeof qe!==\"undefined\"&&qe.stopPlayback)qe.stopPlayback();return \"ok\";}catch(e){return \"erro:\"+String(e);}}())", function () {}); + if (haviaPreviewNaTimeline) { + cs.evalScript("(function(){try{if(typeof qe!==\"undefined\"&&qe.stopPlayback)qe.stopPlayback();return \"ok\";}catch(e){return \"erro:\"+String(e);}}())", function () {}); + } var videoPreview = document.getElementById("refinarSpeakerPreview"); if (videoPreview) videoPreview.hidden = true; document.querySelectorAll(".speaker-play-button").forEach(function (button) { @@ -3106,7 +3109,14 @@ function toggleSpeakerTimeline(speakerId, button) { showToast("err", "Preview de vídeo indisponível nesta versão do painel."); return; } - speakerTimelineQueue = { speakerId: speakerId, ranges: ranges, index: 0, button: button }; + speakerTimelineQueue = { + speakerId: speakerId, + ranges: ranges, + index: 0, + button: button, + inicioPendente: false, + consultaPendente: false, + }; preview.hidden = false; if (info) info.textContent = "Reproduzindo os trechos de " + speakerId + "."; button.textContent = "■ timeline"; @@ -3116,10 +3126,13 @@ function toggleSpeakerTimeline(speakerId, button) { function iniciarPreviewNaTimeline(token) { if (!speakerTimelineQueue || token !== speakerTimelineToken) return; - var range = speakerTimelineQueue.ranges[speakerTimelineQueue.index]; + var indiceDoTrecho = speakerTimelineQueue.index; + if (speakerTimelineQueue.inicioPendente) return; + var range = speakerTimelineQueue.ranges[indiceDoTrecho]; if (!range) { stopSpeakerAudio(); return; } var inicio = Math.max(0, Number(range.start) - 0.15); var inicioJson = JSON.stringify(inicio); + speakerTimelineQueue.inicioPendente = true; cs.evalScript( "(function(){try{" + "var seq=app.project.activeSequence;" + @@ -3130,7 +3143,8 @@ function iniciarPreviewNaTimeline(token) { "return JSON.stringify({ok:true});" + "}catch(e){return JSON.stringify({ok:false,error:String(e)});}}())", function (raw) { - if (!speakerTimelineQueue || token !== speakerTimelineToken) return; + if (!speakerTimelineQueue || token !== speakerTimelineToken || speakerTimelineQueue.index !== indiceDoTrecho) return; + speakerTimelineQueue.inicioPendente = false; var resultado; try { resultado = JSON.parse(raw); } catch (_) { resultado = { ok: false, error: "Resposta inválida do Premiere." }; } if (!resultado.ok) { @@ -3144,27 +3158,38 @@ function iniciarPreviewNaTimeline(token) { } function monitorarPreviewNaTimeline(token) { - if (speakerTimelinePoll) clearInterval(speakerTimelinePoll); - speakerTimelinePoll = setInterval(function () { - if (!speakerTimelineQueue || token !== speakerTimelineToken) return; - var range = speakerTimelineQueue.ranges[speakerTimelineQueue.index]; - cs.evalScript( - "(function(){try{var seq=app.project.activeSequence;return JSON.stringify({ok:!!seq,position:seq?Number(seq.getPlayerPosition().ticks)/254016000000:0});}catch(e){return JSON.stringify({ok:false,error:String(e)});}}())", - function (raw) { - if (!speakerTimelineQueue || token !== speakerTimelineToken) return; - var resultado; - try { resultado = JSON.parse(raw); } catch (_) { return; } - if (!resultado.ok || Number(resultado.position) >= Number(range.end)) { - speakerTimelineQueue.index += 1; - if (speakerTimelineQueue.index >= speakerTimelineQueue.ranges.length) { - stopSpeakerAudio(); - } else { - iniciarPreviewNaTimeline(token); - } - } + if (!speakerTimelineQueue || token !== speakerTimelineToken || speakerTimelineQueue.consultaPendente) return; + var indiceDoTrecho = speakerTimelineQueue.index; + var range = speakerTimelineQueue.ranges[indiceDoTrecho]; + if (!range) { stopSpeakerAudio(); return; } + speakerTimelineQueue.consultaPendente = true; + cs.evalScript( + "(function(){try{var seq=app.project.activeSequence;return JSON.stringify({ok:!!seq,position:seq?Number(seq.getPlayerPosition().ticks)/254016000000:0});}catch(e){return JSON.stringify({ok:false,error:String(e)});}}())", + function (raw) { + if (!speakerTimelineQueue || token !== speakerTimelineToken || speakerTimelineQueue.index !== indiceDoTrecho) return; + speakerTimelineQueue.consultaPendente = false; + var resultado; + try { resultado = JSON.parse(raw); } catch (_) { resultado = { ok: false, error: "Resposta inválida do Premiere." }; } + if (!resultado.ok) { + stopSpeakerAudio(); + showToast("err", resultado.error || "Não foi possível consultar o playhead da timeline."); + return; } - ); - }, 120); + if (Number(resultado.position) >= Number(range.end)) { + speakerTimelineQueue.index += 1; + if (speakerTimelineQueue.index >= speakerTimelineQueue.ranges.length) { + stopSpeakerAudio(); + } else { + iniciarPreviewNaTimeline(token); + } + return; + } + speakerTimelinePoll = setTimeout(function () { + speakerTimelinePoll = null; + monitorarPreviewNaTimeline(token); + }, 250); + } + ); } function toggleSpeakerAudio(speakerId, button) {