mirror of
https://github.com/ynput/ayon-core.git
synced 2026-01-01 16:34:53 +01:00
site sync is fully project specific
This commit is contained in:
parent
a30698eb4b
commit
562f2edace
3 changed files with 98 additions and 79 deletions
|
|
@ -118,8 +118,8 @@ class SceneInventoryController:
|
|||
def is_sitesync_enabled(self):
|
||||
return self._sitesync_model.is_sitesync_enabled()
|
||||
|
||||
def get_sites_information(self):
|
||||
return self._sitesync_model.get_sites_information()
|
||||
def get_sites_information(self, project_name):
|
||||
return self._sitesync_model.get_sites_information(project_name)
|
||||
|
||||
def get_site_provider_icons(self):
|
||||
return self._sitesync_model.get_site_provider_icons()
|
||||
|
|
|
|||
|
|
@ -133,10 +133,10 @@ class InventoryModel(QtGui.QStandardItemModel):
|
|||
container_items = self._controller.get_container_items()
|
||||
self._clear_items()
|
||||
repre_ids_by_project = collections.defaultdict(set)
|
||||
version_items_by_product_id = collections.defaultdict(dict)
|
||||
version_items_by_project = collections.defaultdict(dict)
|
||||
repre_info_by_id_by_project = collections.defaultdict(dict)
|
||||
item_by_repre_id_by_project_id = collections.defaultdict(
|
||||
lambda: collections.defaultdict(set))
|
||||
item_by_repre_id_by_project = collections.defaultdict(
|
||||
lambda: collections.defaultdict(list))
|
||||
for container_item in container_items:
|
||||
# if (
|
||||
# selected is not None
|
||||
|
|
@ -146,7 +146,11 @@ class InventoryModel(QtGui.QStandardItemModel):
|
|||
project_name = container_item.project_name
|
||||
representation_id = container_item.representation_id
|
||||
repre_ids_by_project[project_name].add(representation_id)
|
||||
item_by_repre_id_by_project_id[project_name][representation_id].add(container_item)
|
||||
(
|
||||
item_by_repre_id_by_project
|
||||
[project_name]
|
||||
[representation_id]
|
||||
).append(container_item)
|
||||
|
||||
for project_name, representation_ids in repre_ids_by_project.items():
|
||||
repre_info = self._controller.get_representation_info_items(
|
||||
|
|
@ -162,17 +166,20 @@ class InventoryModel(QtGui.QStandardItemModel):
|
|||
version_items = self._controller.get_version_items(
|
||||
project_name, product_ids
|
||||
)
|
||||
version_items_by_product_id[project_name] = version_items
|
||||
version_items_by_project[project_name] = version_items
|
||||
|
||||
# SiteSync addon information
|
||||
progress_by_project = {}
|
||||
for project_name, repre_ids in repre_ids_by_project.items():
|
||||
progress_by_id = self._controller.get_representations_site_progress(
|
||||
progress_by_project = {
|
||||
project_name: self._controller.get_representations_site_progress(
|
||||
project_name, repre_ids
|
||||
)
|
||||
progress_by_project[project_name] = progress_by_id
|
||||
for project_name, repre_ids in repre_ids_by_project.items()
|
||||
}
|
||||
|
||||
sites_info = self._controller.get_sites_information()
|
||||
sites_info_by_project_name = {
|
||||
project_name: self._controller.get_sites_information(project_name)
|
||||
for project_name in repre_ids_by_project.keys()
|
||||
}
|
||||
site_icons = {
|
||||
provider: get_qt_icon(icon_def)
|
||||
for provider, icon_def in (
|
||||
|
|
@ -203,15 +210,26 @@ class InventoryModel(QtGui.QStandardItemModel):
|
|||
group_item_font = QtGui.QFont()
|
||||
group_item_font.setBold(True)
|
||||
|
||||
active_site_icon = site_icons.get(sites_info["active_site_provider"])
|
||||
remote_site_icon = site_icons.get(sites_info["remote_site_provider"])
|
||||
|
||||
root_item = self.invisibleRootItem()
|
||||
group_items = []
|
||||
for project_name, items_by_repre_id in item_by_repre_id_by_project_id.items():
|
||||
for project_name, items_by_repre_id in (
|
||||
item_by_repre_id_by_project.items()
|
||||
):
|
||||
sites_info = sites_info_by_project_name[project_name]
|
||||
active_site_icon = site_icons.get(
|
||||
sites_info["active_site_provider"]
|
||||
)
|
||||
remote_site_icon = site_icons.get(
|
||||
sites_info["remote_site_provider"]
|
||||
)
|
||||
|
||||
progress_by_id = progress_by_project[project_name]
|
||||
repre_info_by_id = repre_info_by_id_by_project[project_name]
|
||||
version_items_by_product_id = (
|
||||
version_items_by_project[project_name]
|
||||
)
|
||||
for repre_id, container_items in items_by_repre_id.items():
|
||||
repre_info = repre_info_by_id_by_project[project_name][repre_id]
|
||||
repre_info = repre_info_by_id[repre_id]
|
||||
version_color = None
|
||||
if not repre_info.is_valid:
|
||||
version_label = "N/A"
|
||||
|
|
@ -230,7 +248,7 @@ class InventoryModel(QtGui.QStandardItemModel):
|
|||
item_icon = valid_item_icon
|
||||
|
||||
version_items = (
|
||||
version_items_by_product_id[project_name][repre_info.product_id]
|
||||
version_items_by_product_id[repre_info.product_id]
|
||||
)
|
||||
version_item = version_items[repre_info.version_id]
|
||||
version_label = format_version(version_item.version)
|
||||
|
|
@ -266,8 +284,6 @@ class InventoryModel(QtGui.QStandardItemModel):
|
|||
item.setData(True, IS_CONTAINER_ITEM_ROLE)
|
||||
item.setData(unique_name, ITEM_UNIQUE_NAME_ROLE)
|
||||
container_model_items.append(item)
|
||||
if not container_model_items:
|
||||
continue
|
||||
|
||||
progress = progress_by_id[repre_id]
|
||||
active_site_progress = "{}%".format(
|
||||
|
|
|
|||
|
|
@ -11,18 +11,18 @@ class SiteSyncModel:
|
|||
|
||||
self._sitesync_addon = NOT_SET
|
||||
self._sitesync_enabled = None
|
||||
self._active_site = NOT_SET
|
||||
self._remote_site = NOT_SET
|
||||
self._active_site_provider = NOT_SET
|
||||
self._remote_site_provider = NOT_SET
|
||||
self._active_site = {}
|
||||
self._remote_site = {}
|
||||
self._active_site_provider = {}
|
||||
self._remote_site_provider = {}
|
||||
|
||||
def reset(self):
|
||||
self._sitesync_addon = NOT_SET
|
||||
self._sitesync_enabled = None
|
||||
self._active_site = NOT_SET
|
||||
self._remote_site = NOT_SET
|
||||
self._active_site_provider = NOT_SET
|
||||
self._remote_site_provider = NOT_SET
|
||||
self._active_site = {}
|
||||
self._remote_site = {}
|
||||
self._active_site_provider = {}
|
||||
self._remote_site_provider = {}
|
||||
|
||||
def is_sitesync_enabled(self):
|
||||
"""Site sync is enabled.
|
||||
|
|
@ -46,12 +46,16 @@ class SiteSyncModel:
|
|||
sitesync_addon = self._get_sitesync_addon()
|
||||
return sitesync_addon.get_site_icons()
|
||||
|
||||
def get_sites_information(self):
|
||||
def get_sites_information(self, project_name):
|
||||
return {
|
||||
"active_site": self._get_active_site(),
|
||||
"active_site_provider": self._get_active_site_provider(),
|
||||
"remote_site": self._get_remote_site(),
|
||||
"remote_site_provider": self._get_remote_site_provider()
|
||||
"active_site": self._get_active_site(project_name),
|
||||
"remote_site": self._get_remote_site(project_name),
|
||||
"active_site_provider": self._get_active_site_provider(
|
||||
project_name
|
||||
),
|
||||
"remote_site_provider": self._get_remote_site_provider(
|
||||
project_name
|
||||
)
|
||||
}
|
||||
|
||||
def get_representations_site_progress(
|
||||
|
|
@ -74,8 +78,8 @@ class SiteSyncModel:
|
|||
repre_entities = ayon_api.get_representations(
|
||||
project_name, representation_ids
|
||||
)
|
||||
active_site = self._get_active_site()
|
||||
remote_site = self._get_remote_site()
|
||||
active_site = self._get_active_site(project_name)
|
||||
remote_site = self._get_remote_site(project_name)
|
||||
|
||||
for repre_entity in repre_entities:
|
||||
repre_output = output[repre_entity["id"]]
|
||||
|
|
@ -97,11 +101,9 @@ class SiteSyncModel:
|
|||
representation_ids (Iterable[str]): Representation ids.
|
||||
site_type (Literal[active_site, remote_site]): Site type.
|
||||
"""
|
||||
|
||||
project_name = self._controller.get_current_project_name()
|
||||
sitesync_addon = self._get_sitesync_addon()
|
||||
active_site = self._get_active_site()
|
||||
remote_site = self._get_remote_site()
|
||||
active_site = self._get_active_site(project_name)
|
||||
remote_site = self._get_remote_site(project_name)
|
||||
progress = self.get_representations_site_progress(
|
||||
project_name, representation_ids
|
||||
)
|
||||
|
|
@ -136,48 +138,49 @@ class SiteSyncModel:
|
|||
self._sitesync_addon = sitesync_addon
|
||||
self._sitesync_enabled = sync_enabled
|
||||
|
||||
def _get_active_site(self):
|
||||
if self._active_site is NOT_SET:
|
||||
self._cache_sites()
|
||||
return self._active_site
|
||||
def _get_active_site(self, project_name):
|
||||
if project_name not in self._active_site:
|
||||
self._cache_sites(project_name)
|
||||
return self._active_site[project_name]
|
||||
|
||||
def _get_remote_site(self):
|
||||
if self._remote_site is NOT_SET:
|
||||
self._cache_sites()
|
||||
return self._remote_site
|
||||
def _get_remote_site(self, project_name):
|
||||
if project_name not in self._remote_site:
|
||||
self._cache_sites(project_name)
|
||||
return self._remote_site[project_name]
|
||||
|
||||
def _get_active_site_provider(self):
|
||||
if self._active_site_provider is NOT_SET:
|
||||
self._cache_sites()
|
||||
return self._active_site_provider
|
||||
def _get_active_site_provider(self, project_name):
|
||||
if project_name not in self._active_site_provider:
|
||||
self._cache_sites(project_name)
|
||||
return self._active_site_provider[project_name]
|
||||
|
||||
def _get_remote_site_provider(self):
|
||||
if self._remote_site_provider is NOT_SET:
|
||||
self._cache_sites()
|
||||
return self._remote_site_provider
|
||||
def _get_remote_site_provider(self, project_name):
|
||||
if project_name not in self._remote_site_provider:
|
||||
self._cache_sites(project_name)
|
||||
return self._remote_site_provider[project_name]
|
||||
|
||||
def _cache_sites(self):
|
||||
active_site = None
|
||||
remote_site = None
|
||||
active_site_provider = None
|
||||
remote_site_provider = None
|
||||
if self.is_sitesync_enabled():
|
||||
sitesync_addon = self._get_sitesync_addon()
|
||||
project_name = self._controller.get_current_project_name()
|
||||
active_site = sitesync_addon.get_active_site(project_name)
|
||||
remote_site = sitesync_addon.get_remote_site(project_name)
|
||||
active_site_provider = "studio"
|
||||
remote_site_provider = "studio"
|
||||
if active_site != "studio":
|
||||
active_site_provider = sitesync_addon.get_provider_for_site(
|
||||
project_name, active_site
|
||||
)
|
||||
if remote_site != "studio":
|
||||
remote_site_provider = sitesync_addon.get_provider_for_site(
|
||||
project_name, remote_site
|
||||
)
|
||||
def _cache_sites(self, project_name):
|
||||
self._active_site[project_name] = None
|
||||
self._remote_site[project_name] = None
|
||||
self._active_site_provider[project_name] = None
|
||||
self._remote_site_provider[project_name] = None
|
||||
if not self.is_sitesync_enabled():
|
||||
return
|
||||
|
||||
self._active_site = active_site
|
||||
self._remote_site = remote_site
|
||||
self._active_site_provider = active_site_provider
|
||||
self._remote_site_provider = remote_site_provider
|
||||
sitesync_addon = self._get_sitesync_addon()
|
||||
active_site = sitesync_addon.get_active_site(project_name)
|
||||
remote_site = sitesync_addon.get_remote_site(project_name)
|
||||
active_site_provider = "studio"
|
||||
remote_site_provider = "studio"
|
||||
if active_site != "studio":
|
||||
active_site_provider = sitesync_addon.get_provider_for_site(
|
||||
project_name, active_site
|
||||
)
|
||||
if remote_site != "studio":
|
||||
remote_site_provider = sitesync_addon.get_provider_for_site(
|
||||
project_name, remote_site
|
||||
)
|
||||
|
||||
self._active_site[project_name] = active_site
|
||||
self._remote_site[project_name] = remote_site
|
||||
self._active_site_provider[project_name] = active_site_provider
|
||||
self._remote_site_provider[project_name] = remote_site_provider
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue