Add check_backdrop_fields script for testing item details and theme media

This commit is contained in:
CodeDevMLH
2026-02-15 00:30:44 +01:00
parent 74a367584b
commit a4b39ae3bf

View File

@@ -0,0 +1,116 @@
(async () => {
// 1. Initialisierung
const apiClient = window.ApiClient;
if (!apiClient) {
console.error("❌ ApiClient nicht gefunden. Bitte in der Browser-Konsole einer Jellyfin-Seite ausführen.");
return;
}
// 2. Item ID abfragen oder festlegen
let itemId = prompt("Bitte die Item ID eingeben (von einem Film/Serie mit Theme Video/Backdrop Video):");
if (!itemId) {
console.warn("Keine Item ID eingegeben. Abbruch.");
return;
}
itemId = itemId.trim();
const userId = apiClient.getCurrentUserId();
console.log(`%c🔍 Untersuche Item: ${itemId}`, "color: #00a4dc; font-size: 1.2em; font-weight: bold;");
// 3. Helper Funktion für Fetch requests
const fetchJson = async (url) => {
try {
const res = await fetch(url, {
headers: {
'Authorization': `MediaBrowser Client="Jellyfin Web", Device="Browser", DeviceId="${apiClient.deviceId()}", Version="${apiClient.appVersion()}", Token="${apiClient.accessToken()}"`
}
});
if (res.ok) return await res.json();
console.warn(`⚠️ Request fehlgeschlagen: ${url} (${res.status})`);
return null;
} catch (e) {
console.error(`❌ Fehler bei Request: ${url}`, e);
return null;
}
};
// ---------------------------------------------------------
// TEST 1: Standard Item Details mit erweiterten Feldern
// ---------------------------------------------------------
console.group("1. Standard Item Details (mit Fields)");
const fields = "Overview,RemoteTrailers,MediaSources,LocalTrailerCount,ThemeVideoIds,ThemeSongIds";
const itemDetailsUrl = `${apiClient.serverAddress()}/Users/${userId}/Items/${itemId}?Fields=${fields}`;
const item = await fetchJson(itemDetailsUrl);
if (item) {
console.log("Name:", item.Name);
console.log("ThemeVideoIds:", item.ThemeVideoIds);
console.log("ThemeSongIds:", item.ThemeSongIds);
console.log("LocalTrailerCount:", item.LocalTrailerCount);
console.log("RemoteTrailers:", item.RemoteTrailers);
if (item.ThemeVideoIds && item.ThemeVideoIds.length > 0) {
console.log(`%c✅ ThemeVideoIds gefunden: ${item.ThemeVideoIds.length}`, "color: green; font-weight: bold;");
} else {
console.log(`%c❌ Keine ThemeVideoIds im Item-Objekt.`, "color: orange;");
}
}
console.groupEnd();
// ---------------------------------------------------------
// TEST 2: ThemeMedia Endpoint
// ---------------------------------------------------------
console.group("2. Endpoint: /Items/{Id}/ThemeMedia");
const themeMediaUrl = `${apiClient.serverAddress()}/Items/${itemId}/ThemeMedia?userId=${userId}`;
const themeMedia = await fetchJson(themeMediaUrl);
if (themeMedia) {
console.dir(themeMedia);
if (themeMedia.ThemeVideos && themeMedia.ThemeVideos.length > 0) {
console.log(`%c✅ ThemeVideos gefunden: ${themeMedia.ThemeVideos.length}`, "color: green; font-weight: bold;");
themeMedia.ThemeVideos.forEach(v => console.log(` - ID: ${v.Id}, Name: ${v.Name}, Path: ${v.Path}`));
} else {
console.log("❌ Keine ThemeVideos in ThemeMedia gefunden.");
}
}
console.groupEnd();
// ---------------------------------------------------------
// TEST 3: ThemeVideos Endpoint (Spezifisch)
// ---------------------------------------------------------
console.group("3. Endpoint: /Items/{Id}/ThemeVideos");
// Manchmal auch unter Users/{UserId}/Items/{Id}/ThemeVideos
const themeVideosUrl = `${apiClient.serverAddress()}/Items/${itemId}/ThemeVideos?userId=${userId}`;
const themeVideos = await fetchJson(themeVideosUrl);
if (themeVideos) {
// Kann Array oder Objekt mit Items sein
const videos = Array.isArray(themeVideos) ? themeVideos : (themeVideos.Items || []);
console.dir(videos);
if (videos.length > 0) {
console.log(`%c✅ ThemeVideos Endpoint lieferte Ergebnisse: ${videos.length}`, "color: green; font-weight: bold;");
} else {
console.log("❌ ThemeVideos Endpoint lieferte leeres Array.");
}
}
console.groupEnd();
// ---------------------------------------------------------
// TEST 4: LocalTrailers Endpoint
// ---------------------------------------------------------
console.group("4. Endpoint: /Items/{Id}/LocalTrailers");
const localTrailersUrl = `${apiClient.serverAddress()}/Users/${userId}/Items/${itemId}/LocalTrailers`;
const localTrailers = await fetchJson(localTrailersUrl);
if (localTrailers && localTrailers.length > 0) {
console.log(`%c LocalTrailers gefunden: ${localTrailers.length}`, "color: blue;");
console.dir(localTrailers);
} else {
console.log("❌ Keine LocalTrailers gefunden.");
}
console.groupEnd();
console.log("%cFertig.", "font-weight: bold;");
})();