plugin v1.0.1
This commit is contained in:
1 parent
7dd21b5ddc
commit
82e1ff025a
3 files changed
+71
-46
No files matched your search
@@ -100,49 +100,54 @@ export function resetProjectState() {
|
||||
import { generateXmlFromStateExported } from "./file.js"; // Vamos assumir que você vai exportar isso no file.js
|
||||
|
||||
export function saveStateToSession() {
|
||||
// Só salva se estiver em uma sala (contexto colaborativo/online)
|
||||
if (!window.ROOM_NAME) return;
|
||||
|
||||
try {
|
||||
// 1. Snapshot do Áudio (inclui blobs Base64 das gravações)
|
||||
const audioSnap = getAudioSnapshot();
|
||||
|
||||
// 2. Snapshot do Pattern (XML)
|
||||
// Se não conseguirmos o XML exato, salvamos os dados brutos do pattern
|
||||
let xmlContent = null;
|
||||
try {
|
||||
// Tenta usar a função exportada (veja nota abaixo sobre file.js)
|
||||
if(typeof generateXmlFromStateExported === 'function') {
|
||||
xmlContent = generateXmlFromStateExported();
|
||||
}
|
||||
} catch(e) {
|
||||
console.warn("Não foi possível gerar XML para backup:", e);
|
||||
}
|
||||
|
||||
const stateToSave = {
|
||||
timestamp: Date.now(),
|
||||
xml: xmlContent,
|
||||
// Fallback: Salva o pattern bruto se o XML falhar
|
||||
patternRaw: !xmlContent ? appState.pattern : null,
|
||||
audio: audioSnap,
|
||||
global: {
|
||||
bpm: appState.global.bpm, // Pega do state, que deve estar syncado com o DOM
|
||||
compassoA: appState.global.compassoA,
|
||||
compassoB: appState.global.compassoB,
|
||||
bars: appState.global.bars,
|
||||
syncMode: appState.global.syncMode
|
||||
}
|
||||
// 1. Crie uma versão "limpa" dos tracks (PATTERN)
|
||||
const cleanTracks = appState.pattern.tracks.map((track) => {
|
||||
return {
|
||||
id: track.id,
|
||||
name: track.name,
|
||||
samplePath: track.samplePath,
|
||||
patterns: track.patterns,
|
||||
activePatternIndex: track.activePatternIndex,
|
||||
volume: track.volume,
|
||||
pan: track.pan,
|
||||
instrumentName: track.instrumentName,
|
||||
instrumentXml: track.instrumentXml,
|
||||
};
|
||||
});
|
||||
|
||||
const roomName = window.ROOM_NAME;
|
||||
sessionStorage.setItem(`mmp_backup_${roomName}`, JSON.stringify(stateToSave));
|
||||
// console.log("Estado salvo na sessão local (F5 safe).");
|
||||
// 2. Construa o objeto de estado final para salvar
|
||||
const stateToSave = {
|
||||
pattern: {
|
||||
...appState.pattern,
|
||||
tracks: cleanTracks,
|
||||
},
|
||||
// 🔥 FIX: Salvando o estado de Áudio (Tracks e Clips)
|
||||
audio: {
|
||||
tracks: appState.audio.tracks || [],
|
||||
clips: appState.audio.clips || [],
|
||||
// Adicione outras props de áudio se necessário (ex: seekTime, etc)
|
||||
},
|
||||
global: {
|
||||
bpm: document.getElementById("bpm-input").value,
|
||||
compassoA: document.getElementById("compasso-a-input").value,
|
||||
compassoB: document.getElementById("compasso-b-input").value,
|
||||
bars: document.getElementById("bars-input").value,
|
||||
syncMode: appState.global.syncMode, // É bom salvar isso também
|
||||
},
|
||||
};
|
||||
|
||||
try {
|
||||
const roomName = window.ROOM_NAME || "default_room";
|
||||
sessionStorage.setItem(
|
||||
`temp_state_${roomName}`,
|
||||
JSON.stringify(stateToSave)
|
||||
);
|
||||
} catch (e) {
|
||||
console.error("Falha crítica ao salvar sessão (Quota Excedida?):", e);
|
||||
console.error("Falha ao salvar estado na sessão:", e);
|
||||
}
|
||||
}
|
||||
|
||||
export async function loadStateFromSession() {
|
||||
const roomName = window.ROOM_NAME;
|
||||
if (!roomName) return false;
|
||||
|
||||
Reference in new issue
Block a user