def import_permissions(self): if verify_user_token(self.mscolab_server_url, self.token): import_op_id = self.importPermissionsCB.currentData( QtCore.Qt.UserRole) data = { "token": self.token, "current_op_id": self.op_id, "import_op_id": import_op_id } url = url_join(self.mscolab_server_url, 'import_permissions') res = requests.post(url, data=data) if res.text != "False": res = res.json() if res["success"]: self.load_import_operations() self.load_users_without_permission() self.load_users_with_permission() else: show_popup(self, "Error", res["message"]) else: # this triggers disconnect self.conn.signal_reload.emit(self.op_id) else: # this triggers disconnect self.conn.signal_reload.emit(self.op_id)
def add_selected_users(self): if verify_user_token(self.mscolab_server_url, self.token): selected_userids = self.get_selected_userids( self.addUsersTable, self.addUsers) if len(selected_userids) == 0: return selected_access_level = str(self.addUsersPermission.currentText()) data = { "token": self.token, "op_id": self.op_id, "selected_userids": json.dumps(selected_userids), "selected_access_level": selected_access_level } url = url_join(self.mscolab_server_url, "add_bulk_permissions") res = requests.post(url, data=data) if res.text != "False": res = res.json() if res["success"]: # TODO: Do we need a success popup? self.load_import_operations() self.load_users_without_permission() self.load_users_with_permission() else: show_popup(self, "Error", res["message"]) else: # this triggers disconnect self.conn.signal_reload.emit(self.op_id) else: # this triggers disconnect self.conn.signal_reload.emit(self.op_id)
def delete_selected_users(self): if verify_user_token(self.mscolab_server_url, self.token): selected_userids = self.get_selected_userids( self.modifyUsersTable, self.modifyUsers) if len(selected_userids) == 0: return data = { "token": self.token, "op_id": self.op_id, "selected_userids": json.dumps(selected_userids) } url = url_join(self.mscolab_server_url, "delete_bulk_permissions") res = requests.post(url, data=data) if res.text != "False": res = res.json() if res["success"]: self.load_import_operations() self.load_users_without_permission() self.load_users_with_permission() else: self.show_error_popup(res["message"]) else: # this triggers disconnect self.conn.signal_reload.emit(self.op_id) else: # this triggers disconnect self.conn.signal_reload.emit(self.op_id)
def load_users_with_permission(self): if verify_user_token(self.mscolab_server_url, self.token): self.modifyUsers = [] data = {"token": self.token, "op_id": self.op_id} url = url_join(self.mscolab_server_url, "users_with_permission") res = requests.get(url, data=data) if res.text != "False": res = res.json() if res["success"]: self.modifyUsers = res["users"] self.populate_table(self.modifyUsersTable, self.modifyUsers) text_filter = self.modifyUsersSearch.text() permission_filter = str( self.modifyUsersPermissionFilter.currentText()) self.apply_filters(self.modifyUsersTable, text_filter, permission_filter) else: show_popup(self, "Error", res["message"]) else: # this triggers disconnect self.conn.signal_reload.emit(self.op_id) else: # this triggers disconnect self.conn.signal_reload.emit(self.op_id)
def handle_named_version(self): if verify_user_token(self.mscolab_server_url, self.token): version_name, completed = QtWidgets.QInputDialog.getText( self, 'Version Name Dialog', 'Enter version name:') if completed is True: if len(version_name) > 255 or len(version_name) == 0: show_popup( self, "Error", "Version name length has to be between 1 and 255") return selected_item = self.changes.currentItem() res = self.request_set_version_name(version_name, selected_item.id) if res.text != "False": res = res.json() if res["success"] is True: item_text = selected_item.text().split('\n')[-1] new_text = f"{version_name}\n{item_text}" selected_item.setText(new_text) selected_item.version_name = version_name self.deleteVersionNameBtn.setVisible(True) else: show_popup(self, "Error", res["message"]) else: # this triggers disconnect self.conn.signal_reload.emit(self.op_id) else: # this triggers disconnect self.conn.signal_reload.emit(self.op_id)
def preview_change(self, current_item, previous_item): if verify_user_token(self.mscolab_server_url, self.token): font = QtGui.QFont() if previous_item is not None: previous_item.setFont(font) if current_item is None: self.changePreviewTable.setModel(None) self.deleteVersionNameBtn.setVisible(False) self.toggle_version_buttons(False) return font.setBold(True) current_item.setFont(font) data = {"token": self.token, "ch_id": current_item.id} url = url_join(self.mscolab_server_url, 'get_change_content') res = requests.get(url, data=data) if res.text != "False": res = res.json() waypoint_model = WaypointsTableModel( xml_content=res["content"]) self.changePreviewTable.setModel(waypoint_model) if current_item.version_name is not None: self.deleteVersionNameBtn.setVisible(True) else: self.deleteVersionNameBtn.setVisible(False) self.toggle_version_buttons(True) else: # this triggers disconnect self.conn.signal_reload.emit(self.op_id) else: # this triggers disconnect self.conn.signal_reload.emit(self.op_id)
def handle_refresh(self): if verify_user_token(self.mscolab_server_url, self.token): self.load_current_waypoints() self.load_all_changes() else: # this triggers disconnect self.conn.signal_reload.emit(self.op_id)
def delete_message(self, message_id, op_id): if verify_user_token(self.mscolab_server_url, self.token): self.sio.emit('delete-message', { 'message_id': message_id, 'op_id': op_id, 'token': self.token }) else: # this triggers disconnect self.signal_reload.emit(op_id)
def edit_message(self, message_id, new_message_text, op_id): if verify_user_token(self.mscolab_server_url, self.token): self.sio.emit( 'edit-message', { "message_id": message_id, "new_message_text": new_message_text, "op_id": op_id, "token": self.token }) else: # this triggers disconnect self.signal_reload.emit(op_id)
def send_message(self, message_text, op_id, reply_id): if verify_user_token(self.mscolab_server_url, self.token): logging.debug("sending message") self.sio.emit( 'chat-message', { "op_id": op_id, "token": self.token, "message_text": message_text, "reply_id": reply_id }) else: # this triggers disconnect self.signal_reload.emit(op_id)
def save_file(self, token, op_id, content, comment=None): # ToDo refactor API if verify_user_token(self.mscolab_server_url, self.token): logging.debug("saving file") self.sio.emit( 'file-save', { "op_id": op_id, "token": self.token, "content": content, "comment": comment }) else: # this triggers disconnect self.signal_reload.emit(op_id)
def request_set_version_name(self, version_name, ch_id): if verify_user_token(self.mscolab_server_url, self.token): data = { "token": self.token, "version_name": version_name, "ch_id": ch_id, "op_id": self.op_id } url = url_join(self.mscolab_server_url, 'set_version_name') res = requests.post(url, data=data) return res else: # this triggers disconnect self.conn.signal_reload.emit(self.op_id)
def handle_permissions_updated(self, u_id): if verify_user_token(self.mscolab_server_url, self.token): if self.user["id"] == u_id: return show_popup( self, 'Alert', 'The permissions for this operation were updated! The window is going to refresh.', 1) self.load_import_operations() self.load_users_without_permission() self.load_users_with_permission() else: # this triggers disconnect self.conn.signal_reload.emit(self.op_id)
def load_current_waypoints(self): if verify_user_token(self.mscolab_server_url, self.token): data = {"token": self.token, "op_id": self.op_id} url = url_join(self.mscolab_server_url, 'get_operation_by_id') res = requests.get(url, data=data) if res.text != "False": xml_content = json.loads(res.text)["content"] waypoint_model = WaypointsTableModel(name="Current Waypoints", xml_content=xml_content) self.currentWaypointsTable.setModel(waypoint_model) else: # this triggers disconnect self.conn.signal_reload.emit(self.op_id) else: # this triggers disconnect self.conn.signal_reload.emit(self.op_id)
def handle_undo(self): if verify_user_token(self.mscolab_server_url, self.token): qm = QtWidgets.QMessageBox ret = qm.question(self, self.tr("Undo"), "Do you want to checkout to this change?", qm.Yes, qm.No) if ret == qm.Yes: data = { "token": self.token, "ch_id": self.changes.currentItem().id } url = url_join(self.mscolab_server_url, 'undo') r = requests.post(url, data=data) if r.text != "False": # reload windows self.reloadWindows.emit() self.load_current_waypoints() self.load_all_changes() else: # this triggers disconnect self.conn.signal_reload.emit(self.op_id) else: # this triggers disconnect self.conn.signal_reload.emit(self.op_id)
def handle_delete_version_name(self): if verify_user_token(self.mscolab_server_url, self.token): selected_item = self.changes.currentItem() res = self.request_set_version_name(None, selected_item.id) if res.text != "False": res = res.json() if res["success"] is True: # Remove item if the filter is set to Named version if self.versionFilterCB.currentIndex() == 0: self.changes.takeItem(self.changes.currentRow()) # Remove name from item else: item_text = selected_item.text().split('\n')[-1] selected_item.setText(item_text) selected_item.version_name = None self.deleteVersionNameBtn.setVisible(False) else: show_popup(self, "Error", res["message"]) else: # this triggers disconnect self.conn.signal_reload.emit(self.op_id) else: # this triggers disconnect self.conn.signal_reload.emit(self.op_id)
def load_all_changes(self): """ get changes from api, clear listwidget, render them to ui """ if verify_user_token(self.mscolab_server_url, self.token): data = {"token": self.token, "op_id": self.op_id} named_version_only = None if self.versionFilterCB.currentIndex() == 0: named_version_only = True query_string = url_encode({"named_version": named_version_only}) url_path = f'get_all_changes?{query_string}' url = url_join(self.mscolab_server_url, url_path) r = requests.get(url, data=data) if r.text != "False": changes = json.loads(r.text)["changes"] self.changes.clear() for change in changes: created_at = datetime.strptime(change["created_at"], "%Y-%m-%d, %H:%M:%S") local_time = utc_to_local_datetime(created_at) date = local_time.strftime('%d/%m/%Y') time = local_time.strftime('%I:%M %p') item_text = f'{change["username"]} made change on {date} at {time}' if change["version_name"] is not None: item_text = f'{change["version_name"]}\n{item_text}' item = QtWidgets.QListWidgetItem(item_text, parent=self.changes) item.id = change["id"] item.version_name = change["version_name"] self.changes.addItem(item) else: # this triggers disconnect self.conn.signal_reload.emit(self.op_id) else: # this triggers disconnect self.conn.signal_reload.emit(self.op_id)