teste upload de sample com mic
Deploy / Deploy (push) Successful in 1m17s Details

This commit is contained in:
JotaChina 2025-12-08 14:31:10 -03:00
parent 0768b85700
commit 6ee78b0cd2
1 changed files with 18 additions and 19 deletions

View File

@ -307,13 +307,11 @@ document.addEventListener('DOMContentLoaded', () => {
let currentFolderObj = manifestData; let currentFolderObj = manifestData;
// === FUNÇÕES DE UTILIDADE === // === FUNÇÕES DE UTILIDADE ===
function removeExtension(filename) { function removeExtension(filename) {
return filename.replace(/\.[^/.]+$/, ""); return filename.replace(/\.[^/.]+$/, "");
} }
// === LÓGICA DO NAVEGADOR DE ARQUIVOS === // === LÓGICA DO NAVEGADOR DE ARQUIVOS ===
function getFolderByPath(pathArray) { function getFolderByPath(pathArray) {
let folder = manifestData; let folder = manifestData;
for (const dir of pathArray) { for (const dir of pathArray) {
@ -415,7 +413,6 @@ document.addEventListener('DOMContentLoaded', () => {
} }
// === LÓGICA DE FILTRAGEM (ROBUSTA) === // === LÓGICA DE FILTRAGEM (ROBUSTA) ===
function filterBySample(sampleName) { function filterBySample(sampleName) {
if (!sampleName) { if (!sampleName) {
filterDisplayName.textContent = "(todos)"; filterDisplayName.textContent = "(todos)";
@ -463,7 +460,6 @@ document.addEventListener('DOMContentLoaded', () => {
if(foundCount > 0) document.getElementById('project-list').scrollIntoView({ behavior: 'smooth' }); if(foundCount > 0) document.getElementById('project-list').scrollIntoView({ behavior: 'smooth' });
} }
// Inicialização
btnHome.onclick = () => navigateTo([]); btnHome.onclick = () => navigateTo([]);
renderBreadcrumbs(); renderBreadcrumbs();
renderBrowser(); renderBrowser();
@ -514,7 +510,7 @@ document.addEventListener('DOMContentLoaded', () => {
document.addEventListener('keydown', (e) => { if (e.key === "Escape") closeModal(); }); document.addEventListener('keydown', (e) => { if (e.key === "Escape") closeModal(); });
// ========================================================== // ==========================================================
// === LÓGICA DE UPLOAD & GRAVAÇÃO (MODIFICADA) === // === LÓGICA DE UPLOAD & GRAVAÇÃO (CORRIGIDA) ===
// ========================================================== // ==========================================================
const uploadModal = document.getElementById('upload-sample-modal'); const uploadModal = document.getElementById('upload-sample-modal');
const btnOpenUpload = document.getElementById('btn-open-upload'); const btnOpenUpload = document.getElementById('btn-open-upload');
@ -543,7 +539,7 @@ document.addEventListener('DOMContentLoaded', () => {
let mediaRecorder = null; let mediaRecorder = null;
let audioChunks = []; let audioChunks = [];
let audioBlob = null; let audioBlob = null;
let activeTab = 'file'; // 'file' or 'mic' let activeTab = 'file';
// Alternância de Abas // Alternância de Abas
function switchTab(mode) { function switchTab(mode) {
@ -553,13 +549,12 @@ document.addEventListener('DOMContentLoaded', () => {
tabMic.classList.remove('is-active'); tabMic.classList.remove('is-active');
sectionFile.classList.remove('is-hidden'); sectionFile.classList.remove('is-hidden');
sectionMic.classList.add('is-hidden'); sectionMic.classList.add('is-hidden');
stopRecordingLogic(); // Garante que parou de gravar stopRecordingLogic();
} else { } else {
tabMic.classList.add('is-active'); tabMic.classList.add('is-active');
tabFile.classList.remove('is-active'); tabFile.classList.remove('is-active');
sectionMic.classList.remove('is-hidden'); sectionMic.classList.remove('is-hidden');
sectionFile.classList.add('is-hidden'); sectionFile.classList.add('is-hidden');
// Sugere nome pro arquivo
if(!recordNameInput.value) recordNameInput.value = "gravacao_" + new Date().toLocaleTimeString().replace(/:/g, '-'); if(!recordNameInput.value) recordNameInput.value = "gravacao_" + new Date().toLocaleTimeString().replace(/:/g, '-');
} }
} }
@ -592,12 +587,13 @@ document.addEventListener('DOMContentLoaded', () => {
}; };
mediaRecorder.onstop = () => { mediaRecorder.onstop = () => {
audioBlob = new Blob(audioChunks, { type: 'audio/webm' }); // WebM é padrão comum // CORREÇÃO 1: Forçamos o tipo para OGG para o servidor aceitar
audioBlob = new Blob(audioChunks, { type: 'audio/ogg' });
const audioUrl = URL.createObjectURL(audioBlob); const audioUrl = URL.createObjectURL(audioBlob);
recordPreview.src = audioUrl; recordPreview.src = audioUrl;
recordPreview.classList.remove('is-hidden'); recordPreview.classList.remove('is-hidden');
// Cleanup streams
stream.getTracks().forEach(track => track.stop()); stream.getTracks().forEach(track => track.stop());
}; };
@ -627,15 +623,15 @@ document.addEventListener('DOMContentLoaded', () => {
if(show) { if(show) {
uploadModal.classList.add('is-active'); uploadModal.classList.add('is-active');
subfolderInput.value = currentPathStack.join('/'); subfolderInput.value = currentPathStack.join('/');
switchTab('file'); // Reset para aba de arquivo switchTab('file');
} else { } else {
uploadModal.classList.remove('is-active'); uploadModal.classList.remove('is-active');
uploadStatus.classList.add('is-hidden'); uploadStatus.classList.add('is-hidden');
uploadProgress.classList.add('is-hidden'); uploadProgress.classList.add('is-hidden');
stopRecordingLogic(); stopRecordingLogic();
audioBlob = null; // Limpa gravação audioBlob = null;
recordPreview.src = ""; recordPreview.src = "";
fileInput.value = ""; // Limpa input file fileInput.value = "";
fileNameDisplay.textContent = "Nenhum selecionado"; fileNameDisplay.textContent = "Nenhum selecionado";
} }
} }
@ -653,10 +649,8 @@ document.addEventListener('DOMContentLoaded', () => {
e.preventDefault(); e.preventDefault();
const formData = new FormData(); const formData = new FormData();
// Adiciona pasta
formData.append('subfolder', subfolderInput.value); formData.append('subfolder', subfolderInput.value);
// Verifica qual aba está ativa para pegar o arquivo correto
if (activeTab === 'file') { if (activeTab === 'file') {
if (fileInput.files.length === 0) { if (fileInput.files.length === 0) {
alert("Selecione um arquivo primeiro."); alert("Selecione um arquivo primeiro.");
@ -669,11 +663,16 @@ document.addEventListener('DOMContentLoaded', () => {
alert("Grave algo antes de enviar."); alert("Grave algo antes de enviar.");
return; return;
} }
let filename = recordNameInput.value.trim() || "gravacao"; let filename = recordNameInput.value.trim() || "gravacao";
// Força extensão .webm se não tiver, para garantir que o server entenda
if(!filename.match(/\.(webm|ogg|wav)$/i)) { // CORREÇÃO 2: Removemos a extensão antiga se houver e forçamos .ogg
filename += ".webm"; // Isso engana a validação simples do servidor
} filename = filename.replace(/\.(webm|wav|mp3|flac)$/i, "");
filename += ".ogg";
console.log("Enviando arquivo como:", filename); // Debug
formData.append('sample_file', audioBlob, filename); formData.append('sample_file', audioBlob, filename);
} }