def __init__(self, ip: str, name: str, port: int, timeout: int, queryInterval: int, root: py_cui.PyCUI, row: int = 0, col: int = 0, col_span: int = 1, row_span: int = 1, log_fn=lambda *args, **kwargs: print(*args, **kwargs)) -> None: TCPQueryData.__init__(self, ip, name, port, timeout, queryInterval) self.up = None self.log_fn = log_fn self.root = root self.row = row self.column = col self.col_span = col_span self.row_span = row_span self.block_label_status_name = root.add_block_label( self.name, self.row, self.column, column_span=self.col_span, row_span=self.row_span) self.label_status = root.add_label( self.status_unknown(), self.row, self.column, column_span=self.col_span, row_span=self.row_span) self.label_status.add_text_color_rule( '\\+', py_cui.GREEN_ON_BLACK, 'contains') self.label_status.add_text_color_rule( 'x', py_cui.RED_ON_BLACK, 'contains')
def is_user_root(window: PyCUI) -> bool: if geteuid() == 0: LOGGER.write("info", "User is root") return True window.show_error_popup("Not root :(", "You have to be root or use sudo.") LOGGER.write("warning", "User is not root") return False
def create_py_cui_master(self) -> PyCUI: master: PyCUI = PyCUI(10, 10) master.toggle_unicode_borders() master.set_title("RecoverPy 1.5.1") master.run_on_exit(exit) return master
def __init__(self, ui: py_cui.PyCUI, publisher): self.ui = ui self.root = ui.create_new_widget_set(3, 3) self.publisher = publisher self.id = publisher['id'] self.info = self.root.add_text_block( 'Publisher 🕮', 0, 0, initial_text=publisher['description'], column_span=3) self.games = self.root.add_scroll_menu('Games 🎲', 1, 0, row_span=2, column_span=3) self.games.add_key_command(py_cui.keys.KEY_ENTER, self.select_game) db = connect() games = [] for game_id, _ in db.get_by_posting('game_publisher', 'publisher', self.id): game = db.get_by_key('games', game_id) games.append((game, game_rating(game, db))) games = sorted(games, key=lambda x: x[1], reverse=True) for game, rating in games: item = ListItem(game, f"({rating:.1f}) - {game['name']}") self.games.add_item(item)
def __init__(self, ui: py_cui.PyCUI): self.ui = ui self.root = ui.create_new_widget_set(3, 3) self.menu = self.root.add_scroll_menu('Operation Selection', 1, 1) self.menu.add_item_list( ['1. Search Games', '2. Search Publishers', '3. Fill Database']) self.menu.add_key_command(py_cui.keys.KEY_ENTER, self.select_operation)
def __init__(self, ui: py_cui.PyCUI): self.ui = ui self.root = ui.create_new_widget_set(3, 3) self.search_bar = self.root.add_text_box('Search 🔍', 0, 1) self.results = self.root.add_scroll_menu('Results 🕮', 1, 1, row_span=2) self.search_bar.add_key_command(py_cui.keys.KEY_ENTER, self.search) self.results.add_key_command(py_cui.keys.KEY_ENTER, self.select_publisher)
def __init__(self, ui: py_cui.PyCUI): self.ui = ui self.root = ui.create_new_widget_set(3, 3) self.queue = queue.Queue() self.thread = None self.msg = '' self.progress_notifier = ProgressNotifier(self.on_message, self.on_start_progress, self.on_progress, self.on_done) self.ui.set_on_draw_update_func(self.update)
def __init__(self, ui: py_cui.PyCUI, mechanics=None, categories=None): self.categories = categories or [] self.mechanics = mechanics or [] self.reversed = False self.ui = ui self.root = ui.create_new_widget_set(3, 3) self.search_box = self.root.add_text_box('Search 🔍', 0, 0) self.result_list = self.root.add_scroll_menu('Results 🕮', 2, 0, column_span=2) self.result_list.set_help_text('Press "r" to reverse the order') self.mechanics_search = self.root.add_text_box('Mechanics 🔍', 0, 1) self.mechanics_result = self.root.add_checkbox_menu( 'Mechanics ⚙️', 0, 2) self.categories_search = self.root.add_text_box('Categories 🔍', 1, 2) self.categories_result = self.root.add_checkbox_menu( 'Categories 📚', 2, 2) self.search_box.add_key_command(py_cui.keys.KEY_ENTER, self.search) self.mechanics_search.add_key_command(py_cui.keys.KEY_ENTER, self.search_mechanics) self.categories_search.add_key_command(py_cui.keys.KEY_ENTER, self.search_categories) self.categories_result.add_key_command(py_cui.keys.KEY_ENTER, self.select_category) self.mechanics_result.add_key_command(py_cui.keys.KEY_ENTER, self.select_mechanic) self.result_list.add_key_command(py_cui.keys.KEY_ENTER, self.select_result) self.result_list.add_key_command(py_cui.keys.KEY_R_LOWER, self.reverse) self.current_filter = self.root.add_block_label('Current Filters 📝', 1, 0, column_span=2, center=False) self.update_filters_text()
def __init__(self, ui: py_cui.PyCUI, expansion): self.ui = ui self.root = ui.create_new_widget_set(3, 3) self.expansion = expansion self.id = expansion['id'] self.info = self.root.add_text_block( f"Expansion (Year: {self.expansion['year']}) 🕮", 0, 0, initial_text=expansion['description'], row_span=3, ) self.comments = self.root.add_text_block('Comments 💬', 0, 1, row_span=3, column_span=2) db = connect() text = '' total = 0 count = 0 for comment in db.get_by_posting('comments', 'expansion', self.id): if comment['rating'] != None: text += f"{comment['rating']}/10 - " total += comment['rating'] count += 1 text += comment['text'] + '\n\n' text = f'Average Rating: {total/(count or 1)}\n\n{text}' self.comments.set_text(text)
def __init__(self, root: py_cui.PyCUI): super().__init__(root) self.play_btn.command = self._play_cb_space_bar self.stop_btn.command = self._on_stop_click self.reload_btn.command = self._on_reload_click self.next_btn.command = self._on_next_track_click # self.prev_btn.command = lambda a=None: None self.clear_target = (self.audio_list, self.meta_list, self.info_box) # -- UI setup add_callback_patch(self.audio_list, self._on_file_click) add_callback_patch(self.volume_slider, self.volume_callback, keypress_only=True) root.run_on_exit(self._tui_destroy_callback) # -- Key binds self.audio_list.add_key_command(py_cui.keys.KEY_ENTER, self._play_cb_enter) self.volume_slider.add_key_command(py_cui.keys.KEY_SPACE, self._play_cb_space_bar) for widget in ( self.audio_list, self.info_box, self.meta_list, ): widget.add_key_command(py_cui.keys.KEY_SPACE, self._play_cb_space_bar) widget.add_key_command(py_cui.keys.KEY_LEFT_ARROW, self._adjust_playback_left) widget.add_key_command(py_cui.keys.KEY_RIGHT_ARROW, self._adjust_playback_right) # -- Color rules self.info_box.add_text_color_rule("ERR:", py_cui.WHITE_ON_RED, "startswith") self.audio_list.add_text_color_rule(self.symbols["play"], py_cui.WHITE_ON_YELLOW, "contains") self.audio_list.add_text_color_rule(self.symbols["pause"], py_cui.WHITE_ON_YELLOW, "contains") self.audio_list.add_text_color_rule(self.symbols["stop"], py_cui.WHITE_ON_YELLOW, "contains") self.audio_list.add_text_color_rule(r"DIR", py_cui.CYAN_ON_BLACK, "startswith", include_whitespace=False) # -- State self.player_state: Type[PlayerStates] = AudioUnloaded self.initial_volume_position = self.volume_slider.get_slider_value() self.global_volume_multiplier = 0.4 self._digit: int = 0 # -- Path and stream instance self.stream = StreamManager(self.show_progress_wrapper(), self.play_next) self.volume_callback() self.path_wrapper = PathWrapper() self.current_playing_file: Union[pathlib.Path, None] = None # -- Generator instance and states self._current_play_generator = None self._current_name_cycler = None self._on_reload_click()