Avatar: Add support to FileSystem and various fixes

pull/6788/head
Rodrigo Nascimento 9 years ago
parent ce812e804b
commit 1c72057feb
  1. 31
      lib/fileUpload.js
  2. 11
      packages/rocketchat-file-upload/client/lib/FileUploadAmazonS3.js
  3. 50
      packages/rocketchat-file-upload/client/lib/FileUploadFileSystem.js
  4. 11
      packages/rocketchat-file-upload/client/lib/FileUploadGoogleStorage.js
  5. 10
      packages/rocketchat-file-upload/client/lib/FileUploadGridFS.js
  6. 125
      packages/rocketchat-file-upload/server/config/configFileUploadFileSystem.js
  7. 10
      packages/rocketchat-file-upload/server/lib/FileUpload.js
  8. 188
      packages/rocketchat-google-natural-language/.npm/package/npm-shrinkwrap.json
  9. 27
      packages/rocketchat-ui/client/lib/fileUpload.js

@ -80,42 +80,17 @@ if (UploadFS) {
// filter: new UploadFS.Filter({
// onCheck: FileUpload.validateFileUpload
// }),
transformWrite(readStream, writeStream, fileId, file) {
if (RocketChatFile.enabled === false || !/^image\/.+/.test(file.type)) {
return readStream.pipe(writeStream);
}
let stream = undefined;
const identify = function(err, data) {
if (err) {
return stream.pipe(writeStream);
}
file.identify = {
format: data.format,
size: data.size
};
if (data.Orientation && !['', 'Unknown', 'Undefined'].includes(data.Orientation)) {
RocketChatFile.gm(stream).autoOrient().stream().pipe(writeStream);
} else {
stream.pipe(writeStream);
}
};
stream = RocketChatFile.gm(readStream).identify(identify).stream();
},
transformWrite: FileUpload.avatarTransformWrite,
onFinishUpload(file) {
// update file record to match user's username
const user = RocketChat.models.Users.findOneById(file.userId);
const oldAvatar = RocketChat.models.Avatars.findOneByName(`${ user.username }.avatar`);
const oldAvatar = RocketChat.models.Avatars.findOneByName(user.username);
if (oldAvatar) {
Meteor.fileStoreAvatar.delete(oldAvatar._id);
RocketChat.models.Avatars.deleteFile(oldAvatar._id);
}
RocketChat.models.Avatars.updateFileNameById(file._id, `${ user.username }.avatar`);
RocketChat.models.Avatars.updateFileNameById(file._id, user.username);
// console.log('upload finished ->', file);
},

@ -3,7 +3,6 @@
FileUpload.AmazonS3 = class FileUploadAmazonS3 extends FileUploadBase {
constructor(directive, meta, file) {
super(meta, file);
this.directive = directive;
const directives = {
'upload': 'rocketchat-uploads',
'avatar': 'rocketchat-avatars'
@ -24,15 +23,7 @@ FileUpload.AmazonS3 = class FileUploadAmazonS3 extends FileUploadBase {
file._id = downloadUrl.substr(downloadUrl.lastIndexOf('/') + 1);
file.url = downloadUrl;
if (this.directive === 'avatar') {
return callback(null, file);
}
Meteor.call('sendFileMessage', this.meta.rid, 's3', file, () => {
Meteor.setTimeout(() => {
callback.call(this, null, file);
}, 2000);
});
return callback(null, file, 's3');
}
});

@ -1,4 +1,4 @@
/* globals FileUploadBase, UploadFS, FileUpload:true, FileSystemStore:true */
/* globals FileUploadBase, UploadFS, FileUpload:true, FileSystemStore:true, FileSystemStoreAvatar:true */
FileSystemStore = new UploadFS.store.Local({
collection: RocketChat.models.Uploads.model,
@ -8,51 +8,41 @@ FileSystemStore = new UploadFS.store.Local({
})
});
FileSystemStoreAvatar = new UploadFS.store.Local({
collection: RocketChat.models.Avatars.model,
name: 'fileSystemAvatar',
filter: new UploadFS.Filter({
onCheck: FileUpload.validateFileUpload
})
});
FileUpload.FileSystem = class FileUploadFileSystem extends FileUploadBase {
constructor(meta, file) {
constructor(directive, meta, file) {
super(meta, file);
console.log('filesystem', {directive, meta, file});
this.store = directive === 'avatar' ? FileSystemStoreAvatar : FileSystemStore;
}
start(callback) {
this.handler = new UploadFS.Uploader({
store: FileSystemStore,
data: file,
file: meta,
store: this.store,
data: this.file,
file: this.meta,
onError: (err) => {
const uploading = Session.get('uploading');
if (uploading != null) {
const item = _.findWhere(uploading, {
id: this.id
});
if (item != null) {
item.error = err.reason;
item.percentage = 0;
}
return Session.set('uploading', uploading);
}
return callback(err);
},
onComplete: (fileData) => {
const file = _.pick(fileData, '_id', 'type', 'size', 'name', 'identify', 'description');
file.url = fileData.url.replace(Meteor.absoluteUrl(), '/');
Meteor.call('sendFileMessage', this.meta.rid, null, file, () => {
Meteor.setTimeout(() => {
const uploading = Session.get('uploading');
if (uploading != null) {
const item = _.findWhere(uploading, {
id: this.id
});
return Session.set('uploading', _.without(uploading, item));
}
}, 2000);
});
return callback(null, file, 'fs');
}
});
this.handler.onProgress = (file, progress) => {
this.onProgress(progress);
};
}
start() {
return this.handler.start();
}

@ -3,7 +3,6 @@
FileUpload.GoogleCloudStorage = class FileUploadGoogleCloudStorage extends FileUploadBase {
constructor(directive, meta, file) {
super(meta, file);
this.directive = directive;
const directives = {
'upload': 'rocketchat-uploads-gs',
'avatar': 'rocketchat-avatars-gs'
@ -24,15 +23,7 @@ FileUpload.GoogleCloudStorage = class FileUploadGoogleCloudStorage extends FileU
file._id = downloadUrl.substr(downloadUrl.lastIndexOf('/') + 1);
file.url = downloadUrl;
if (this.directive === 'avatar') {
return callback(null, file);
}
Meteor.call('sendFileMessage', this.meta.rid, 'googleCloudStorage', file, () => {
Meteor.setTimeout(() => {
callback.call(this, null, file);
}, 2000);
});
return callback(null, file, 'googleCloudStorage');
}
});

@ -2,7 +2,6 @@
FileUpload.GridFS = class FileUploadGridFS extends FileUploadBase {
constructor(directive, meta, file) {
super(meta, file);
this.directive = directive;
this.store = directive === 'avatar' ? Meteor.fileStoreAvatar : Meteor.fileStore;
}
@ -16,15 +15,8 @@ FileUpload.GridFS = class FileUploadGridFS extends FileUploadBase {
},
onComplete: (fileData) => {
const file = _.pick(fileData, '_id', 'type', 'size', 'name', 'identify', 'description');
if (this.directive === 'avatar') {
return callback(null, file);
}
file.url = fileData.url.replace(Meteor.absoluteUrl(), '/');
Meteor.call('sendFileMessage', this.meta.rid, null, file, () => {
Meteor.setTimeout(() => {
return callback(null, file);
}, 2000);
});
return callback(null, file, 'gridfs');
}
});

@ -1,47 +1,70 @@
/* globals FileSystemStore:true, FileUpload, UploadFS, RocketChatFile */
/* globals FileSystemStore:true, FileUpload, UploadFS, RocketChatFile, FileSystemStoreAvatar */
const storeName = 'fileSystem';
const transformWrite = function(readStream, writeStream, fileId, file) {
if (RocketChatFile.enabled === false || !/^image\/((x-windows-)?bmp|p?jpeg|png)$/.test(file.type)) {
return readStream.pipe(writeStream);
}
let stream = undefined;
const identify = function(err, data) {
if (err != null) {
return stream.pipe(writeStream);
}
file.identify = {
format: data.format,
size: data.size
};
if ([null, undefined, '', 'Unknown', 'Undefined'].indexOf(data.Orientation) === -1) {
return RocketChatFile.gm(stream).autoOrient().stream().pipe(writeStream);
} else {
return stream.pipe(writeStream);
}
};
stream = RocketChatFile.gm(readStream).identify(identify).stream();
return;
};
FileSystemStore = null;
FileSystemStoreAvatar = null;
const createFileSystemStore = _.debounce(function() {
const stores = UploadFS.getStores();
if (stores[storeName]) {
delete stores[storeName];
}
delete stores.fileSystem;
delete stores.fileSystemAvatar;
FileSystemStore = new UploadFS.store.Local({
collection: RocketChat.models.Uploads.model,
name: storeName,
path: RocketChat.settings.get('FileUpload_FileSystemPath'), //'/tmp/uploads/photos',
collection: RocketChat.models.Uploads.model,
filter: new UploadFS.Filter({
onCheck: FileUpload.validateFileUpload
}),
transformWrite(readStream, writeStream, fileId, file) {
if (RocketChatFile.enabled === false || !/^image\/((x-windows-)?bmp|p?jpeg|png)$/.test(file.type)) {
return readStream.pipe(writeStream);
}
let stream = undefined;
const identify = function(err, data) {
if (err != null) {
return stream.pipe(writeStream);
}
file.identify = {
format: data.format,
size: data.size
};
name: 'fileSystem',
transformWrite
});
if ([null, undefined, '', 'Unknown', 'Undefined'].indexOf(data.Orientation) === -1) {
return RocketChatFile.gm(stream).autoOrient().stream().pipe(writeStream);
} else {
return stream.pipe(writeStream);
FileSystemStoreAvatar = new UploadFS.store.Local({
path: RocketChat.settings.get('FileUpload_FileSystemPath'), //'/tmp/uploads/photos',
collection: RocketChat.models.Avatars.model,
name: 'fileSystemAvatar',
transformWrite: FileUpload.avatarTransformWrite,
onFinishUpload(file) {
// update file record to match user's username
const user = RocketChat.models.Users.findOneById(file.userId);
const oldAvatar = RocketChat.models.Avatars.findOneByName(user.username);
if (oldAvatar) {
try {
FileSystemStoreAvatar.delete(oldAvatar._id);
RocketChat.models.Avatars.deleteFile(oldAvatar._id);
} catch (e) {
console.error(e);
}
};
stream = RocketChatFile.gm(readStream).identify(identify).stream();
return;
}
RocketChat.models.Avatars.updateFileNameById(file._id, user.username);
// console.log('upload finished ->', file);
}
});
}, 500);
@ -50,7 +73,7 @@ RocketChat.settings.get('FileUpload_FileSystemPath', createFileSystemStore);
const fs = Npm.require('fs');
FileUpload.addHandler(storeName, {
FileUpload.addHandler('fileSystem', {
get(file, req, res) {
const filePath = FileSystemStore.getFilePath(file._id, file);
@ -77,3 +100,41 @@ FileUpload.addHandler(storeName, {
return FileSystemStore.delete(file._id);
}
});
FileUpload.addHandler('fileSystemAvatar', {
get(file, req, res) {
const reqModifiedHeader = req.headers['if-modified-since'];
if (reqModifiedHeader) {
if (reqModifiedHeader === (file.uploadedAt && file.uploadedAt.toUTCString())) {
res.setHeader('Last-Modified', reqModifiedHeader);
res.writeHead(304);
res.end();
return;
}
}
const filePath = FileSystemStoreAvatar.getFilePath(file._id, file);
try {
const stat = Meteor.wrapAsync(fs.stat)(filePath);
if (stat && stat.isFile()) {
file = FileUpload.addExtensionTo(file);
res.setHeader('Content-Disposition', 'inline');
res.setHeader('Last-Modified', file.uploadedAt.toUTCString());
res.setHeader('Content-Type', file.type);
res.setHeader('Content-Length', file.size);
FileSystemStoreAvatar.getReadStream(file._id, file).pipe(res);
}
} catch (e) {
res.writeHead(404);
res.end();
return;
}
},
delete(file) {
return FileSystemStoreAvatar.delete(file._id);
}
});

@ -41,3 +41,13 @@ FileUpload.addExtensionTo = function(file) {
return file;
};
FileUpload.avatarTransformWrite = function(readStream, writeStream, fileId, file) {
if (RocketChatFile.enabled === false || RocketChat.settings.get('Accounts_AvatarResize') !== true) {
return readStream.pipe(writeStream);
}
const height = RocketChat.settings.get('Accounts_AvatarSize');
const width = height;
return RocketChatFile.gm(readStream).background('#ffffff').resize(width, `${ height }^`).gravity('Center').crop(width, height).extent(width, height).stream('jpeg').pipe(writeStream);
};

@ -1,8 +1,8 @@
{
"dependencies": {
"ajv": {
"version": "4.11.7",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.7.tgz",
"version": "4.11.8",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
"from": "ajv@>=4.9.1 <5.0.0"
},
"ansi-regex": {
@ -30,11 +30,6 @@
"resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
"from": "arrify@>=1.0.1 <2.0.0"
},
"ascli": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/ascli/-/ascli-1.0.1.tgz",
"from": "ascli@>=1.0.0 <2.0.0"
},
"asn1": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
@ -46,8 +41,8 @@
"from": "assert-plus@>=0.2.0 <0.3.0"
},
"async": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/async/-/async-2.3.0.tgz",
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/async/-/async-2.4.0.tgz",
"from": "async@>=2.1.2 <3.0.0"
},
"asynckit": {
@ -65,11 +60,6 @@
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
"from": "aws4@>=1.2.1 <2.0.0"
},
"balanced-match": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
"from": "balanced-match@>=0.4.1 <0.5.0"
},
"base64url": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/base64url/-/base64url-2.0.0.tgz",
@ -85,11 +75,6 @@
"resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
"from": "boom@>=2.0.0 <3.0.0"
},
"brace-expansion": {
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz",
"from": "brace-expansion@>=1.0.0 <2.0.0"
},
"buffer-equal-constant-time": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
@ -100,16 +85,6 @@
"resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz",
"from": "buffer-shims@>=1.0.0 <1.1.0"
},
"bytebuffer": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/bytebuffer/-/bytebuffer-5.0.1.tgz",
"from": "bytebuffer@>=5.0.0 <6.0.0"
},
"camelcase": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
"from": "camelcase@>=2.0.1 <3.0.0"
},
"capture-stack-trace": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz",
@ -125,26 +100,11 @@
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
"from": "chalk@>=1.1.1 <2.0.0"
},
"cliui": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
"from": "cliui@>=3.0.3 <4.0.0"
},
"co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
"from": "co@>=4.6.0 <5.0.0"
},
"code-point-at": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
"from": "code-point-at@>=1.0.0 <2.0.0"
},
"colour": {
"version": "0.7.1",
"resolved": "https://registry.npmjs.org/colour/-/colour-0.7.1.tgz",
"from": "colour@>=0.7.1 <0.8.0"
},
"combined-stream": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
@ -155,11 +115,6 @@
"resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
"from": "commander@>=2.9.0 <3.0.0"
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"from": "concat-map@0.0.1"
},
"concat-stream": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
@ -192,11 +147,6 @@
}
}
},
"decamelize": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
"from": "decamelize@>=1.1.1 <2.0.0"
},
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
@ -233,8 +183,8 @@
"from": "escape-string-regexp@>=1.0.2 <2.0.0"
},
"extend": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz",
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
"from": "extend@>=3.0.0 <4.0.0"
},
"extsprintf": {
@ -252,11 +202,6 @@
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
"from": "form-data@>=2.1.1 <2.2.0"
},
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"from": "fs.realpath@>=1.0.0 <2.0.0"
},
"generate-function": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz",
@ -279,11 +224,6 @@
}
}
},
"glob": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz",
"from": "glob@>=7.0.5 <8.0.0"
},
"google-auth-library": {
"version": "0.10.0",
"resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-0.10.0.tgz",
@ -322,8 +262,8 @@
"from": "graceful-readlink@>=1.0.0"
},
"grpc": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/grpc/-/grpc-1.2.4.tgz",
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/grpc/-/grpc-1.3.0.tgz",
"from": "grpc@>=1.1.0 <2.0.0",
"dependencies": {
"node-pre-gyp": {
@ -378,8 +318,8 @@
"from": "npmlog@>=4.0.2 <5.0.0",
"dependencies": {
"are-we-there-yet": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz",
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz",
"from": "are-we-there-yet@>=1.1.2 <1.2.0",
"dependencies": {
"delegates": {
@ -390,7 +330,7 @@
"readable-stream": {
"version": "2.2.9",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz",
"from": "readable-stream@>=2.0.0 <3.0.0||>=1.1.13 <2.0.0",
"from": "readable-stream@>=2.0.6 <3.0.0",
"dependencies": {
"buffer-shims": {
"version": "1.0.0",
@ -437,8 +377,8 @@
"from": "console-control-strings@>=1.1.0 <1.2.0"
},
"gauge": {
"version": "2.7.3",
"resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.3.tgz",
"version": "2.7.4",
"resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
"from": "gauge@>=2.7.1 <2.8.0",
"dependencies": {
"aproba": {
@ -598,8 +538,8 @@
"from": "har-validator@>=4.2.1 <4.3.0",
"dependencies": {
"ajv": {
"version": "4.11.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.6.tgz",
"version": "4.11.7",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.7.tgz",
"from": "ajv@>=4.9.1 <5.0.0",
"dependencies": {
"co": {
@ -693,8 +633,8 @@
}
},
"sshpk": {
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.11.0.tgz",
"version": "1.13.0",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.0.tgz",
"from": "sshpk@>=1.7.0 <2.0.0",
"dependencies": {
"asn1": {
@ -723,8 +663,8 @@
"from": "ecc-jsbn@>=0.1.1 <0.2.0"
},
"getpass": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz",
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
"from": "getpass@>=0.1.1 <0.2.0"
},
"jodid25519": {
@ -939,14 +879,14 @@
"from": "tar-pack@>=3.4.0 <4.0.0",
"dependencies": {
"debug": {
"version": "2.6.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.3.tgz",
"version": "2.6.5",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.5.tgz",
"from": "debug@>=2.2.0 <3.0.0",
"dependencies": {
"ms": {
"version": "0.7.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
"from": "ms@0.7.2"
"version": "0.7.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz",
"from": "ms@0.7.3"
}
}
},
@ -1006,7 +946,7 @@
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"from": "once@>=1.0.0 <2.0.0",
"from": "once@>=1.3.3 <2.0.0",
"dependencies": {
"wrappy": {
"version": "1.0.2",
@ -1103,31 +1043,16 @@
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
"from": "http-signature@>=1.1.0 <1.2.0"
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"from": "inflight@>=1.0.4 <2.0.0"
},
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"from": "inherits@>=2.0.3 <3.0.0"
},
"invert-kv": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
"from": "invert-kv@>=1.0.0 <2.0.0"
},
"is": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/is/-/is-3.2.1.tgz",
"from": "is@>=3.0.1 <4.0.0"
},
"is-fullwidth-code-point": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
"from": "is-fullwidth-code-point@>=1.0.0 <2.0.0"
},
"is-my-json-valid": {
"version": "2.16.0",
"resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz",
@ -1215,11 +1140,6 @@
"resolved": "https://registry.npmjs.org/jws/-/jws-3.1.4.tgz",
"from": "jws@>=3.1.4 <4.0.0"
},
"lcid": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
"from": "lcid@>=1.0.0 <2.0.0"
},
"lodash": {
"version": "4.17.4",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
@ -1238,7 +1158,7 @@
"long": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz",
"from": "long@>=3.0.0 <4.0.0"
"from": "long@>=3.2.0 <4.0.0"
},
"methmeth": {
"version": "1.1.0",
@ -1260,11 +1180,6 @@
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz",
"from": "mime-types@>=2.1.7 <2.2.0"
},
"minimatch": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz",
"from": "minimatch@>=3.0.2 <4.0.0"
},
"modelo": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/modelo/-/modelo-4.2.0.tgz",
@ -1280,11 +1195,6 @@
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.1.tgz",
"from": "node-forge@>=0.7.1 <0.8.0"
},
"number-is-nan": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
"from": "number-is-nan@>=1.0.0 <2.0.0"
},
"oauth-sign": {
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
@ -1300,21 +1210,6 @@
"resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
"from": "once@>=1.3.0 <1.4.0"
},
"optjs": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/optjs/-/optjs-3.2.2.tgz",
"from": "optjs@>=3.2.2 <3.3.0"
},
"os-locale": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
"from": "os-locale@>=1.4.0 <2.0.0"
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"from": "path-is-absolute@>=1.0.0 <2.0.0"
},
"performance-now": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz",
@ -1341,9 +1236,9 @@
"from": "propprop@>=0.3.1 <0.4.0"
},
"protobufjs": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-5.0.2.tgz",
"from": "protobufjs@>=5.0.0 <6.0.0"
"version": "6.7.3",
"resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.7.3.tgz",
"from": "protobufjs@>=6.7.0 <7.0.0"
},
"punycode": {
"version": "1.4.1",
@ -1451,11 +1346,6 @@
"resolved": "https://registry.npmjs.org/string-format-obj/-/string-format-obj-1.1.0.tgz",
"from": "string-format-obj@>=1.1.0 <2.0.0"
},
"string-width": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"from": "string-width@>=1.0.1 <2.0.0"
},
"string_decoder": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.0.tgz",
@ -1521,16 +1411,6 @@
"resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz",
"from": "verror@1.3.6"
},
"window-size": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz",
"from": "window-size@>=0.1.4 <0.2.0"
},
"wrap-ansi": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
"from": "wrap-ansi@>=2.0.0 <3.0.0"
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@ -1540,16 +1420,6 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
"from": "xtend@>=4.0.0 <5.0.0"
},
"y18n": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
"from": "y18n@>=3.2.0 <4.0.0"
},
"yargs": {
"version": "3.32.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz",
"from": "yargs@>=3.10.0 <4.0.0"
}
}
}

@ -145,7 +145,7 @@ fileUpload = function(filesToUpload) {
description: document.getElementById('file-description').value
};
const upload = fileUploadHandler('rocketchat-uploads-gs', record, file.file);
const upload = fileUploadHandler('upload', record, file.file);
let uploading = Session.get('uploading') || [];
uploading.push({
@ -166,7 +166,7 @@ fileUpload = function(filesToUpload) {
}
};
upload.start(function(error, file) {
upload.start(function(error, file, storage) {
if (error) {
let uploading = Session.get('uploading');
if (!Array.isArray(uploading)) {
@ -187,14 +187,21 @@ fileUpload = function(filesToUpload) {
Session.set('uploading', uploading);
return;
} else if (file) {
const uploading = Session.get('uploading');
if (uploading !== null) {
const item = _.findWhere(uploading, {
id: this.id
});
return Session.set('uploading', _.without(uploading, item));
}
}
if (file) {
Meteor.call('sendFileMessage', roomId, storage, file, () => {
Meteor.setTimeout(() => {
const uploading = Session.get('uploading');
if (uploading !== null) {
const item = _.findWhere(uploading, {
id: this.id
});
return Session.set('uploading', _.without(uploading, item));
}
}, 2000);
});
}
});

Loading…
Cancel
Save