From 950da8749efaed7eeb17ab9511de1c7ddd1075ed Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 22 Sep 2021 16:11:43 +0200 Subject: [PATCH 1/3] Fix - project lists refresh each show up event Fix can_edit method --- .../modules/default_modules/sync_server/tray/app.py | 1 + .../default_modules/sync_server/tray/widgets.py | 10 +++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/openpype/modules/default_modules/sync_server/tray/app.py b/openpype/modules/default_modules/sync_server/tray/app.py index 0299edb2eb..5298c7be1d 100644 --- a/openpype/modules/default_modules/sync_server/tray/app.py +++ b/openpype/modules/default_modules/sync_server/tray/app.py @@ -97,6 +97,7 @@ class SyncServerWindow(QtWidgets.QDialog): def showEvent(self, event): self.representationWidget.model.set_project( self.projects.current_project) + self.projects.refresh() self._set_running(True) super().showEvent(event) diff --git a/openpype/modules/default_modules/sync_server/tray/widgets.py b/openpype/modules/default_modules/sync_server/tray/widgets.py index e2009bd219..4fc5723f42 100644 --- a/openpype/modules/default_modules/sync_server/tray/widgets.py +++ b/openpype/modules/default_modules/sync_server/tray/widgets.py @@ -65,6 +65,7 @@ class SyncProjectListWidget(QtWidgets.QWidget): self.current_project = None self.project_name = None self.local_site = None + self.remote_site = None self.icons = {} def _on_index_change(self, new_idx, _old_idx): @@ -99,6 +100,11 @@ class SyncProjectListWidget(QtWidgets.QWidget): if project_name: self.local_site = self.sync_server.get_active_site(project_name) + self.remote_site = self.sync_server.get_remote_site(project_name) + + def _can_edit(self): + """Returns true if some site is user local site, eg. could edit""" + return get_local_site_id() in (self.local_site, self.remote_site) def _get_icon(self, status): if not self.icons.get(status): @@ -122,9 +128,7 @@ class SyncProjectListWidget(QtWidgets.QWidget): menu = QtWidgets.QMenu(self) actions_mapping = {} - can_edit = self.model.can_edit - - if can_edit: + if self._can_edit(): if self.sync_server.is_project_paused(self.project_name): action = QtWidgets.QAction("Unpause") actions_mapping[action] = self._unpause From 3661d11976a4839a97c7d6db4e303e3d8bd418b3 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 23 Sep 2021 12:58:44 +0200 Subject: [PATCH 2/3] Fix - concurrent change in Settings wont trigger exception --- openpype/modules/default_modules/sync_server/tray/app.py | 1 + .../modules/default_modules/sync_server/tray/widgets.py | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/openpype/modules/default_modules/sync_server/tray/app.py b/openpype/modules/default_modules/sync_server/tray/app.py index 5298c7be1d..0996cbc468 100644 --- a/openpype/modules/default_modules/sync_server/tray/app.py +++ b/openpype/modules/default_modules/sync_server/tray/app.py @@ -84,6 +84,7 @@ class SyncServerWindow(QtWidgets.QDialog): self.pause_btn.setAutoDefault(False) self.pause_btn.setDefault(False) repres.message_generated.connect(self._update_message) + self.projects.message_generated.connect(self._update_message) self.representationWidget = repres diff --git a/openpype/modules/default_modules/sync_server/tray/widgets.py b/openpype/modules/default_modules/sync_server/tray/widgets.py index 4fc5723f42..b0730c9c8d 100644 --- a/openpype/modules/default_modules/sync_server/tray/widgets.py +++ b/openpype/modules/default_modules/sync_server/tray/widgets.py @@ -30,6 +30,7 @@ class SyncProjectListWidget(QtWidgets.QWidget): Lists all projects that are synchronized to choose from """ project_changed = QtCore.Signal() + message_generated = QtCore.Signal(str) def __init__(self, sync_server, parent): super(SyncProjectListWidget, self).__init__(parent) @@ -71,6 +72,12 @@ class SyncProjectListWidget(QtWidgets.QWidget): def _on_index_change(self, new_idx, _old_idx): project_name = new_idx.data(QtCore.Qt.DisplayRole) + if not self.sync_server.get_sync_project_setting(project_name): + self.message_generated.emit( + "Project {} not active anymore".format(project_name)) + self.refresh() + return + self.current_project = project_name self.project_changed.emit() From 85ae0b4b8418137bc25129804e1d8576ea0abf05 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 23 Sep 2021 20:05:26 +0200 Subject: [PATCH 3/3] Fix - better way to handle concurrend deactivate of projects Covers some weird edge cases --- openpype/modules/default_modules/sync_server/tray/app.py | 8 ++++++++ .../modules/default_modules/sync_server/tray/models.py | 4 ++++ .../modules/default_modules/sync_server/tray/widgets.py | 6 ------ 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/openpype/modules/default_modules/sync_server/tray/app.py b/openpype/modules/default_modules/sync_server/tray/app.py index 0996cbc468..fdf8e61965 100644 --- a/openpype/modules/default_modules/sync_server/tray/app.py +++ b/openpype/modules/default_modules/sync_server/tray/app.py @@ -91,10 +91,18 @@ class SyncServerWindow(QtWidgets.QDialog): def _on_project_change(self): if self.projects.current_project is None: return + self.representationWidget.table_view.model().set_project( self.projects.current_project ) + project_name = self.projects.current_project + if not self.sync_server.get_sync_project_setting(project_name): + self.projects.message_generated.emit( + "Project {} not active anymore".format(project_name)) + self.projects.refresh() + return + def showEvent(self, event): self.representationWidget.model.set_project( self.projects.current_project) diff --git a/openpype/modules/default_modules/sync_server/tray/models.py b/openpype/modules/default_modules/sync_server/tray/models.py index 96d09b8786..63c9dfa16e 100644 --- a/openpype/modules/default_modules/sync_server/tray/models.py +++ b/openpype/modules/default_modules/sync_server/tray/models.py @@ -301,6 +301,10 @@ class _SyncRepresentationModel(QtCore.QAbstractTableModel): """ self._project = project self.sync_server.set_sync_project_settings() + # project might have been deactivated in the meantime + if not self.sync_server.get_sync_project_setting(project): + return + self.active_site = self.sync_server.get_active_site(self.project) self.remote_site = self.sync_server.get_remote_site(self.project) self.refresh() diff --git a/openpype/modules/default_modules/sync_server/tray/widgets.py b/openpype/modules/default_modules/sync_server/tray/widgets.py index b0730c9c8d..5806179f61 100644 --- a/openpype/modules/default_modules/sync_server/tray/widgets.py +++ b/openpype/modules/default_modules/sync_server/tray/widgets.py @@ -72,12 +72,6 @@ class SyncProjectListWidget(QtWidgets.QWidget): def _on_index_change(self, new_idx, _old_idx): project_name = new_idx.data(QtCore.Qt.DisplayRole) - if not self.sync_server.get_sync_project_setting(project_name): - self.message_generated.emit( - "Project {} not active anymore".format(project_name)) - self.refresh() - return - self.current_project = project_name self.project_changed.emit()