UNPKG

@mieweb/wikigdrive

Version:

Google Drive to MarkDown synchronization

45 lines (36 loc) 1.45 kB
import winston from 'winston'; import {QueueTask} from './QueueTask.ts'; import {GoogleDriveService} from '../../google/GoogleDriveService.ts'; import {FileContentService} from '../../utils/FileContentService.ts'; import {GoogleFile} from '../../model/GoogleFile.ts'; import {googleMimeToExt} from '../transform/TaskLocalFileTransform.ts'; import {HasAccessToken} from '../../google/AuthClient.ts'; export class TaskFetchAsset extends QueueTask { constructor(protected logger: winston.Logger, private googleDriveService: GoogleDriveService, private auth: HasAccessToken, private fileService: FileContentService, private file: GoogleFile, private _forceDownload: boolean) { super(logger); } async run(): Promise<QueueTask[]> { 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 []; } }