Asset Pipeline v2 #145
@ -24,18 +24,18 @@ MATERIAL_SLOT_KEY = TRANSFER_DATA_KEYS[3]
|
||||
|
||||
PUBLISH_TYPES = [
|
||||
(
|
||||
"ACTIVE",
|
||||
"publish",
|
||||
"Active",
|
||||
"Publish a new active version that will become the latest published version",
|
||||
),
|
||||
(
|
||||
"STAGE",
|
||||
"staged",
|
||||
"Staged",
|
||||
"""Publish a staged version that will replace the last active version as the Push/Pull target.
|
||||
Used for internal asset pipeline use only""",
|
||||
),
|
||||
(
|
||||
"REVIEW",
|
||||
"review",
|
||||
"Review",
|
||||
"Test the results that will be published in the review area, will not be used as Push/Pull target",
|
||||
),
|
||||
|
@ -96,26 +96,38 @@ def merge_task_layer(
|
||||
asset_suffix.remove_suffix_from_hierarchy(local_col)
|
||||
|
||||
|
||||
def find_published_file_version(file):
|
||||
def find_file_version(file):
|
||||
return int(file.name.split(".")[1].replace("v", ""))
|
||||
|
||||
|
||||
def get_next_published_file(current_file: Path):
|
||||
last_publish = find_published_file(current_file)
|
||||
new_version_number = find_published_file_version(last_publish) + 1
|
||||
def get_next_published_file(current_file: Path, publish_type="publish"):
|
||||
last_publish = find_published(current_file, publish_type)
|
||||
base_name = current_file.name.split(".")[0]
|
||||
publish_dir = current_file.parent.joinpath(publish_type)
|
||||
if not last_publish:
|
||||
new_version_number = 1
|
||||
|
||||
else:
|
||||
new_version_number = find_file_version(last_publish) + 1
|
||||
new_version = "{0:0=3d}".format(new_version_number)
|
||||
return last_publish.parent.joinpath(
|
||||
last_publish.name.split(".v")[0] + f".v" + new_version + ".blend"
|
||||
)
|
||||
return publish_dir.joinpath(base_name + f".v" + new_version + ".blend")
|
||||
|
||||
|
||||
def find_published_file(current_file: Path):
|
||||
publish_dir = current_file.parent.joinpath("publish")
|
||||
def find_published(current_file: Path, publish_type="publish"):
|
||||
publish_dir = current_file.parent.joinpath(publish_type)
|
||||
if not publish_dir.exists():
|
||||
return
|
||||
published_files = list(current_file.parent.joinpath("publish").glob('*.blend'))
|
||||
published_files.sort(key=find_published_file_version)
|
||||
return published_files[-1]
|
||||
published_files = list(publish_dir.glob('*.blend'))
|
||||
published_files.sort(key=find_file_version)
|
||||
if published_files:
|
||||
return published_files[-1]
|
||||
|
||||
|
||||
def find_sync_target(current_file: Path):
|
||||
latest_staged = find_published(current_file, publish_type="staged")
|
||||
if latest_staged:
|
||||
return latest_staged
|
||||
return find_published(current_file, publish_type="publish")
|
||||
|
||||
|
||||
def import_data_from_lib(
|
||||
|
@ -95,7 +95,7 @@ class ASSETPIPE_OT_sync_with_publish(bpy.types.Operator):
|
||||
self.report({'ERROR'}, "Current File Name doesn't contain valid task layer")
|
||||
return {'CANCELLED'}
|
||||
|
||||
pub_file = core.find_published_file(current_file)
|
||||
pub_file = core.find_sync_target(current_file)
|
||||
pub_file_path = pub_file.__str__()
|
||||
|
||||
if self.pull:
|
||||
@ -144,12 +144,19 @@ class ASSETPIPE_OT_publish_new_version(bpy.types.Operator):
|
||||
bl_description = """Create a new Published Version in the Publish Area"""
|
||||
|
||||
publish_types: bpy.props.EnumProperty(
|
||||
name="Transfer Data Owner",
|
||||
name="Type",
|
||||
items=constants.PUBLISH_TYPES,
|
||||
)
|
||||
|
||||
# TODO use published types to publish to different folders
|
||||
|
||||
def invoke(self, context: bpy.types.Context, event: bpy.types.Event):
|
||||
return context.window_manager.invoke_props_dialog(self, width=400)
|
||||
|
||||
def draw(self, context: bpy.types.Context):
|
||||
layout = self.layout
|
||||
layout.prop(self, "publish_types")
|
||||
|
||||
def execute(self, context: bpy.types.Context):
|
||||
if bpy.data.is_dirty:
|
||||
self.report(
|
||||
@ -158,7 +165,7 @@ class ASSETPIPE_OT_publish_new_version(bpy.types.Operator):
|
||||
)
|
||||
return {'CANCELLED'}
|
||||
current_file = Path(bpy.data.filepath)
|
||||
new_file_path = core.get_next_published_file(current_file)
|
||||
new_file_path = core.get_next_published_file(current_file, self.publish_types)
|
||||
bpy.ops.wm.save_as_mainfile(filepath=new_file_path.__str__(), copy=True)
|
||||
return {'FINISHED'}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user