61 lines
1.6 KiB
JavaScript
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;
|
|
}
|
|
|