mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-24 12:54:40 +01:00
convert delivery action
This commit is contained in:
parent
fc0232b744
commit
062069028f
1 changed files with 64 additions and 29 deletions
|
|
@ -1,5 +1,6 @@
|
|||
import platform
|
||||
from collections import defaultdict
|
||||
from typing import Optional, Any
|
||||
|
||||
import ayon_api
|
||||
from qtpy import QtWidgets, QtCore, QtGui
|
||||
|
|
@ -10,7 +11,13 @@ from ayon_core.lib import (
|
|||
collect_frames,
|
||||
get_datetime_data,
|
||||
)
|
||||
from ayon_core.pipeline import load, Anatomy
|
||||
from ayon_core.pipeline import Anatomy
|
||||
from ayon_core.pipeline.actions import (
|
||||
LoaderActionPlugin,
|
||||
LoaderActionSelection,
|
||||
LoaderActionItem,
|
||||
LoaderActionResult,
|
||||
)
|
||||
from ayon_core.pipeline.load import get_representation_path_with_anatomy
|
||||
from ayon_core.pipeline.delivery import (
|
||||
get_format_dict,
|
||||
|
|
@ -20,43 +27,74 @@ from ayon_core.pipeline.delivery import (
|
|||
)
|
||||
|
||||
|
||||
class Delivery(load.ProductLoaderPlugin):
|
||||
"""Export selected versions to folder structure from Template"""
|
||||
class DeliveryAction(LoaderActionPlugin):
|
||||
identifier = "core.delivery"
|
||||
|
||||
is_multiple_contexts_compatible = True
|
||||
sequence_splitter = "__sequence_splitter__"
|
||||
def get_action_items(
|
||||
self, selection: LoaderActionSelection
|
||||
) -> list[LoaderActionItem]:
|
||||
if self.host_name is None:
|
||||
return []
|
||||
|
||||
representations = {"*"}
|
||||
product_types = {"*"}
|
||||
tool_names = ["library_loader"]
|
||||
version_ids = set()
|
||||
if selection.selected_type == "representations":
|
||||
versions = selection.entities.get_representations_versions(
|
||||
selection.selected_ids
|
||||
)
|
||||
version_ids = {version["id"] for version in versions}
|
||||
|
||||
label = "Deliver Versions"
|
||||
order = 35
|
||||
icon = "upload"
|
||||
color = "#d8d8d8"
|
||||
if selection.selected_type == "version":
|
||||
version_ids = set(selection.selected_ids)
|
||||
|
||||
def message(self, text):
|
||||
msgBox = QtWidgets.QMessageBox()
|
||||
msgBox.setText(text)
|
||||
msgBox.setStyleSheet(style.load_stylesheet())
|
||||
msgBox.setWindowFlags(
|
||||
msgBox.windowFlags() | QtCore.Qt.FramelessWindowHint
|
||||
)
|
||||
msgBox.exec_()
|
||||
if not version_ids:
|
||||
return []
|
||||
|
||||
def load(self, contexts, name=None, namespace=None, options=None):
|
||||
return [
|
||||
LoaderActionItem(
|
||||
identifier="deliver-versions",
|
||||
label="Deliver Versions",
|
||||
order=35,
|
||||
entity_ids=version_ids,
|
||||
entity_type="version",
|
||||
icon={
|
||||
"type": "material-symbols",
|
||||
"name": "upload",
|
||||
"color": "#d8d8d8",
|
||||
}
|
||||
)
|
||||
]
|
||||
|
||||
def execute_action(
|
||||
self,
|
||||
identifier: str,
|
||||
entity_ids: set[str],
|
||||
entity_type: str,
|
||||
selection: LoaderActionSelection,
|
||||
form_values: dict[str, Any],
|
||||
) -> Optional[LoaderActionResult]:
|
||||
try:
|
||||
dialog = DeliveryOptionsDialog(contexts, self.log)
|
||||
# TODO run the tool in subprocess
|
||||
dialog = DeliveryOptionsDialog(
|
||||
selection.project_name, entity_ids, self.log
|
||||
)
|
||||
dialog.exec_()
|
||||
except Exception:
|
||||
self.log.error("Failed to deliver versions.", exc_info=True)
|
||||
|
||||
return LoaderActionResult()
|
||||
|
||||
|
||||
class DeliveryOptionsDialog(QtWidgets.QDialog):
|
||||
"""Dialog to select template where to deliver selected representations."""
|
||||
|
||||
def __init__(self, contexts, log=None, parent=None):
|
||||
super(DeliveryOptionsDialog, self).__init__(parent=parent)
|
||||
def __init__(
|
||||
self,
|
||||
project_name,
|
||||
version_ids,
|
||||
log=None,
|
||||
parent=None,
|
||||
):
|
||||
super().__init__(parent=parent)
|
||||
|
||||
self.setWindowTitle("AYON - Deliver versions")
|
||||
icon = QtGui.QIcon(resources.get_ayon_icon_filepath())
|
||||
|
|
@ -70,13 +108,12 @@ class DeliveryOptionsDialog(QtWidgets.QDialog):
|
|||
|
||||
self.setStyleSheet(style.load_stylesheet())
|
||||
|
||||
project_name = contexts[0]["project"]["name"]
|
||||
self.anatomy = Anatomy(project_name)
|
||||
self._representations = None
|
||||
self.log = log
|
||||
self.currently_uploaded = 0
|
||||
|
||||
self._set_representations(project_name, contexts)
|
||||
self._set_representations(project_name, version_ids)
|
||||
|
||||
dropdown = QtWidgets.QComboBox()
|
||||
self.templates = self._get_templates(self.anatomy)
|
||||
|
|
@ -316,9 +353,7 @@ class DeliveryOptionsDialog(QtWidgets.QDialog):
|
|||
|
||||
return templates
|
||||
|
||||
def _set_representations(self, project_name, contexts):
|
||||
version_ids = {context["version"]["id"] for context in contexts}
|
||||
|
||||
def _set_representations(self, project_name, version_ids):
|
||||
repres = list(ayon_api.get_representations(
|
||||
project_name, version_ids=version_ids
|
||||
))
|
||||
Loading…
Add table
Add a link
Reference in a new issue