mirror of
https://github.com/Viren070/stremio-gdrive-addon.git
synced 2025-12-01 23:20:04 +01:00
feat: add thumbnails
This commit is contained in:
+50
-26
@@ -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 });
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user