Homelabtoolkit v2
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
function normalizeGenreKey(value) {
|
||||
return String(value || '')
|
||||
.trim()
|
||||
.toLowerCase()
|
||||
.replace(/[^a-z0-9]+/g, '');
|
||||
}
|
||||
|
||||
export function normalizeGenreNames(values) {
|
||||
const seen = new Set();
|
||||
const names = [];
|
||||
|
||||
for (const value of values || []) {
|
||||
const trimmed = String(value || '').trim();
|
||||
if (!trimmed) continue;
|
||||
const key = normalizeGenreKey(trimmed);
|
||||
if (!key || seen.has(key)) continue;
|
||||
seen.add(key);
|
||||
names.push(trimmed);
|
||||
}
|
||||
|
||||
return names;
|
||||
}
|
||||
|
||||
export function pickSuggestedGenre(tmdbGenres, currentGenres = []) {
|
||||
const normalizedTmdbGenres = normalizeGenreNames(tmdbGenres);
|
||||
if (!normalizedTmdbGenres.length) return '';
|
||||
|
||||
const currentKeys = new Set(normalizeGenreNames(currentGenres).map(normalizeGenreKey));
|
||||
const matched = normalizedTmdbGenres.find((genre) => currentKeys.has(normalizeGenreKey(genre)));
|
||||
|
||||
return matched || normalizedTmdbGenres[0];
|
||||
}
|
||||
|
||||
export function buildSingleGenreUpdate(item, genreName) {
|
||||
const selectedGenre = String(genreName || '').trim();
|
||||
if (!selectedGenre) {
|
||||
throw new Error('A genre is required');
|
||||
}
|
||||
|
||||
const nextItem = JSON.parse(JSON.stringify(item || {}));
|
||||
const existingGenreItems = Array.isArray(item?.GenreItems) ? item.GenreItems : [];
|
||||
const matchedGenreItem = existingGenreItems.find(
|
||||
(entry) => normalizeGenreKey(entry?.Name) === normalizeGenreKey(selectedGenre)
|
||||
);
|
||||
|
||||
nextItem.Genres = [selectedGenre];
|
||||
nextItem.GenreItems = [
|
||||
matchedGenreItem
|
||||
? { ...matchedGenreItem, Name: selectedGenre }
|
||||
: { Name: selectedGenre }
|
||||
];
|
||||
|
||||
return nextItem;
|
||||
}
|
||||
Reference in New Issue
Block a user