mirror of
https://github.com/avitoras/telegram-tui.git
synced 2025-07-27 19:26:10 +00:00
UNSTABLE | Messages work
This commit is contained in:
parent
74efe83f07
commit
6d11fee925
@ -201,20 +201,27 @@ class TelegramTUI:
|
|||||||
])
|
])
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Создаем левую панель (чаты)
|
||||||
|
self.left_panel = urwid.LineBox(
|
||||||
|
urwid.Pile([
|
||||||
|
('pack', urwid.Text(('help', "Tab - переключение фокуса, ↑↓ - выбор чата, Enter - открыть чат, Esc - назад, / - поиск, [] - папки"), align='center')),
|
||||||
|
('pack', self.search_edit),
|
||||||
|
self.chat_list
|
||||||
|
])
|
||||||
|
)
|
||||||
|
|
||||||
|
# Создаем правую панель (сообщения)
|
||||||
|
self.right_panel = urwid.LineBox(
|
||||||
|
urwid.Pile([
|
||||||
|
self.message_list,
|
||||||
|
('pack', self.input_edit)
|
||||||
|
])
|
||||||
|
)
|
||||||
|
|
||||||
|
# Создаем основной виджет чатов
|
||||||
self.chat_widget = urwid.Columns([
|
self.chat_widget = urwid.Columns([
|
||||||
('weight', 30, urwid.LineBox(
|
('weight', 30, self.left_panel),
|
||||||
urwid.Pile([
|
('weight', 70, self.right_panel)
|
||||||
('pack', urwid.Text(('help', "Tab - переключение фокуса, ↑↓ - выбор чата, Enter - открыть чат, Esc - назад, / - поиск, [] - папки"), align='center')),
|
|
||||||
('pack', self.search_edit),
|
|
||||||
self.chat_list
|
|
||||||
])
|
|
||||||
)),
|
|
||||||
('weight', 70, urwid.LineBox(
|
|
||||||
urwid.Pile([
|
|
||||||
self.message_list,
|
|
||||||
('pack', self.input_edit)
|
|
||||||
])
|
|
||||||
))
|
|
||||||
])
|
])
|
||||||
|
|
||||||
# Создаем основной виджет
|
# Создаем основной виджет
|
||||||
@ -225,7 +232,7 @@ class TelegramTUI:
|
|||||||
'header'
|
'header'
|
||||||
),
|
),
|
||||||
footer=urwid.AttrMap(
|
footer=urwid.AttrMap(
|
||||||
urwid.Text(' Q: Выход | Tab: Переключение фокуса | Enter: Выбор', align='center'),
|
urwid.Text(' Q: Выход | Tab: Переключение фокуса | Enter: Выбор/Отправка | Esc: Назад', align='center'),
|
||||||
'footer'
|
'footer'
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@ -235,7 +242,8 @@ class TelegramTUI:
|
|||||||
self.folders = []
|
self.folders = []
|
||||||
self.chats = []
|
self.chats = []
|
||||||
self.selected_chat_index = 0
|
self.selected_chat_index = 0
|
||||||
self.focused_element = "chat_list" # chat_list, search
|
self.focused_element = "chat_list" # chat_list, search, messages, input
|
||||||
|
self.current_chat_id = None
|
||||||
|
|
||||||
def switch_screen(self, screen_name: str):
|
def switch_screen(self, screen_name: str):
|
||||||
"""Переключение между экранами"""
|
"""Переключение между экранами"""
|
||||||
@ -426,24 +434,29 @@ class TelegramTUI:
|
|||||||
async def handle_chat_input(self, key):
|
async def handle_chat_input(self, key):
|
||||||
"""Обработка ввода в экране чатов"""
|
"""Обработка ввода в экране чатов"""
|
||||||
if key == 'tab':
|
if key == 'tab':
|
||||||
# Переключаем фокус
|
# Переключаем фокус циклически
|
||||||
if self.focused_element == "chat_list":
|
if self.focused_element == "chat_list":
|
||||||
self.focused_element = "search"
|
self.focused_element = "search"
|
||||||
self.chat_widget.focus_position = 0
|
self.left_panel.original_widget.focus_position = 1 # Фокус на поиск
|
||||||
pile = self.chat_widget.widget_list[0].original_widget # Получаем Pile из LineBox
|
elif self.focused_element == "search":
|
||||||
pile.focus_position = 1 # Фокус на поиск
|
if self.current_chat_id:
|
||||||
else:
|
self.focused_element = "input"
|
||||||
|
self.chat_widget.focus_position = 1 # Правая панель
|
||||||
|
self.right_panel.original_widget.focus_position = 1 # Фокус на ввод
|
||||||
|
else:
|
||||||
|
self.focused_element = "chat_list"
|
||||||
|
self.chat_widget.focus_position = 0 # Левая панель
|
||||||
|
self.left_panel.original_widget.focus_position = 2 # Фокус на список чатов
|
||||||
|
elif self.focused_element == "input":
|
||||||
self.focused_element = "chat_list"
|
self.focused_element = "chat_list"
|
||||||
self.chat_widget.focus_position = 0
|
self.chat_widget.focus_position = 0 # Левая панель
|
||||||
pile = self.chat_widget.widget_list[0].original_widget # Получаем Pile из LineBox
|
self.left_panel.original_widget.focus_position = 2 # Фокус на список чатов
|
||||||
pile.focus_position = 2 # Фокус на список чатов
|
|
||||||
|
|
||||||
elif key == '/':
|
elif key == '/':
|
||||||
# Фокус на поиск
|
# Фокус на поиск
|
||||||
self.focused_element = "search"
|
self.focused_element = "search"
|
||||||
self.chat_widget.focus_position = 0
|
self.chat_widget.focus_position = 0
|
||||||
pile = self.chat_widget.widget_list[0].original_widget # Получаем Pile из LineBox
|
self.left_panel.original_widget.focus_position = 1
|
||||||
pile.focus_position = 1
|
|
||||||
|
|
||||||
elif key == '[':
|
elif key == '[':
|
||||||
# Переход в предыдущую папку
|
# Переход в предыдущую папку
|
||||||
@ -473,17 +486,38 @@ class TelegramTUI:
|
|||||||
self.chat_list.set_focus(self.selected_chat_index)
|
self.chat_list.set_focus(self.selected_chat_index)
|
||||||
self.update_selected_chat()
|
self.update_selected_chat()
|
||||||
|
|
||||||
elif key == 'enter' and self.focused_element == "chat_list":
|
elif key == 'enter':
|
||||||
# Открываем выбранный чат
|
if self.focused_element == "chat_list" and self.chat_walker:
|
||||||
if self.chat_walker:
|
# Открываем выбранный чат
|
||||||
focused = self.chat_walker[self.selected_chat_index]
|
focused = self.chat_walker[self.selected_chat_index]
|
||||||
|
self.current_chat_id = focused.chat_id
|
||||||
await self.update_message_list(focused.chat_id)
|
await self.update_message_list(focused.chat_id)
|
||||||
self.chat_widget.focus_position = 1 # Переключаемся на сообщения
|
self.focused_element = "input"
|
||||||
|
self.chat_widget.focus_position = 1 # Правая панель
|
||||||
|
self.right_panel.original_widget.focus_position = 1 # Фокус на ввод
|
||||||
|
|
||||||
|
elif self.focused_element == "input" and self.current_chat_id:
|
||||||
|
# Отправляем сообщение
|
||||||
|
message = self.input_edit.get_edit_text()
|
||||||
|
if message.strip():
|
||||||
|
try:
|
||||||
|
await self.telegram_client.send_message(self.current_chat_id, message)
|
||||||
|
self.input_edit.set_edit_text("") # Очищаем поле ввода
|
||||||
|
await self.update_message_list(self.current_chat_id) # Обновляем список сообщений
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Ошибка отправки сообщения: {e}")
|
||||||
|
|
||||||
elif key == 'esc':
|
elif key == 'esc':
|
||||||
# Возвращаемся к списку чатов
|
if self.focused_element in ("input", "messages"):
|
||||||
self.chat_widget.focus_position = 0
|
# Возвращаемся к списку чатов
|
||||||
self.focused_element = "chat_list"
|
self.focused_element = "chat_list"
|
||||||
|
self.chat_widget.focus_position = 0 # Левая панель
|
||||||
|
self.left_panel.original_widget.focus_position = 2 # Фокус на список чатов
|
||||||
|
self.current_chat_id = None # Сбрасываем текущий чат
|
||||||
|
elif self.focused_element == "search":
|
||||||
|
# Возвращаемся к списку чатов из поиска
|
||||||
|
self.focused_element = "chat_list"
|
||||||
|
self.left_panel.original_widget.focus_position = 2
|
||||||
|
|
||||||
def unhandled_input(self, key):
|
def unhandled_input(self, key):
|
||||||
"""Обработка необработанных нажатий клавиш"""
|
"""Обработка необработанных нажатий клавиш"""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user