UI/UX: Adiciona campo opcional para colagem manual de transcrição no VideoMind

This commit is contained in:
2026-06-05 22:19:33 +00:00
parent 281005a8bc
commit 3781c848da
2395 changed files with 242184 additions and 20 deletions
+21 -15
View File
@@ -749,7 +749,7 @@ function getYouTubeId(url) {
}
app.post('/api/videomind/analyze', requireAuth, async (req, res) => {
const { url, lines } = req.body;
const { url, lines, pastedTranscript } = req.body;
if (!url) {
return res.status(400).json({ error: 'A URL do vídeo é obrigatória.' });
@@ -785,20 +785,26 @@ app.post('/api/videomind/analyze', requireAuth, async (req, res) => {
let isFallbackMode = false;
let systemNotice = '';
try {
// Tenta obter legenda
const transcriptObj = await YoutubeTranscript.fetchTranscript(videoId);
transcriptText = transcriptObj.map(t => t.text).join(' ');
} catch (transcErr) {
console.warn(`[VideoMind] Erro ao obter legenda para o vídeo ${videoId}:`, transcErr.message);
isFallbackMode = true;
if (transcErr.message && transcErr.message.toLowerCase().includes('disabled')) {
transcriptText = `[Aviso: O autor deste vídeo desativou as legendas ou elas ainda não foram geradas pelo YouTube. Por favor, analise e descreva os objetivos pedagógicos com base estritamente no título do vídeo, canal do autor e no seu vasto conhecimento pedagógico sobre o tema indicado no título]`;
systemNotice = `> ⚠️ **Nota do Sistema**: Este vídeo não possui legendas disponíveis (foram desativadas pelo autor ou ainda não geradas pelo YouTube). A análise e o resumo abaixo foram elaborados a partir do título do vídeo, nome do canal e fundamentação pedagógica correspondente.\n\n`;
} else {
transcriptText = `[Aviso: Devido a restrições de conexão do YouTube, a legenda de áudio não pôde ser lida diretamente. Por favor, analise e descreva os objetivos pedagógicos com base estritamente no título do vídeo, canal do autor e no seu vasto conhecimento pedagógico sobre o tema indicado no título]`;
systemNotice = `> ⚠️ **Nota do Sistema**: Devido a restrições de conexão do YouTube ou indisponibilidade temporária, a transcrição não pôde ser lida. A análise e o resumo abaixo foram elaborados a partir do título do vídeo, canal do autor e fundamentação psicopedagógica correspondente.\n\n`;
if (pastedTranscript && pastedTranscript.trim().length > 10) {
// Se o usuário colou a transcrição, ignorar a extração automática
transcriptText = pastedTranscript.trim();
systemNotice = `> 📝 **Nota do Sistema**: A análise abaixo foi elaborada com base na transcrição manual que você forneceu.\n\n`;
} else {
try {
// Tenta obter legenda
const transcriptObj = await YoutubeTranscript.fetchTranscript(videoId);
transcriptText = transcriptObj.map(t => t.text).join(' ');
} catch (transcErr) {
console.warn(`[VideoMind] Erro ao obter legenda para o vídeo ${videoId}:`, transcErr.message);
isFallbackMode = true;
if (transcErr.message && transcErr.message.toLowerCase().includes('disabled')) {
transcriptText = `[Aviso: O autor deste vídeo desativou as legendas ou elas ainda não foram geradas pelo YouTube. Por favor, analise e descreva os objetivos pedagógicos com base estritamente no título do vídeo, canal do autor e no seu vasto conhecimento pedagógico sobre o tema indicado no título]`;
systemNotice = `> ⚠️ **Nota do Sistema**: Este vídeo não possui legendas disponíveis (foram desativadas pelo autor ou ainda não geradas pelo YouTube). A análise e o resumo abaixo foram elaborados a partir do título do vídeo, nome do canal e fundamentação pedagógica correspondente.\n\n`;
} else {
transcriptText = `[Aviso: Devido a restrições de conexão do YouTube, a legenda de áudio não pôde ser lida diretamente. Por favor, analise e descreva os objetivos pedagógicos com base estritamente no título do vídeo, canal do autor e no seu vasto conhecimento pedagógico sobre o tema indicado no título]`;
systemNotice = `> ⚠️ **Nota do Sistema**: Devido a restrições de conexão do YouTube ou indisponibilidade temporária, a transcrição não pôde ser lida. A análise e o resumo abaixo foram elaborados a partir do título do vídeo, canal do autor e fundamentação psicopedagógica correspondente.\n\n`;
}
}
}