Centralize definition of file transfer OSC code

This commit is contained in:
Kovid Goyal
2021-09-08 13:43:59 +05:30
parent 745e97e0ab
commit 8aacf30f19
8 changed files with 35 additions and 10 deletions

View File

@@ -222,8 +222,16 @@ def files_for_send(cli_opts: TransferCLIOptions, args: List[str]) -> Tuple[File,
return tuple(files)
class SendManager:
def __init__(self, files: Tuple[File, ...]):
self.files = files
def send_main(cli_opts: TransferCLIOptions, args: List[str]) -> None:
pass
print('Scanning files…')
files = files_for_send(cli_opts, args)
print(f'Found {len(files)} files and directories, requesting transfer permission…')
def parse_transfer_args(args: List[str]) -> Tuple[TransferCLIOptions, List[str]]:

View File

@@ -5,7 +5,7 @@
from types import TracebackType
from typing import (
Any, Callable, ContextManager, Dict, Optional, Sequence, Type, Union
Any, Callable, ContextManager, Dict, Optional, Sequence, Type, Union, TYPE_CHECKING
)
from kitty.types import ParsedShortcut
@@ -17,6 +17,10 @@ from kitty.typing import (
from .operations import pending_update
if TYPE_CHECKING:
from kitty.file_transmission import FileTransmissionCommand
class Handler:
image_manager_class: Optional[Type[ImageManagerType]] = None
@@ -118,6 +122,9 @@ class Handler:
def on_clipboard_response(self, text: str, from_primary: bool = False) -> None:
pass
def on_file_transfer_response(self, ftc: 'FileTransmissionCommand') -> None:
pass
def on_capability_response(self, name: str, val: str) -> None:
pass

View File

@@ -17,7 +17,8 @@ from typing import Any, Callable, Dict, Generator, List, NamedTuple, Optional
from kitty.constants import is_macos
from kitty.fast_data_types import (
close_tty, normal_tty, open_tty, parse_input_from_terminal, raw_tty
FILE_TRANSFER_CODE, close_tty, normal_tty, open_tty,
parse_input_from_terminal, raw_tty
)
from kitty.key_encoding import (
ALT, CTRL, PRESS, RELEASE, REPEAT, SHIFT, backspace_key, decode_key_event,
@@ -308,15 +309,18 @@ class Loop:
pass
def _on_osc(self, osc: str) -> None:
m = re.match(r'(\d+);', osc)
if m is not None:
code = int(m.group(1))
rest = osc[m.end():]
parts = osc.split(';', 1)
if len(parts) == 2 and parts[0].isdigit():
code = int(parts[0])
rest = parts[1]
if code == 52:
where, rest = rest.partition(';')[::2]
where, rest = rest.split(';', 1)
from_primary = 'p' in where
from base64 import standard_b64decode
self.handler.on_clipboard_response(standard_b64decode(rest).decode('utf-8'), from_primary)
elif code == FILE_TRANSFER_CODE:
from kitty.file_transmission import FileTransmissionCommand
self.handler.on_file_transfer_response(FileTransmissionCommand.deserialize(rest))
def _on_apc(self, apc: str) -> None:
if apc.startswith('G'):