@mieweb/wikigdrive
Version:
Google Drive to MarkDown synchronization
64 lines (63 loc) • 2.13 kB
JavaScript
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 [];
}
}