api/bluesky: add support for saving images

one or multiple, everything works
This commit is contained in:
wukko
2024-09-01 16:37:24 +06:00
parent d9925f2233
commit 93f2a6b226
4 changed files with 60 additions and 2 deletions

View File

@@ -1,5 +1,6 @@
import HLS from "hls-parser";
import { cobaltUserAgent } from "../../config.js";
import { createStream } from "../../stream/manage.js";
const extractVideo = async ({ getPost, filename }) => {
const urlMasterHLS = getPost?.thread?.post?.embed?.playlist;
@@ -24,7 +25,41 @@ const extractVideo = async ({ getPost, filename }) => {
}
}
export default async function ({ user, post }) {
const extractImages = async ({ getPost, filename, alwaysProxy }) => {
const images = getPost?.thread?.post?.embed?.images;
if (!images || images.length === 0) {
return { error: "fetch.empty" };
}
if (images.length === 1) return {
urls: images[0].fullsize,
isPhoto: true,
filename: `${filename}.jpg`,
}
const picker = images.map((image, i) => {
let url = image.fullsize;
let proxiedImage = createStream({
service: "bluesky",
type: "proxy",
u: url,
filename: `${filename}_${i + 1}.jpg`,
});
if (alwaysProxy) url = proxiedImage;
return {
type: "photo",
url,
thumb: proxiedImage,
}
});
return { picker };
}
export default async function ({ user, post, alwaysProxy }) {
const apiEndpoint = new URL("https://public.api.bsky.app/xrpc/app.bsky.feed.getPostThread?depth=0&parentHeight=0");
apiEndpoint.searchParams.set(
"uri",
@@ -47,6 +82,9 @@ export default async function ({ user, post }) {
if (embedType === "app.bsky.embed.video#view") {
return await extractVideo({ getPost, filename });
}
if (embedType === "app.bsky.embed.images#view") {
return await extractImages({ getPost, filename, alwaysProxy });
}
return { error: "fetch.empty" };
}