Files
blender-portable-repo/scripts/addons/blender_kitsu/playblast/opsdata.py
T
2026-03-17 14:58:51 -06:00

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)