fix: reduce max files to fetch from 15000 to 3000 and fix pagination

This commit is contained in:
Viren070
2025-02-05 14:35:24 +00:00
parent 71285a06ea
commit aa0ed0dec2
+22 -9
View File
@@ -32,7 +32,7 @@ const CONFIG = {
tmdbApiKey: null, tmdbApiKey: null,
enableSearchCatalog: true, enableSearchCatalog: true,
enableVideoCatalog: true, enableVideoCatalog: true,
maxFilesToFetch: 15000, maxFilesToFetch: 3000,
driveQueryTerms: { driveQueryTerms: {
episodeFormat: "fullText", episodeFormat: "fullText",
titleName: "name", titleName: "name",
@@ -736,10 +736,11 @@ async function fetchFiles(fetchUrl, accessToken) {
throw new Error(err); throw new Error(err);
} }
// handle paginated results // handle paginated results
const results = await response.json(); const results = await response.json();
console.log({message: "Initial search yielded results", numItems: results.files.length});
while (results.nextPageToken) { while (results.nextPageToken) {
console.log({ message: "Fetching next page of results", nextPageToken: results.nextPageToken });
fetchUrl.searchParams.set("pageToken", results.nextPageToken); fetchUrl.searchParams.set("pageToken", results.nextPageToken);
const nextPageResponse = await fetch(fetchUrl.toString(), { const nextPageResponse = await fetch(fetchUrl.toString(), {
headers: { Authorization: `Bearer ${accessToken}` }, headers: { Authorization: `Bearer ${accessToken}` },
@@ -752,8 +753,8 @@ async function fetchFiles(fetchUrl, accessToken) {
const nextPageResults = await nextPageResponse.json(); const nextPageResults = await nextPageResponse.json();
results.files = [...results.files, ...nextPageResults.files]; results.files = [...results.files, ...nextPageResults.files];
console.log({ message: "Fetched next page of results", nextPageToken: nextPageResults.nextPageToken });
results.nextPageToken = nextPageResults.nextPageToken; results.nextPageToken = nextPageResults.nextPageToken;
console.log({message: "Searched next page", nextPageResults: nextPageResults.files.length, nextPageToken: nextPageResults.nextPageToken, totalResults: results.files.length});
if (results.files.length >= CONFIG.maxFilesToFetch) { if (results.files.length >= CONFIG.maxFilesToFetch) {
console.log({ console.log({
message: "Reached maximum number of files", message: "Reached maximum number of files",
@@ -761,6 +762,10 @@ async function fetchFiles(fetchUrl, accessToken) {
}); });
break; break;
} }
if (nextPageResults.files.length === 0) {
console.log({message: "No more files to fetch"});
break;
}
} }
return results; return results;
@@ -780,7 +785,7 @@ async function fetchFile(fileId, accessToken) {
); );
const searchParams = { const searchParams = {
supportsAllDrives: true, supportsAllDrives: true,
fields: "id,name,mimeType,size,videoMediaMetadata,fileExtension,createdTime, thumbnailLink, iconLink", 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(), {
@@ -974,13 +979,19 @@ async function handleRequest(request) {
return createProxiedStreamResponse(fileId, filename, request); return createProxiedStreamResponse(fileId, filename, request);
} }
const createMetaObject = (id, name, size, thumbnail, icon) => ({ const createMetaObject = (id, name, size, thumbnail, createdTime) => ({
id: `gdrive:${id}`, id: `gdrive:${id}`,
name, name,
posterShape: "landscape", posterShape: "landscape",
background: thumbnail, background: thumbnail,
poster: thumbnail, poster: thumbnail,
description: `Name: ${name}\nSize: ${formatSize(size)}`, description: `Size: ${formatSize(size)} Created: ${new Date(
createdTime) .toLocaleDateString("en-GB", {
year: "numeric",
month: "long",
day: "numeric",
})}`,
type: "movie", type: "movie",
}); });
@@ -1019,7 +1030,8 @@ async function handleRequest(request) {
parsedFile.name, parsedFile.name,
parsedFile.size, parsedFile.size,
file.thumbnailLink, file.thumbnailLink,
file.iconLink file.createdTime
), ),
}); });
} }
@@ -1040,7 +1052,8 @@ async function handleRequest(request) {
includeItemsFromAllDrives: "true", includeItemsFromAllDrives: "true",
supportsAllDrives: "true", supportsAllDrives: "true",
pageSize: "1000", pageSize: "1000",
fields: "nextPageToken,files(id,name,size,videoMediaMetadata,mimeType,fileExtension,thumbnailLink,iconLink)", orderBy: "createdTime desc",
fields: "nextPageToken,incompleteSearch,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);