diff --git a/backend/packages/jellyfin.plugin/src/index.ts b/backend/packages/jellyfin.plugin/src/index.ts index ebeef36..85eb6b5 100644 --- a/backend/packages/jellyfin.plugin/src/index.ts +++ b/backend/packages/jellyfin.plugin/src/index.ts @@ -1,6 +1,6 @@ import { + CatalogueItem, EpisodeMetadata, - IndexItem, MovieMetadata, PaginatedResponse, PaginationParams, @@ -66,7 +66,7 @@ class JellyfinProvider extends SourceProvider { getMovieCatalogue = async ( userContext: UserContext, pagination: PaginationParams, - ): Promise> => { + ): Promise> => { const items = ( await this.getLibraryItems( new PluginContext(userContext.settings, userContext.token), @@ -82,6 +82,7 @@ class JellyfinProvider extends SourceProvider { itemsPerPage: pagination.itemsPerPage, items: items.slice(startIndex, endIndex).map((item) => ({ id: item.ProviderIds?.Tmdb, + tmdbId: item.ProviderIds?.Tmdb, })), }; }; diff --git a/backend/packages/reiverr-plugin/src/plugin.ts b/backend/packages/reiverr-plugin/src/plugin.ts index 57642d1..c04fd49 100644 --- a/backend/packages/reiverr-plugin/src/plugin.ts +++ b/backend/packages/reiverr-plugin/src/plugin.ts @@ -1,6 +1,6 @@ import { EpisodeMetadata, - IndexItem, + CatalogueItem, MovieMetadata, PaginatedResponse, PaginationParams, @@ -67,7 +67,7 @@ export abstract class SourceProvider { getMovieCatalogue?: ( context: UserContext, pagination: PaginationParams, - ) => Promise>; + ) => Promise>; /** * Returns an index of all episodes available in the source. @@ -75,7 +75,7 @@ export abstract class SourceProvider { getEpisodeCatalogue?: ( context: UserContext, pagination: PaginationParams, - ) => Promise>; + ) => Promise>; /** * Returns a list of stream candidates for a movie that the user can choose to stream from. diff --git a/backend/packages/reiverr-plugin/src/types.ts b/backend/packages/reiverr-plugin/src/types.ts index 4a3543b..1b7c411 100644 --- a/backend/packages/reiverr-plugin/src/types.ts +++ b/backend/packages/reiverr-plugin/src/types.ts @@ -146,8 +146,9 @@ export type PlaybackConfig = { defaultLanguage: string | undefined; }; -export type IndexItem = { +export type CatalogueItem = { id: string; + tmdbId: string; }; export type PaginatedResponse = { diff --git a/backend/src/media-sources/media-sources.controller.ts b/backend/src/media-sources/media-sources.controller.ts index 5c069a5..47492b1 100644 --- a/backend/src/media-sources/media-sources.controller.ts +++ b/backend/src/media-sources/media-sources.controller.ts @@ -40,7 +40,7 @@ import { } from 'src/common/common.dto'; import { MetadataService } from 'src/metadata/metadata.service'; import { - IndexItemDto, + CatalogueItemDto, PlaybackConfigDto, StreamCandidatesDto, StreamDto, @@ -93,14 +93,14 @@ export class MediaSourcesController { ) {} @Get(':sourceId/catalogue/movies') - @PaginatedApiOkResponse(IndexItemDto) + @PaginatedApiOkResponse(CatalogueItemDto) async getMovieCatalogue( @GetAuthUser() user: User, @Param('sourceId') sourceId: string, @GetAuthToken() token: string, @GetPaginationParams() pagination: PaginationParamsDto, - ): Promise> { + ): Promise> { const connection = await this.getConnection(sourceId); const catalogue = await connection.provider.getMovieCatalogue?.( @@ -122,13 +122,13 @@ export class MediaSourcesController { } @Get(':sourceId/catalogue/episodes') - @PaginatedApiOkResponse(IndexItemDto) + @PaginatedApiOkResponse(CatalogueItemDto) async getEpisodeCatalogue( @GetAuthUser() user: User, @Param('sourceId') sourceId: string, @GetAuthToken() token: string, @GetPaginationParams() pagination: PaginationParamsDto, - ): Promise> { + ): Promise> { const connection = await this.getConnection(sourceId); const catalogue = await connection.provider.getEpisodeCatalogue?.( diff --git a/backend/src/source-providers/source-provider.dto.ts b/backend/src/source-providers/source-provider.dto.ts index e5c6f62..60fddc3 100644 --- a/backend/src/source-providers/source-provider.dto.ts +++ b/backend/src/source-providers/source-provider.dto.ts @@ -1,28 +1,30 @@ +import { + AudioStream, + CatalogueItem, + PlaybackConfig, + Quality, + SourceProviderSettings, + SourceProviderSettingsInput, + SourceProviderSettingsLink, + SourceProviderSettingsTemplate, + Stream, + StreamCandidate, + StreamProperty, + Subtitles, + ValidationResponse, +} from '@aleksilassila/reiverr-plugin'; import { ApiProperty, ApiPropertyOptional, getSchemaPath, } from '@nestjs/swagger'; import { DeviceProfileDto } from './device-profile.dto'; -import { - AudioStream, - IndexItem, - PlaybackConfig, - SourceProviderSettings, - SourceProviderSettingsInput, - SourceProviderSettingsLink, - SourceProviderSettingsTemplate, - Quality, - Subtitles, - ValidationResponse, - StreamCandidate, - StreamProperty, - Stream, -} from '@aleksilassila/reiverr-plugin'; -export class IndexItemDto implements IndexItem { +export class CatalogueItemDto implements CatalogueItem { @ApiProperty() id: string; + @ApiProperty() + tmdbId: string; } class PluginSettingsLinkDto implements SourceProviderSettingsLink { diff --git a/package.json b/package.json index c65095e..bd2fa9e 100644 --- a/package.json +++ b/package.json @@ -22,10 +22,9 @@ "lint": "prettier --plugin-search-dir . --check . && eslint .", "format": "prettier --plugin-search-dir . --write .", "openapi:update": "npm run --prefix backend generate && npm run openapi:codegen", - "openapi:codegen": "openapi-typescript \"backend/swagger-spec.json\" -o src/lib/apis/reiverr/reiverr.generated.d.ts", - "openapi:generate": "swagger-typescript-api -p \"backend/swagger-spec.json\" -o src/lib/apis/reiverr -n reiverr.openapi.ts --axios --module-name-first-tag", - "openapi:generate-tmdb": "swagger-typescript-api -p \"https://developer.themoviedb.org/openapi/64542913e1f86100738e227f\" -o src/lib/apis/tmdb -n tmdb-v3.openapi.ts --axios --module-name-first-tag --extract-response-body --api-class-name TmdbApiGenerated", - "openapi:generate-tmdb-4": "swagger-typescript-api -p \"https://developer.themoviedb.org/openapi/6453cc549c91cf004cd2a015\" -o src/lib/apis/tmdb -n tmdb-v4.openapi.ts --axios --module-name-first-tag --extract-response-body --api-class-name TmdbApi4Generated" + "openapi:generate:reiverr": "swagger-typescript-api -p \"backend/swagger-spec.json\" -o src/lib/apis/reiverr -n reiverr.openapi.ts --axios --module-name-first-tag", + "openapi:generate:tmdb": "swagger-typescript-api -p \"https://developer.themoviedb.org/openapi/64542913e1f86100738e227f\" -o src/lib/apis/tmdb -n tmdb-v3.openapi.ts --axios --module-name-first-tag --extract-response-body --api-class-name TmdbApiGenerated", + "openapi:generate:tmdb-4": "swagger-typescript-api -p \"https://developer.themoviedb.org/openapi/6453cc549c91cf004cd2a015\" -o src/lib/apis/tmdb -n tmdb-v4.openapi.ts --axios --module-name-first-tag --extract-response-body --api-class-name TmdbApi4Generated" }, "devDependencies": { "@jellyfin/sdk": "^0.8.2", diff --git a/src/lib/pages/LibraryPage/LibraryPage.svelte b/src/lib/pages/LibraryPage/LibraryPage.svelte index 0d5a82f..17da254 100644 --- a/src/lib/pages/LibraryPage/LibraryPage.svelte +++ b/src/lib/pages/LibraryPage/LibraryPage.svelte @@ -15,8 +15,8 @@ .map((s) => s.source); - - + + - + {#if !$isLoading}