UNPKG

@mieweb/wikigdrive

Version:

Google Drive to MarkDown synchronization

64 lines (63 loc) 2.13 kB
import { QueueTask } from './QueueTask.js'; import { googleMimeToExt } from '../transform/TaskLocalFileTransform.js'; export class TaskFetchAsset extends QueueTask { constructor(logger, googleDriveService, auth, fileService, file, _forceDownload) { super(logger); Object.defineProperty(this, "logger", { enumerable: true, configurable: true, writable: true, value: logger }); Object.defineProperty(this, "googleDriveService", { enumerable: true, configurable: true, writable: true, value: googleDriveService }); Object.defineProperty(this, "auth", { enumerable: true, configurable: true, writable: true, value: auth }); Object.defineProperty(this, "fileService", { enumerable: true, configurable: true, writable: true, value: fileService }); Object.defineProperty(this, "file", { enumerable: true, configurable: true, writable: true, value: file }); Object.defineProperty(this, "_forceDownload", { enumerable: true, configurable: true, writable: true, value: _forceDownload }); } async run() { const ext = googleMimeToExt(this.file.mimeType, this.file.name); const targetPath = this.file.id + (ext ? '.' + ext : ''); if (this.file.md5Checksum) { const localMd5 = await this.fileService.md5File(targetPath); if (localMd5 === this.file.md5Checksum) { return []; } } this.logger.info('Downloading asset: ' + this.file.name); try { const dest = this.fileService.createWriteStream(targetPath); await this.googleDriveService.download(this.auth, this.file, dest); } catch (err) { await this.fileService.remove(targetPath); throw err; } return []; } }