From 0da099e981e07f2dc6ca0f1497ff5228371d3234 Mon Sep 17 00:00:00 2001 From: George Secrieru Date: Thu, 1 Oct 2015 12:02:21 -0300 Subject: [PATCH 1/5] Added tabbar button for listing files uploaded to room. --- client/routes/roomRoute.coffee | 1 + .../views/app/tabBar/uploadedFilesList.coffee | 17 +++++++ .../views/app/tabBar/uploadedFilesList.html | 21 ++++++++ i18n/en.i18n.json | 2 + i18n/pt.i18n.json | 2 + server/publications/roomFiles.coffee | 50 +++++++++++++++++++ 6 files changed, 93 insertions(+) create mode 100644 client/views/app/tabBar/uploadedFilesList.coffee create mode 100644 client/views/app/tabBar/uploadedFilesList.html create mode 100644 server/publications/roomFiles.coffee diff --git a/client/routes/roomRoute.coffee b/client/routes/roomRoute.coffee index ee3c84e106ba..2a03a541917d 100644 --- a/client/routes/roomRoute.coffee +++ b/client/routes/roomRoute.coffee @@ -56,6 +56,7 @@ openRoom = (type, name) -> RocketChat.TabBar.addButton({ id: 'members-list', title: t('User_Info'), icon: 'icon-user', template: 'membersList', order: 2 }) else RocketChat.TabBar.addButton({ id: 'members-list', title: t('Members_List'), icon: 'icon-users', template: 'membersList', order: 2 }) + RocketChat.TabBar.addButton({ id: 'uploaded-files-list', title: t('Room_uploaded_file_list'), icon: 'icon-download', template: 'uploadedFilesList', order: 3 }) # update user's room subscription if ChatSubscription.findOne({rid: room._id})?.open is false diff --git a/client/views/app/tabBar/uploadedFilesList.coffee b/client/views/app/tabBar/uploadedFilesList.coffee new file mode 100644 index 000000000000..85efd764c9ad --- /dev/null +++ b/client/views/app/tabBar/uploadedFilesList.coffee @@ -0,0 +1,17 @@ +Template.uploadedFilesList.helpers + files: -> + return fileCollection.find().fetch() + + hasFiles: -> + return fileCollection.find().count() > 0 + + getFileIcon: (type) -> + if type.match(/^image\/.+$/) + return 'icon-picture' + + return 'icon-docs' + +Template.uploadedFilesList.onCreated -> + instance = this + this.autorun -> + instance.subscribe 'roomFiles', Session.get('openedRoom') diff --git a/client/views/app/tabBar/uploadedFilesList.html b/client/views/app/tabBar/uploadedFilesList.html new file mode 100644 index 000000000000..a514437bc010 --- /dev/null +++ b/client/views/app/tabBar/uploadedFilesList.html @@ -0,0 +1,21 @@ + \ No newline at end of file diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index f8f87ad1b528..8402a5300ada 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -257,6 +257,8 @@ "Room_name_changed" : "Room name changed to: __room_name__ by __user_by__", "Room_name_changed_successfully" : "Room name changed successfully", "Room_not_found" : "Room not found", + "Room_uploaded_file_list" : "Files list", + "Room_uploaded_file_list_empty" : "No files available.", "room_user_count" : "%s users", "Rooms" : "Rooms", "Save" : "Save", diff --git a/i18n/pt.i18n.json b/i18n/pt.i18n.json index feac96920356..ec2afac9ed3f 100644 --- a/i18n/pt.i18n.json +++ b/i18n/pt.i18n.json @@ -251,6 +251,8 @@ "Room_name_changed" : "Nome da sala alterado para: __room_name__ por __user_by__", "Room_name_changed_successfully" : "Nome da sala alterado com sucesso", "Room_not_found" : "Sala não encontrada", + "Room_uploaded_file_list" : "Lista de arquivos", + "Room_uploaded_file_list_empty" : "Nenhum arquivo disponível", "room_user_count" : "%s usuários", "Rooms" : "Salas", "Save" : "Salvar", diff --git a/server/publications/roomFiles.coffee b/server/publications/roomFiles.coffee new file mode 100644 index 000000000000..e6b7d4850bb4 --- /dev/null +++ b/server/publications/roomFiles.coffee @@ -0,0 +1,50 @@ +Meteor.publish 'roomFiles', (rid) -> + unless this.userId + return this.ready() + + console.log '[publish] roomFiles'.green, rid + + # list of channel messages which were created after uploading a file + msgQuery = + rid: rid + 'file._id': { $exists: true } + msgOptions = + fields: + _id: 1 + 'file._id': 1 + cursorFileMessages = RocketChat.models.Messages.find(msgQuery, msgOptions); + uploadedFilesMessages = cursorFileMessages.fetch() + unless uploadedFilesMessages + return this.ready() + + uploadIdList = _.map(uploadedFilesMessages, (doc) -> return doc?.file?._id) + unless uploadIdList + return this.ready() + + fileQuery = + _id: { $in : uploadIdList } + complete: true + uploading: false + + fileOptions = + fields: + _id: 1 + name: 1 + type: 1 + url: 1 + + fileCollection.find(fileQuery, fileOptions) + this.ready() + + # observe whether a new file was sent to the room and notifies subscribers + pub = this + cursorFileMessagesHandle = cursorFileMessages.observeChanges + added: (_id, record) -> + unless record?.file?._id + return pub.ready() + + data = fileCollection.findOne({ _id: record.file._id }, fileOptions) + pub.added('rocketchat_uploads', record.file._id, data) + + this.onStop -> + cursorFileMessagesHandle.stop() From d8d2f9764b1d8af3e061b01092508bd367e33e78 Mon Sep 17 00:00:00 2001 From: George Secrieru Date: Thu, 1 Oct 2015 18:43:00 -0300 Subject: [PATCH 2/5] Using (other) local collection for sync --- .../views/app/tabBar/uploadedFilesList.coffee | 6 +++-- .../views/app/tabBar/uploadedFilesList.html | 24 +++++++++++-------- server/publications/roomFiles.coffee | 14 ++++++++--- 3 files changed, 29 insertions(+), 15 deletions(-) diff --git a/client/views/app/tabBar/uploadedFilesList.coffee b/client/views/app/tabBar/uploadedFilesList.coffee index 85efd764c9ad..235eb45942ff 100644 --- a/client/views/app/tabBar/uploadedFilesList.coffee +++ b/client/views/app/tabBar/uploadedFilesList.coffee @@ -1,9 +1,11 @@ +roomFiles = new Mongo.Collection 'room_files' + Template.uploadedFilesList.helpers files: -> - return fileCollection.find().fetch() + return roomFiles.find().fetch() hasFiles: -> - return fileCollection.find().count() > 0 + return roomFiles.find().count() > 0 getFileIcon: (type) -> if type.match(/^image\/.+$/) diff --git a/client/views/app/tabBar/uploadedFilesList.html b/client/views/app/tabBar/uploadedFilesList.html index a514437bc010..30db8767eb18 100644 --- a/client/views/app/tabBar/uploadedFilesList.html +++ b/client/views/app/tabBar/uploadedFilesList.html @@ -4,17 +4,21 @@

{{_ "Room_uploaded_file_list"}}

- {{#if hasFiles }} - + {{#if Template.subscriptionsReady}} + {{#if hasFiles }} + + {{else}} +

{{_ "Room_uploaded_file_list_empty"}}

+ {{/if}} {{else}} -

{{_ "Room_uploaded_file_list_empty"}}

+ {{_ "Loading..."}} {{/if}} diff --git a/server/publications/roomFiles.coffee b/server/publications/roomFiles.coffee index e6b7d4850bb4..5fcd87541fbd 100644 --- a/server/publications/roomFiles.coffee +++ b/server/publications/roomFiles.coffee @@ -33,8 +33,7 @@ Meteor.publish 'roomFiles', (rid) -> type: 1 url: 1 - fileCollection.find(fileQuery, fileOptions) - this.ready() + cursorFileList = fileCollection.find(fileQuery, fileOptions) # observe whether a new file was sent to the room and notifies subscribers pub = this @@ -44,7 +43,16 @@ Meteor.publish 'roomFiles', (rid) -> return pub.ready() data = fileCollection.findOne({ _id: record.file._id }, fileOptions) - pub.added('rocketchat_uploads', record.file._id, data) + data.rid = rid + pub.added('room_files', record.file._id, data) + + cursorFileListHandle = cursorFileList.observeChanges + added: (_id, record) -> + record.rid = rid + pub.added('room_files', _id, record) + + this.ready() this.onStop -> + cursorFileListHandle.stop() cursorFileMessagesHandle.stop() From f418a85a7689727fafa882957ea133ed96e78acf Mon Sep 17 00:00:00 2001 From: George Secrieru Date: Thu, 1 Oct 2015 20:41:45 -0300 Subject: [PATCH 3/5] Adding limit to publication. --- server/publications/roomFiles.coffee | 1 + 1 file changed, 1 insertion(+) diff --git a/server/publications/roomFiles.coffee b/server/publications/roomFiles.coffee index 5fcd87541fbd..06479947b401 100644 --- a/server/publications/roomFiles.coffee +++ b/server/publications/roomFiles.coffee @@ -12,6 +12,7 @@ Meteor.publish 'roomFiles', (rid) -> fields: _id: 1 'file._id': 1 + limit: 50 cursorFileMessages = RocketChat.models.Messages.find(msgQuery, msgOptions); uploadedFilesMessages = cursorFileMessages.fetch() unless uploadedFilesMessages From 093e8a305896632af45728a3cf3078b35106dfe9 Mon Sep 17 00:00:00 2001 From: George Secrieru Date: Fri, 2 Oct 2015 15:09:10 -0300 Subject: [PATCH 4/5] Simplified logic for publication, based on changes from migration v20. --- server/publications/roomFiles.coffee | 38 +++------------------------- 1 file changed, 3 insertions(+), 35 deletions(-) diff --git a/server/publications/roomFiles.coffee b/server/publications/roomFiles.coffee index 06479947b401..8d59aef92c70 100644 --- a/server/publications/roomFiles.coffee +++ b/server/publications/roomFiles.coffee @@ -4,26 +4,10 @@ Meteor.publish 'roomFiles', (rid) -> console.log '[publish] roomFiles'.green, rid - # list of channel messages which were created after uploading a file - msgQuery = - rid: rid - 'file._id': { $exists: true } - msgOptions = - fields: - _id: 1 - 'file._id': 1 - limit: 50 - cursorFileMessages = RocketChat.models.Messages.find(msgQuery, msgOptions); - uploadedFilesMessages = cursorFileMessages.fetch() - unless uploadedFilesMessages - return this.ready() - - uploadIdList = _.map(uploadedFilesMessages, (doc) -> return doc?.file?._id) - unless uploadIdList - return this.ready() + pub = this fileQuery = - _id: { $in : uploadIdList } + rid: rid complete: true uploading: false @@ -34,26 +18,10 @@ Meteor.publish 'roomFiles', (rid) -> type: 1 url: 1 - cursorFileList = fileCollection.find(fileQuery, fileOptions) - - # observe whether a new file was sent to the room and notifies subscribers - pub = this - cursorFileMessagesHandle = cursorFileMessages.observeChanges - added: (_id, record) -> - unless record?.file?._id - return pub.ready() - - data = fileCollection.findOne({ _id: record.file._id }, fileOptions) - - data.rid = rid - pub.added('room_files', record.file._id, data) - - cursorFileListHandle = cursorFileList.observeChanges + cursorFileListHandle = fileCollection.find(fileQuery, fileOptions).observeChanges added: (_id, record) -> - record.rid = rid pub.added('room_files', _id, record) this.ready() this.onStop -> cursorFileListHandle.stop() - cursorFileMessagesHandle.stop() From f2fa1c460deeede98b84810ecc80a5f9d13d01ac Mon Sep 17 00:00:00 2001 From: George Secrieru Date: Fri, 2 Oct 2015 15:28:27 -0300 Subject: [PATCH 5/5] Added support to swipebox for images listed on the tab-bar files panel. --- client/views/app/tabBar/uploadedFilesList.coffee | 14 ++++++++++++++ client/views/app/tabBar/uploadedFilesList.html | 4 ++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/client/views/app/tabBar/uploadedFilesList.coffee b/client/views/app/tabBar/uploadedFilesList.coffee index 235eb45942ff..7b31ab966453 100644 --- a/client/views/app/tabBar/uploadedFilesList.coffee +++ b/client/views/app/tabBar/uploadedFilesList.coffee @@ -13,7 +13,21 @@ Template.uploadedFilesList.helpers return 'icon-docs' + customClassForFileType: -> + if this.type.match(/^image\/.+$/) + return 'room-files-swipebox' + + +Template.uploadedFilesList.events + 'click .room-file-item': (e, t) -> + if $(e.currentTarget).siblings('.icon-picture').length + e.preventDefault() + + Template.uploadedFilesList.onCreated -> instance = this this.autorun -> instance.subscribe 'roomFiles', Session.get('openedRoom') + +Template.uploadedFilesList.onRendered -> + $('.room-files-swipebox').swipebox() diff --git a/client/views/app/tabBar/uploadedFilesList.html b/client/views/app/tabBar/uploadedFilesList.html index 30db8767eb18..e97b07b3fdcd 100644 --- a/client/views/app/tabBar/uploadedFilesList.html +++ b/client/views/app/tabBar/uploadedFilesList.html @@ -10,7 +10,7 @@

{{_ "Room_uploaded_file_list"}}

{{#each files}}
  • - {{name}} + {{name}}
  • {{/each}} @@ -22,4 +22,4 @@

    {{_ "Room_uploaded_file_list_empty"}}

    {{/if}} - \ No newline at end of file +