Blender Kitsu: New Assset Tagging System #286

Merged
Nick Alberelli merged 8 commits from TinyNick/blender-studio-pipeline:feature/asset-tagging into main 2024-04-30 21:43:07 +02:00
Showing only changes of commit 143b4d80ff - Show all commits

View File

@ -250,6 +250,17 @@ class KITSU_OT_con_set_asset(bpy.types.Operator):
"Shot Builder, if the Asset is casted to the buider's target shot" "Shot Builder, if the Asset is casted to the buider's target shot"
) )
_published_file_path: Path = None
use_asset_pipeline_publish: bpy.props.BoolProperty( # type: ignore
name="Use Asset Pipeline Publish",
description=(
"Find the Publish of this file in the 'Publish' folder and use it's filepath for Kitsu Asset`"
"Selected Collection must be named exactly the same between current file and Publish"
),
default=False,
)
@classmethod @classmethod
def poll(cls, context): def poll(cls, context):
kitsu_props = context.scene.kitsu kitsu_props = context.scene.kitsu
@ -273,9 +284,40 @@ class KITSU_OT_con_set_asset(bpy.types.Operator):
return False return False
return True return True
def is_asset_pipeline_enabled(self, context) -> bool:
for addon in context.preferences.addons:
if addon.module == "asset_pipeline":
return True
return False
def get_asset_pipeline_publish(self, context) -> Path:
from asset_pipeline.merge.publish import find_latest_publish
return find_latest_publish(Path(bpy.data.filepath))
def invoke(self, context, event):
if self.is_asset_pipeline_enabled(context):
self._published_file_path = self.get_asset_pipeline_publish(context)
if self._published_file_path.exists():
self.use_asset_pipeline_publish = True
wm = context.window_manager
return wm.invoke_props_dialog(self)
return self.execute(context)
def draw(self, context):
layout = self.layout
relative_path = self._published_file_path.relative_to(Path(bpy.data.filepath).parent)
box = layout.box()
box.enabled = self.use_asset_pipeline_publish
box.label(text=f"//{str(relative_path)}")
layout.prop(self, "use_asset_pipeline_publish")
def execute(self, context): def execute(self, context):
project_root = prefs.project_root_dir_get(context) project_root = prefs.project_root_dir_get(context)
relative_path = Path(bpy.data.filepath).relative_to(project_root) if self.use_asset_pipeline_publish:
relative_path = self._published_file_path.relative_to(project_root)
else:
relative_path = Path(bpy.data.filepath).relative_to(project_root)
blender_asset = context.scene.kitsu.asset_col blender_asset = context.scene.kitsu.asset_col
kitsu_asset = cache.asset_active_get() kitsu_asset = cache.asset_active_get()
if not kitsu_asset: if not kitsu_asset:
@ -284,7 +326,8 @@ class KITSU_OT_con_set_asset(bpy.types.Operator):
kitsu_asset.set_asset_path(str(relative_path), blender_asset.name) kitsu_asset.set_asset_path(str(relative_path), blender_asset.name)
self.report( self.report(
{"INFO"}, f"Kitsu Asset '{kitsu_asset.name}' set to Collection '{blender_asset.name}'" {"INFO"},
f"Kitsu Asset '{kitsu_asset.name}' set to Collection '{blender_asset.name}' at path '{relative_path}'",
) )
return {"FINISHED"} return {"FINISHED"}