Add check_backdrop_fields script for testing item details and theme media
This commit is contained in:
116
test_scripts/check_backdrop_fields.js
Normal file
116
test_scripts/check_backdrop_fields.js
Normal 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;");
|
||||
|
||||
})();
|
||||
Reference in New Issue
Block a user