Padronização da interface e atualização do sync entre clientes
This commit is contained in:
1 parent
3f714c88de
commit
7d9d2b0f63
10 files changed
+796
-377
No files matched your search
@@ -5,7 +5,7 @@ import {
|
||||
restartAudioEditorIfPlaying,
|
||||
} from "./audio/audio_audio.js";
|
||||
import { initializeAudioContext } from "./audio.js";
|
||||
import { handleFileLoad, generateMmpFile, BLANK_PROJECT_XML } from "./file.js";
|
||||
import { handleFileLoad, generateMmpFile } from "./file.js";
|
||||
import {
|
||||
renderAll,
|
||||
loadAndRenderSampleBrowser,
|
||||
@@ -13,7 +13,7 @@ import {
|
||||
closeOpenProjectModal,
|
||||
} from "./ui.js";
|
||||
import { renderAudioEditor } from "./audio/audio_ui.js";
|
||||
import { adjustValue, enforceNumericInput } from "./utils.js";
|
||||
import { adjustValue, enforceNumericInput, DEFAULT_PROJECT_XML } from "./utils.js";
|
||||
import { ZOOM_LEVELS } from "./config.js";
|
||||
import { loadProjectFromServer } from "./file.js";
|
||||
import { sendAction, joinRoom, setUserName } from "./socket.js";
|
||||
@@ -61,6 +61,11 @@ const PROJECT_NAME = new URLSearchParams(window.location.search).get("project");
|
||||
? PROJECT_NAME
|
||||
: `${PROJECT_NAME}.mmp`;
|
||||
loadProjectFromServer(filename);
|
||||
} else if (!restored && !PROJECT_NAME) {
|
||||
// CORREÇÃO: Se entrou numa sala vazia sem projeto na URL,
|
||||
// inicializa o XML base para não dar erro depois.
|
||||
const parser = new DOMParser();
|
||||
appState.global.originalXmlDoc = parser.parseFromString(DEFAULT_PROJECT_XML, "application/xml");
|
||||
}
|
||||
|
||||
})(); // Fim do initApp
|
||||
@@ -313,7 +318,7 @@ document.addEventListener("DOMContentLoaded", () => {
|
||||
)
|
||||
)
|
||||
return;
|
||||
sendAction({ type: "LOAD_PROJECT", xml: BLANK_PROJECT_XML });
|
||||
sendAction({ type: "LOAD_PROJECT", xml: DEFAULT_PROJECT_XML });
|
||||
});
|
||||
|
||||
addBarBtn?.addEventListener("click", () => {
|
||||
@@ -341,6 +346,29 @@ document.addEventListener("DOMContentLoaded", () => {
|
||||
initializeAudioContext();
|
||||
sendAction({ type: "REMOVE_LAST_TRACK" });
|
||||
});
|
||||
|
||||
// 👇 ATUALIZE ESTE LISTENER
|
||||
removeInstrumentBtn?.addEventListener("click", () => {
|
||||
initializeAudioContext();
|
||||
|
||||
// Pega o ID da faixa que está selecionada/ativa na interface
|
||||
const activeId = appState.pattern.activeTrackId;
|
||||
|
||||
if (activeId) {
|
||||
// Envia comando seguro por ID
|
||||
sendAction({
|
||||
type: "REMOVE_TRACK_BY_ID",
|
||||
trackId: activeId
|
||||
});
|
||||
} else {
|
||||
// Fallback: se não tiver ID ativo, tenta pegar a última (comportamento antigo, mas seguro localmente)
|
||||
const tracks = appState.pattern.tracks;
|
||||
if (tracks.length > 0) {
|
||||
const lastId = tracks[tracks.length - 1].id;
|
||||
sendAction({ type: "REMOVE_TRACK_BY_ID", trackId: lastId });
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
playBtn?.addEventListener("click", () => {
|
||||
initializeAudioContext();
|
||||
@@ -496,6 +524,35 @@ document.addEventListener("DOMContentLoaded", () => {
|
||||
});
|
||||
}
|
||||
|
||||
const removeAudioTrackBtn = document.getElementById("remove-audio-track-btn");
|
||||
if (removeAudioTrackBtn) {
|
||||
removeAudioTrackBtn.addEventListener("click", () => {
|
||||
initializeAudioContext();
|
||||
|
||||
// Verifica quantas faixas existem
|
||||
const trackCount = appState.audio.tracks.length;
|
||||
|
||||
if (trackCount > 0) {
|
||||
// Pega a ÚLTIMA faixa da lista
|
||||
const lastTrack = appState.audio.tracks[trackCount - 1];
|
||||
|
||||
// Verifica se tem clips nela (segurança)
|
||||
const hasClips = appState.audio.clips.some(c => c.trackId === lastTrack.id);
|
||||
if (hasClips && !confirm("A última pista contém clips de áudio. Deseja removê-la mesmo assim?")) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 🔥 A MUDANÇA CRUCIAL: Envia o ID, e usa o NOME NOVO do comando
|
||||
sendAction({
|
||||
type: "REMOVE_AUDIO_LANE_BY_ID",
|
||||
trackId: lastTrack.id
|
||||
});
|
||||
} else {
|
||||
showToast("Não há pistas de áudio para remover.", "warning");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Navegador de Samples (local)
|
||||
loadAndRenderSampleBrowser();
|
||||
|
||||
|
||||
Reference in new issue
Block a user