Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions mslib/mscolab/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -349,7 +349,7 @@ def message_attachment():
static_file_path = fs.path.join(static_dir, op_id, file_name)
new_message = cm.add_message(user, static_file_path, op_id, message_type)
new_message_dict = get_message_dict(new_message)
sockio.emit('chat-message-client', json.dumps(new_message_dict), room=str(op_id))
sockio.emit('chat-message-client', json.dumps(new_message_dict))
return jsonify({"success": True, "path": static_file_path})
return jsonify({"success": False, "message": "Could not send message. No file uploaded."})

Expand Down Expand Up @@ -380,7 +380,12 @@ def create_operation():
description = request.form.get('description', None)
category = request.form.get('category', "default")
user = g.user
return str(fm.create_operation(path, description, user, content=content, category=category))
r = str(fm.create_operation(path, description, user, content=content, category=category))
if r == "True":
token = request.args.get('token', request.form.get('token', False))
json_config = {"token": token}
sockio.sm.update_operation_list(json_config)
return r


@APP.route('/get_operation_by_id', methods=['GET'])
Expand Down
37 changes: 25 additions & 12 deletions mslib/mscolab/sockets_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,17 @@ def __init__(self, chat_manager, file_manager):
def handle_connect(self):
logging.debug(request.sid)

def update_operation_list(self, json_config):
"""
json_config has:
- token: authentication token
"""
token = json_config["token"]
user = User.verify_auth_token(token)
if not user:
return
socketio.emit('operation-list-update')

def join_creator_to_room(self, json_config):
"""
json_config has:
Expand Down Expand Up @@ -138,9 +149,9 @@ def handle_message(self, _json):
new_message = self.cm.add_message(user, _json['message_text'], str(op_id), reply_id=reply_id)
new_message_dict = get_message_dict(new_message)
if reply_id == -1:
socketio.emit('chat-message-client', json.dumps(new_message_dict), room=str(op_id))
socketio.emit('chat-message-client', json.dumps(new_message_dict))
else:
socketio.emit('chat-message-reply-client', json.dumps(new_message_dict), room=str(op_id))
socketio.emit('chat-message-reply-client', json.dumps(new_message_dict))

def handle_message_edit(self, socket_message):
message_id = socket_message["message_id"]
Expand All @@ -154,7 +165,7 @@ def handle_message_edit(self, socket_message):
socketio.emit('edit-message-client', json.dumps({
"message_id": message_id,
"new_message_text": new_message_text
}), room=str(op_id))
}))

def handle_message_delete(self, socket_message):
message_id = socket_message["message_id"]
Expand All @@ -164,7 +175,7 @@ def handle_message_delete(self, socket_message):
perm = self.permission_check_emit(user.id, int(op_id))
if perm:
self.cm.delete_message(message_id)
socketio.emit('delete-message-client', json.dumps({"message_id": message_id}), room=str(op_id))
socketio.emit('delete-message-client', json.dumps({"message_id": message_id}))

def permission_check_emit(self, u_id, op_id):
"""
Expand Down Expand Up @@ -211,21 +222,21 @@ def handle_file_save(self, json_req):
message_ = f"[service message] **{user.username}** saved changes"
new_message = self.cm.add_message(user, message_, str(op_id), message_type=MessageType.SYSTEM_MESSAGE)
new_message_dict = get_message_dict(new_message)
socketio.emit('chat-message-client', json.dumps(new_message_dict), room=str(op_id))
socketio.emit('chat-message-client', json.dumps(new_message_dict))
# emit file-changed event to trigger reload of flight track
socketio.emit('file-changed', json.dumps({"op_id": op_id, "u_id": user.id}), room=str(op_id))
socketio.emit('file-changed', json.dumps({"op_id": op_id, "u_id": user.id}))
else:
logging.debug(f'login expired for {user.username}, state unauthorized!')

def emit_file_change(self, op_id):
socketio.emit('file-changed', json.dumps({"op_id": op_id}), room=str(op_id))
socketio.emit('file-changed', json.dumps({"op_id": op_id}))

def emit_new_permission(self, u_id, op_id):
"""
to refresh operation list of u_id
and to refresh collaborators' list
"""
socketio.emit('new-permission', json.dumps({"op_id": op_id, "u_id": u_id}), room=str(op_id))
socketio.emit('new-permission', json.dumps({"op_id": op_id, "u_id": u_id}))

def emit_update_permission(self, u_id, op_id, access_level=None):
"""
Expand All @@ -238,16 +249,16 @@ def emit_update_permission(self, u_id, op_id, access_level=None):

socketio.emit('update-permission', json.dumps({"op_id": op_id,
"u_id": u_id,
"access_level": access_level}), room=str(op_id))
"access_level": access_level}))

def emit_revoke_permission(self, u_id, op_id):
socketio.emit("revoke-permission", json.dumps({"op_id": op_id, "u_id": u_id}), room=str(op_id))
socketio.emit("revoke-permission", json.dumps({"op_id": op_id, "u_id": u_id}))

def emit_operation_permissions_updated(self, u_id, op_id):
socketio.emit("operation-permissions-updated", json.dumps({"u_id": u_id}), room=str(op_id))
socketio.emit("operation-permissions-updated", json.dumps({"u_id": u_id}))

def emit_operation_delete(self, op_id):
socketio.emit("operation-deleted", json.dumps({"op_id": op_id}), room=str(op_id))
socketio.emit("operation-deleted", json.dumps({"op_id": op_id}))


def setup_managers(app):
Expand All @@ -270,5 +281,7 @@ def setup_managers(app):
socketio.on_event('delete-message', sm.handle_message_delete)
socketio.on_event('file-save', sm.handle_file_save)
socketio.on_event('add-user-to-room', sm.join_creator_to_room)
socketio.on_event('update-operation-list', sm.update_operation_list)

socketio.sm = sm
return socketio, cm, fm
20 changes: 13 additions & 7 deletions mslib/msui/mscolab.py
Original file line number Diff line number Diff line change
Expand Up @@ -494,6 +494,7 @@ def after_login(self, emailid, url, r):
logging.debug(f"Couldn't create a socket connection: {ex}")
show_popup(self.ui, "Error", "Couldn't create a socket connection. New Login required!")
self.logout()
self.conn.signal_operation_list_updated.connect(self.reload_operation_list)
self.conn.signal_reload.connect(self.reload_window)
self.conn.signal_new_permission.connect(self.render_new_permission)
self.conn.signal_update_permission.connect(self.handle_update_permission)
Expand Down Expand Up @@ -745,13 +746,6 @@ def add_operation(self):
if r.text == "True":
self.error_dialog = QtWidgets.QErrorMessage()
self.error_dialog.showMessage('Your operation was created successfully')
self.add_operations_to_ui()
selected_category = self.ui.filterCategoryCb.currentText()
self.show_categories_to_ui()
self.operation_category_handler()
index = self.ui.filterCategoryCb.findText(selected_category, QtCore.Qt.MatchFixedString)
if index >= 0:
self.ui.filterCategoryCb.setCurrentIndex(index)
op_id = self.get_recent_pid()
self.conn.handle_new_room(op_id)
else:
Expand Down Expand Up @@ -1057,6 +1051,10 @@ def get_recent_operation(self):
show_popup(self.ui, "Error", "Your Connection is expired. New Login required!")
self.logout()

@QtCore.Slot()
def reload_operation_list(self):
self.reload_operations()

@QtCore.Slot(int)
def reload_window(self, value):
if self.active_pid != value or self.ui.workLocallyCheckbox.isChecked():
Expand Down Expand Up @@ -1360,6 +1358,14 @@ def load_wps_from_server(self):
self.waypoints_model.name = self.active_operation_name
self.waypoints_model.dataChanged.connect(self.handle_waypoints_changed)

def reload_operations(self):
self.add_operations_to_ui()
selected_category = self.ui.filterCategoryCb.currentText()
self.show_categories_to_ui()
index = self.ui.filterCategoryCb.findText(selected_category, QtCore.Qt.MatchFixedString)
if index >= 0:
self.ui.filterCategoryCb.setCurrentIndex(index)

def reload_wps_from_server(self):
if self.active_pid is None:
return
Expand Down
6 changes: 6 additions & 0 deletions mslib/msui/socket_control.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ class ConnectionManager(QtCore.QObject):
signal_update_permission = QtCore.Signal(int, int, str, name="update permission")
signal_revoke_permission = QtCore.Signal(int, int, name="revoke permission")
signal_operation_permissions_updated = QtCore.Signal(int, name="operation permissions updated")
signal_operation_list_updated = QtCore.Signal(name="operation list updated")
signal_operation_deleted = QtCore.Signal(int, name="operation deleted")

def __init__(self, token, user, mscolab_server_url=mss_default.mscolab_server_url):
Expand Down Expand Up @@ -73,6 +74,8 @@ def __init__(self, token, user, mscolab_server_url=mss_default.mscolab_server_ur
self.sio.on('operation-permissions-updated', handler=self.handle_operation_permissions_updated)
# On Operation Delete
self.sio.on('operation-deleted', handler=self.handle_operation_deleted)
# On New Operation
self.sio.on('operation-list-update', handler=self.handle_operation_list_update)

self.sio.emit('start', {'token': token})

Expand Down Expand Up @@ -132,6 +135,9 @@ def handle_operation_deleted(self, message):
op_id = int(json.loads(message)["op_id"])
self.signal_operation_deleted.emit(op_id)

def handle_operation_list_update(self):
self.signal_operation_list_updated.emit()

def handle_new_room(self, op_id):
logging.debug("adding user to new room")
self.sio.emit('add-user-to-room', {
Expand Down