From 8cb2a6e2fbfe5b28198d9b4fd261518fc593f43f Mon Sep 17 00:00:00 2001 From: David Ludwig Date: Sat, 8 May 2021 15:30:17 +0000 Subject: [PATCH] Add utils and movie link interface method to Plex package --- services/plex/src/services/IpcInterface.ts | 22 ++++++++++++++++++++++ services/plex/src/utils.ts | 9 +++++++++ 2 files changed, 31 insertions(+) create mode 100644 services/plex/src/utils.ts diff --git a/services/plex/src/services/IpcInterface.ts b/services/plex/src/services/IpcInterface.ts index e27a801..3e90321 100644 --- a/services/plex/src/services/IpcInterface.ts +++ b/services/plex/src/services/IpcInterface.ts @@ -1,5 +1,7 @@ import { SOCKET_PATH } from "@autoplex-api/plex"; +import { PlexMovie } from "@autoplex/database"; import { IpcServerService } from "@autoplex/ipc"; +import { plexMediaUrl } from "../utils"; export default class IpcInterface extends IpcServerService { @@ -12,4 +14,24 @@ export default class IpcInterface extends IpcServerService * The path to the socket file */ public readonly SOCKET_PATH = SOCKET_PATH; + + /** + * Install the message handlers + */ + protected installMessageHandlers() { + this.addMessageHandler("movie_links", this.movieLinks); + } + + /** + * Fetch links to Plex media items + */ + protected async movieLinks(tmdbIds: (number|string)[]) { + let plexKeys = await Promise.all(tmdbIds.map( + tmdbId => PlexMovie.findPlexKey(tmdbId) + )); + return tmdbIds.reduce((o, k, i) => ({ + ...o, + [k]: (plexKeys[i] !== null ? plexMediaUrl(plexKeys[i]!) : null) + }), {}); + } } diff --git a/services/plex/src/utils.ts b/services/plex/src/utils.ts new file mode 100644 index 0000000..61c0b22 --- /dev/null +++ b/services/plex/src/utils.ts @@ -0,0 +1,9 @@ +import { env } from "@autoplex/utils"; + +/** + * Generate a URL to a movie/TV show on Plex + */ + export function plexMediaUrl(plexKey: number) { + return `${env("PLEX_URL")}/web/index.html#!/server/${env("PLEX_SERVER_ID")}/` + + `details?key=%2Flibrary%2Fmetadata%2F${plexKey}&context=library%3Acontent.library;`; +}