resolvendo dependencias dos projetos
Deploy / Deploy (push) Successful in 1m42s
Details
Deploy / Deploy (push) Successful in 1m42s
Details
This commit is contained in:
parent
544b0c8415
commit
7244c63483
|
|
@ -8,6 +8,9 @@
|
||||||
},
|
},
|
||||||
"bassdrum_acoustic01_-_Copia.ogg": {
|
"bassdrum_acoustic01_-_Copia.ogg": {
|
||||||
"_isFile": true
|
"_isFile": true
|
||||||
|
},
|
||||||
|
"bassdrum02_-_Copia.ogg": {
|
||||||
|
"_isFile": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"samples": {},
|
"samples": {},
|
||||||
|
|
|
||||||
|
|
@ -805,45 +805,43 @@
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
import { appState } from "./assets/js/creations/state.js";
|
||||||
|
import { sendAction } from "./assets/js/creations/socket.js"; // <--- sendAction vive aqui
|
||||||
|
import { renderAll } from "./assets/js/creations/ui.js";
|
||||||
|
import * as Tone from "https://esm.sh/tone";
|
||||||
|
|
||||||
document.addEventListener("DOMContentLoaded", () => {
|
document.addEventListener("DOMContentLoaded", () => {
|
||||||
// --- LÓGICA DE UPLOAD DE SAMPLE AVULSO ---
|
|
||||||
|
// 1. Lógica de Upload de Sample
|
||||||
const uploadSampleBtn = document.getElementById("upload-sample-btn");
|
const uploadSampleBtn = document.getElementById("upload-sample-btn");
|
||||||
const sampleInput = document.getElementById("sample-file-input");
|
const sampleInput = document.getElementById("sample-file-input");
|
||||||
|
|
||||||
if (uploadSampleBtn && sampleInput) {
|
if (uploadSampleBtn && sampleInput) {
|
||||||
|
|
||||||
// 1. Botão clica no input invisível
|
|
||||||
uploadSampleBtn.addEventListener("click", () => {
|
uploadSampleBtn.addEventListener("click", () => {
|
||||||
sampleInput.click();
|
sampleInput.click();
|
||||||
});
|
});
|
||||||
|
|
||||||
// 2. Quando o arquivo é selecionado
|
|
||||||
sampleInput.addEventListener("change", async () => {
|
sampleInput.addEventListener("change", async () => {
|
||||||
if (sampleInput.files.length === 0) return;
|
if (sampleInput.files.length === 0) return;
|
||||||
|
|
||||||
const file = sampleInput.files[0];
|
const file = sampleInput.files[0];
|
||||||
|
|
||||||
// Pergunta a categoria para organizar no servidor (opcional)
|
|
||||||
// O backend usa isso para criar pastas: samples/drums, samples/vocals, etc.
|
|
||||||
const category = prompt(
|
const category = prompt(
|
||||||
"Em qual categoria este sample se encaixa? (Ex: drums, effects, vocals)",
|
"Em qual categoria este sample se encaixa? (Ex: drums, effects, vocals)",
|
||||||
"imported"
|
"imported"
|
||||||
);
|
);
|
||||||
|
|
||||||
if (category === null) {
|
if (category === null) {
|
||||||
// Usuário cancelou
|
|
||||||
sampleInput.value = "";
|
sampleInput.value = "";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Prepara o formulário
|
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
formData.append("sample_file", file); // Deve bater com 'sample_file' no Python
|
formData.append("sample_file", file);
|
||||||
formData.append("subfolder", category); // Deve bater com 'subfolder' no Python
|
formData.append("subfolder", category);
|
||||||
|
|
||||||
// Feedback Visual (ícone girando ou ficando transparente)
|
// UI Feedback
|
||||||
const originalIcon = uploadSampleBtn.className;
|
const originalIcon = uploadSampleBtn.className;
|
||||||
uploadSampleBtn.className = "fa-solid fa-spinner fa-spin"; // Ícone de loading
|
uploadSampleBtn.className = "fa-solid fa-spinner fa-spin";
|
||||||
uploadSampleBtn.style.pointerEvents = "none";
|
uploadSampleBtn.style.pointerEvents = "none";
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
@ -851,27 +849,45 @@
|
||||||
method: "POST",
|
method: "POST",
|
||||||
body: formData
|
body: formData
|
||||||
});
|
});
|
||||||
|
|
||||||
const result = await response.json();
|
const result = await response.json();
|
||||||
|
|
||||||
if (response.ok) {
|
if (response.ok) {
|
||||||
alert("Sucesso! " + result.message);
|
alert("Sucesso! " + result.message);
|
||||||
|
|
||||||
|
// AGORA VAI FUNCIONAR POIS ESTAMOS NO MESMO ESCOPO DO IMPORT
|
||||||
sendAction({ type: "REFRESH_SAMPLE_BROWSER" });
|
sendAction({ type: "REFRESH_SAMPLE_BROWSER" });
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
alert("Erro ao enviar: " + (result.error || "Desconhecido"));
|
alert("Erro ao enviar: " + (result.error || "Desconhecido"));
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Erro no upload:", error);
|
console.error("Erro no upload:", error);
|
||||||
alert("Erro de conexão com o servidor.");
|
alert("Erro de conexão com o servidor.");
|
||||||
} finally {
|
} finally {
|
||||||
// Restaura o botão e limpa o input
|
|
||||||
uploadSampleBtn.className = originalIcon;
|
uploadSampleBtn.className = originalIcon;
|
||||||
uploadSampleBtn.style.pointerEvents = "auto";
|
uploadSampleBtn.style.pointerEvents = "auto";
|
||||||
sampleInput.value = "";
|
sampleInput.value = "";
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 2. Lógica de Download de ZIP (Se quiser manter junto)
|
||||||
|
const downloadPackageBtn = document.getElementById("download-package-btn");
|
||||||
|
if (downloadPackageBtn) {
|
||||||
|
downloadPackageBtn.addEventListener("click", () => {
|
||||||
|
const params = new URLSearchParams(window.location.search);
|
||||||
|
let projectName = params.get("project");
|
||||||
|
if (projectName) {
|
||||||
|
if (!projectName.toLowerCase().endsWith(".mmp")) projectName += ".mmp";
|
||||||
|
const apiUrl = `https://alice.ufsj.edu.br:33002/api/download/${projectName}`;
|
||||||
|
downloadPackageBtn.style.opacity = "0.5";
|
||||||
|
setTimeout(() => downloadPackageBtn.style.opacity = "1", 500);
|
||||||
|
window.location.href = apiUrl;
|
||||||
|
} else {
|
||||||
|
alert("Salve o projeto primeiro ou abra um projeto existente.");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue