121 lines
4.0 KiB
Python
121 lines
4.0 KiB
Python
# Python imports
|
|
import shlex
|
|
|
|
# Lib imports
|
|
|
|
# Application imports
|
|
from .crud_mixin import CRUDMixin
|
|
from .handler_mixin import HandlerMixin
|
|
|
|
|
|
|
|
|
|
class FileSystemActions(HandlerMixin, CRUDMixin):
|
|
"""docstring for FileSystemActions"""
|
|
|
|
def __init__(self):
|
|
super(FileSystemActions, self).__init__()
|
|
|
|
self._setup_styling()
|
|
self._setup_signals()
|
|
self._subscribe_to_events()
|
|
self._load_widgets()
|
|
|
|
self._selected_files = []
|
|
self._to_copy_files = []
|
|
self._to_cut_files = []
|
|
|
|
self._builder = settings_manager.get_builder()
|
|
|
|
|
|
def _setup_styling(self):
|
|
...
|
|
|
|
def _setup_signals(self):
|
|
...
|
|
|
|
def _subscribe_to_events(self):
|
|
event_system.subscribe("set_selected_files", self.set_selected_files)
|
|
event_system.subscribe("get_selected_files", self.get_selected_files)
|
|
|
|
event_system.subscribe("open_files", self.open_files)
|
|
event_system.subscribe("open_with_files", self.open_with_files)
|
|
event_system.subscribe("open_2_new_tab", self.open_2_new_tab)
|
|
event_system.subscribe("execute_files", self.execute_files)
|
|
|
|
event_system.subscribe("cut_files", self.cut_files)
|
|
event_system.subscribe("copy_files", self.copy_files)
|
|
event_system.subscribe("paste_files", self.paste_files)
|
|
event_system.subscribe("move_files", self.move_files)
|
|
event_system.subscribe("copy_name", self.copy_name)
|
|
event_system.subscribe("copy_path", self.copy_path)
|
|
event_system.subscribe("copy_path_name", self.copy_path_name)
|
|
event_system.subscribe("create_files", self.create_files)
|
|
event_system.subscribe("rename_files", self.rename_files)
|
|
|
|
def _load_widgets(self):
|
|
...
|
|
|
|
|
|
def set_selected_files(self, selected_files: []):
|
|
self._selected_files = selected_files
|
|
|
|
def get_selected_files(self):
|
|
return self._selected_files
|
|
|
|
|
|
def cut_files(self):
|
|
self._to_copy_files.clear()
|
|
state = event_system.emit_and_await("get_current_state")
|
|
self._to_cut_files = state.uris
|
|
|
|
def copy_files(self):
|
|
self._to_cut_files.clear()
|
|
state = event_system.emit_and_await("get_current_state")
|
|
self._to_copy_files = state.uris
|
|
|
|
def copy_path(self):
|
|
state = event_system.emit_and_await("get_current_state")
|
|
path = state.tab.get_current_directory()
|
|
event_system.emit("set_clipboard_data", (path,))
|
|
|
|
def copy_name(self):
|
|
state = event_system.emit_and_await("get_current_state")
|
|
if len(state.uris) == 1:
|
|
file_name = state.uris[0].split("/")[-1]
|
|
event_system.emit("set_clipboard_data", (file_name,))
|
|
|
|
def copy_path_name(self):
|
|
state = event_system.emit_and_await("get_current_state")
|
|
if len(state.uris) == 1:
|
|
file = state.uris[0].replace("file://", "")
|
|
event_system.emit("set_clipboard_data", (file,))
|
|
|
|
def open_files(self):
|
|
state = event_system.emit_and_await("get_current_state")
|
|
for file in state.uris:
|
|
state.tab.open_file_locally(file)
|
|
|
|
def open_with_files(self, app_info):
|
|
state = event_system.emit_and_await("get_current_state")
|
|
uris = state.uris_raw
|
|
|
|
if not state.uris_raw:
|
|
uris = [f"file://{state.tab.get_current_directory()}"]
|
|
|
|
state.tab.app_chooser_exec(app_info, uris)
|
|
|
|
def open_2_new_tab(self):
|
|
state = event_system.emit_and_await("get_current_state")
|
|
uri = state.uris[0]
|
|
message = f"FILE|{uri}"
|
|
logger.info(message)
|
|
event_system.emit("post_file_to_ipc", message)
|
|
|
|
def execute_files(self, in_terminal=False):
|
|
state = event_system.emit_and_await("get_current_state")
|
|
current_dir = state.tab.get_current_directory()
|
|
command = None
|
|
for path in state.uris:
|
|
command = f"{shlex.quote(path)}" if not in_terminal else f"{state.tab.terminal_app} -e {shlex.quote(path)}"
|
|
state.tab.execute(shlex.split(command), start_dir=state.tab.get_current_directory()) |