From dbb377e43fe62032706adf8f329cd23b68cf92fc Mon Sep 17 00:00:00 2001 From: Marks Polakovs Date: Fri, 1 Mar 2024 13:12:31 +0000 Subject: [PATCH 1/3] [BDGR-117] Direct media download links in Server UI --- server/app/media/download/[id]/route.ts | 32 +++++++++++++++++++++++++ server/components/MediaState.tsx | 7 ++++++ 2 files changed, 39 insertions(+) create mode 100644 server/app/media/download/[id]/route.ts diff --git a/server/app/media/download/[id]/route.ts b/server/app/media/download/[id]/route.ts new file mode 100644 index 000000000..5b341bb71 --- /dev/null +++ b/server/app/media/download/[id]/route.ts @@ -0,0 +1,32 @@ +import { requirePermission } from "@/lib/auth"; +import { db } from "@/lib/db"; +import { getPresignedURL } from "@/lib/s3"; +import { notFound } from "next/navigation"; +import { NextRequest, NextResponse } from "next/server"; + +export async function GET( + req: NextRequest, + { params }: { params: { id: string } }, +) { + await requirePermission("Basic"); + const media = await db.media.findUnique({ + where: { + id: parseInt(params.id), + }, + }); + if (!media) { + notFound(); + } + if (media.state !== "Ready" && media.state !== "ReadyWithWarnings") { + return new NextResponse("This media item is not ready yet.", { + status: 400, + }); + } + if (!media.path) { + return new NextResponse("This media item has no path.", { status: 400 }); + } + const url = await getPresignedURL(media.path, 3600); + return NextResponse.redirect(url, { + status: 303, + }); +} diff --git a/server/components/MediaState.tsx b/server/components/MediaState.tsx index 200c3175d..9bc0f844a 100644 --- a/server/components/MediaState.tsx +++ b/server/components/MediaState.tsx @@ -26,6 +26,7 @@ import { PopoverTrigger, } from "@badger/components/popover"; import { MediaSelectOrUploadDialog, PastShowsMedia } from "./MediaSelection"; +import Link from "next/link"; export interface CompleteMedia extends Media { tasks: MediaProcessingTask[]; @@ -180,6 +181,12 @@ function MediaProcessingState({ > Replace + {media.state === MediaState.Ready || + (media.state === MediaState.ReadyWithWarnings && ( + + Download + + ))} From 59be14a8c52f5405101c72cdd6abe3c55f1403a8 Mon Sep 17 00:00:00 2001 From: Marks Polakovs Date: Fri, 1 Mar 2024 13:13:06 +0000 Subject: [PATCH 2/3] Small text --- server/components/MediaState.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/server/components/MediaState.tsx b/server/components/MediaState.tsx index 9bc0f844a..e1d35a10a 100644 --- a/server/components/MediaState.tsx +++ b/server/components/MediaState.tsx @@ -183,7 +183,11 @@ function MediaProcessingState({ {media.state === MediaState.Ready || (media.state === MediaState.ReadyWithWarnings && ( - + Download ))} From 9151eee3c9b95056e10c688a591d18c50f718756 Mon Sep 17 00:00:00 2001 From: Marks Polakovs Date: Fri, 1 Mar 2024 13:13:20 +0000 Subject: [PATCH 3/3] Oops --- server/components/MediaState.tsx | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/server/components/MediaState.tsx b/server/components/MediaState.tsx index e1d35a10a..859f2f664 100644 --- a/server/components/MediaState.tsx +++ b/server/components/MediaState.tsx @@ -181,16 +181,16 @@ function MediaProcessingState({ > Replace - {media.state === MediaState.Ready || - (media.state === MediaState.ReadyWithWarnings && ( - - Download - - ))} + {(media.state === MediaState.Ready || + media.state === MediaState.ReadyWithWarnings) && ( + + Download + + )}