From 93514721da0f77f263fb62e0d6f0062839d45902 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Tue, 9 Nov 2021 11:40:19 +0100 Subject: [PATCH] OP-1906 - refactor - roles in Site Sync Queue Used new role wrere possible. RepresentationModel stuck with old roles, much more complicated refactor needed in the future. --- .../sync_server/tray/delegates.py | 28 +++- .../sync_server/tray/models.py | 121 +++++++++--------- .../sync_server/tray/widgets.py | 4 +- openpype/tools/utils/constants.py | 12 +- 4 files changed, 98 insertions(+), 67 deletions(-) diff --git a/openpype/modules/default_modules/sync_server/tray/delegates.py b/openpype/modules/default_modules/sync_server/tray/delegates.py index 461b9fffb3..955f549bb5 100644 --- a/openpype/modules/default_modules/sync_server/tray/delegates.py +++ b/openpype/modules/default_modules/sync_server/tray/delegates.py @@ -4,6 +4,15 @@ from Qt import QtCore, QtWidgets, QtGui from openpype.lib import PypeLogger from . import lib +from openpype.tools.utils.constants import ( + LOCAL_PROVIDER_ROLE, + REMOTE_PROVIDER_ROLE, + LOCAL_PROGRESS_ROLE, + REMOTE_PROGRESS_ROLE, + LOCAL_DATE_ROLE, + REMOTE_DATE_ROLE +) + log = PypeLogger().get_logger("SyncServer") @@ -71,18 +80,29 @@ class ImageDelegate(QtWidgets.QStyledItemDelegate): Prints icon of site and progress of synchronization """ - def __init__(self, parent=None): + def __init__(self, parent=None, side=None): super(ImageDelegate, self).__init__(parent) self.icons = {} + self.side = side def paint(self, painter, option, index): super(ImageDelegate, self).paint(painter, option, index) option = QtWidgets.QStyleOptionViewItem(option) option.showDecorationSelected = True - provider = index.data(lib.ProviderRole) - value = index.data(lib.ProgressRole) - date_value = index.data(lib.DateRole) + if not self.side: + log.warning("No side provided, delegate won't work") + return + + if self.side == 'local': + provider = index.data(LOCAL_PROVIDER_ROLE) + value = index.data(LOCAL_PROGRESS_ROLE) + date_value = index.data(LOCAL_DATE_ROLE) + else: + provider = index.data(REMOTE_PROVIDER_ROLE) + value = index.data(REMOTE_PROGRESS_ROLE) + date_value = index.data(REMOTE_DATE_ROLE) + is_failed = index.data(lib.FailedRole) if not self.icons.get(provider): diff --git a/openpype/modules/default_modules/sync_server/tray/models.py b/openpype/modules/default_modules/sync_server/tray/models.py index 713e167a6a..1bfa4f2bfc 100644 --- a/openpype/modules/default_modules/sync_server/tray/models.py +++ b/openpype/modules/default_modules/sync_server/tray/models.py @@ -13,6 +13,19 @@ from openpype.api import get_local_site_id from . import lib +from openpype.tools.utils.constants import ( + LOCAL_PROVIDER_ROLE, + REMOTE_PROVIDER_ROLE, + LOCAL_PROGRESS_ROLE, + REMOTE_PROGRESS_ROLE, + HEADER_NAME_ROLE, + EDIT_ICON_ROLE, + LOCAL_DATE_ROLE, + REMOTE_DATE_ROLE, + LOCAL_FAILED_ROLE, + REMOTE_FAILED_ROLE +) + log = PypeLogger().get_logger("SyncServer") @@ -68,7 +81,7 @@ class _SyncRepresentationModel(QtCore.QAbstractTableModel): if orientation == Qt.Horizontal: return self.COLUMN_LABELS[section][1] - if role == lib.HeaderNameRole: + if role == HEADER_NAME_ROLE: if orientation == Qt.Horizontal: return self.COLUMN_LABELS[section][0] # return name @@ -459,37 +472,34 @@ class SyncRepresentationSummaryModel(_SyncRepresentationModel): def data(self, index, role): item = self._data[index.row()] - if role == lib.FullItemRole: - return item - header_value = self._header[index.column()] - if role == lib.ProviderRole: - if header_value == 'local_site': - return item.local_provider - if header_value == 'remote_site': - return item.remote_provider + if role == LOCAL_PROVIDER_ROLE: + return item.local_provider - if role == lib.ProgressRole: - if header_value == 'local_site': - return item.local_progress - if header_value == 'remote_site': - return item.remote_progress + if role == REMOTE_PROVIDER_ROLE: + return item.remote_provider - if role == lib.DateRole: - if header_value == 'local_site': - if item.created_dt: - return pretty_timestamp(item.created_dt) - if header_value == 'remote_site': - if item.sync_dt: - return pretty_timestamp(item.sync_dt) + if role == LOCAL_PROGRESS_ROLE: + return item.local_progress - if role == lib.FailedRole: - if header_value == 'local_site': - return item.status == lib.STATUS[2] and \ - item.local_progress < 1 - if header_value == 'remote_site': - return item.status == lib.STATUS[2] and \ - item.remote_progress < 1 + if role == REMOTE_PROGRESS_ROLE: + return item.remote_progress + + if role == LOCAL_DATE_ROLE: + if item.created_dt: + return pretty_timestamp(item.created_dt) + + if role == REMOTE_DATE_ROLE: + if item.sync_dt: + return pretty_timestamp(item.sync_dt) + + if role == LOCAL_FAILED_ROLE: + return item.status == lib.STATUS[2] and \ + item.local_progress < 1 + + if role == REMOTE_FAILED_ROLE: + return item.status == lib.STATUS[2] and \ + item.remote_progress < 1 if role in (Qt.DisplayRole, Qt.EditRole): # because of ImageDelegate @@ -498,7 +508,7 @@ class SyncRepresentationSummaryModel(_SyncRepresentationModel): return attr.asdict(item)[self._header[index.column()]] - if role == lib.EditIconRole: + if role == EDIT_ICON_ROLE: if self.can_edit and header_value in self.EDITABLE_COLUMNS: return self.edit_icon @@ -988,37 +998,34 @@ class SyncRepresentationDetailModel(_SyncRepresentationModel): def data(self, index, role): item = self._data[index.row()] - if role == lib.FullItemRole: - return item - header_value = self._header[index.column()] - if role == lib.ProviderRole: - if header_value == 'local_site': - return item.local_provider - if header_value == 'remote_site': - return item.remote_provider + if role == LOCAL_PROVIDER_ROLE: + return item.local_provider - if role == lib.ProgressRole: - if header_value == 'local_site': - return item.local_progress - if header_value == 'remote_site': - return item.remote_progress + if role == REMOTE_PROVIDER_ROLE: + return item.remote_provider - if role == lib.DateRole: - if header_value == 'local_site': - if item.created_dt: - return pretty_timestamp(item.created_dt) - if header_value == 'remote_site': - if item.sync_dt: - return pretty_timestamp(item.sync_dt) + if role == LOCAL_PROGRESS_ROLE: + return item.local_progress - if role == lib.FailedRole: - if header_value == 'local_site': - return item.status == lib.STATUS[2] and \ - item.local_progress < 1 - if header_value == 'remote_site': - return item.status == lib.STATUS[2] and \ - item.remote_progress < 1 + if role == REMOTE_PROGRESS_ROLE: + return item.remote_progress + + if role == LOCAL_DATE_ROLE: + if item.created_dt: + return pretty_timestamp(item.created_dt) + + if role == REMOTE_DATE_ROLE: + if item.sync_dt: + return pretty_timestamp(item.sync_dt) + + if role == LOCAL_FAILED_ROLE: + return item.status == lib.STATUS[2] and \ + item.local_progress < 1 + + if role == REMOTE_FAILED_ROLE: + return item.status == lib.STATUS[2] and \ + item.remote_progress < 1 if role in (Qt.DisplayRole, Qt.EditRole): # because of ImageDelegate @@ -1027,7 +1034,7 @@ class SyncRepresentationDetailModel(_SyncRepresentationModel): return attr.asdict(item)[self._header[index.column()]] - if role == lib.EditIconRole: + if role == EDIT_ICON_ROLE: if self.can_edit and header_value in self.EDITABLE_COLUMNS: return self.edit_icon diff --git a/openpype/modules/default_modules/sync_server/tray/widgets.py b/openpype/modules/default_modules/sync_server/tray/widgets.py index 5e368f9e0b..2747aaf760 100644 --- a/openpype/modules/default_modules/sync_server/tray/widgets.py +++ b/openpype/modules/default_modules/sync_server/tray/widgets.py @@ -591,11 +591,11 @@ class SyncRepresentationSummaryWidget(_SyncRepresentationWidget): table_view.viewport().setAttribute(QtCore.Qt.WA_Hover, True) column = table_view.model().get_header_index("local_site") - delegate = delegates.ImageDelegate(self) + delegate = delegates.ImageDelegate(self, side="local") table_view.setItemDelegateForColumn(column, delegate) column = table_view.model().get_header_index("remote_site") - delegate = delegates.ImageDelegate(self) + delegate = delegates.ImageDelegate(self, side="remote") table_view.setItemDelegateForColumn(column, delegate) column = table_view.model().get_header_index("priority") diff --git a/openpype/tools/utils/constants.py b/openpype/tools/utils/constants.py index 8dee8b8057..e0789972f9 100644 --- a/openpype/tools/utils/constants.py +++ b/openpype/tools/utils/constants.py @@ -13,7 +13,11 @@ LOCAL_PROVIDER_ROLE = QtCore.Qt.UserRole + 500 REMOTE_PROVIDER_ROLE = QtCore.Qt.UserRole + 501 LOCAL_PROGRESS_ROLE = QtCore.Qt.UserRole + 502 REMOTE_PROGRESS_ROLE = QtCore.Qt.UserRole + 503 -DATE_ROLE = QtCore.Qt.UserRole + 504 -FAILED_ROLE = QtCore.Qt.UserRole + 505 -HEADER_NAME_ROLE = QtCore.Qt.UserRole + 506 -EDIT_ICON_ROLE = QtCore.Qt.UserRole + 507 +LOCAL_AVAILABILITY_ROLE = QtCore.Qt.UserRole + 504 +REMOTE_AVAILABILITY_ROLE = QtCore.Qt.UserRole + 505 +LOCAL_DATE_ROLE = QtCore.Qt.UserRole + 506 +REMOTE_DATE_ROLE = QtCore.Qt.UserRole + 507 +LOCAL_FAILED_ROLE = QtCore.Qt.UserRole + 508 +REMOTE_FAILED_ROLE = QtCore.Qt.UserRole + 509 +HEADER_NAME_ROLE = QtCore.Qt.UserRole + 510 +EDIT_ICON_ROLE = QtCore.Qt.UserRole + 511