mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-24 21:04:40 +01:00
Merge pull request #1 from pypeclub/feature/sync_server_fix
Sync server projects widget
This commit is contained in:
commit
44c7b884d9
4 changed files with 55 additions and 37 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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 = []
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue