72 lines · 1.5 KB · JavaScript
RawDownload
if (global.GENTLY) require = GENTLY.hijack(require); var util = require('util'),    WriteStream = require('fs').WriteStream,    EventEmitter = require('events').EventEmitter,    crypto = require('crypto'); function File(properties) {  EventEmitter.call(this);   this.size = 0;  this.path = null;  this.name = null;  this.type = null;  this.hash = null;  this.lastModifiedDate = null;   this._writeStream = null;    for (var key in properties) {    this[key] = properties[key];  }   if(typeof this.hash === 'string') {    this.hash = crypto.createHash(properties.hash);  } else {    this.hash = null;  }}module.exports = File;util.inherits(File, EventEmitter); File.prototype.open = function() {  this._writeStream = new WriteStream(this.path);}; File.prototype.toJSON = function() {  return {    size: this.size,    path: this.path,    name: this.name,    type: this.type,    mtime: this.lastModifiedDate,    length: this.length,    filename: this.filename,    mime: this.mime  };}; File.prototype.write = function(buffer, cb) {  var self = this;  if (self.hash) {    self.hash.update(buffer);  }  this._writeStream.write(buffer, function() {    self.lastModifiedDate = new Date();    self.size += buffer.length;    self.emit('progress', self.size);    cb();  });}; File.prototype.end = function(cb) {  var self = this;  if (self.hash) {    self.hash = self.hash.digest('hex');  }  this._writeStream.end(function() {    self.emit('end');    cb();  });};