diff --git a/lib/fileUpload.js b/lib/fileUpload.js index 93ae9397928..782015a73cd 100644 --- a/lib/fileUpload.js +++ b/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); }, diff --git a/packages/rocketchat-file-upload/client/lib/FileUploadAmazonS3.js b/packages/rocketchat-file-upload/client/lib/FileUploadAmazonS3.js index 7d8250b7ddf..0c6f3efd905 100644 --- a/packages/rocketchat-file-upload/client/lib/FileUploadAmazonS3.js +++ b/packages/rocketchat-file-upload/client/lib/FileUploadAmazonS3.js @@ -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'); } }); diff --git a/packages/rocketchat-file-upload/client/lib/FileUploadFileSystem.js b/packages/rocketchat-file-upload/client/lib/FileUploadFileSystem.js index d19c5c03141..025a3cf7810 100644 --- a/packages/rocketchat-file-upload/client/lib/FileUploadFileSystem.js +++ b/packages/rocketchat-file-upload/client/lib/FileUploadFileSystem.js @@ -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(); } diff --git a/packages/rocketchat-file-upload/client/lib/FileUploadGoogleStorage.js b/packages/rocketchat-file-upload/client/lib/FileUploadGoogleStorage.js index 1ac7279e4bf..b4b047c42b8 100644 --- a/packages/rocketchat-file-upload/client/lib/FileUploadGoogleStorage.js +++ b/packages/rocketchat-file-upload/client/lib/FileUploadGoogleStorage.js @@ -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'); } }); diff --git a/packages/rocketchat-file-upload/client/lib/FileUploadGridFS.js b/packages/rocketchat-file-upload/client/lib/FileUploadGridFS.js index d5236b1c971..6b8c3755b99 100644 --- a/packages/rocketchat-file-upload/client/lib/FileUploadGridFS.js +++ b/packages/rocketchat-file-upload/client/lib/FileUploadGridFS.js @@ -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'); } }); diff --git a/packages/rocketchat-file-upload/server/config/configFileUploadFileSystem.js b/packages/rocketchat-file-upload/server/config/configFileUploadFileSystem.js index f97534577ab..0ba17089bfd 100644 --- a/packages/rocketchat-file-upload/server/config/configFileUploadFileSystem.js +++ b/packages/rocketchat-file-upload/server/config/configFileUploadFileSystem.js @@ -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); + } +}); diff --git a/packages/rocketchat-file-upload/server/lib/FileUpload.js b/packages/rocketchat-file-upload/server/lib/FileUpload.js index 05ec504af3c..7e207eef10f 100644 --- a/packages/rocketchat-file-upload/server/lib/FileUpload.js +++ b/packages/rocketchat-file-upload/server/lib/FileUpload.js @@ -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); +}; + diff --git a/packages/rocketchat-google-natural-language/.npm/package/npm-shrinkwrap.json b/packages/rocketchat-google-natural-language/.npm/package/npm-shrinkwrap.json index a3461325904..c931564c628 100644 --- a/packages/rocketchat-google-natural-language/.npm/package/npm-shrinkwrap.json +++ b/packages/rocketchat-google-natural-language/.npm/package/npm-shrinkwrap.json @@ -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" } } } diff --git a/packages/rocketchat-ui/client/lib/fileUpload.js b/packages/rocketchat-ui/client/lib/fileUpload.js index d7ef1590a43..20d2007951c 100644 --- a/packages/rocketchat-ui/client/lib/fileUpload.js +++ b/packages/rocketchat-ui/client/lib/fileUpload.js @@ -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); + }); } });