mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-17 18:12:04 +00:00
feat(Google Drive Node): Overhaul (#5941)
This commit is contained in:
133
packages/nodes-base/nodes/Google/Drive/v2/helpers/utils.ts
Normal file
133
packages/nodes-base/nodes/Google/Drive/v2/helpers/utils.ts
Normal file
@@ -0,0 +1,133 @@
|
||||
import type { IDataObject, IExecuteFunctions } from 'n8n-workflow';
|
||||
import { BINARY_ENCODING, NodeOperationError } from 'n8n-workflow';
|
||||
|
||||
import type { Readable } from 'stream';
|
||||
import { RLC_DRIVE_DEFAULT, RLC_FOLDER_DEFAULT, UPLOAD_CHUNK_SIZE } from './interfaces';
|
||||
|
||||
export function prepareQueryString(fields: string[] | undefined) {
|
||||
let queryFields = 'id, name';
|
||||
if (fields) {
|
||||
if (fields.includes('*')) {
|
||||
queryFields = '*';
|
||||
} else {
|
||||
queryFields = fields.join(', ');
|
||||
}
|
||||
}
|
||||
return queryFields;
|
||||
}
|
||||
|
||||
export async function getItemBinaryData(
|
||||
this: IExecuteFunctions,
|
||||
inputDataFieldName: string,
|
||||
i: number,
|
||||
chunkSize = UPLOAD_CHUNK_SIZE,
|
||||
) {
|
||||
let contentLength: number;
|
||||
let fileContent: Buffer | Readable;
|
||||
let originalFilename: string | undefined;
|
||||
let mimeType;
|
||||
|
||||
if (!inputDataFieldName) {
|
||||
throw new NodeOperationError(
|
||||
this.getNode(),
|
||||
'The name of the input field containing the binary file data must be set',
|
||||
{
|
||||
itemIndex: i,
|
||||
},
|
||||
);
|
||||
}
|
||||
const binaryData = this.helpers.assertBinaryData(i, inputDataFieldName);
|
||||
|
||||
if (binaryData.id) {
|
||||
// Stream data in 256KB chunks, and upload the via the resumable upload api
|
||||
fileContent = this.helpers.getBinaryStream(binaryData.id, chunkSize);
|
||||
const metadata = await this.helpers.getBinaryMetadata(binaryData.id);
|
||||
contentLength = metadata.fileSize;
|
||||
originalFilename = metadata.fileName;
|
||||
if (metadata.mimeType) mimeType = binaryData.mimeType;
|
||||
} else {
|
||||
fileContent = Buffer.from(binaryData.data, BINARY_ENCODING);
|
||||
contentLength = fileContent.length;
|
||||
originalFilename = binaryData.fileName;
|
||||
mimeType = binaryData.mimeType;
|
||||
}
|
||||
|
||||
return {
|
||||
contentLength,
|
||||
fileContent,
|
||||
originalFilename,
|
||||
mimeType,
|
||||
};
|
||||
}
|
||||
|
||||
export function setFileProperties(body: IDataObject, options: IDataObject) {
|
||||
if (options.propertiesUi) {
|
||||
const values = ((options.propertiesUi as IDataObject).propertyValues as IDataObject[]) || [];
|
||||
|
||||
body.properties = values.reduce(
|
||||
(acc, value) => Object.assign(acc, { [`${value.key}`]: value.value }),
|
||||
{} as IDataObject,
|
||||
);
|
||||
}
|
||||
|
||||
if (options.appPropertiesUi) {
|
||||
const values =
|
||||
((options.appPropertiesUi as IDataObject).appPropertyValues as IDataObject[]) || [];
|
||||
|
||||
body.appProperties = values.reduce(
|
||||
(acc, value) => Object.assign(acc, { [`${value.key}`]: value.value }),
|
||||
{} as IDataObject,
|
||||
);
|
||||
}
|
||||
|
||||
return body;
|
||||
}
|
||||
|
||||
export function setUpdateCommonParams(qs: IDataObject, options: IDataObject) {
|
||||
if (options.keepRevisionForever) {
|
||||
qs.keepRevisionForever = options.keepRevisionForever;
|
||||
}
|
||||
|
||||
if (options.ocrLanguage) {
|
||||
qs.ocrLanguage = options.ocrLanguage;
|
||||
}
|
||||
|
||||
if (options.useContentAsIndexableText) {
|
||||
qs.useContentAsIndexableText = options.useContentAsIndexableText;
|
||||
}
|
||||
|
||||
return qs;
|
||||
}
|
||||
|
||||
export function updateDriveScopes(
|
||||
qs: IDataObject,
|
||||
driveId: string,
|
||||
defaultDrive = RLC_DRIVE_DEFAULT,
|
||||
) {
|
||||
if (driveId) {
|
||||
if (driveId === defaultDrive) {
|
||||
qs.includeItemsFromAllDrives = false;
|
||||
qs.supportsAllDrives = false;
|
||||
qs.spaces = 'appDataFolder, drive';
|
||||
qs.corpora = 'user';
|
||||
} else {
|
||||
qs.driveId = driveId;
|
||||
qs.corpora = 'drive';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function setParentFolder(
|
||||
folderId: string,
|
||||
driveId: string,
|
||||
folderIdDefault = RLC_FOLDER_DEFAULT,
|
||||
driveIdDefault = RLC_DRIVE_DEFAULT,
|
||||
) {
|
||||
if (folderId !== folderIdDefault) {
|
||||
return folderId;
|
||||
} else if (driveId && driveId !== driveIdDefault) {
|
||||
return driveId;
|
||||
} else {
|
||||
return 'root';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user