diff --git a/pages/images/seasonalsection.png b/pages/images/seasonalsection.png new file mode 100644 index 0000000..068d0e6 Binary files /dev/null and b/pages/images/seasonalsection.png differ diff --git a/search.js b/search.js index eda4447..2f99fc5 100644 --- a/search.js +++ b/search.js @@ -198,7 +198,7 @@ limit: '100', recursive: 'true', searchTerm, - fields: 'PrimaryImageAspectRatio,CanDelete,MediaSourceCount', + fields: 'PrimaryImageAspectRatio,CanDelete', imageTypeLimit: '1', enableTotalRecordCount: 'false', ...additionalParams @@ -277,7 +277,7 @@ // Use dedicated Artists endpoint for better results const userId = ApiClient.getCurrentUserId(); const baseUrl = ApiClient.serverAddress(); - url = `${baseUrl}/Artists?limit=100&searchTerm=${encodeURIComponent(searchTerm)}&fields=PrimaryImageAspectRatio&fields=CanDelete&fields=MediaSourceCount&imageTypeLimit=1&userId=${userId}&enableTotalRecordCount=false`; + url = `${baseUrl}/Artists?limit=100&searchTerm=${encodeURIComponent(searchTerm)}&fields=PrimaryImageAspectRatio&fields=CanDelete&imageTypeLimit=1&userId=${userId}&enableTotalRecordCount=false`; } else { url = buildSearchUrl(searchTerm, [type]); } diff --git a/watchlist.js b/watchlist.js index d6d38c2..d24dbdc 100644 --- a/watchlist.js +++ b/watchlist.js @@ -6,10 +6,6 @@ In the Custom Tabs plugin, add a new tab with the following HTML content:
-
-
-
-
*/ @@ -68,33 +64,8 @@ In the Custom Tabs plugin, add a new tab with the following HTML content: })); } - function optimizeMovieDataForStorage(movieDataArray) { - // Collect all unique people data - const peopleCache = new Map(); - - // First pass: collect all people data - movieDataArray.forEach(movie => { - if (movie.People) { - movie.People.forEach(person => { - if (person.Id && person.Name && person.Type) { - peopleCache.set(person.Id, { - Id: person.Id, - Name: person.Name, - Type: person.Type - }); - } - }); - } - }); - - // Store people cache separately - if (peopleCache.size > 0) { - const peopleArray = Array.from(peopleCache.values()); - localStorageCache.set('people', peopleArray); - LOG(`Stored ${peopleArray.length} unique people in people cache`); - } - - // Return optimized movie data with only people IDs + function optimizeMovieDataForStorage(movieDataArray) { + // Return optimized movie data return movieDataArray.map(movie => ({ Id: movie.Id, Name: movie.Name, @@ -103,7 +74,6 @@ In the Custom Tabs plugin, add a new tab with the following HTML content: PremiereDate: movie.PremiereDate, RunTimeTicks: movie.RunTimeTicks, ProductionYear: movie.ProductionYear, - PeopleIds: movie.People ? movie.People.map(person => person.Id).filter(id => id) : [], UserData: { IsFavorite: movie.UserData.IsFavorite, LastPlayedDate: movie.UserData.LastPlayedDate, @@ -113,28 +83,6 @@ In the Custom Tabs plugin, add a new tab with the following HTML content: })); } - // Reconstruct people data from IDs and people cache - function reconstructPeopleData(movieDataArray) { - // Get people cache - const peopleCache = localStorageCache.get('people') || []; - const peopleMap = new Map(peopleCache.map(person => [person.Id, person])); - - // Reconstruct people data for each movie - return movieDataArray.map(movie => { - const reconstructedMovie = { ...movie }; - - // Reconstruct People array from PeopleIds - if (movie.PeopleIds && Array.isArray(movie.PeopleIds)) { - reconstructedMovie.People = movie.PeopleIds - .map(id => peopleMap.get(id)) - .filter(person => person); // Remove any undefined entries - delete reconstructedMovie.PeopleIds; // Remove the IDs array - } - - return reconstructedMovie; - }); - } - // Optimize watchlist data for localStorage storage function optimizeWatchlistDataForStorage(watchlistDataArray) { return watchlistDataArray.map(item => ({ @@ -159,58 +107,6 @@ In the Custom Tabs plugin, add a new tab with the following HTML content: })); } - // Show loading state for watchlist tab - function showWatchlistLoading() { - const watchlistTab = document.querySelector('div[data-tab="watchlist"]'); - if (!watchlistTab) return; - - // Hide all watchlist sections - const sections = ['movies', 'series', 'seasons', 'episodes']; - sections.forEach(section => { - const sectionEl = watchlistTab.querySelector(`.watchlist-${section}`); - if (sectionEl) sectionEl.style.display = 'none'; - }); - - // Show loading message - const loadingEl = watchlistTab.querySelector('.watchlist-loading') || createWatchlistLoadingElement(); - loadingEl.style.display = 'block'; - } - - // Create loading element if it doesn't exist - function createWatchlistLoadingElement() { - const watchlistTab = document.querySelector('div[data-tab="watchlist"]'); - if (!watchlistTab) return null; - - const loadingEl = document.createElement('div'); - loadingEl.className = 'watchlist-loading'; - loadingEl.innerHTML = ` -
-
-
Loading watchlist...
-
- `; - loadingEl.style.display = 'none'; - watchlistTab.appendChild(loadingEl); - return loadingEl; - } - - // Hide loading state and show watchlist sections - function hideWatchlistLoading() { - const watchlistTab = document.querySelector('div[data-tab="watchlist"]'); - if (!watchlistTab) return; - - // Hide loading message - const loadingEl = watchlistTab.querySelector('.watchlist-loading'); - if (loadingEl) loadingEl.style.display = 'none'; - - // Show all watchlist sections - const sections = ['movies', 'series', 'seasons', 'episodes']; - sections.forEach(section => { - const sectionEl = watchlistTab.querySelector(`.watchlist-${section}`); - if (sectionEl) sectionEl.style.display = 'block'; - }); - } - // Add refresh button to tab headers function addRefreshButtons() { const watchlistSection = getWatchlistSection(); @@ -2173,8 +2069,6 @@ In the Custom Tabs plugin, add a new tab with the following HTML content: } catch (err) { ERR('Error initializing watchlist tab:', err); tabStates.watchlist.isFetching = false; - // Hide loading state on error too - hideWatchlistLoading(); } } @@ -3637,10 +3531,8 @@ In the Custom Tabs plugin, add a new tab with the following HTML content: const cachedData = localStorageCache.get(`movies`); if (cachedData) { LOG('Using localStorage cache for movies'); - // Reconstruct people data from IDs and people cache - const reconstructedData = reconstructPeopleData(cachedData); - moviePagination.updateCache(reconstructedData); - return reconstructedData; + moviePagination.updateCache(cachedData); + return cachedData; } } @@ -3653,7 +3545,7 @@ In the Custom Tabs plugin, add a new tab with the following HTML content: const token = apiClient.accessToken(); // Fetch movies that have been played - const url = `${serverUrl}/Items?IncludeItemTypes=Movie&UserId=${userId}&Recursive=true&Filters=IsPlayed&Fields=UserData,ProviderIds,People&EnableImageTypes=Primary,Backdrop,Thumb&ImageTypeLimit=1&SortBy=DatePlayed&SortOrder=Descending`; + const url = `${serverUrl}/Items?IncludeItemTypes=Movie&UserId=${userId}&Recursive=true&Filters=IsPlayed&Fields=UserData,ProviderIds&EnableImageTypes=Primary,Backdrop,Thumb&ImageTypeLimit=1&SortBy=DatePlayed&SortOrder=Descending`; try { const res = await fetch(url, { headers: { "Authorization": `MediaBrowser Token=\"${token}\"` } });