97 lines
2.6 KiB
Python
97 lines
2.6 KiB
Python
# SPDX-FileCopyrightText: 2021 Blender Studio Tools Authors
|
|
#
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
from typing import Any, Dict, List, Tuple, Generator
|
|
from pathlib import Path
|
|
|
|
import bpy
|
|
|
|
from ..models import FileListModel
|
|
from ..logger import LoggerFactory
|
|
|
|
PLAYBLAST_FILE_MODEL = FileListModel()
|
|
_playblast_enum_list: List[Tuple[str, str, str]] = []
|
|
_playblast_file_model_init: bool = False
|
|
|
|
logger = LoggerFactory.getLogger()
|
|
|
|
|
|
def init_playblast_file_model(
|
|
context: bpy.types.Context,
|
|
) -> None:
|
|
global PLAYBLAST_FILE_MODEL
|
|
global _playblast_file_model_init
|
|
|
|
kitsu_props = context.scene.kitsu
|
|
# TODO Make playblast dir variable (seq or shot)
|
|
# Consider removing this string and use prefs instead
|
|
|
|
# Is None if invalid.
|
|
if not context.scene.kitsu.playblast_dir:
|
|
logger.error(
|
|
"Failed to initialize playblast file model. Invalid path. Check addon preferences"
|
|
)
|
|
return
|
|
|
|
playblast_dir = Path(context.scene.kitsu.playblast_dir)
|
|
|
|
PLAYBLAST_FILE_MODEL.reset()
|
|
PLAYBLAST_FILE_MODEL.root_path = playblast_dir
|
|
|
|
if not PLAYBLAST_FILE_MODEL.versions:
|
|
PLAYBLAST_FILE_MODEL.append_item("v001")
|
|
# Update playblast_version prop.
|
|
kitsu_props.playblast_version = "v001"
|
|
|
|
else:
|
|
# Update playblast_version prop.
|
|
kitsu_props.playblast_version = PLAYBLAST_FILE_MODEL.versions[0]
|
|
|
|
_playblast_file_model_init = True
|
|
|
|
|
|
def add_playblast_version_increment(context: bpy.types.Context) -> str:
|
|
# Init model if it did not happen.
|
|
if not _playblast_file_model_init:
|
|
init_playblast_file_model(context)
|
|
|
|
# Should be already sorted.
|
|
versions = PLAYBLAST_FILE_MODEL.versions
|
|
|
|
if len(versions) > 0:
|
|
latest_version = versions[0]
|
|
increment = "v{:03}".format(int(latest_version.replace("v", "")) + 1)
|
|
else:
|
|
increment = "v001"
|
|
|
|
PLAYBLAST_FILE_MODEL.append_item(increment)
|
|
return increment
|
|
|
|
|
|
def get_playblast_versions_enum_list(
|
|
self: Any,
|
|
context: bpy.types.Context,
|
|
) -> List[Tuple[str, str, str]]:
|
|
global _playblast_enum_list
|
|
global PLAYBLAST_FILE_MODEL
|
|
global init_playblast_file_model
|
|
global _playblast_file_model_init
|
|
|
|
# Init model if it did not happen.
|
|
if not _playblast_file_model_init:
|
|
init_playblast_file_model(context)
|
|
|
|
# Clear all versions in enum list.
|
|
_playblast_enum_list.clear()
|
|
_playblast_enum_list.extend(PLAYBLAST_FILE_MODEL.versions_as_enum_list)
|
|
|
|
return _playblast_enum_list
|
|
|
|
|
|
def add_version_custom(custom_version: str) -> None:
|
|
global _playblast_enum_list
|
|
global PLAYBLAST_FILE_MODEL
|
|
|
|
PLAYBLAST_FILE_MODEL.append_item(custom_version)
|