From 3759851621e2767a9ec56b44c831c561ddb19bc8 Mon Sep 17 00:00:00 2001 From: Devin Howard Date: Tue, 8 Nov 2016 12:37:06 -0500 Subject: [PATCH 1/4] fix access#access route (#926) --- app/controllers/access_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/access_controller.rb b/app/controllers/access_controller.rb index 302e9385..c48ac418 100644 --- a/app/controllers/access_controller.rb +++ b/app/controllers/access_controller.rb @@ -32,7 +32,7 @@ class AccessController < ApplicationController # POST maps/:id/access def access - user_ids = params[:access] || [] + user_ids = params[:access].to_a.map(&:to_i) || [] @map.add_new_collaborators(user_ids).each do |user_id| # add_new_collaborators returns array of added users, From 83b58d43d5db78657d6c65f7d8c87aba72170ca7 Mon Sep 17 00:00:00 2001 From: Connor Turland Date: Tue, 8 Nov 2016 19:42:22 +0000 Subject: [PATCH 2/4] only remove user once they've left all maps --- realtime/realtime-server.js | 2 +- realtime/reducer.js | 29 ++++++++++++++++++++++------- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/realtime/realtime-server.js b/realtime/realtime-server.js index 9b07cfc3..72037eb7 100644 --- a/realtime/realtime-server.js +++ b/realtime/realtime-server.js @@ -16,4 +16,4 @@ signalling(io, stunservers, store) junto(io, store) map(io, store) -io.listen(5001) +io.listen(8081) diff --git a/realtime/reducer.js b/realtime/reducer.js index 183ee081..7146667f 100644 --- a/realtime/reducer.js +++ b/realtime/reducer.js @@ -1,4 +1,4 @@ -const { omit, omitBy, isNil, mapValues } = require('lodash') +const { find, omit, isNil, mapValues, values } = require('lodash') const { JOIN_MAP, LEAVE_MAP, @@ -9,7 +9,16 @@ const { const NOT_IN_CONVERSATION = 0 const IN_CONVERSATION = 1 -const addMapperToMap = (map, userId) => { return Object.assign({}, map, { [userId]: NOT_IN_CONVERSATION })} +const addMapperToMap = (map, userId) => Object.assign({}, map, { [userId]: NOT_IN_CONVERSATION }) +const userStillPresent = (userId, liveMaps) => { + if (!userId) return false + let stillPresent = false + const userIdString = userId.toString() + values(liveMaps).forEach(presentUsers => { + if (find(Object.keys(presentUsers), id => id === userIdString)) stillPresent = true + }) + return stillPresent +} const reducer = (state = { connectedPeople: {}, liveMaps: {} }, action) => { const { type, payload } = action @@ -37,10 +46,13 @@ const reducer = (state = { connectedPeople: {}, liveMaps: {} }, action) => { const newLiveMaps = mapWillEmpty ? omit(liveMaps, payload.mapid) : Object.assign({}, liveMaps, { [payload.mapid]: omit(map, payload.userid) }) + delete newLiveMaps[undefined] + delete newLiveMaps[null] + const updateConnectedPeople = userStillPresent(payload.userid, newLiveMaps) ? connectedPeople : omit(connectedPeople, payload.userid) return { - connectedPeople: omit(connectedPeople, payload.userid), - liveMaps: omitBy(newLiveMaps, isNil) + connectedPeople: updateConnectedPeople, + liveMaps: newLiveMaps } case JOIN_CALL: // update the user (payload.id is user id) in the given map to be marked in the conversation @@ -57,15 +69,18 @@ const reducer = (state = { connectedPeople: {}, liveMaps: {} }, action) => { : Object.assign({}, map, { [payload.userid]: NOT_IN_CONVERSATION }) return Object.assign({}, state, { - liveMaps: Object.assign({}, liveMaps, { map: newMap }) + liveMaps: Object.assign({}, liveMaps, { [payload.mapid]: newMap }) }) case 'DISCONNECT': const mapWithoutUser = omit(map, payload.userid) const newMapWithoutUser = callWillFinish ? mapValues(mapWithoutUser, () => NOT_IN_CONVERSATION) : mapWithoutUser const newLiveMapsWithoutUser = mapWillEmpty ? omit(liveMaps, payload.mapid) : Object.assign({}, liveMaps, { [payload.mapid]: newMapWithoutUser }) + delete newLiveMapsWithoutUser[undefined] + delete newLiveMapsWithoutUser[null] + const newConnectedPeople = userStillPresent(payload.userid, newLiveMapsWithoutUser) ? connectedPeople : omit(connectedPeople, payload.userid) return { - connectedPeople: omit(connectedPeople, payload.userid), - liveMaps: omitBy(newLiveMapsWithoutUser, isNil) + connectedPeople: newConnectedPeople, + liveMaps: newLiveMapsWithoutUser } default: return state From d1f75c8c246bc0aa3935710dd657c575256e2d1f Mon Sep 17 00:00:00 2001 From: Connor Turland Date: Tue, 8 Nov 2016 19:45:51 +0000 Subject: [PATCH 3/4] oops! don't change rt server port --- realtime/realtime-server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/realtime/realtime-server.js b/realtime/realtime-server.js index 72037eb7..9b07cfc3 100644 --- a/realtime/realtime-server.js +++ b/realtime/realtime-server.js @@ -16,4 +16,4 @@ signalling(io, stunservers, store) junto(io, store) map(io, store) -io.listen(8081) +io.listen(5001) From e1441acde03d655212dab0ecb0a5548698ac64e8 Mon Sep 17 00:00:00 2001 From: Connor Turland Date: Tue, 8 Nov 2016 19:50:08 +0000 Subject: [PATCH 4/4] synapse wasn't updating calculated_permission --- frontend/src/Metamaps/Backbone/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/src/Metamaps/Backbone/index.js b/frontend/src/Metamaps/Backbone/index.js index ff4c48b9..1547e145 100644 --- a/frontend/src/Metamaps/Backbone/index.js +++ b/frontend/src/Metamaps/Backbone/index.js @@ -270,8 +270,8 @@ _Backbone.init = function () { newOptions.success = function (model, response, opt) { if (s) s(model, response, opt) - model.trigger('saved') model.set('calculated_permission', model.get('permission')) + model.trigger('saved') if (permBefore === 'private' && model.get('permission') !== 'private') { model.trigger('noLongerPrivate') @@ -436,6 +436,7 @@ _Backbone.init = function () { newOptions.success = function (model, response, opt) { if (s) s(model, response, opt) + model.set('calculated_permission', model.get('permission')) model.trigger('saved') if (permBefore === 'private' && model.get('permission') !== 'private') {