@@ -261,69 +261,67 @@ Persistence.IsolatedFileSystem = class {
261261
262262 /**
263263 * @param {string } path
264- * @return {!Promise<?string > }
264+ * @return {!Promise<?Blob > }
265265 */
266- requestFileContentPromise ( path ) {
267- var fulfill ;
268- var promise = new Promise ( x => fulfill = x ) ;
269- this . requestFileContent ( path , fulfill ) ;
270- return promise ;
266+ requestFileBlob ( path ) {
267+ return new Promise ( resolve => {
268+ this . _domFileSystem . root . getFile ( path , undefined , entry => {
269+ entry . file ( resolve , errorHandler . bind ( this ) ) ;
270+ } , errorHandler . bind ( this ) ) ;
271+
272+ /**
273+ * @this {Persistence.IsolatedFileSystem}
274+ */
275+ function errorHandler ( error ) {
276+ if ( error . name === 'NotFoundError' ) {
277+ resolve ( null ) ;
278+ return ;
279+ }
280+
281+ var errorMessage = Persistence . IsolatedFileSystem . errorMessage ( error ) ;
282+ console . error ( errorMessage + ' when getting content for file \'' + ( this . _path + '/' + path ) + '\'' ) ;
283+ resolve ( null ) ;
284+ }
285+ } ) ;
271286 }
272287
273288 /**
274289 * @param {string } path
275- * @param { function( ?string) } callback
290+ * @return { !Promise< ?string> }
276291 */
277- requestFileContent ( path , callback ) {
278- this . _domFileSystem . root . getFile ( path , undefined , fileEntryLoaded . bind ( this ) , errorHandler . bind ( this ) ) ;
279-
280- /**
281- * @param {!FileEntry } entry
282- * @this {Persistence.IsolatedFileSystem}
283- */
284- function fileEntryLoaded ( entry ) {
285- entry . file ( fileLoaded , errorHandler . bind ( this ) ) ;
292+ async requestFileContentPromise ( path ) {
293+ var blob = await this . requestFileBlob ( path ) ;
294+ if ( ! blob )
295+ return null ;
296+
297+ var reader = new FileReader ( ) ;
298+ var fileContentsLoadedPromise = new Promise ( resolve => reader . onloadend = resolve ) ;
299+ if ( Persistence . IsolatedFileSystem . ImageExtensions . has ( Common . ParsedURL . extractExtension ( path ) ) )
300+ reader . readAsDataURL ( blob ) ;
301+ else
302+ reader . readAsText ( blob ) ;
303+ await fileContentsLoadedPromise ;
304+ if ( reader . error ) {
305+ console . error ( 'Can\'t read file: ' + path + ': ' + reader . error ) ;
306+ return null ;
286307 }
287-
288- /**
289- * @param {!Blob } file
290- */
291- function fileLoaded ( file ) {
292- var reader = new FileReader ( ) ;
293- reader . onloadend = readerLoadEnd ;
294- if ( Persistence . IsolatedFileSystem . ImageExtensions . has ( Common . ParsedURL . extractExtension ( path ) ) )
295- reader . readAsDataURL ( file ) ;
296- else
297- reader . readAsText ( file ) ;
308+ try {
309+ var result = reader . result ;
310+ } catch ( e ) {
311+ result = null ;
312+ console . error ( 'Can\'t read file: ' + path + ': ' + e ) ;
298313 }
314+ if ( result === undefined )
315+ return null ;
316+ return result ;
317+ }
299318
300- /**
301- * @this {!FileReader}
302- */
303- function readerLoadEnd ( ) {
304- /** @type {?string } */
305- var string = null ;
306- try {
307- string = /** @type {string } */ ( this . result ) ;
308- } catch ( e ) {
309- console . error ( 'Can\'t read file: ' + path + ': ' + e ) ;
310- }
311- callback ( string ) ;
312- }
313-
314- /**
315- * @this {Persistence.IsolatedFileSystem}
316- */
317- function errorHandler ( error ) {
318- if ( error . name === 'NotFoundError' ) {
319- callback ( null ) ;
320- return ;
321- }
322-
323- var errorMessage = Persistence . IsolatedFileSystem . errorMessage ( error ) ;
324- console . error ( errorMessage + ' when getting content for file \'' + ( this . _path + '/' + path ) + '\'' ) ;
325- callback ( null ) ;
326- }
319+ /**
320+ * @param {string } path
321+ * @param {function(?string) } callback
322+ */
323+ requestFileContent ( path , callback ) {
324+ this . requestFileContentPromise ( path ) . then ( callback ) ;
327325 }
328326
329327 /**
0 commit comments