Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
 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)
Ejemplo n.º 5
0
 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)
Ejemplo n.º 6
0
    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)
Ejemplo n.º 7
0
 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)
Ejemplo n.º 8
0
 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)
Ejemplo n.º 9
0
 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)
Ejemplo n.º 10
0
 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)
Ejemplo n.º 11
0
 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)
Ejemplo n.º 12
0
 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)
Ejemplo n.º 13
0
    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)
Ejemplo n.º 14
0
 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)
Ejemplo n.º 15
0
 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)
Ejemplo n.º 16
0
 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)
Ejemplo n.º 17
0
 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)