diff --git a/mslib/mscolab/server.py b/mslib/mscolab/server.py index ac857b8ca..6d8b23e94 100644 --- a/mslib/mscolab/server.py +++ b/mslib/mscolab/server.py @@ -1012,6 +1012,7 @@ def get_operation_view_settings(): return jsonify({"success": False, "message": message, "settings": settings}), status_code + if APP.config['USE_SAML2']: # setup idp login config setup_saml2_backend() diff --git a/mslib/msui/mscolab.py b/mslib/msui/mscolab.py index 415036dfd..8a59ae9dd 100644 --- a/mslib/msui/mscolab.py +++ b/mslib/msui/mscolab.py @@ -99,6 +99,68 @@ def wrapper(self, *args, **vargs): return wrapper +class ManageViewDialog(QtWidgets.QDialog): + def __init__(self, mscolab, parent=None): + super().__init__(parent) + self.ui = ui_manage_view.Ui_Form() + self.ui.setupUi(self) + self.ui.listView.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection) + self.setModal(False) + self.setWindowFlags(QtCore.Qt.Dialog | QtCore.Qt.WindowCloseButtonHint) + self.setAttribute(QtCore.Qt.WA_DeleteOnClose, True) + self.mscolab = mscolab + + + self.setWindowTitle("Manage Views") + self.model = QtGui.QStandardItemModel() + self.model = QtGui.QStandardItemModel() + self.ui.listView.setModel(self.model) + + self.ui.pushButton.clicked.connect(self.apply_selected_view) + self.refresh_shared_views() + + def apply_selected_view(self): + """Apply settings for selected views in listView.""" + selected_indexes = self.ui.listView.selectedIndexes() + if not selected_indexes: + QtWidgets.QMessageBox.warning(self, "No Selection", "Please select at least one shared view to apply.") + return + index = selected_indexes[0] + for index in selected_indexes: + item = self.ui.listView.model().itemFromIndex(index) + if not item: + continue + data = item.data(QtCore.Qt.UserRole) + view_name = data['view_name'] + op_id = data['op_id'] + view_settings = self.mscolab.get_sharedView_settings(view_name, op_id) + view_type = view_settings.get("view_type") + if view_settings is None: + QtWidgets.QMessageBox.warning(self, "Error", + f"Failed to retrieve settings for {view_name} by user {data['username']}") + continue + self.mscolab.ui.create_view(view_type, model=self.mscolab.waypoints_model, restore_settings=view_settings) + item = QtWidgets.QListWidgetItem(view_name) + self.ui.listWidget.addItem(item) + + def refresh_shared_views(self): + url = urljoin(self.mscolab.mscolab_server_url, "get_views_name") + data = {"op_id": self.mscolab.active_op_id, "token": self.mscolab.token} + if hasattr(self.mscolab, 'auth') and self.mscolab.auth: + response = requests.get(url, params=data, auth=self.mscolab.auth, timeout=(5, 30)) + else: + response = requests.get(url, params=data, timeout=(5, 30)) + response.raise_for_status() + views = response.json().get("views", []) + self.model.clear() + for view in views: + item = QtGui.QStandardItem(f"{view['view_name']} (by {view['username']})") + item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + item.setData(view, QtCore.Qt.UserRole) + self.model.appendRow(item) + return True + + class ManageViewDialog(QtWidgets.QDialog): def __init__(self, mscolab, parent=None): super().__init__(parent)