const STORAGE_KEY = "nakhodka:chatPosts"; const postByChatId = new Map(); /** Восстанавливает кеш постов из localStorage (выживает при перезагрузке страницы). */ function loadFromStorage() { try { const raw = localStorage.getItem(STORAGE_KEY); if (!raw) return; const obj = JSON.parse(raw); for (const [chatId, post] of Object.entries(obj)) { postByChatId.set(chatId, post); } } catch (e) { // Повреждённый/пустой storage игнорируем } } /** Пишет текущий кеш постов в localStorage. */ function persist() { try { const obj = {}; postByChatId.forEach((post, chatId) => { obj[chatId] = post; }); localStorage.setItem(STORAGE_KEY, JSON.stringify(obj)); } catch (e) { // Недостаточно места / приватный режим — игнорируем } } loadFromStorage(); export function setPostForChat(chatId, post) { postByChatId.set(chatId, post); persist(); } export function getPostForChat(chatId) { return postByChatId.get(chatId); } export function cachePostsFromChats(chats) { for (const chat of chats) { if (chat.post) { postByChatId.set(chat.id, chat.post); } } if (chats.length) persist(); } /** Удаляет запись при удалении конкретного чата. */ export function removePostForChat(chatId) { postByChatId.delete(chatId); persist(); } /** Полностью очищает кеш — вызывать при logout(), чтобы не хранить данные предыдущей сессии. */ export function clearPostCache() { postByChatId.clear(); try { localStorage.removeItem(STORAGE_KEY); } catch (e) { // ignore } }