67 lines
1.8 KiB
JavaScript
67 lines
1.8 KiB
JavaScript
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
|
|
}
|
|
}
|