From 9ab7f85005f8ff8592ed35511d43087106c3991e Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Wed, 3 Jun 2015 16:06:32 -0300 Subject: [PATCH 01/26] Change ChatSubscription to reference user as object --- client/lib/RoomManager.coffee | 2 +- client/startup/startup.coffee | 2 +- client/views/app/chatWindowDashboard.coffee | 2 +- client/views/app/sideNav/channels.coffee | 4 +-- .../views/app/sideNav/directMessages.coffee | 4 +-- client/views/app/sideNav/privateGroups.coffee | 4 +-- client/views/app/sideNav/starredRooms.coffee | 4 +-- server/lib/accounts.coffee | 21 --------------- server/methods/canAccessRoom.coffee | 2 +- server/methods/createDirectRoom.coffee | 4 +-- server/methods/forwardRoom.coffee | 2 +- server/methods/hideRoom.coffee | 2 +- server/methods/sendMessage.coffee | 2 +- server/methods/setUsername.coffee | 27 ++++++++++++++++++- server/methods/toogleFavorite.coffee | 2 +- server/publications.coffee | 14 +--------- 16 files changed, 45 insertions(+), 53 deletions(-) diff --git a/client/lib/RoomManager.coffee b/client/lib/RoomManager.coffee index 67b7a68753410..9ff08ad9ff9d5 100644 --- a/client/lib/RoomManager.coffee +++ b/client/lib/RoomManager.coffee @@ -51,7 +51,7 @@ ready: false if myRoomActivity.ready() - if ChatSubscription.findOne { rid: roomId, uid: Meteor.userId() }, { reactive: false } + if ChatSubscription.findOne { rid: roomId, 'u._id': Meteor.userId() }, { reactive: false } openedRooms[roomId].active = true setRoomExpireExcept roomId computation.invalidate() diff --git a/client/startup/startup.coffee b/client/startup/startup.coffee index 703ec147faf33..083a88a33d32e 100644 --- a/client/startup/startup.coffee +++ b/client/startup/startup.coffee @@ -61,7 +61,7 @@ Meteor.startup -> Tracker.autorun -> rooms = [] - ChatSubscription.find({ uid: Meteor.userId() }, { fields: { rid: 1 } }).forEach (sub) -> + ChatSubscription.find({ 'u._id': Meteor.userId() }, { fields: { rid: 1 } }).forEach (sub) -> rooms.push sub.rid ChatRoom.find({ _id: $in: rooms }).observe diff --git a/client/views/app/chatWindowDashboard.coffee b/client/views/app/chatWindowDashboard.coffee index e6577083f54e6..35765785cf3bc 100644 --- a/client/views/app/chatWindowDashboard.coffee +++ b/client/views/app/chatWindowDashboard.coffee @@ -6,7 +6,7 @@ Template.chatWindowDashboard.helpers return t('chatWindowDashboard.Quick_Search') favorite: -> console.log 'chatWindowDashboard.favorite' if window.rocketDebug - sub = ChatSubscription.findOne { rid: this._id, uid: Meteor.userId() } + sub = ChatSubscription.findOne { rid: this._id, 'u._id': Meteor.userId() } return 'icon-star favorite-room' if sub?.f? and sub.f return 'icon-star-empty' diff --git a/client/views/app/sideNav/channels.coffee b/client/views/app/sideNav/channels.coffee index 1e445ba0a50f4..982dc1392cde2 100644 --- a/client/views/app/sideNav/channels.coffee +++ b/client/views/app/sideNav/channels.coffee @@ -3,10 +3,10 @@ Template.channels.helpers return t('chatRooms.Members_placeholder') rooms: -> - return ChatSubscription.find { uid: Meteor.userId(), t: { $in: ['c']}, f: { $ne: true } }, { sort: 't': 1, 'rn': 1 } + return ChatSubscription.find { 'u._id': Meteor.userId(), t: { $in: ['c']}, f: { $ne: true } }, { sort: 't': 1, 'rn': 1 } total: -> - return ChatSubscription.find({ uid: Meteor.userId(), t: { $in: ['c']}, f: { $ne: true } }, { sort: 't': 1, 'rn': 1 }).fetch().length + return ChatSubscription.find({ 'u._id': Meteor.userId(), t: { $in: ['c']}, f: { $ne: true } }, { sort: 't': 1, 'rn': 1 }).count() Template.channels.events 'click .add-room': (e, instance) -> diff --git a/client/views/app/sideNav/directMessages.coffee b/client/views/app/sideNav/directMessages.coffee index 415e04051d4de..20c419f423c9b 100644 --- a/client/views/app/sideNav/directMessages.coffee +++ b/client/views/app/sideNav/directMessages.coffee @@ -1,5 +1,5 @@ Template.directMessages.helpers rooms: -> - return ChatSubscription.find { uid: Meteor.userId(), t: { $in: ['d']}, f: { $ne: true } }, { sort: 't': 1, 'rn': 1 } + return ChatSubscription.find { 'u._id': Meteor.userId(), t: { $in: ['d']}, f: { $ne: true } }, { sort: 't': 1, 'rn': 1 } total: -> - return ChatSubscription.find({ uid: Meteor.userId(), t: { $in: ['d']}, f: { $ne: true } }, { sort: 't': 1, 'rn': 1 }).fetch().length + return ChatSubscription.find({ 'u._id': Meteor.userId(), t: { $in: ['d']}, f: { $ne: true } }, { sort: 't': 1, 'rn': 1 }).fetch().length diff --git a/client/views/app/sideNav/privateGroups.coffee b/client/views/app/sideNav/privateGroups.coffee index 5ba59860e380a..3a1a517001fa9 100644 --- a/client/views/app/sideNav/privateGroups.coffee +++ b/client/views/app/sideNav/privateGroups.coffee @@ -2,9 +2,9 @@ Template.privateGroups.helpers tRoomMembers: -> return t('chatRooms.Members_placeholder') rooms: -> - return ChatSubscription.find { uid: Meteor.userId(), t: { $in: ['p']}, f: { $ne: true } }, { sort: 't': 1, 'rn': 1 } + return ChatSubscription.find { 'u._id': Meteor.userId(), t: { $in: ['p']}, f: { $ne: true } }, { sort: 't': 1, 'rn': 1 } total: -> - return ChatSubscription.find({ uid: Meteor.userId(), t: { $in: ['p']}, f: { $ne: true } }, { sort: 't': 1, 'rn': 1 }).fetch().length + return ChatSubscription.find({ 'u._id': Meteor.userId(), t: { $in: ['p']}, f: { $ne: true } }, { sort: 't': 1, 'rn': 1 }).fetch().length Template.privateGroups.events 'click .add-room': (e, instance) -> diff --git a/client/views/app/sideNav/starredRooms.coffee b/client/views/app/sideNav/starredRooms.coffee index 22137ca040b87..5aa7be9d4d23a 100644 --- a/client/views/app/sideNav/starredRooms.coffee +++ b/client/views/app/sideNav/starredRooms.coffee @@ -1,5 +1,5 @@ Template.starredRooms.helpers rooms: -> - return ChatSubscription.find { uid: Meteor.userId(), f: true }, { sort: 't': 1, 'rn': 1 } + return ChatSubscription.find { 'u._id': Meteor.userId(), f: true }, { sort: 't': 1, 'rn': 1 } total: -> - return ChatSubscription.find({ uid: Meteor.userId(), f: true }, { sort: 't': 1, 'rn': 1 }).fetch().length \ No newline at end of file + return ChatSubscription.find({ 'u._id': Meteor.userId(), f: true }, { sort: 't': 1, 'rn': 1 }).fetch().length \ No newline at end of file diff --git a/server/lib/accounts.coffee b/server/lib/accounts.coffee index ded92edf3dcf8..59f2643c671e0 100644 --- a/server/lib/accounts.coffee +++ b/server/lib/accounts.coffee @@ -57,27 +57,6 @@ Accounts.validateLoginAttempt (login) -> throw new Meteor.Error 'no-valid-email' return false - if not login.user.lastLogin? - # put user in general channel - ChatRoom.update('57om6EQCcFami9wuT', { $addToSet: { uids: login.user._id }}) - if not ChatSubscription.findOne(rid: '57om6EQCcFami9wuT', uid: login.user._id)? - ChatSubscription.insert - rid: '57om6EQCcFami9wuT' - uid: login.user._id - ls: (new Date()) - rn: 'general' - t: 'c' - f: true - ts: new Date() - unread: 0 - - if login.user.name? - ChatMessage.insert - rid: '57om6EQCcFami9wuT' - ts: new Date() - t: 'wm' - msg: login.user.name - Meteor.users.update {_id: login.user._id}, {$set: {lastLogin: new Date}} return true diff --git a/server/methods/canAccessRoom.coffee b/server/methods/canAccessRoom.coffee index 6a4a7c8a28088..6a1e6f237d11b 100644 --- a/server/methods/canAccessRoom.coffee +++ b/server/methods/canAccessRoom.coffee @@ -23,7 +23,7 @@ Meteor.methods throw new Meteor.Error 'without-permission', "[methods] canAccessRoom -> User doesn't have enough permissions" # create room subscription - ChatSubscription.upsert { rid: roomId, uid: Meteor.userId() }, + ChatSubscription.upsert { rid: roomId, 'u._id': Meteor.userId() }, $setOnInsert: rn: room.name t: room.t diff --git a/server/methods/createDirectRoom.coffee b/server/methods/createDirectRoom.coffee index 49b0c942bb91a..9e7d70e31d751 100644 --- a/server/methods/createDirectRoom.coffee +++ b/server/methods/createDirectRoom.coffee @@ -24,7 +24,7 @@ Meteor.methods msgs: 0 ts: now - ChatSubscription.upsert { uid: Meteor.userId(), rid: roomId }, + ChatSubscription.upsert { 'u._id': Meteor.userId(), rid: roomId }, $set: ts: now ls: now @@ -33,7 +33,7 @@ Meteor.methods t: 'd' unread: 0 - ChatSubscription.upsert { uid: userTo._id, rid: roomId }, + ChatSubscription.upsert { 'u._id': userTo._id, rid: roomId }, $set: rn: me.name $setOnInsert: diff --git a/server/methods/forwardRoom.coffee b/server/methods/forwardRoom.coffee index a1b6aac4dca3d..c8a7c95b15b68 100644 --- a/server/methods/forwardRoom.coffee +++ b/server/methods/forwardRoom.coffee @@ -19,7 +19,7 @@ Meteor.methods # $pull: # uids: Meteor.userId() - ChatSubscription.upsert { rid: forward.rid, uid: forward.to }, + ChatSubscription.upsert { rid: forward.rid, 'u._id': forward.to }, $setOnInsert: rn: room.name t: 'v' diff --git a/server/methods/hideRoom.coffee b/server/methods/hideRoom.coffee index a9dedc1c2d6b2..844055289c8a8 100644 --- a/server/methods/hideRoom.coffee +++ b/server/methods/hideRoom.coffee @@ -6,4 +6,4 @@ Meteor.methods unless Meteor.userId()? throw new Meteor.Error 300, 'Usuário não logado' - ChatSubscription.update({ rid: roomId, uid: Meteor.userId() }, { $unset: { ts: 1, f: 1 } }) + ChatSubscription.update({ rid: roomId, 'u._id': Meteor.userId() }, { $unset: { ts: 1, f: 1 } }) diff --git a/server/methods/sendMessage.coffee b/server/methods/sendMessage.coffee index 12d73c2ed72cb..d1e6dec11449a 100644 --- a/server/methods/sendMessage.coffee +++ b/server/methods/sendMessage.coffee @@ -26,7 +26,7 @@ Meteor.methods if Meteor.userId()? messageFilter = { rid: rid, uid: Meteor.userId(), t: 't' } - activityFilter = { rid: rid, uid: { $ne: Meteor.userId() } } + activityFilter = { rid: rid, 'u._id': { $ne: Meteor.userId() } } mentions = [] msg.message.replace /(?:^|\s|\n)(?:@)([A-Za-z0-9-_.]+)/g, (match, mention) -> diff --git a/server/methods/setUsername.coffee b/server/methods/setUsername.coffee index 2cacbaf402cee..6d695621c66f1 100644 --- a/server/methods/setUsername.coffee +++ b/server/methods/setUsername.coffee @@ -24,6 +24,31 @@ Meteor.methods if not /^[0-9a-z-_.]+$/.test username throw new Meteor.Error 'username-invalid' - Meteor.users.update({_id: user._id}, {$set: {username: username}}) + if not user.username? + # put user in general channel + ChatRoom.update '57om6EQCcFami9wuT', + $addToSet: + username: username + + if not ChatSubscription.findOne(rid: '57om6EQCcFami9wuT', 'u._id': user._id)? + ChatSubscription.insert + rid: '57om6EQCcFami9wuT' + u: + _id: user._id + username: username + ls: new Date() + rn: 'general' + t: 'c' + f: true + ts: new Date() + unread: 0 + + ChatMessage.insert + rid: '57om6EQCcFami9wuT' + ts: new Date() + t: 'wm' + msg: "#{user.name} - #{username}" + + Meteor.users.update({_id: user._id}, {$set: {username: username}}) return username diff --git a/server/methods/toogleFavorite.coffee b/server/methods/toogleFavorite.coffee index 1a46f1f0b8578..95b576c0811ab 100644 --- a/server/methods/toogleFavorite.coffee +++ b/server/methods/toogleFavorite.coffee @@ -6,4 +6,4 @@ Meteor.methods fromId = Meteor.userId() # console.log '[methods] toogleFavorite -> '.green, 'fromId:', fromId, 'roomId:', roomId, 'fav:', fav - ChatSubscription.update { rid: roomId, uid: Meteor.userId() }, { $set: { f: fav } } + ChatSubscription.update { rid: roomId, 'u._id': Meteor.userId() }, { $set: { f: fav } } diff --git a/server/publications.coffee b/server/publications.coffee index 0bbf5a4c5e190..5cb63e6d7f866 100644 --- a/server/publications.coffee +++ b/server/publications.coffee @@ -13,10 +13,6 @@ Meteor.publish 'userData', -> statusDefault: 1 statusConnection: 1 avatarOrigin: 1 - emails: 1 - 'services.facebook.id': 1 - 'services.google.picture': 1 - 'services.github.username': 1 Meteor.publish 'myRoomActivity', -> unless this.userId @@ -29,7 +25,7 @@ Meteor.publish 'myRoomActivity', -> return Meteor.publishWithRelations handle: this collection: ChatSubscription - filter: { uid: this.userId, $or: [ { ts: { $gte: moment().subtract(1, 'days').startOf('day').toDate() } }, { f: true } ] } + filter: { 'u._id': this.userId, $or: [ { ts: { $gte: moment().subtract(1, 'days').startOf('day').toDate() } }, { f: true } ] } mappings: [ key: 'rid' reverse: false @@ -73,10 +69,6 @@ Meteor.publish 'allUsers', -> name: 1 username: 1 status: 1 - emails: 1 - 'services.facebook.id': 1 - 'services.google.picture': 1 - 'services.github.username': 1 }} Meteor.publish 'selectiveUsers', (userIds) -> @@ -94,10 +86,6 @@ Meteor.publish 'selectiveUsers', (userIds) -> name: 1 username: 1 status: 1 - emails: 1 - 'services.facebook.id': 1 - 'services.google.picture': 1 - 'services.github.username': 1 cursor = Meteor.users.find query, options From 110e7ef76e4da165ad554fdc8a61d175b72e6263 Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Wed, 3 Jun 2015 17:06:29 -0300 Subject: [PATCH 02/26] Typing, sendMessage and sidebar profile fixed --- client/methods/sendMessage.coffee | 5 +++-- client/methods/typingStatus.coffee | 4 +++- client/startup/startup.coffee | 9 --------- client/views/app/chatMessageDashboard.coffee | 3 +-- client/views/app/chatWindowDashboard.coffee | 20 ++++++++++---------- client/views/app/chatWindowDashboard.html | 4 ++-- client/views/app/sideNav/chatRoomItem.coffee | 2 +- client/views/app/sideNav/userStatus.coffee | 1 + client/views/app/sideNav/userStatus.html | 4 ++-- server/methods/canAccessRoom.coffee | 5 +++-- server/methods/createDirectRoom.coffee | 6 ++++-- server/methods/forwardRoom.coffee | 3 ++- server/methods/sendMessage.coffee | 10 ++++++---- server/methods/setUsername.coffee | 3 +++ server/methods/typingStatus.coffee | 4 +++- server/startup/generalRoom.coffee | 2 +- 16 files changed, 45 insertions(+), 40 deletions(-) diff --git a/client/methods/sendMessage.coffee b/client/methods/sendMessage.coffee index 4cee976d5d004..958ffaf165553 100644 --- a/client/methods/sendMessage.coffee +++ b/client/methods/sendMessage.coffee @@ -3,10 +3,11 @@ Meteor.methods Tracker.nonreactive -> now = new Date(Date.now() + TimeSync.serverOffset()) - ChatMessage.upsert { rid: msg.rid, uid: Meteor.userId(), t: 't' }, + ChatMessage.upsert { rid: msg.rid, t: 't' }, $set: ts: now msg: msg.message + 'u.username': Meteor.user().username $unset: t: 1 expireAt: 1 @@ -15,7 +16,7 @@ Meteor.methods Tracker.nonreactive -> now = new Date(Date.now() + TimeSync.serverOffset()) - ChatMessage.update { _id: msg.id, uid: Meteor.userId() }, + ChatMessage.update { _id: msg.id, 'u._id': Meteor.userId() }, $set: ets: now msg: msg.message diff --git a/client/methods/typingStatus.coffee b/client/methods/typingStatus.coffee index 8d2536819f5e1..fdff0694957bb 100644 --- a/client/methods/typingStatus.coffee +++ b/client/methods/typingStatus.coffee @@ -6,7 +6,7 @@ Meteor.methods filter = t: 't' rid: typingData.rid - uid: Meteor.userId() + $and: [{'u._id': Meteor.userId()}] if start msgData = @@ -14,6 +14,8 @@ Meteor.methods expireAt: moment().add(30, 'seconds').toDate() '$setOnInsert': msg: '...' + 'u._id': Meteor.userId() + 'u.username': Meteor.user().username ts: moment().add(1, 'years').toDate() ChatMessage.upsert(filter, msgData) diff --git a/client/startup/startup.coffee b/client/startup/startup.coffee index 083a88a33d32e..1ec645e9af334 100644 --- a/client/startup/startup.coffee +++ b/client/startup/startup.coffee @@ -28,24 +28,15 @@ Meteor.startup -> Meteor.users.find({}, { fields: { name: 1, pictures: 1, status: 1, emails: 1, phone: 1, services: 1 } }).observe added: (user) -> - Session.set('user_' + user._id + '_name', user.name) Session.set('user_' + user._id + '_status', user.status) - Session.set('user_' + user._id + '_emails', user.emails) - Session.set('user_' + user._id + '_phone', user.phone) UserAndRoom.insert({ type: 'u', uid: user._id, name: user.name}) changed: (user) -> - Session.set('user_' + user._id + '_name', user.name) Session.set('user_' + user._id + '_status', user.status) - Session.set('user_' + user._id + '_emails', user.emails) - Session.set('user_' + user._id + '_phone', user.phone) UserAndRoom.update({ uid: user._id }, { $set: { name: user.name } }) removed: (user) -> - Session.set('user_' + user._id + '_name', null) Session.set('user_' + user._id + '_status', null) - Session.set('user_' + user._id + '_emails', null) - Session.set('user_' + user._id + '_phone', null) UserAndRoom.remove({ uid: user._id }) diff --git a/client/views/app/chatMessageDashboard.coffee b/client/views/app/chatMessageDashboard.coffee index 698df19f780f4..bb0b66c397c85 100644 --- a/client/views/app/chatMessageDashboard.coffee +++ b/client/views/app/chatMessageDashboard.coffee @@ -3,8 +3,7 @@ Template.chatMessageDashboard.helpers return 'own' if this.data.uid is Meteor.userId() username: -> - if this.uid? - return Session.get('user_' + this.uid + '_name') + return this.u.username isSystemMessage: -> return this.t in ['s', 'p', 'f', 'r', 'au', 'ru', 'ul', 'nu', 'wm'] diff --git a/client/views/app/chatWindowDashboard.coffee b/client/views/app/chatWindowDashboard.coffee index 35765785cf3bc..3e54e90a5df04 100644 --- a/client/views/app/chatWindowDashboard.coffee +++ b/client/views/app/chatWindowDashboard.coffee @@ -37,7 +37,7 @@ Template.chatWindowDashboard.helpers typing: -> console.log 'chatWindowDashboard.typing' if window.rocketDebug - return this.uid isnt Meteor.userId() + return this.u._id isnt Meteor.userId() usersTyping: -> messages = ChatMessage.find { rid: this._id }, { sort: { ts: 1 } } @@ -45,10 +45,10 @@ Template.chatWindowDashboard.helpers selfTyping = false messages.forEach (message) -> if message.t is 't' - if message.uid is Meteor.userId() + if message.u._id is Meteor.userId() selfTyping = true else - username = Session.get('user_' + message.uid + '_name') + username = message.u.username if username? usernames.push username @@ -142,14 +142,14 @@ Template.chatWindowDashboard.helpers return {} unless roomData if roomData.t is 'd' - uid = _.without roomData.uids, Meteor.userId() - UserManager.addUser uid + username = _.without roomData.usernames, Meteor.user().username + UserManager.addUser username userData = { - name: Session.get('user_' + uid + '_name') - emails: Session.get('user_' + uid + '_emails') || [] - phone: Session.get('user_' + uid + '_phone') - uid: String(uid) + name: Session.get('user_' + username + '_name') + emails: Session.get('user_' + username + '_emails') || [] + phone: Session.get('user_' + username + '_phone') + username: String(username) } return userData @@ -241,7 +241,7 @@ Template.chatWindowDashboard.helpers room = ChatRoom.findOne(this._id, { reactive: false }) ret = _id: this._id - total: room?.uids.length + total: room?.usernames.length totalOnline: 0 users: [] diff --git a/client/views/app/chatWindowDashboard.html b/client/views/app/chatWindowDashboard.html index 86bf6735a2a03..078170d698c9c 100644 --- a/client/views/app/chatWindowDashboard.html +++ b/client/views/app/chatWindowDashboard.html @@ -128,7 +128,7 @@

{{_ "chatWindowDashboard.Members_List"}}

{{> avatar userId=uid}}
-

{{name}}

+

{{username}}

{{#if contactCode}}
{{_ "general.Contact"}} {{contactCode}}
{{/if}} @@ -156,7 +156,7 @@

{{name}}

{{> avatar userId=uid}}
-

{{name}}

+

{{username}}

{{#if contactCode}}
{{_ "general.contact"}} {{contactCode}}
{{/if}} diff --git a/client/views/app/sideNav/chatRoomItem.coffee b/client/views/app/sideNav/chatRoomItem.coffee index f327b2ba53b89..19931e993529e 100644 --- a/client/views/app/sideNav/chatRoomItem.coffee +++ b/client/views/app/sideNav/chatRoomItem.coffee @@ -32,7 +32,7 @@ Template.chatRoomItem.helpers return false unless roomData - if (roomData.cl? and not roomData.cl) or roomData.t is 'd' or (roomData.uids.indexOf(Meteor.userId()) isnt -1 and roomData.uids.length is 1) + if (roomData.cl? and not roomData.cl) or roomData.t is 'd' or (roomData.usernames.indexOf(Meteor.user().username) isnt -1 and roomData.uids.length is 1) return false else return true diff --git a/client/views/app/sideNav/userStatus.coffee b/client/views/app/sideNav/userStatus.coffee index 2d2649337eba7..c5fcec5692fd5 100644 --- a/client/views/app/sideNav/userStatus.coffee +++ b/client/views/app/sideNav/userStatus.coffee @@ -13,6 +13,7 @@ Template.userStatus.helpers status: Session.get('user_' + Meteor.userId() + '_status') visualStatus: visualStatus _id: Meteor.userId() + username: Meteor.user().username } Template.userStatus.events diff --git a/client/views/app/sideNav/userStatus.html b/client/views/app/sideNav/userStatus.html index 336a9866b92a8..436a8a2d8f335 100644 --- a/client/views/app/sideNav/userStatus.html +++ b/client/views/app/sideNav/userStatus.html @@ -2,13 +2,13 @@