diff --git a/addon/lib/getManifest.js b/addon/lib/getManifest.js index 7142e14..0fb60f3 100644 --- a/addon/lib/getManifest.js +++ b/addon/lib/getManifest.js @@ -119,6 +119,7 @@ async function getManifest(config) { const language = config.language || DEFAULT_LANGUAGE; const tmdbPrefix = config.tmdbPrefix === "true"; const provideImdbId = config.provideImdbId === "true"; + const returnImdbId = config.returnImdbId === "true"; const sessionId = config.sessionId; const userCatalogs = config.catalogs || getDefaultCatalogs(); const translatedCatalogs = loadTranslations(language); @@ -210,7 +211,7 @@ async function getManifest(config) { `Language: ${language}`, `TMDB Account: ${sessionId ? 'Connected' : 'Not Connected'}`, `MDBList Integration: ${config.mdblistkey ? 'Connected' : 'Not Connected'}`, - `IMDb Integration: ${provideImdbId ? 'Enabled' : 'Disabled'}`, + `IMDb Integration: ${provideImdbId || returnImdbId ? 'Enabled' : 'Disabled'}`, `RPDB Integration: ${config.rpdbkey ? 'Enabled' : 'Disabled'}`, `Search: ${config.searchEnabled !== "false" ? 'Enabled' : 'Disabled'}`, `Active Catalogs: ${catalogs.length}` @@ -226,7 +227,7 @@ async function getManifest(config) { description: "Stremio addon that provides rich metadata for movies and TV shows from TMDB, featuring customizable catalogs, multi-language support, favorites lists, watchlist, ratings, and IMDb integration. Current settings: " + activeConfigs, resources: ["catalog", "meta"], types: ["movie", "series"], - idPrefixes: provideImdbId ? ["tmdb:", "tt"] : ["tmdb:"], + idPrefixes: provideImdbId || returnImdbId ? ["tmdb:", "tt"] : ["tmdb:"], stremioAddonsConfig, behaviorHints: { configurable: true, diff --git a/addon/lib/getMeta.js b/addon/lib/getMeta.js index e81173b..82ccbab 100644 --- a/addon/lib/getMeta.js +++ b/addon/lib/getMeta.js @@ -64,6 +64,7 @@ const buildMovieResponse = async (res, type, language, tmdbId, rpdbkey, config = const imdbRating = imdbRatingRaw || res.vote_average?.toFixed(1) || "N/A"; const castCount = config.castCount !== undefined ? Math.max(1, Math.min(5, Number(config.castCount))) : 5; + const returnImdbId = config.returnImdbId === true || config.returnImdbId === "true"; const hideInCinemaTag = config.hideInCinemaTag === true || config.hideInCinemaTag === "true"; const response = { @@ -83,7 +84,7 @@ const buildMovieResponse = async (res, type, language, tmdbId, rpdbkey, config = background: `https://image.tmdb.org/t/p/original${res.backdrop_path}`, poster, runtime: Utils.parseRunTime(res.runtime), - id: `tmdb:${tmdbId}`, + id: returnImdbId ? res.imdb_id : `tmdb:${tmdbId}`, genres: Utils.parseGenres(res.genres), releaseInfo: res.release_date ? res.release_date.substr(0, 4) : "", trailerStreams: Utils.parseTrailerStream(res.videos), @@ -130,6 +131,7 @@ const buildTvResponse = async (res, type, language, tmdbId, rpdbkey, config = {} const imdbRating = imdbRatingRaw || res.vote_average?.toFixed(1) || "N/A"; const castCount = config.castCount !== undefined ? Math.max(1, Math.min(5, Number(config.castCount))) : 5; + const returnImdbId = config.returnImdbId === true || config.returnImdbId === "true"; const hideInCinemaTag = config.hideInCinemaTag === true || config.hideInCinemaTag === "true"; const response = { @@ -148,7 +150,7 @@ const buildTvResponse = async (res, type, language, tmdbId, rpdbkey, config = {} year: Utils.parseYear(res.status, res.first_air_date, res.last_air_date), background: `https://image.tmdb.org/t/p/original${res.backdrop_path}`, slug: Utils.parseSlug(type, res.name, res.external_ids.imdb_id), - id: `tmdb:${tmdbId}`, + id: returnImdbId ? res.imdb_id : `tmdb:${tmdbId}`, genres: Utils.parseGenres(res.genres), releaseInfo: Utils.parseYear(res.status, res.first_air_date, res.last_air_date), videos: episodes || [], diff --git a/configure/src/contexts/ConfigContext.tsx b/configure/src/contexts/ConfigContext.tsx index 3564197..0525ddc 100644 --- a/configure/src/contexts/ConfigContext.tsx +++ b/configure/src/contexts/ConfigContext.tsx @@ -19,6 +19,7 @@ export function ConfigProvider({ children }: { children: React.ReactNode }) { const [mdblistkey, setMdblistkey] = useState(""); const [includeAdult, setIncludeAdult] = useState(false); const [provideImdbId, setProvideImdbId] = useState(false); + const [returnImdbId, setReturnImdbId] = useState(false); const [tmdbPrefix, setTmdbPrefix] = useState(false); const [hideEpisodeThumbnails, setHideEpisodeThumbnails] = useState(false); const [language, setLanguage] = useState("en-US"); @@ -49,6 +50,7 @@ export function ConfigProvider({ children }: { children: React.ReactNode }) { if (config.mdblistkey) setMdblistkey(config.mdblistkey); if (config.geminikey) setGeminiKey(config.geminikey); if (config.provideImdbId) setProvideImdbId(config.provideImdbId === "true"); + if (config.returnImdbId) setReturnImdbId(config.returnImdbId === "true"); if (config.tmdbPrefix) setTmdbPrefix(config.tmdbPrefix === "true"); if (config.hideEpisodeThumbnails) setHideEpisodeThumbnails(config.hideEpisodeThumbnails === "true"); if (config.sessionId) setSessionId(config.sessionId); @@ -106,6 +108,7 @@ export function ConfigProvider({ children }: { children: React.ReactNode }) { mdblistkey, includeAdult, provideImdbId, + returnImdbId, tmdbPrefix, hideEpisodeThumbnails, language, @@ -121,6 +124,7 @@ export function ConfigProvider({ children }: { children: React.ReactNode }) { setMdblistkey, setIncludeAdult, setProvideImdbId, + setReturnImdbId, setTmdbPrefix, setHideEpisodeThumbnails, setLanguage, diff --git a/configure/src/contexts/config.ts b/configure/src/contexts/config.ts index 410636c..c9305f2 100644 --- a/configure/src/contexts/config.ts +++ b/configure/src/contexts/config.ts @@ -14,6 +14,7 @@ export type ConfigContextType = { mdblistkey: string; includeAdult: boolean; provideImdbId: boolean; + returnImdbId: boolean; tmdbPrefix: boolean; hideEpisodeThumbnails: boolean; language: string; @@ -29,6 +30,7 @@ export type ConfigContextType = { setMdblistkey: (mdblistkey: string) => void; setIncludeAdult: (includeAdult: boolean) => void; setProvideImdbId: (provideImdbId: boolean) => void; + setReturnImdbId: (returnImdbId: boolean) => void; setTmdbPrefix: (tmdbPrefix: boolean) => void; setHideEpisodeThumbnails: (hideEpisodeThumbnails: boolean) => void; setLanguage: (language: string) => void; diff --git a/configure/src/lib/config.ts b/configure/src/lib/config.ts index 76e4092..158e09f 100644 --- a/configure/src/lib/config.ts +++ b/configure/src/lib/config.ts @@ -40,6 +40,7 @@ export function generateAddonUrl(config: AddonConfig): string { })), includeAdult: config.includeAdult === true ? "true" : undefined, provideImdbId: config.provideImdbId === true ? "true" : undefined, + returnImdbId: config.returnImdbId === true ? "true" : undefined, tmdbPrefix: config.tmdbPrefix === true ? "true" : undefined, hideEpisodeThumbnails: config.hideEpisodeThumbnails === true ? "true" : undefined, searchEnabled: config.searchEnabled === false ? "false" : undefined, diff --git a/configure/src/pages/Others.tsx b/configure/src/pages/Others.tsx index 45d0e1a..f8bcab0 100644 --- a/configure/src/pages/Others.tsx +++ b/configure/src/pages/Others.tsx @@ -8,6 +8,7 @@ const Others = () => { const { hideEpisodeThumbnails, setHideEpisodeThumbnails } = useConfig(); const { includeAdult, setIncludeAdult } = useConfig(); const { provideImdbId, setProvideImdbId } = useConfig(); + const { returnImdbId, setReturnImdbId } = useConfig(); const { tmdbPrefix, setTmdbPrefix } = useConfig(); const { hideInCinemaTag, setHideInCinemaTag } = useConfig(); const { castCount, setCastCount } = useConfig(); @@ -43,15 +44,26 @@ const Others = () => {

- Provide IMDB metadata + Provide IMDb metadata

- Include IMDB IDs in metadata for better integration with other + Include items with IMDb IDs when handling metadata requests for better integration with other addons.

setProvideImdbId(!provideImdbId)} />
+ +
+

+ Return IMDb ID +

+

+ Return only items with IMDb IDs in catalogues for better integration with other addons. +

+
+ setReturnImdbId(!returnImdbId)} /> +

Use TMDB prefix