feat: add thumbnails

This commit is contained in:
Viren070
2025-02-05 14:10:20 +00:00
parent 25602445a1
commit 40ea961ee5
+50 -26
View File
@@ -734,8 +734,27 @@ async function fetchFiles(fetchUrl, accessToken) {
let err = await response.text(); let err = await response.text();
throw new Error(err); throw new Error(err);
} }
// handle paginated results
console.log({ nextPage: response.nextPageToken });
const results = await response.json(); const results = await response.json();
while (results.nextPageToken) {
console.log({ message: "Fetching next page of results" });
fetchUrl.searchParams.set("pageToken", results.nextPageToken);
const nextPageResponse = await fetch(fetchUrl.toString(), {
headers: { Authorization: `Bearer ${accessToken}` },
});
if (!nextPageResponse.ok) {
let err = await nextPageResponse.text();
throw new Error(err);
}
const nextPageResults = await nextPageResponse.json();
results.files = [...results.files, ...nextPageResults.files];
results.nextPageToken = nextPageResults.nextPageToken;
}
return results; return results;
} catch (error) { } catch (error) {
console.error({ console.error({
@@ -753,7 +772,7 @@ async function fetchFile(fileId, accessToken) {
); );
const searchParams = { const searchParams = {
supportsAllDrives: true, supportsAllDrives: true,
fields: "id,name,mimeType,size,videoMediaMetadata,fileExtension", fields: "id,name,mimeType,size,videoMediaMetadata,fileExtension,createdTime, thumbnailLink, iconLink",
}; };
fetchUrl.search = new URLSearchParams(searchParams).toString(); fetchUrl.search = new URLSearchParams(searchParams).toString();
const response = await fetch(fetchUrl.toString(), { const response = await fetch(fetchUrl.toString(), {
@@ -947,6 +966,16 @@ async function handleRequest(request) {
return createProxiedStreamResponse(fileId, filename, request); return createProxiedStreamResponse(fileId, filename, request);
} }
const createMetaObject = (id, name, size, thumbnail, icon) => ({
id: `gdrive:${id}`,
name,
posterShape: "landscape",
background: thumbnail,
poster: thumbnail,
description: `Name: ${name}\nSize: ${formatSize(size)}`,
type: "movie",
});
if (metaMatch) { if (metaMatch) {
const fileId = metaMatch[2]; const fileId = metaMatch[2];
if (!fileId) { if (!fileId) {
@@ -977,12 +1006,13 @@ async function handleRequest(request) {
console.log({ message: "File fetched", file }); console.log({ message: "File fetched", file });
const parsedFile = parseFile(file); const parsedFile = parseFile(file);
return createJsonResponse({ return createJsonResponse({
meta: { meta: createMetaObject(
id: fileId, parsedFile.id,
name: parsedFile.name, parsedFile.name,
description: `Name: ${parsedFile.name}\nSize: ${parsedFile.formattedSize}`, parsedFile.size,
type: "movie", file.thumbnailLink,
}, file.iconLink
),
}); });
} }
@@ -1002,7 +1032,7 @@ async function handleRequest(request) {
includeItemsFromAllDrives: "true", includeItemsFromAllDrives: "true",
supportsAllDrives: "true", supportsAllDrives: "true",
pageSize: "1000", pageSize: "1000",
fields: "files(id,name,size,videoMediaMetadata,mimeType,fileExtension)", fields: "files(id,name,size,videoMediaMetadata,mimeType,fileExtension,thumbnailLink,iconLink)",
}; };
const fetchUrl = new URL(API_ENDPOINTS.DRIVE_FETCH_FILES); const fetchUrl = new URL(API_ENDPOINTS.DRIVE_FETCH_FILES);
@@ -1017,15 +1047,10 @@ async function handleRequest(request) {
} }
const results = await fetchFiles(fetchUrl, accessToken); const results = await fetchFiles(fetchUrl, accessToken);
const metas = results.files.map((file) => ({ const metas = results.files.map((file) =>
id: `gdrive:${file.id}`, createMetaObject(file.id, file.name, file.size, file.thumbnailLink, file.iconLink)
name: file.name, );
description: `Name: ${file.name}\nSize: ${formatSize( console.log({ message: "Catalog response", numMetas: metas.length });
file.size
)}`,
type: "movie",
}));
return createJsonResponse({ metas }); return createJsonResponse({ metas });
} }
@@ -1040,7 +1065,7 @@ async function handleRequest(request) {
includeItemsFromAllDrives: "true", includeItemsFromAllDrives: "true",
supportsAllDrives: "true", supportsAllDrives: "true",
pageSize: "1000", pageSize: "1000",
fields: "files(id,name,size,videoMediaMetadata,mimeType,fileExtension)", fields: "files(id,name,size,videoMediaMetadata,mimeType,fileExtension,thumbnailLink,iconLink)",
}; };
const fetchUrl = new URL(API_ENDPOINTS.DRIVE_FETCH_FILES); const fetchUrl = new URL(API_ENDPOINTS.DRIVE_FETCH_FILES);
@@ -1060,14 +1085,13 @@ async function handleRequest(request) {
return createJsonResponse({ metas: [] }); return createJsonResponse({ metas: [] });
} }
const metas = results.files.map((file) => ({ const metas = results.files.map((file) => createMetaObject(
id: `gdrive:${file.id}`, file.id,
name: file.name, file.name,
description: `Name: ${file.name}\nSize: ${formatSize( file.size,
file.size file.thumbnailLink,
)}`, file.iconLink
type: "movie", ));
}));
return createJsonResponse({ metas }); return createJsonResponse({ metas });
} }