server_photo_s85js/public/js/state.js
2026-08-11 08:45:04 +02:00

265 lines
6.2 KiB
JavaScript

// ===============================
// state.js — Stato condiviso (foto + attività)
// ===============================
// Modalità corrente: "photos" | "activities"
window.state = {
mode: "photos", // default
items: [], // contiene gli item della modalità corrente
};
// ===============================
// MODE HELPERS
// ===============================
function normalizeMode(mode) {
return mode === "activities" ? "activities" : "photos";
}
function cacheKeyForMode(mode) {
return normalizeMode(mode) === "photos"
? "photosCache"
: "activitiesCache";
}
function lastSyncKeyForMode(mode) {
return normalizeMode(mode) === "photos"
? "lastSyncPhotos"
: "lastSyncActivities";
}
// ===============================
// LAST SYNC
// ===============================
function getLastSync() {
return getLastSyncForMode(state.mode);
}
function setLastSync(ts) {
setLastSyncForMode(state.mode, ts);
}
function getLastSyncForMode(mode) {
return localStorage.getItem(lastSyncKeyForMode(mode));
}
function setLastSyncForMode(mode, ts) {
if (!ts) return;
localStorage.setItem(lastSyncKeyForMode(mode), ts);
}
// ===============================
// GET / SET ITEMS
// ===============================
function getLocalItems() {
return state.items;
}
function getLocalItemsForMode(mode) {
try {
const safeMode = normalizeMode(mode);
const raw = localStorage.getItem(cacheKeyForMode(safeMode));
if (!raw) return [];
const arr = JSON.parse(raw);
return Array.isArray(arr) ? arr : [];
} catch (e) {
console.warn("getLocalItemsForMode error:", e);
return [];
}
}
function setLocalItems(arr) {
// Compatibilità con codice vecchio.
// Salva in base alla modalità corrente.
setLocalItemsForMode(state.mode, arr);
}
function setLocalItemsForMode(mode, arr) {
const safeMode = normalizeMode(mode);
const safeArr = Array.isArray(arr) ? arr : [];
try {
localStorage.setItem(cacheKeyForMode(safeMode), JSON.stringify(safeArr));
// Aggiorna state.items solo se sto salvando la modalità attualmente visibile
if (state.mode === safeMode) {
state.items = safeArr;
}
} catch (e) {
console.warn("setLocalItemsForMode error:", e);
}
}
function setLocalPhotos(arr) {
setLocalItemsForMode("photos", arr);
}
function setLocalActivities(arr) {
setLocalItemsForMode("activities", arr);
}
// ===============================
// ADD / REMOVE ITEM
// ===============================
function addItemLocal(item) {
addItemLocalForMode(state.mode, item);
}
function addItemLocalForMode(mode, item) {
if (!item || item.id == null) return;
const safeMode = normalizeMode(mode);
const arr = getLocalItemsForMode(safeMode);
const next = arr.filter(x => String(x.id) !== String(item.id));
next.push(item);
setLocalItemsForMode(safeMode, next);
}
function removeItemLocal(id) {
removeItemLocalForMode(state.mode, id);
}
function removeItemLocalForMode(mode, id) {
if (id == null) return;
const safeMode = normalizeMode(mode);
const arr = getLocalItemsForMode(safeMode);
const before = arr.length;
const next = arr.filter(x => String(x.id) !== String(id));
const after = next.length;
console.log("[removeItemLocalForMode]", {
mode: safeMode,
id,
before,
after,
});
setLocalItemsForMode(safeMode, next);
}
function addPhotoLocal(item) {
addItemLocalForMode("photos", item);
}
function addActivityLocal(item) {
addItemLocalForMode("activities", item);
}
function removePhotoLocal(id) {
removeItemLocalForMode("photos", id);
}
function removeActivityLocal(id) {
removeItemLocalForMode("activities", id);
}
// ===============================
// LOCAL STORAGE CACHE
// ===============================
function saveLocalState() {
saveLocalStateForMode(state.mode);
}
function saveLocalStateForMode(mode) {
const safeMode = normalizeMode(mode);
try {
const arr = state.mode === safeMode
? state.items
: getLocalItemsForMode(safeMode);
localStorage.setItem(cacheKeyForMode(safeMode), JSON.stringify(arr || []));
} catch (e) {
console.warn("saveLocalStateForMode error:", e);
}
}
function savePhotosCache() {
saveLocalStateForMode("photos");
}
function saveActivitiesCache() {
saveLocalStateForMode("activities");
}
function loadLocalState() {
try {
const safeMode = normalizeMode(state.mode);
const arr = getLocalItemsForMode(safeMode);
// Non filtrare qui deleted_at.
// Il filtro deve stare solo in gallery.js,
// perché dipende dal checkbox "Mostra eliminate".
state.items = arr;
return state.items;
} catch (e) {
console.warn("loadLocalState error:", e);
}
state.items = [];
return [];
}
// ===============================
// CAMBIO MODALITÀ GALLERY
// ===============================
function setGalleryMode(mode) {
const safeMode = normalizeMode(mode);
state.mode = safeMode;
loadLocalState();
if (typeof refreshGallery === "function") {
refreshGallery();
}
console.log("[setGalleryMode]", {
mode: state.mode,
items: getLocalItems().length,
sample: getLocalItems().slice(0, 3),
});
}
// ===============================
// EXPORT
// ===============================
window.normalizeMode = normalizeMode;
window.getLastSync = getLastSync;
window.setLastSync = setLastSync;
window.getLastSyncForMode = getLastSyncForMode;
window.setLastSyncForMode = setLastSyncForMode;
window.getLocalItems = getLocalItems;
window.setLocalItems = setLocalItems;
window.getLocalItemsForMode = getLocalItemsForMode;
window.setLocalItemsForMode = setLocalItemsForMode;
window.setLocalPhotos = setLocalPhotos;
window.setLocalActivities = setLocalActivities;
window.addItemLocal = addItemLocal;
window.removeItemLocal = removeItemLocal;
window.addItemLocalForMode = addItemLocalForMode;
window.removeItemLocalForMode = removeItemLocalForMode;
window.addPhotoLocal = addPhotoLocal;
window.addActivityLocal = addActivityLocal;
window.removePhotoLocal = removePhotoLocal;
window.removeActivityLocal = removeActivityLocal;
window.saveLocalState = saveLocalState;
window.saveLocalStateForMode = saveLocalStateForMode;
window.savePhotosCache = savePhotosCache;
window.saveActivitiesCache = saveActivitiesCache;
window.loadLocalState = loadLocalState;
window.setGalleryMode = setGalleryMode;