47 lines
1.2 KiB
JavaScript
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');
|
|
}
|
|
}
|