all files / couch/util/file-loader/ file-loader.js

80% Statements 12/15
25% Branches 1/4
100% Functions 3/3
80% Lines 12/15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41                                                         
import Ember from 'ember';
import blobutil from '../blob-util';
import Error from '../error';
import lookupContentType from './content-type';
 
const {
  RSVP: { reject }
} = Ember;
 
export default class FileLoader {
 
  constructor(file) {
    this.file = file;
    this.promises = {};
    this.contentType = lookupContentType(file);
    this.size = file.size;
  }
 
  _cached(name, cb) {
    let promise = this.promises[name];
    Eif(!promise) {
      promise = cb();
      this.promises[name] = promise;
    }
    return promise;
  }
 
  toBase64String() {
    return this._cached('base64String', () => {
      return blobutil.blobToBase64String(this.file).catch(err => {
        if(err.name === 'TypeError') {
          return reject(new Error({ error: 'file_load', reason: 'Invalid file' }));
        }
        return reject(new Error({ error: 'file_load', reason: 'File too large' }));
      });
    });
  }
 
}