diff --git a/tagstudio/src/qt/helpers/open_file.py b/tagstudio/src/qt/helpers/open_file.py index 24eb2efd..f2e070e4 100644 --- a/tagstudio/src/qt/helpers/open_file.py +++ b/tagstudio/src/qt/helpers/open_file.py @@ -11,21 +11,39 @@ import shutil import subprocess -def open_file(path: str): +def open_file(path: str, file_manager: bool = False): try: if sys.platform == "win32": - # Windows needs special attention to handle spaces in the file - # first parameter is for title, NOT filepath - subprocess.Popen(["start", "", os.path.normpath(path)], shell=True, close_fds=True, creationflags=subprocess.DETACHED_PROCESS) + normpath = os.path.normpath(path) + if file_manager: + command_name = "explorer" + command_args = [f"/select,{normpath}"] + else: + command_name = "start" + # first parameter is for title, NOT filepath + command_args = ["", normpath] + subprocess.Popen([command_name] + command_args, shell=True, close_fds=True, creationflags=subprocess.CREATE_NEW_PROCESS_GROUP | subprocess.CREATE_BREAKAWAY_FROM_JOB) else: if sys.platform == "darwin": command_name = "open" + command_args = [path] + if file_manager: + # will reveal in Finder + command_args.append("-R") else: - command_name = "xdg-open" + if file_manager: + command_name = "dbus-send" + # might not be guaranteed to launch default? + command_args = ["--session", "--dest=org.freedesktop.FileManager1", "--type=method_call", + "/org/freedesktop/FileManager1", "org.freedesktop.FileManager1.ShowItems", + f"array:string:file://{path}", "string:"] + else: + command_name = "xdg-open" + command_args = [path] command = shutil.which(command_name) if command is not None: - subprocess.Popen([command, path], close_fds=True) + subprocess.Popen([command] + command_args, close_fds=True) else: logging.info(f"Could not find {command_name} on system PATH") except: - traceback.print_exc() + traceback.print_exc() \ No newline at end of file