|
| 1 | +import googleDrive from "../../google_drive.app.mjs"; |
| 2 | +import sourceComponent from "../new-files-instant/new-files-instant.mjs"; |
| 3 | +import sampleEmit from "../new-files-instant/test-event.mjs"; |
| 4 | +import { DEFAULT_POLLING_SOURCE_TIMER_INTERVAL } from "@pipedream/platform"; |
| 5 | + |
| 6 | +export default { |
| 7 | + key: "google_drive-new-files-shared-drive", |
| 8 | + name: "New Files (Shared Drive)", |
| 9 | + description: "Emit new event when a new file is added in your shared Google Drive", |
| 10 | + version: "0.0.1", |
| 11 | + type: "source", |
| 12 | + dedupe: "unique", |
| 13 | + props: { |
| 14 | + googleDrive, |
| 15 | + db: "$.service.db", |
| 16 | + timer: { |
| 17 | + label: "Polling interval", |
| 18 | + description: "Interval to poll the Google Drive API for new files", |
| 19 | + type: "$.interface.timer", |
| 20 | + default: { |
| 21 | + intervalSeconds: DEFAULT_POLLING_SOURCE_TIMER_INTERVAL, |
| 22 | + }, |
| 23 | + }, |
| 24 | + drive: { |
| 25 | + propDefinition: [ |
| 26 | + googleDrive, |
| 27 | + "sharedDrive", |
| 28 | + ], |
| 29 | + description: "Select a [Shared Drive](https://support.google.com/a/users/answer/9310351) from this list", |
| 30 | + optional: false, |
| 31 | + }, |
| 32 | + folders: sourceComponent.props.folders, |
| 33 | + }, |
| 34 | + hooks: { |
| 35 | + async deploy() { |
| 36 | + // Get initial page token for change tracking |
| 37 | + const startPageToken = await this.googleDrive.getPageToken(this.getDriveId()); |
| 38 | + this._setPageToken(startPageToken); |
| 39 | + this._setLastFileCreatedTime(Date.now()); |
| 40 | + |
| 41 | + // Emit the most recent files |
| 42 | + await sourceComponent.hooks.deploy.bind(this)(); |
| 43 | + }, |
| 44 | + }, |
| 45 | + methods: sourceComponent.methods, |
| 46 | + async run() { |
| 47 | + const pageToken = this._getPageToken(); |
| 48 | + |
| 49 | + const driveId = this.getDriveId(); |
| 50 | + const changedFilesStream = this.googleDrive.listChanges(pageToken, driveId); |
| 51 | + for await (const changedFilesPage of changedFilesStream) { |
| 52 | + const { nextPageToken } = changedFilesPage; |
| 53 | + |
| 54 | + // Process all the changed files retrieved from the current page |
| 55 | + await this.processChanges(); |
| 56 | + |
| 57 | + // After successfully processing the changed files, we store the page |
| 58 | + // token of the next page |
| 59 | + this._setPageToken(nextPageToken); |
| 60 | + } |
| 61 | + }, |
| 62 | + sampleEmit, |
| 63 | +}; |
0 commit comments