mirror of
https://github.com/Benexl/FastAnime.git
synced 2025-12-27 05:03:41 -08:00
108 lines
3.1 KiB
Python
108 lines
3.1 KiB
Python
from abc import ABC, abstractmethod
|
|
from typing import List, Optional
|
|
|
|
|
|
class BaseSelector(ABC):
|
|
"""
|
|
Abstract Base Class for user-facing selectors (FZF, Rofi, etc.).
|
|
Defines the common interface for all selection operations.
|
|
"""
|
|
|
|
@abstractmethod
|
|
def choose(
|
|
self,
|
|
prompt: str,
|
|
choices: List[str],
|
|
*,
|
|
preview: Optional[str] = None,
|
|
header: Optional[str] = None,
|
|
) -> str | None:
|
|
"""
|
|
Prompts the user to choose one item from a list.
|
|
|
|
Args:
|
|
prompt: The message to display to the user.
|
|
choices: A list of strings for the user to choose from.
|
|
preview: An optional command or string for a preview window.
|
|
header: An optional header to display above the choices.
|
|
|
|
Returns:
|
|
The string of the chosen item.
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def choose_multiple(
|
|
self,
|
|
prompt: str,
|
|
choices: List[str],
|
|
preview: Optional[str] = None,
|
|
) -> List[str]:
|
|
"""
|
|
Prompts the user to choose multiple items from a list.
|
|
Default implementation falls back to single selection.
|
|
|
|
Args:
|
|
prompt: The message to display to the user.
|
|
choices: A list of strings for the user to choose from.
|
|
preview: An optional command or string for a preview window.
|
|
header: An optional header to display above the choices.
|
|
|
|
Returns:
|
|
A list of the chosen items.
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def confirm(self, prompt: str, *, default: bool = False) -> bool:
|
|
"""
|
|
Asks the user a yes/no question.
|
|
|
|
Args:
|
|
prompt: The question to ask the user.
|
|
default: The default return value if the user just presses Enter.
|
|
|
|
Returns:
|
|
True for 'yes', False for 'no'.
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def ask(self, prompt: str, *, default: Optional[str] = None) -> str | None:
|
|
"""
|
|
Asks the user for free-form text input.
|
|
|
|
Args:
|
|
prompt: The question to ask the user.
|
|
default: An optional default value.
|
|
|
|
Returns:
|
|
The string entered by the user.
|
|
"""
|
|
pass
|
|
|
|
def search(
|
|
self,
|
|
prompt: str,
|
|
search_command: str,
|
|
*,
|
|
preview: Optional[str] = None,
|
|
header: Optional[str] = None,
|
|
) -> str | None:
|
|
"""
|
|
Provides dynamic search functionality that reloads results based on user input.
|
|
|
|
Args:
|
|
prompt: The message to display to the user.
|
|
search_command: The command to execute for searching/reloading results.
|
|
preview: An optional command or string for a preview window.
|
|
header: An optional header to display above the choices.
|
|
|
|
Returns:
|
|
The string of the chosen item.
|
|
|
|
Raises:
|
|
NotImplementedError: If the selector doesn't support dynamic search.
|
|
"""
|
|
raise NotImplementedError("Dynamic search is not supported by this selector")
|