rewrite import_shots and cleanup
This commit is contained in:
+112
-68
@@ -3,6 +3,8 @@ import os
|
||||
from os.path import expandvars
|
||||
from pathlib import Path
|
||||
from pprint import pprint
|
||||
import webbrowser
|
||||
from functools import partial
|
||||
|
||||
import bpy
|
||||
from bpy.types import (Operator, )
|
||||
@@ -59,7 +61,7 @@ class VSETB_OT_load_assets(Operator):
|
||||
prefs = get_addon_prefs()
|
||||
tracker = prefs.tracker
|
||||
|
||||
tracker.connect()
|
||||
tracker.admin_connect()
|
||||
project = settings.active_project
|
||||
project.assets.clear()
|
||||
|
||||
@@ -125,7 +127,7 @@ class VSETB_OT_load_projects(Operator):
|
||||
tracker = prefs.tracker
|
||||
prev_project_name = settings.project_name
|
||||
|
||||
tracker.connect()
|
||||
tracker.admin_connect()
|
||||
|
||||
project_datas = tracker.get_projects()
|
||||
for project_data in sorted(project_datas, key=lambda x: x['name']):
|
||||
@@ -137,7 +139,6 @@ class VSETB_OT_load_projects(Operator):
|
||||
project.name = project_data['name']
|
||||
project.id = project_data['id']
|
||||
|
||||
|
||||
if project.type == 'TVSHOW':
|
||||
episode_datas = tracker.get_episodes(project_data)
|
||||
for episode_data in episode_datas:
|
||||
@@ -154,6 +155,17 @@ class VSETB_OT_load_projects(Operator):
|
||||
for ep in reversed(project.episodes):
|
||||
if ep.name not in ep_names:
|
||||
project.episodes.remove(list(project.episodes).index(ep))
|
||||
else:
|
||||
# Add sequences
|
||||
sequences_data = tracker.get_sequences(project_data)
|
||||
for sequence_data in sequences_data:
|
||||
sequence = project.sequences.get(sequence_data['name'])
|
||||
|
||||
if not sequence:
|
||||
sequence = project.sequences.add()
|
||||
|
||||
sequence.name = sequence_data['name']
|
||||
sequence.id = sequence_data['id']
|
||||
|
||||
project.metadata_types.clear()
|
||||
for metadata_data in tracker.get_metadata_types(project_data):
|
||||
@@ -183,6 +195,7 @@ class VSETB_OT_load_projects(Operator):
|
||||
for task_type_data in tracker.get_shot_task_types(project_data):
|
||||
task_type = project.task_types.add()
|
||||
task_type.name = task_type_data['name']
|
||||
task_type.id = task_type_data['id']
|
||||
task_type.color = self.hex_to_rgb(task_type_data['color'])[:3]
|
||||
|
||||
project.set_shot_tasks()
|
||||
@@ -200,11 +213,11 @@ class VSETB_OT_load_projects(Operator):
|
||||
if project.name not in project_names:
|
||||
settings.projects.remove(list(settings.projects).index(project))
|
||||
|
||||
# Restore previous project
|
||||
settings.project_name = prev_project_name
|
||||
|
||||
bpy.ops.vse_toolbox.load_settings()
|
||||
|
||||
if prev_project_name != '/' and prev_project_name in settings.projects:
|
||||
settings.project_name = prev_project_name
|
||||
|
||||
#if settings.active_project:
|
||||
# settings.active_project.set_strip_metadata()
|
||||
|
||||
@@ -216,7 +229,7 @@ class VSETB_OT_load_projects(Operator):
|
||||
|
||||
class VSETB_OT_new_episode(Operator):
|
||||
bl_idname = "vse_toolbox.new_episode"
|
||||
bl_label = "New Epispde"
|
||||
bl_label = "New Episode"
|
||||
bl_description = "Add new Episode to Project"
|
||||
bl_options = {"REGISTER", "UNDO"}
|
||||
|
||||
@@ -254,42 +267,12 @@ class VSETB_OT_new_episode(Operator):
|
||||
return {'FINISHED'}
|
||||
|
||||
|
||||
def get_task_status_items(self, context):
|
||||
settings = get_scene_settings()
|
||||
project = settings.active_project
|
||||
|
||||
status_items = [('CURRENT', 'Current', '')]
|
||||
|
||||
if project:
|
||||
status_items += [(t.name, t.name, '') for t in project.task_statuses]
|
||||
return status_items
|
||||
|
||||
def get_task_type_items(self, context):
|
||||
settings = get_scene_settings()
|
||||
project = settings.active_project
|
||||
|
||||
if not project:
|
||||
return [('NONE', 'None', '')]
|
||||
|
||||
return [(t.name, t.name, '') for t in project.task_types]
|
||||
|
||||
class VSETB_OT_upload_to_tracker(Operator):
|
||||
bl_idname = "vse_toolbox.upload_to_tracker"
|
||||
bl_label = "Upload to tracker"
|
||||
bl_description = "Upload selected strip to tracker"
|
||||
bl_options = {"REGISTER", "UNDO"}
|
||||
|
||||
task : EnumProperty(items=get_task_type_items)
|
||||
status : EnumProperty(items=get_task_status_items)
|
||||
comment : StringProperty()
|
||||
add_preview : BoolProperty(default=True)
|
||||
preview_mode : EnumProperty(items=[(m, m.title().replace('_', ' '), '')
|
||||
for m in ('ONLY_NEW', 'REPLACE', 'ADD')])
|
||||
set_main_preview : BoolProperty(default=True)
|
||||
casting : BoolProperty(default=True)
|
||||
custom_data : BoolProperty(default=True)
|
||||
tasks_comment: BoolProperty(default=True)
|
||||
|
||||
@classmethod
|
||||
def poll(cls, context):
|
||||
return True
|
||||
@@ -297,49 +280,66 @@ class VSETB_OT_upload_to_tracker(Operator):
|
||||
def invoke(self, context, event):
|
||||
prefs = get_addon_prefs()
|
||||
settings = get_scene_settings()
|
||||
project = settings.active_project
|
||||
self.project = settings.active_project
|
||||
|
||||
tracker = prefs.tracker
|
||||
tracker.connect()
|
||||
|
||||
#self.bl_label = f"Upload to {settings.tracker_name.title()}"
|
||||
|
||||
return context.window_manager.invoke_props_dialog(self)
|
||||
return context.window_manager.invoke_props_dialog(self, width=350)
|
||||
|
||||
def draw(self, context):
|
||||
scn = context.scene
|
||||
settings = get_scene_settings()
|
||||
upload_to_tracker = self.project.upload_to_tracker
|
||||
|
||||
layout = self.layout
|
||||
col = layout.column()
|
||||
col.use_property_split = True
|
||||
col.prop(self, 'task', text='Task')
|
||||
col.prop(self, 'status', text='Status')
|
||||
col.prop(self, 'comment', text='Comment')
|
||||
row = col.row(heading='Add Preview')
|
||||
row.prop(self, 'add_preview', text='')
|
||||
row.prop(self, 'preview_mode', text='')
|
||||
col.use_property_decorate = False
|
||||
col.prop(upload_to_tracker, 'render_strips', text='Render Strips')
|
||||
if upload_to_tracker.render_strips:
|
||||
col.use_property_split = False
|
||||
col.prop(upload_to_tracker, 'render_strip_template', text='')
|
||||
col.use_property_split = True
|
||||
#else:
|
||||
# col.label(text=f'Source: {self.project.render_video_strip_template}')
|
||||
|
||||
col.separator()
|
||||
col.prop(self, 'casting', text='Casting')
|
||||
col.prop(self, 'custom_data', text='Custom Data')
|
||||
col.prop(self, 'tasks_comment', text='Tasks Comment')
|
||||
col.prop(self, 'set_main_preview', text='Set Main Preview')
|
||||
|
||||
col.prop(upload_to_tracker, 'task', text='Task')
|
||||
col.prop(upload_to_tracker, 'status', text='Status')
|
||||
col.prop(upload_to_tracker, 'comment', text='Comment')
|
||||
row = col.row(heading='Add Preview')
|
||||
row.prop(upload_to_tracker, 'add_preview', text='')
|
||||
row.prop(upload_to_tracker, 'preview_mode', text='')
|
||||
if upload_to_tracker.add_preview and not upload_to_tracker.render_strips:
|
||||
col.use_property_split = False
|
||||
col.prop(self.project, 'render_video_strip_template', text='')
|
||||
col.use_property_split = True
|
||||
|
||||
col.separator()
|
||||
col.prop(upload_to_tracker, 'custom_data', text='Custom Data')
|
||||
col.prop(upload_to_tracker, 'update_frames', text='Update frames')
|
||||
col.prop(upload_to_tracker, 'casting', text='Casting')
|
||||
col.prop(upload_to_tracker, 'tasks_comment', text='Tasks Comment')
|
||||
col.prop(upload_to_tracker, 'set_main_preview', text='Set Main Preview')
|
||||
|
||||
def execute(self, context):
|
||||
#self.report({'ERROR'}, f'Export not implemented yet.')
|
||||
prefs = get_addon_prefs()
|
||||
settings = get_scene_settings()
|
||||
project = settings.active_project
|
||||
upload_to_tracker = self.project.upload_to_tracker
|
||||
|
||||
episode = None
|
||||
if settings.active_episode:
|
||||
episode = settings.active_episode.id
|
||||
|
||||
format_data = {**settings.format_data, **project.format_data}
|
||||
|
||||
format_data = {**settings.format_data, **self.project.format_data}
|
||||
|
||||
tracker = prefs.tracker
|
||||
|
||||
status = self.status
|
||||
status = upload_to_tracker.status
|
||||
if status == 'CURRENT':
|
||||
status = None
|
||||
|
||||
@@ -360,15 +360,19 @@ class VSETB_OT_upload_to_tracker(Operator):
|
||||
self.report({"INFO"}, f'Create shot {shot_name} in Kitsu')
|
||||
shot = tracker.new_shot(shot_name, sequence=sequence)
|
||||
|
||||
task = tracker.get_task(self.task, entity=shot)
|
||||
task = tracker.get_task(upload_to_tracker.task, entity=shot)
|
||||
if not task:
|
||||
task = tracker.new_task(shot, task_type=self.task)
|
||||
task = tracker.new_task(shot, task_type=upload_to_tracker.task)
|
||||
|
||||
preview = None
|
||||
if self.add_preview:
|
||||
if upload_to_tracker.add_preview:
|
||||
|
||||
strip_data = {**format_data, **strip_settings.format_data}
|
||||
preview_template = expandvars(project.render_video_strip_template)
|
||||
if upload_to_tracker.render_strips:
|
||||
preview_template = expandvars(upload_to_tracker.render_strip_template)
|
||||
else:
|
||||
preview_template = expandvars(self.project.render_video_strip_template)
|
||||
|
||||
preview = preview_template.format(**strip_data)
|
||||
preview = Path(os.path.abspath(bpy.path.abspath(preview)))
|
||||
#print(preview)
|
||||
@@ -377,24 +381,41 @@ class VSETB_OT_upload_to_tracker(Operator):
|
||||
preview = None
|
||||
|
||||
elif task.get('last_comment') and task['last_comment']['previews']:
|
||||
if self.preview_mode == 'REPLACE':
|
||||
if upload_to_tracker.preview_mode == 'REPLACE':
|
||||
tracker.remove_comment(task['last_comment'])
|
||||
elif self.preview_mode == 'ONLY_NEW':
|
||||
elif upload_to_tracker.preview_mode == 'ONLY_NEW':
|
||||
preview = None
|
||||
|
||||
if status or preview:
|
||||
tracker.new_comment(task, comment=self.comment, status=status, preview=preview, set_main_preview=self.set_main_preview)
|
||||
comment_data = None
|
||||
if status or comment or preview:
|
||||
comment_data = tracker.new_comment(task, comment=upload_to_tracker.comment, status=status)
|
||||
if preview:
|
||||
print('Upload preview from', preview)
|
||||
preview_data = tracker.new_preview(
|
||||
task=task,
|
||||
comment=comment_data,
|
||||
preview=preview)
|
||||
|
||||
if self.custom_data:
|
||||
description = strip_settings.description
|
||||
tracker.update_data(shot, metadata, frames=strip.frame_final_duration, description=description)
|
||||
if upload_to_tracker.set_main_preview:
|
||||
bpy.app.timers.register(partial(tracker.set_main_preview, preview_data), first_interval=10)
|
||||
|
||||
params = {}
|
||||
if upload_to_tracker.custom_data:
|
||||
params['custom_data'] = metadata
|
||||
params['description'] = strip_settings.description
|
||||
|
||||
if self.casting:
|
||||
if upload_to_tracker.update_frames:
|
||||
params['frames'] = strip.frame_final_duration
|
||||
|
||||
if params:
|
||||
tracker.update_data(shot, **params)
|
||||
|
||||
if upload_to_tracker.casting:
|
||||
casting = [{'asset_id': a.id, 'nb_occurences': a.instance} for a in strip_settings.casting]
|
||||
tracker.update_casting(shot, casting)
|
||||
|
||||
if self.tasks_comment:
|
||||
for task_type in project.task_types:
|
||||
if upload_to_tracker.tasks_comment:
|
||||
for task_type in self.project.task_types:
|
||||
|
||||
task = getattr(strip_settings.tasks, norm_name(task_type.name))
|
||||
tracker_task = tracker.get_task(task_type.name, entity=shot)
|
||||
@@ -405,6 +426,28 @@ class VSETB_OT_upload_to_tracker(Operator):
|
||||
return {"FINISHED"}
|
||||
|
||||
|
||||
class VSETB_OT_open_shot_on_tracker(Operator):
|
||||
bl_idname = "vse_toolbox.open_shot_on_tracker"
|
||||
bl_label = "Open Shot on Tracker"
|
||||
bl_description = "Open Shot on Tracker"
|
||||
|
||||
@classmethod
|
||||
def poll(cls, context):
|
||||
prefs = get_addon_prefs()
|
||||
if prefs.tracker:
|
||||
return True
|
||||
|
||||
def execute(self, context):
|
||||
prefs = get_addon_prefs()
|
||||
tracker = prefs.tracker
|
||||
|
||||
strips = get_strips(channel='Shots', selected_only=True)
|
||||
url = tracker.get_shots_search_url([s.name for s in strips])
|
||||
|
||||
webbrowser.open_new_tab(url)
|
||||
|
||||
return {"FINISHED"}
|
||||
|
||||
@persistent
|
||||
def set_asset_items(scene=None):
|
||||
ASSET_ITEMS.clear()
|
||||
@@ -420,6 +463,7 @@ classes = (
|
||||
VSETB_OT_new_episode,
|
||||
VSETB_OT_tracker_connect,
|
||||
VSETB_OT_upload_to_tracker,
|
||||
VSETB_OT_open_shot_on_tracker
|
||||
)
|
||||
|
||||
def register():
|
||||
|
||||
Reference in New Issue
Block a user