static asset items, fix blender freeze

This commit is contained in:
“christopheseux”
2023-05-31 12:52:35 +02:00
parent 70e1def003
commit 472622ff4b
5 changed files with 66 additions and 204 deletions
+54 -24
View File
@@ -6,12 +6,13 @@ import bpy
from bpy.types import (Operator, )
from bpy.props import (BoolProperty, EnumProperty, StringProperty)
from vse_toolbox.constants import (ASSET_PREVIEWS, PREVIEWS_DIR)
from vse_toolbox.constants import (ASSET_PREVIEWS, PREVIEWS_DIR, ASSET_ITEMS)
from vse_toolbox.sequencer_utils import (get_strips, get_strip_render_path, get_strip_sequence_name)
from vse_toolbox.bl_utils import (get_addon_prefs, get_scene_settings)
from vse_toolbox.file_utils import (norm_name,)
from bpy.app.handlers import persistent
class VSETB_OT_tracker_connect(Operator):
@@ -85,7 +86,8 @@ class VSETB_OT_load_assets(Operator):
if preview_id not in ASSET_PREVIEWS:
ASSET_PREVIEWS.load(preview_id, preview_path.as_posix(), 'IMAGE', True)
set_asset_items()
self.report({'INFO'}, f'Assets for {project.name} successfully loaded')
return {"FINISHED"}
@@ -106,26 +108,43 @@ class VSETB_OT_load_projects(Operator):
prefs = get_addon_prefs()
tracker = prefs.tracker
old_project_name = settings.project_name.replace(' ', '_').upper()
# old_project_name = settings.project_name.replace(' ', '_').upper()
old_episode_name = None
if settings.active_project:
old_episode_name = settings.active_project.episode_name.replace(' ', '_').upper()
# old_episode_name = None
# if settings.active_project:
# old_episode_name = settings.active_project.episode_name.replace(' ', '_').upper()
settings.projects.clear()
#settings.projects.clear()
tracker.connect()
for project_data in tracker.get_projects():
project = settings.projects.add()
project_datas = tracker.get_projects()
for project_data in project_datas:
project = settings.projects.get(project_data['name'])
if not project:
project = settings.projects.add()
project.type = project_data['production_type'].upper().replace(' ', '')
project.name = project_data['name']
project.id = project_data['id']
if project.type == 'TVSHOW':
for episode_data in tracker.get_episodes(project_data):
episode = project.episodes.add()
episode_datas = tracker.get_episodes(project_data)
for episode_data in episode_datas:
episode = project.episodes.get(episode_data['name'])
if not episode:
episode = project.episodes.add()
episode.name = episode_data['name']
episode.id = episode_data['id']
# Clear deleted episodes
ep_names = [e['name'] for e in episode_datas]
for ep in reversed(project.episodes):
if ep.name not in ep_names:
project.episodes.remove(list(project.episodes).index(ep))
for metadata_data in tracker.get_metadata_types(project_data):
#pprint(metadata_data)
@@ -158,22 +177,18 @@ class VSETB_OT_load_projects(Operator):
project.set_spreadsheet()
for project in settings.projects:
if project.name.replace(' ', '_').upper() == old_project_name:
settings.project_name = project.name
for episode in project.episodes:
if episode.name.replace(' ', '_').upper() == old_episode_name:
project.episode_name = episode.name
bpy.ops.vse_toolbox.load_settings()
#else:
# print('Could Not restore Project Name')
# Remove deleted projects
project_names = [p['name'] for p in project_datas]
for project in reversed(settings.projects):
if project.name not in project_names:
settings.projects.remove(list(settings.projects).index(project))
#if settings.active_project:
# settings.active_project.set_strip_metadata()
#bpy.ops.vse_toolbox.load_assets()
self.report({"INFO"}, 'Successfully Load Tracker Projects')
@@ -367,6 +382,15 @@ class VSETB_OT_upload_to_tracker(Operator):
return {"FINISHED"}
@persistent
def set_asset_items(scene=None):
ASSET_ITEMS.clear()
settings = get_scene_settings()
if settings.active_project:
ASSET_ITEMS.extend([(a.id, a.label, '', i) for i, a in enumerate(settings.active_project.assets)])
classes = (
VSETB_OT_load_assets,
VSETB_OT_load_projects,
@@ -375,10 +399,16 @@ classes = (
VSETB_OT_upload_to_tracker,
)
def register():
def register():
if not bpy.app.background:
bpy.app.handlers.load_post.append(set_asset_items)
for cls in classes:
bpy.utils.register_class(cls)
def unregister():
for cls in reversed(classes):
bpy.utils.unregister_class(cls)
bpy.utils.unregister_class(cls)
if not bpy.app.background:
bpy.app.handlers.load_post.remove(set_asset_items)