export class LogDownloadController { constructor(private dispatcher: any) { chrome.runtime.onMessage.addListener((request) => { switch (request.message) { case 'DownloadLogsPrompt': { this.dispatcher.logMessage('Saving log file...'); //data is obsfucated, so it's not in an array format, so we need to convert it to an array this.saveLogArray([request.data]); } } }); } private onFileWriterSuccess() { this.dispatcher.logMessage('logDownload.ts: onFileWriterSuccess(): Log download completed.'); this.dispatcher.sendToWebView( { message: 'UI_LogSaveStatus', status: { success: true } }, false ); } private onFileWriterFailure(e: any) { this.dispatcher.logMessage('logDownload.ts: onFileWriterFailure(): Write failed: ' + e); this.dispatcher.sendToWebView( { message: 'UI_LogSaveStatus', status: { success: false, error: e } }, false ); } private saveLogArray(logArray: any[]) { let blob = new Blob(logArray, { type: 'text/plain' }); let fileDialogDescription = chrome.i18n.getMessage('log_files_file_filter') || 'Log files (*.log)'; //@ts-ignore chrome.fileSystem.chooseEntry( { type: 'saveFile', suggestedName: 'lsa-chromebook.log', accepts: [ { description: fileDialogDescription, extensions: ['log'] } ], acceptsAllTypes: true }, (fileEntry: any) => { if (fileEntry) { fileEntry.createWriter((fileWriter: any) => { fileWriter.onwriteend = () => this.onFileWriterSuccess(); fileWriter.onerror = (e: any) => this.onFileWriterFailure(e); fileWriter.write(blob); }); } else { this.dispatcher.logError( 'saveLogArray: fileEntry is undefined: ' + JSON.stringify(chrome.runtime.lastError) ); } } ); } }