Files
jellyfin-plugin-media-bar-e…/test_scripts/check_backdrop_fields.js

117 lines
5.0 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
(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;");
})();