|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- if (global.GENTLY) require = GENTLY.hijack(require);
-
- var util = require('util'),
- fs = require('fs'),
- 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 fs.WriteStream(this.path);
- };
-
- File.prototype.toJSON = function() {
- var json = {
- size: this.size,
- path: this.path,
- name: this.name,
- type: this.type,
- mtime: this.lastModifiedDate,
- length: this.length,
- filename: this.filename,
- mime: this.mime
- };
- if (this.hash && this.hash != "") {
- json.hash = this.hash;
- }
- return json;
- };
-
- File.prototype.write = function(buffer, cb) {
- var self = this;
- if (self.hash) {
- self.hash.update(buffer);
- }
-
- if (this._writeStream.closed) {
- return cb();
- }
-
- 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();
- });
- };
|