12345678910111213141516171819202122 |
- export default class TempFile{constructor(){this._lastBlob=null;}
- write(pieces){if(this._lastBlob){pieces.unshift(this._lastBlob);}
- this._lastBlob=new Blob(pieces,{type:'text/plain'});}
- read(){return this.readRange();}
- size(){return this._lastBlob?this._lastBlob.size:0;}
- async readRange(startOffset,endOffset){if(!this._lastBlob){Common.console.error('Attempt to read a temp file that was never written');return Promise.resolve('');}
- const blob=typeof startOffset==='number'||typeof endOffset==='number'?this._lastBlob.slice((startOffset),(endOffset)):this._lastBlob;const reader=new FileReader();try{await new Promise((resolve,reject)=>{reader.onloadend=resolve;reader.onerror=reject;reader.readAsText(blob);});}catch(error){Common.console.error('Failed to read from temp file: '+error.message);}
- return(reader.result);}
- copyToOutputStream(outputStream,progress){if(!this._lastBlob){outputStream.close();return Promise.resolve((null));}
- const reader=new Bindings.ChunkedFileReader((this._lastBlob),10*1000*1000,progress);return reader.read(outputStream).then(success=>success?null:reader.error());}
- remove(){this._lastBlob=null;}}
- export class TempFileBackingStorage{constructor(){this._file=null;this._strings;this._stringsLength;this.reset();}
- appendString(string){this._strings.push(string);this._stringsLength+=string.length;const flushStringLength=10*1024*1024;if(this._stringsLength>flushStringLength){this._flush();}}
- appendAccessibleString(string){this._flush();const startOffset=this._file.size();this._strings.push(string);this._flush();return this._file.readRange.bind(this._file,startOffset,this._file.size());}
- _flush(){if(!this._strings.length){return;}
- if(!this._file){this._file=new TempFile();}
- this._stringsLength=0;this._file.write(this._strings.splice(0));}
- finishWriting(){this._flush();}
- reset(){if(this._file){this._file.remove();}
- this._file=null;this._strings=[];this._stringsLength=0;}
- writeToStream(outputStream){return this._file?this._file.copyToOutputStream(outputStream):Promise.resolve(null);}}
- self.Bindings=self.Bindings||{};Bindings=Bindings||{};Bindings.TempFile=TempFile;Bindings.TempFileBackingStorage=TempFileBackingStorage;Bindings.TempFileBackingStorage.Chunk;
|