Merge pull request #1 from pypeclub/feature/sync_server_fix

Sync server projects widget
This commit is contained in:
David Lai 2021-09-17 00:45:18 +08:00 committed by GitHub
commit 44c7b884d9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 55 additions and 37 deletions

View file

@ -815,17 +815,22 @@ class SyncServerModule(OpenPypeModule, ITrayModule):
def _prepare_sync_project_settings(self, exclude_locals):
sync_project_settings = {}
system_sites = self.get_all_site_configs()
for collection in self.connection.database.collection_names(False):
project_docs = self.connection.projects(
projection={"name": 1},
only_active=True
)
for project_doc in project_docs:
project_name = project_doc["name"]
sites = copy.deepcopy(system_sites) # get all configured sites
proj_settings = self._parse_sync_settings_from_settings(
get_project_settings(collection,
get_project_settings(project_name,
exclude_locals=exclude_locals))
sites.update(self._get_default_site_configs(
proj_settings["enabled"], collection))
proj_settings["enabled"], project_name))
sites.update(proj_settings['sites'])
proj_settings["sites"] = sites
sync_project_settings[collection] = proj_settings
sync_project_settings[project_name] = proj_settings
if not sync_project_settings:
log.info("No enabled and configured projects for sync.")
return sync_project_settings

View file

@ -77,8 +77,8 @@ class SyncServerWindow(QtWidgets.QDialog):
self.setWindowTitle("Sync Queue")
self.projects.project_changed.connect(
lambda: repres.table_view.model().set_project(
self.projects.current_project))
self._on_project_change
)
self.pause_btn.clicked.connect(self._pause)
self.pause_btn.setAutoDefault(False)
@ -87,6 +87,13 @@ class SyncServerWindow(QtWidgets.QDialog):
self.representationWidget = repres
def _on_project_change(self):
if self.projects.current_project is None:
return
self.representationWidget.table_view.model().set_project(
self.projects.current_project
)
def showEvent(self, event):
self.representationWidget.model.set_project(
self.projects.current_project)

View file

@ -17,25 +17,6 @@ from . import lib
log = PypeLogger().get_logger("SyncServer")
class ProjectModel(QtCore.QAbstractListModel):
def __init__(self, *args, projects=None, **kwargs):
super(ProjectModel, self).__init__(*args, **kwargs)
self.projects = projects or []
def data(self, index, role):
if role == Qt.DisplayRole:
# See below for the data structure.
status, text = self.projects[index.row()]
# Return the todo text only.
return text
def rowCount(self, _index):
return len(self.todos)
def columnCount(self, _index):
return len(self._header)
class _SyncRepresentationModel(QtCore.QAbstractTableModel):
COLUMN_LABELS = []

View file

@ -6,10 +6,7 @@ from functools import partial
from Qt import QtWidgets, QtCore, QtGui
from Qt.QtCore import Qt
from openpype.tools.settings import (
ProjectListWidget,
style
)
from openpype.tools.settings import style
from openpype.api import get_local_site_id
from openpype.lib import PypeLogger
@ -28,25 +25,53 @@ from . import delegates
log = PypeLogger().get_logger("SyncServer")
class SyncProjectListWidget(ProjectListWidget):
class SyncProjectListWidget(QtWidgets.QWidget):
"""
Lists all projects that are synchronized to choose from
"""
project_changed = QtCore.Signal()
def __init__(self, sync_server, parent):
super(SyncProjectListWidget, self).__init__(parent, only_active=True)
super(SyncProjectListWidget, self).__init__(parent)
self.setObjectName("ProjectListWidget")
self._parent = parent
label_widget = QtWidgets.QLabel("Projects", self)
project_list = QtWidgets.QListView(self)
project_model = QtGui.QStandardItemModel()
project_list.setModel(project_model)
project_list.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
# Do not allow editing
project_list.setEditTriggers(
QtWidgets.QAbstractItemView.EditTrigger.NoEditTriggers
)
layout = QtWidgets.QVBoxLayout(self)
layout.setContentsMargins(0, 0, 0, 0)
layout.setSpacing(3)
layout.addWidget(label_widget, 0)
layout.addWidget(project_list, 1)
project_list.customContextMenuRequested.connect(self._on_context_menu)
project_list.selectionModel().currentChanged.connect(
self._on_index_change
)
self.project_model = project_model
self.project_list = project_list
self.sync_server = sync_server
self.project_list.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.project_list.customContextMenuRequested.connect(
self._on_context_menu)
self.current_project = None
self.project_name = None
self.local_site = None
self.icons = {}
self.layout().setContentsMargins(0, 0, 0, 0)
def _on_index_change(self, new_idx, _old_idx):
project_name = new_idx.data(QtCore.Qt.DisplayRole)
def validate_context_change(self):
return True
self.current_project = project_name
self.project_changed.emit()
def refresh(self):
model = self.project_model