From e84e0d30ebb6168655ce8324008a32985db9ebb2 Mon Sep 17 00:00:00 2001
From: Maki Nishifuji <nishimaki10@users.noreply.github.com>
Date: Sat, 17 Sep 2016 00:53:34 +0900
Subject: [PATCH] Improve upload error messages

---
 .../.npm/package/npm-shrinkwrap.json          | 19 +++++++++++--------
 .../client/lib/FileUploadFileSystem.js        |  8 ++++++++
 .../client/lib/FileUploadGridFS.js            |  8 ++++++++
 .../globalFileRestrictions.js                 |  4 +++-
 .../rocketchat-file-upload/lib/FileUpload.js  | 14 +++++++++++---
 packages/rocketchat-file-upload/package.js    |  3 ++-
 packages/rocketchat-i18n/i18n/en.i18n.json    |  3 ++-
 packages/rocketchat-i18n/i18n/ja.i18n.json    |  3 ++-
 8 files changed, 47 insertions(+), 15 deletions(-)

diff --git a/packages/rocketchat-file-upload/.npm/package/npm-shrinkwrap.json b/packages/rocketchat-file-upload/.npm/package/npm-shrinkwrap.json
index 3accf2dba6e..62e1770f2f6 100644
--- a/packages/rocketchat-file-upload/.npm/package/npm-shrinkwrap.json
+++ b/packages/rocketchat-file-upload/.npm/package/npm-shrinkwrap.json
@@ -1,16 +1,19 @@
 {
   "dependencies": {
+    "filesize": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.3.0.tgz",
+      "from": "filesize@3.3.0"
+    },
+    "mime-db": {
+      "version": "1.23.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.23.0.tgz",
+      "from": "mime-db@>=1.23.0 <1.24.0"
+    },
     "mime-types": {
       "version": "2.1.11",
       "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.11.tgz",
-      "from": "mime-types@2.1.11",
-      "dependencies": {
-        "mime-db": {
-          "version": "1.23.0",
-          "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.23.0.tgz",
-          "from": "mime-db@1.23.0"
-        }
-      }
+      "from": "mime-types@2.1.11"
     }
   }
 }
diff --git a/packages/rocketchat-file-upload/client/lib/FileUploadFileSystem.js b/packages/rocketchat-file-upload/client/lib/FileUploadFileSystem.js
index f42522813fe..b18528c037e 100644
--- a/packages/rocketchat-file-upload/client/lib/FileUploadFileSystem.js
+++ b/packages/rocketchat-file-upload/client/lib/FileUploadFileSystem.js
@@ -53,6 +53,14 @@ FileUpload.FileSystem = class FileUploadFileSystem extends FileUploadBase {
 	}
 
 	start() {
+		const uploading = Session.get('uploading') || [];
+		const item = {
+			id: this.id,
+			name: this.getFileName(),
+			percentage: 0,
+		};
+		uploading.push(item);
+		Session.set('uploading', uploading);
 		return this.handler.start();
 	}
 
diff --git a/packages/rocketchat-file-upload/client/lib/FileUploadGridFS.js b/packages/rocketchat-file-upload/client/lib/FileUploadGridFS.js
index 29ede701943..b0f68a5eee2 100644
--- a/packages/rocketchat-file-upload/client/lib/FileUploadGridFS.js
+++ b/packages/rocketchat-file-upload/client/lib/FileUploadGridFS.js
@@ -44,6 +44,14 @@ FileUpload.GridFS = class FileUploadGridFS extends FileUploadBase {
 	}
 
 	start() {
+		const uploading = Session.get('uploading') || [];
+		const item = {
+			id: this.id,
+			name: this.getFileName(),
+			percentage: 0,
+		};
+		uploading.push(item);
+		Session.set('uploading', uploading);
 		return this.handler.start();
 	}
 
diff --git a/packages/rocketchat-file-upload/globalFileRestrictions.js b/packages/rocketchat-file-upload/globalFileRestrictions.js
index 737e61a1e9c..aa13684a514 100644
--- a/packages/rocketchat-file-upload/globalFileRestrictions.js
+++ b/packages/rocketchat-file-upload/globalFileRestrictions.js
@@ -1,5 +1,7 @@
 /* globals Slingshot */
 
+import filesize from 'filesize';
+
 Slingshot.fileRestrictions('rocketchat-uploads', {
 	authorize: function(file/*, metaContext*/) {
 		if (!RocketChat.fileUploadIsValidContentType(file.type)) {
@@ -9,7 +11,7 @@ Slingshot.fileRestrictions('rocketchat-uploads', {
 		var maxFileSize = RocketChat.settings.get('FileUpload_MaxFileSize');
 
 		if (maxFileSize && maxFileSize < file.size) {
-			throw new Meteor.Error(TAPi18n.__('File_exceeds_allowed_size_of_bytes', { size: maxFileSize }));
+			throw new Meteor.Error(TAPi18n.__('File_exceeds_allowed_size_of_bytes', { size: filesize(maxFileSize) }));
 		}
 
 		//Deny uploads if user is not logged in.
diff --git a/packages/rocketchat-file-upload/lib/FileUpload.js b/packages/rocketchat-file-upload/lib/FileUpload.js
index ad60d50112b..c5fb1a87a6b 100644
--- a/packages/rocketchat-file-upload/lib/FileUpload.js
+++ b/packages/rocketchat-file-upload/lib/FileUpload.js
@@ -1,16 +1,24 @@
 /* globals FileUpload:true */
 /* exported FileUpload */
 
-var maxFileSize = 0;
+import filesize from 'filesize';
+
+let maxFileSize = 0;
 
 FileUpload = {
 	validateFileUpload(file) {
 		if (file.size > maxFileSize) {
-			throw new Meteor.Error('error-file-too-large', 'File is too large');
+			const user = Meteor.user();
+			const reason = TAPi18n.__('File_exceeds_allowed_size_of_bytes', {
+				size: filesize(maxFileSize),
+			}, user.language);
+			throw new Meteor.Error('error-file-too-large', reason);
 		}
 
 		if (!RocketChat.fileUploadIsValidContentType(file.type)) {
-			throw new Meteor.Error('error-invalid-file-type', 'File type is not accepted');
+			const user = Meteor.user();
+			const reason = TAPi18n.__('File_type_is_not_accepted', user.language);
+			throw new Meteor.Error('error-invalid-file-type', reason);
 		}
 
 		return true;
diff --git a/packages/rocketchat-file-upload/package.js b/packages/rocketchat-file-upload/package.js
index 5bd5f0a6d88..cb80a8a7cbf 100644
--- a/packages/rocketchat-file-upload/package.js
+++ b/packages/rocketchat-file-upload/package.js
@@ -47,5 +47,6 @@ Package.onUse(function(api) {
 });
 
 Npm.depends({
-	'mime-types': '2.1.11'
+	'mime-types': '2.1.11',
+	'filesize': '3.3.0',
 });
diff --git a/packages/rocketchat-i18n/i18n/en.i18n.json b/packages/rocketchat-i18n/i18n/en.i18n.json
index 4ab277ca795..f82c05aa799 100644
--- a/packages/rocketchat-i18n/i18n/en.i18n.json
+++ b/packages/rocketchat-i18n/i18n/en.i18n.json
@@ -452,7 +452,8 @@
   "Field" : "Field",
   "Field_removed" : "Field removed",
   "Field_required" : "Field required",
-  "File_exceeds_allowed_size_of_bytes" : "File exceeds allowed size of __size__ bytes",
+  "File_exceeds_allowed_size_of_bytes" : "File exceeds allowed size of __size__.",
+  "File_type_is_not_accepted": "File type is not accepted.",
   "FileUpload" : "File Upload",
   "FileUpload_Enabled" : "File Uploads Enabled",
   "FileUpload_File_Empty" : "File empty",
diff --git a/packages/rocketchat-i18n/i18n/ja.i18n.json b/packages/rocketchat-i18n/i18n/ja.i18n.json
index 20edc9b6e61..6d16d1dd65e 100644
--- a/packages/rocketchat-i18n/i18n/ja.i18n.json
+++ b/packages/rocketchat-i18n/i18n/ja.i18n.json
@@ -412,7 +412,8 @@
   "Features_Enabled" : "有効な機能",
   "Field" : "フィールド",
   "Field_removed" : "フィールド削除",
-  "File_exceeds_allowed_size_of_bytes" : "ファイルが許可されているサイズ __size__ バイトを超過しています。",
+  "File_exceeds_allowed_size_of_bytes" : "ファイルが許可されているサイズ __size__ を超過しています。",
+  "File_type_is_not_accepted": "許可されていないファイルタイプです。",
   "FileUpload" : "ファイルアップロード",
   "FileUpload_Enabled" : "ファイルアップロードを有効にする",
   "FileUpload_File_Empty" : "ファイルが空です",
-- 
GitLab