iPuzzle/js/state/StorageManager.js

47 lines
1.2 KiB
JavaScript

/* global PuzzleState */
class StorageManager {
static _key(roomCode) {
return `ipuzzle_${roomCode}`;
}
static save(state) {
try {
localStorage.setItem(StorageManager._key(state.roomCode), JSON.stringify(state.serialize()));
} catch (e) {
console.warn('iPuzzle: localStorage save failed', e);
}
}
static load(roomCode) {
try {
const raw = localStorage.getItem(StorageManager._key(roomCode));
if (!raw) return null;
return PuzzleState.deserialize(JSON.parse(raw));
} catch (e) {
console.warn('iPuzzle: localStorage load failed', e);
return null;
}
}
static remove(roomCode) {
localStorage.removeItem(StorageManager._key(roomCode));
}
static saveCurrent(roomCode) {
localStorage.setItem('ipuzzle_currentRoom', roomCode);
}
static loadCurrent() {
const roomCode = localStorage.getItem('ipuzzle_currentRoom');
if (!roomCode) return null;
return StorageManager.load(roomCode);
}
static clearCurrent() {
const roomCode = localStorage.getItem('ipuzzle_currentRoom');
if (roomCode) StorageManager.remove(roomCode);
localStorage.removeItem('ipuzzle_currentRoom');
}
}