2025-12-01
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
# SPDX-FileCopyrightText: 2021 Blender Studio Tools Authors
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import importlib
|
||||
from ..generic import ops
|
||||
|
||||
|
||||
# ---------REGISTER ----------.
|
||||
|
||||
|
||||
def reload():
|
||||
global ops
|
||||
|
||||
ops = importlib.reload(ops)
|
||||
|
||||
|
||||
def register():
|
||||
ops.register()
|
||||
|
||||
|
||||
def unregister():
|
||||
ops.unregister()
|
||||
@@ -0,0 +1,79 @@
|
||||
# SPDX-FileCopyrightText: 2021 Blender Studio Tools Authors
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import sys
|
||||
import subprocess
|
||||
import os
|
||||
from pathlib import Path
|
||||
from typing import Dict, List, Set, Optional, Tuple, Any
|
||||
|
||||
import bpy
|
||||
|
||||
from ..logger import LoggerFactory
|
||||
|
||||
|
||||
logger = LoggerFactory.getLogger()
|
||||
|
||||
|
||||
class KITSU_OT_open_path(bpy.types.Operator):
|
||||
bl_idname = "kitsu.open_path"
|
||||
bl_label = "Open"
|
||||
bl_description = "Opens specified path in the default system file browser"
|
||||
|
||||
filepath: bpy.props.StringProperty( # type: ignore
|
||||
name="Filepath",
|
||||
description="Filepath that will be opened in explorer",
|
||||
default="",
|
||||
)
|
||||
|
||||
def execute(self, context: bpy.types.Context) -> Set[str]:
|
||||
|
||||
if not self.filepath:
|
||||
self.report({"ERROR"}, "Can't open empty path in explorer")
|
||||
return {"CANCELLED"}
|
||||
|
||||
filepath = Path(self.filepath)
|
||||
if filepath.is_file():
|
||||
filepath = filepath.parent
|
||||
|
||||
if not filepath.exists():
|
||||
filepath = self._find_latest_existing_folder(filepath)
|
||||
|
||||
if sys.platform == "darwin":
|
||||
subprocess.check_call(["open", filepath.as_posix()])
|
||||
|
||||
elif sys.platform == "linux2" or sys.platform == "linux":
|
||||
subprocess.check_call(["xdg-open", filepath.as_posix()])
|
||||
|
||||
elif sys.platform == "win32":
|
||||
os.startfile(filepath.as_posix())
|
||||
|
||||
else:
|
||||
self.report(
|
||||
{"ERROR"}, f"Can't open explorer. Unsupported platform {sys.platform}"
|
||||
)
|
||||
return {"CANCELLED"}
|
||||
|
||||
return {"FINISHED"}
|
||||
|
||||
def _find_latest_existing_folder(self, path: Path) -> Path:
|
||||
if path.exists() and path.is_dir():
|
||||
return path
|
||||
else:
|
||||
return self._find_latest_existing_folder(path.parent)
|
||||
|
||||
|
||||
# ---------REGISTER ----------.
|
||||
|
||||
classes = [KITSU_OT_open_path]
|
||||
|
||||
|
||||
def register():
|
||||
for cls in classes:
|
||||
bpy.utils.register_class(cls)
|
||||
|
||||
|
||||
def unregister():
|
||||
for cls in reversed(classes):
|
||||
bpy.utils.unregister_class(cls)
|
||||
Reference in New Issue
Block a user