From 0900920426ce49f2ec9efadc9909cd73c324f23d Mon Sep 17 00:00:00 2001
From: Jennifer Lindgren <jennifer.lindgren93@gmail.com>
Date: Sun, 12 May 2019 14:01:04 +0200
Subject: [PATCH] Backend: Added user rooms to be able to notify about added
 collaborators.

---
 backend/bootstrap.sh       |   2 +-
 backend/db.sqlite          | Bin 36864 -> 36864 bytes
 backend/socketio_helper.py |  94 +++++++++++++++++++++++++------------
 3 files changed, 65 insertions(+), 31 deletions(-)

diff --git a/backend/bootstrap.sh b/backend/bootstrap.sh
index 73e43f71..f81daafc 100755
--- a/backend/bootstrap.sh
+++ b/backend/bootstrap.sh
@@ -1,6 +1,6 @@
 #!/bin/bash
+source $(pipenv --venv)/bin/activate
 export PYTHONPATH=.
 export FLASK_APP=./app.py
 export SECRET="aSHOwmmH75H5s2Nnfdl23J09Shg"
-source $(pipenv --venv)/bin/activate
 python3 app.py
\ No newline at end of file
diff --git a/backend/db.sqlite b/backend/db.sqlite
index 0c812abca8441045f224e5dcbfc5525078f7b9a1..c260d6e6c5036f1638e03c679cde794f3c48127c 100644
GIT binary patch
delta 286
zcmZozz|^pSX@WH4&WSS4j5{|bEcEB+d&I!PXUE9Dlh2OdkgspEpnx79s~;0PgYo42
zcrixB$*u89S%yXmhQ?N==2pg*dIqM(=9Z>`EbI*CjE;^RzLg4@dC5hoDVa$*sR{)}
z`B|ySB}_&JhL*Yprn-g(3WkPOMwV8_7J8Ou<_3m_a2Z1d14}Ctb1OqrJwqciBXc8u
z{wxOniH+Wq4dX3Y7#JYzo$=lrjQk%M_&@O9-YnQ~iGT9Fd?5usMs@~9Nlpe{Cb#^Y
zl++?#{`U+_{AU>X@A9AF-^IUsv!K9Ceo_AS3_=XZ03<MZU%dfXR1jH)VNrts00<yN
AA^-pY

delta 164
zcmZozz|^pSX@WGP?nD`9M%|4G3;lT+7#NuO4H@`%@@MfIZWa_!=AUdBZz=7|#Li&I
z>FCJeTd9zkn^={Zm#$Dyl%JKFTrxQ-PD#kXQo+dB%Fx)#z(mj7+}Og>X!6c@Zw>|l
z1_u7y{I@p?HeBMLd@o;U;sgOch#hAb_}}s0<v+7oP+%Yb<TLe3LIRAe42+EOOiW>!
OspY!)c{!Df8Uz3iP%Sk8

diff --git a/backend/socketio_helper.py b/backend/socketio_helper.py
index 8073b7ee..da16e90b 100644
--- a/backend/socketio_helper.py
+++ b/backend/socketio_helper.py
@@ -6,6 +6,54 @@ from flask_socketio import SocketIO, send, emit, join_room, leave_room
 
 socketio = SocketIO(app)
 
+## Join user room
+@socketio.on('joinUserRoom')
+def on_join_user_room(data):
+    data = json.loads(data)
+    user_id = data['userId']
+    room = 'user' + str(user_id)
+    join_room(room)
+    emit('joinUserRoom', {
+        'on': 'joinUserRoom',
+        'userId': user_id
+        }, room=room)
+
+@socketio.on('leaveUserRoom')
+def on_leave_user_room(data):
+    data = json.loads(data)
+    user_id = data['userId']
+    room = 'user' + str(user_id)
+    join_room(room)
+    emit('leaveUserRoom', {
+        'on': 'leaveUserRoom',
+        'userId': user_id
+        }, room=room)
+
+## Join project room
+@socketio.on('joinProjectRoom')
+def on_join_project_room(data):
+    data = json.loads(data)
+    username = data['username']
+    project_id = data['projectId']
+    room = 'project' + str(project_id)
+    join_room(room)
+    emit('joinProjectRoom', {
+        'on': 'joinProjectRoom',
+        'username': username
+        }, room=room)
+
+@socketio.on('leaveProjectRoom')
+def on_leave_project_room(data):
+    data = json.loads(data)
+    username = data['username']
+    project_id = data['projectId']
+    room = 'project' + str(project_id)
+    leave_room(room)
+    emit('leaveProjectRoom', {
+        'on': 'leaveProjectRoom',
+        'username': username
+        }, room=room)
+
 ## Project handling ##
 @socketio.on('projectCreated')
 def handle_project_created(data):
@@ -13,7 +61,7 @@ def handle_project_created(data):
     emit('projectCreated', {
         'on': 'projectCreated',
         'project': project
-        }, broadcast=True)
+        }, room = 'project' + str(project['id']))
 
 @socketio.on('projectChanged')
 def handle_project_changed(data):
@@ -21,7 +69,7 @@ def handle_project_changed(data):
     emit('projectChanged', {
         'on': 'projectChanged',
         'project': project
-        }, broadcast=True)
+        }, room = 'project' + str(project['id']))
 
 @socketio.on('projectDeleted')
 def handle_project_deleted(data):
@@ -29,7 +77,15 @@ def handle_project_deleted(data):
     emit('projectDeleted', {
         'on': 'projectDeleted',
         'projectId': projectId
-        }, broadcast=True)
+        }, room = 'project' + str(projectId))
+
+@socketio.on('collaboratorAdded')
+def handle_collaborator_added(data):
+    collaborator = json.loads(data)
+    emit('collaboratorAdded', {
+        'on': 'collaboratorAdded',
+        'collaborator': collaborator
+        }, room = 'user' + str(collaborator['userId']))
 
 @socketio.on('collaboratorChanged')
 def handle_collaborator_changed(data):
@@ -37,7 +93,7 @@ def handle_collaborator_changed(data):
     emit('collaboratorChanged', {
         'on': 'collaboratorChanged',
         'collaborator': collaborator
-        }, broadcast=True)
+        }, room = 'project' + str(collaborator['projectId']))
 
 ## File handling ##
 @socketio.on('fileCreated')
@@ -46,7 +102,7 @@ def handle_file_created(data):
     emit('fileCreated', {
         'on': 'fileCreated',
         'file': file
-        }, room=file['projectId'])
+        }, room = 'project' + str(file['projectId']))
 
 @socketio.on('fileChanged')
 def handle_file_changed(data):
@@ -54,7 +110,7 @@ def handle_file_changed(data):
     emit('fileChanged', {
         'on': 'fileChanged',
         'file': file
-        }, room=file['projectId'])
+        }, room = 'project' + str(file['projectId']))
 
 @socketio.on('fileDeleted')
 def handle_file_deleted(data):
@@ -62,7 +118,7 @@ def handle_file_deleted(data):
     emit('fileDeleted', {
         'on': 'fileDeleted',
         'file': file
-        }, room=file['projectId'])
+        }, room = 'project' + str(file['projectId']))
 
 ## Chat ##
 @socketio.on('message')
@@ -86,26 +142,4 @@ def handle_message(data):
         'author': db.user_schema.dumps(author),
         'time': new_message.time,
         'message': message
-        }, room=projectId)
-
-@socketio.on('join')
-def on_join(data):
-    data = json.loads(data)
-    username = data['username']
-    room = data['projectId']
-    join_room(room)
-    emit('join', {
-        'on': 'join',
-        'username': username
-        }, room=room)
-
-@socketio.on('leave')
-def on_leave(data):
-    data = json.loads(data)
-    username = data['username']
-    room = data['projectId']
-    leave_room(room)
-    emit('leave', {
-        'on': 'leave',
-        'username': username
-        }, room=room)
\ No newline at end of file
+        }, room = 'project' + str(projectId))
\ No newline at end of file
-- 
GitLab