diff --git a/contact/__main__.py b/contact/__main__.py index 073d18b..5749171 100644 --- a/contact/__main__.py +++ b/contact/__main__.py @@ -33,6 +33,8 @@ from contact.ui.splash import draw_splash from contact.utilities.arg_parser import setup_parser from contact.utilities.db_handler import init_nodedb, load_messages_from_db from contact.utilities.input_handlers import get_list_input +from contact.utilities.i18n import t +from contact.ui.dialog import dialog from contact.utilities.interfaces import initialize_interface from contact.utilities.utils import get_channels, get_nodeNum, get_node_list from contact.utilities.singleton import ui_state, interface_state, app_state @@ -85,6 +87,7 @@ def main(stdscr: curses.window) -> None: output_capture = io.StringIO() try: setup_colors() + ensure_min_rows(stdscr) draw_splash(stdscr) args = setup_parser().parse_args() @@ -120,6 +123,24 @@ def main(stdscr: curses.window) -> None: raise +def ensure_min_rows(stdscr: curses.window, min_rows: int = 11) -> None: + while True: + rows, _ = stdscr.getmaxyx() + if rows >= min_rows: + return + dialog( + t("ui.dialog.resize_title", default="Resize Terminal"), + t( + "ui.dialog.resize_body", + default="Please resize the terminal to at least {rows} rows.", + rows=min_rows, + ), + ) + curses.update_lines_cols() + stdscr.clear() + stdscr.refresh() + + def start() -> None: """Entry point for the application.""" diff --git a/contact/localisations/en.ini b/contact/localisations/en.ini index cfc0eff..bc970c9 100644 --- a/contact/localisations/en.ini +++ b/contact/localisations/en.ini @@ -86,6 +86,8 @@ confirm.remove_favorite, "Remove {name} from Favorites?", "" confirm.set_ignored, "Set {name} as Ignored?", "" confirm.remove_ignored, "Remove {name} from Ignored?", "" confirm.region_unset, "Your region is UNSET. Set it now?", "" +dialog.resize_title, "Resize Terminal", "" +dialog.resize_body, "Please resize the terminal to at least {rows} rows.", "" [User Settings] user, "User" diff --git a/contact/localisations/ru.ini b/contact/localisations/ru.ini index f914bf9..83f0584 100644 --- a/contact/localisations/ru.ini +++ b/contact/localisations/ru.ini @@ -86,6 +86,8 @@ confirm.remove_favorite, "Удалить {name} из избранного?", "" confirm.set_ignored, "Игнорировать {name}?", "" confirm.remove_ignored, "Убрать {name} из игнорируемых?", "" confirm.region_unset, "Ваш регион НЕ ЗАДАН. Установить сейчас?", "" +dialog.resize_title, "Увеличьте окно", "" +dialog.resize_body, "Пожалуйста, увеличьте окно до {rows} строк.", "" [User Settings] user, "Пользователь" diff --git a/contact/settings.py b/contact/settings.py index 3e845ef..20247ae 100644 --- a/contact/settings.py +++ b/contact/settings.py @@ -8,6 +8,8 @@ import traceback import contact.ui.default_config as config from contact.utilities.input_handlers import get_list_input from contact.utilities.i18n import t +from contact.ui.dialog import dialog +from contact.utilities.i18n import t from contact.ui.colors import setup_colors from contact.ui.splash import draw_splash from contact.ui.control_ui import set_region, settings_menu @@ -20,6 +22,7 @@ def main(stdscr: curses.window) -> None: try: with contextlib.redirect_stdout(output_capture), contextlib.redirect_stderr(output_capture): setup_colors() + ensure_min_rows(stdscr) draw_splash(stdscr) curses.curs_set(0) stdscr.keypad(True) @@ -50,6 +53,24 @@ def main(stdscr: curses.window) -> None: raise +def ensure_min_rows(stdscr: curses.window, min_rows: int = 11) -> None: + while True: + rows, _ = stdscr.getmaxyx() + if rows >= min_rows: + return + dialog( + t("ui.dialog.resize_title", default="Resize Terminal"), + t( + "ui.dialog.resize_body", + default="Please resize the terminal to at least {rows} rows.", + rows=min_rows, + ), + ) + curses.update_lines_cols() + stdscr.clear() + stdscr.refresh() + + logging.basicConfig( # Run `tail -f client.log` in another terminal to view live filename=config.log_file_path, level=logging.WARNING, # DEBUG, INFO, WARNING, ERROR, CRITICAL)