Files
2026-06-08 21:58:16 +12:00

61 lines
1.6 KiB
JavaScript

import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
import { dirname, resolve } from 'path';
const CACHE_PATH = resolve('.cache', 'emby-user-context.json');
function ensureCacheDir() {
const dir = dirname(CACHE_PATH);
if (!existsSync(dir)) {
mkdirSync(dir, { recursive: true });
}
}
function normalizeGuid(value) {
return typeof value === 'string' ? value.replace(/-/g, '').trim().toLowerCase() : '';
}
function loadCacheFile() {
if (!existsSync(CACHE_PATH)) {
return { users: {} };
}
try {
const parsed = JSON.parse(readFileSync(CACHE_PATH, 'utf8'));
return parsed && typeof parsed === 'object' ? parsed : { users: {} };
} catch {
return { users: {} };
}
}
function saveCacheFile(cache) {
ensureCacheDir();
writeFileSync(CACHE_PATH, JSON.stringify(cache, null, 2));
}
export function readCachedEmbyUserContext(embyGuid) {
const normalizedGuid = normalizeGuid(embyGuid);
if (!normalizedGuid) return null;
const cache = loadCacheFile();
return cache.users?.[normalizedGuid] || null;
}
export function writeCachedEmbyUserContext(embyGuid, context) {
const normalizedGuid = normalizeGuid(embyGuid);
if (!normalizedGuid) return null;
const cache = loadCacheFile();
const nextContext = {
views: Array.isArray(context?.views) ? context.views : [],
recentlyPlayed: Array.isArray(context?.recentlyPlayed) ? context.recentlyPlayed : [],
excludedFolderLookup: context?.excludedFolderLookup || {},
lastSyncedAt: context?.lastSyncedAt || new Date().toISOString()
};
cache.users ||= {};
cache.users[normalizedGuid] = nextContext;
saveCacheFile(cache);
return nextContext;
}