Skip to content

Commit ba692af

Browse files
fixed genre filtering for external addons
1 parent 7db0841 commit ba692af

7 files changed

Lines changed: 189 additions & 72 deletions

File tree

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "stremio-aiolists-addon",
3-
"version": "1.2.5",
3+
"version": "1.2.6",
44
"description": "Stremio addon to manage all your lists in one place.",
55
"main": "src/server.js",
66
"scripts": {

src/addon/addonBuilder.js

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ async function createAddon(userConfig) {
272272
await initTraktApi(userConfig);
273273
const manifest = {
274274
id: 'org.stremio.aiolists',
275-
version: `1.2.5-${Date.now()}`,
275+
version: `1.2.6-${Date.now()}`,
276276
name: 'AIOLists',
277277
description: 'Manage all your lists in one place.',
278278
resources: ['catalog', 'meta'],
@@ -1167,14 +1167,44 @@ async function createAddon(userConfig) {
11671167
// Apply genre filtering after enrichment (since we removed it from integration layer)
11681168
if (genre && genre !== 'All' && metas.length > 0) {
11691169
const beforeFilterCount = metas.length;
1170+
1171+
// Debug: Log genre information for external addon items
1172+
const isExternalAddon = importedAddons && Object.values(importedAddons).some(addon =>
1173+
addon.catalogs?.some(catalog => String(catalog.id) === String(id))
1174+
);
1175+
1176+
if (isExternalAddon) {
1177+
const itemsWithGenres = metas.filter(meta => meta.genres && meta.genres.length > 0);
1178+
const itemsWithoutGenres = metas.filter(meta => !meta.genres || meta.genres.length === 0);
1179+
console.log(`[Genre Filter] External addon "${id}": ${itemsWithGenres.length}/${metas.length} items have genre data (metadata source: ${userConfig.metadataSource || 'cinemeta'})`);
1180+
1181+
if (itemsWithGenres.length > 0) {
1182+
console.log(`[Genre Filter] Sample genres found:`, itemsWithGenres.slice(0, 3).map(item => ({
1183+
name: item.name,
1184+
genres: item.genres
1185+
})));
1186+
}
1187+
1188+
if (itemsWithoutGenres.length > 0) {
1189+
console.log(`[Genre Filter] Sample items without genres:`, itemsWithoutGenres.slice(0, 3).map(item => ({
1190+
id: item.id,
1191+
name: item.name,
1192+
hasGenres: !!item.genres
1193+
})));
1194+
}
1195+
}
1196+
11701197
metas = metas.filter(meta => {
11711198
if (!meta.genres) return false;
11721199
const itemGenres = Array.isArray(meta.genres) ? meta.genres : [meta.genres];
11731200
return itemGenres.some(g =>
11741201
String(g).toLowerCase() === String(genre).toLowerCase()
11751202
);
11761203
});
1177-
1204+
1205+
if (isExternalAddon) {
1206+
console.log(`[Genre Filter] External addon "${id}": Filtered from ${beforeFilterCount} to ${metas.length} items for genre "${genre}"`);
1207+
}
11781208
}
11791209

11801210
const cacheMaxAge = (id === 'random_mdblist_catalog' || isWatchlist(id)) ? 0 : (5 * 60);

src/integrations/externalAddons.js

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -204,9 +204,19 @@ async function fetchExternalAddonItems(targetOriginalId, targetOriginalType, sou
204204
return { metas: [], hasMovies: false, hasShows: false };
205205
}
206206
}
207+
208+
// Skip genre filtering at external addon level when using TMDB metadata source
209+
// This allows TMDB-enriched genre filtering to work properly after enrichment
210+
const shouldSkipExternalGenreFilter = userConfig?.metadataSource === 'tmdb' && genre && genre !== 'All';
211+
const genreForExternalAddon = shouldSkipExternalGenreFilter ? null : genre;
212+
213+
if (shouldSkipExternalGenreFilter) {
214+
console.log(`[ExternalAddon] Skipping external addon genre filter for "${genre}" - will filter after TMDB enrichment`);
215+
}
216+
207217
const tempExternalAddon = new ExternalAddon(sourceAddonConfig.apiBaseUrl);
208218
tempExternalAddon.apiBaseUrl = sourceAddonConfig.apiBaseUrl;
209-
attemptedUrl = tempExternalAddon.buildCatalogUrl(catalogEntry.originalId, catalogEntry.originalType, skip, genre);
219+
attemptedUrl = tempExternalAddon.buildCatalogUrl(catalogEntry.originalId, catalogEntry.originalType, skip, genreForExternalAddon);
210220
const response = await axios.get(attemptedUrl, { timeout: 20000 });
211221
if (!response.data || !Array.isArray(response.data.metas)) {
212222
console.error(`[AIOLists ExternalAddon] Invalid metadata response from ${attemptedUrl}: Data or metas array missing. Response:`, response.data);
@@ -227,14 +237,8 @@ async function fetchExternalAddonItems(targetOriginalId, targetOriginalType, sou
227237
// No metadata enrichment here - this will be done in the addon builder when serving to Stremio
228238
let enrichedMetas = metasFromExternal;
229239
let finalMetas = enrichedMetas;
230-
if (genre && finalMetas.length > 0) {
231-
// Basic genre filtering - comprehensive filtering will happen after enrichment in addon builder
232-
finalMetas = finalMetas.filter(meta => {
233-
// Most external addon items may not have detailed genre data at this stage
234-
// This filtering will be more comprehensive after enrichment in the addon builder
235-
return true; // For now, include all items - genre filtering will happen after enrichment
236-
});
237-
}
240+
// Note: Genre filtering is now handled after metadata enrichment in the addon builder
241+
// This ensures TMDB-enriched genres are properly used for filtering
238242
const hasMovies = finalMetas.some(m => m.type === 'movie');
239243
const hasShows = finalMetas.some(m => m.type === 'series');
240244
return { metas: finalMetas, hasMovies, hasShows };

src/integrations/mdblist.js

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -270,17 +270,8 @@ async function fetchListItemsFromPublicJson(username, listSlug, skip = 0, sort =
270270
// No metadata enrichment here - this will be done in the addon builder when serving to Stremio
271271
let enrichedItems = filteredItems;
272272

273-
// Apply genre filter after enrichment if specified
274-
if (genre && genre !== 'All' && enrichedItems.length > 0) {
275-
const beforeFilterCount = enrichedItems.length;
276-
// Basic genre filtering - comprehensive filtering will happen after enrichment in addon builder
277-
enrichedItems = enrichedItems.filter(item => {
278-
// Most raw MDBList items don't have detailed genre data at this stage
279-
// This filtering will be more comprehensive after enrichment in the addon builder
280-
return true; // For now, include all items - genre filtering will happen after enrichment
281-
});
282-
283-
}
273+
// Note: Genre filtering is now handled after metadata enrichment in the addon builder
274+
// This ensures TMDB-enriched genres are properly used for filtering
284275

285276
return {
286277
allItems: enrichedItems,
@@ -464,13 +455,9 @@ async function fetchListItems(
464455

465456
if (!initialItemsFlat || initialItemsFlat.length === 0) { morePagesFromMdbList = false; break; }
466457

467-
// For genre filtering, we'll use basic filtering on available data
468-
// Full metadata enrichment will happen later in the addon builder when serving to Stremio
469-
const genreItemsFromPage = initialItemsFlat.filter(item => {
470-
// Basic genre filtering - most MDBList items don't have detailed genre data at this stage
471-
// This filtering will be more comprehensive after enrichment in the addon builder
472-
return true; // For now, include all items - genre filtering will happen after enrichment
473-
});
458+
// Note: Genre filtering is now handled after metadata enrichment in the addon builder
459+
// This ensures TMDB-enriched genres are properly used for filtering
460+
const genreItemsFromPage = initialItemsFlat;
474461
allEnrichedGenreItems.push(...genreItemsFromPage);
475462
mdbListOffset += MDBLIST_PAGE_LIMIT;
476463
attemptsForGenreCompletion++;

src/routes/api.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2342,7 +2342,7 @@ module.exports = function(router) {
23422342

23432343
const defaultManifest = {
23442344
"id": "org.stremio.aiolists",
2345-
"version": `1.2.5-${Date.now()}`,
2345+
"version": `1.2.6-${Date.now()}`,
23462346
"name": "AIOLists",
23472347
"description": "Manage all your lists in one place.",
23482348
"resources": [

0 commit comments

Comments
 (0)