mirror of
https://github.com/avitoras/telegram-tui.git
synced 2025-07-27 19:26:10 +00:00
UNSTABLE | idk
This commit is contained in:
parent
30fd897e75
commit
b43e198c99
@ -2,10 +2,13 @@
|
|||||||
# Их использование крайне нежелательно!
|
# Их использование крайне нежелательно!
|
||||||
# Получите свои API-ключи приложения на https://my.telegram.org/apps и вставьте их ниже.
|
# Получите свои API-ключи приложения на https://my.telegram.org/apps и вставьте их ниже.
|
||||||
# Спасибо за понимание!
|
# Спасибо за понимание!
|
||||||
API_ID=2040
|
API_ID=your_api_id
|
||||||
API_HASH=b18441a1ff607e10a989891a5462e627
|
API_HASH=your_api_hash
|
||||||
|
|
||||||
# Настройки приложения
|
# Настройки приложения
|
||||||
APP_NAME=Telegram TUI
|
APP_NAME=Telegram TUI
|
||||||
APP_VERSION=1.0
|
APP_VERSION=1.0
|
||||||
DEVICE_MODEL=Desktop
|
DEVICE_MODEL=Desktop
|
||||||
|
|
||||||
|
# Interface customization
|
||||||
|
WALLPAPER=хрущевки # ASCII wallpaper name from ascii/ directory (without .txt extension)
|
||||||
|
BIN
ascii/.DS_Store
vendored
Normal file
BIN
ascii/.DS_Store
vendored
Normal file
Binary file not shown.
24
ascii/default.txt
Normal file
24
ascii/default.txt
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
||||||
|
░ ▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄ ▄ ▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄ ░
|
||||||
|
░ ▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌▐░▌ ▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌ ░
|
||||||
|
░ ▐░█▀▀▀▀▀▀▀▀▀ ▀▀▀▀█░█▀▀▀▀ ▐░▌ ▐░█▀▀▀▀▀▀▀▀▀ ▐░█▀▀▀▀▀▀▀█░▌▐░█▀▀▀▀▀▀▀█░▌ ░
|
||||||
|
░ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌▐░▌ ▐░▌ ░
|
||||||
|
░ ▐░█▄▄▄▄▄▄▄▄▄ ▐░▌ ▐░▌ ▐░▌ ▐░█▄▄▄▄▄▄▄█░▌▐░█▄▄▄▄▄▄▄█░▌ ░
|
||||||
|
░ ▐░░░░░░░░░░░▌ ▐░▌ ▐░▌ ▐░▌ ▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌ ░
|
||||||
|
░ ▐░█▀▀▀▀▀▀▀▀▀ ▐░▌ ▐░▌ ▐░▌ ▐░█▀▀▀▀▀▀▀█░▌▐░█▀▀▀▀█░█▀▀ ░
|
||||||
|
░ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌▐░▌ ▐░▌ ░
|
||||||
|
░ ▐░▌ ▄▄▄▄█░█▄▄▄▄ ▐░█▄▄▄▄▄▄▄▄▄ ▐░█▄▄▄▄▄▄▄▄▄ ▐░▌ ▐░▌▐░▌ ▐░▌ ░
|
||||||
|
░ ▐░▌ ▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌▐░▌ ▐░▌▐░▌ ▐░▌ ░
|
||||||
|
░ ▀ ▀▀▀▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀▀ ▀ ▀ ▀ ▀ ░
|
||||||
|
░ ░
|
||||||
|
░ ░
|
||||||
|
░ ░
|
||||||
|
░ ░
|
||||||
|
░ ░
|
||||||
|
░ ░
|
||||||
|
░ ░
|
||||||
|
░ ░
|
||||||
|
░ ░
|
||||||
|
░ ░
|
||||||
|
░ ░
|
||||||
|
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
92
ascii/panelki.txt
Normal file
92
ascii/panelki.txt
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
#########################################################+##########################################.############################-###########
|
||||||
|
###########################################################################################################################+##########-###+##
|
||||||
|
################################################################.##########################.#################################################
|
||||||
|
###########+##########################################+######################.################+.#################+###########################
|
||||||
|
######################################################################################################################.+#####.-##############
|
||||||
|
############################################.################################################################################################
|
||||||
|
############+#######################################################+-#######################+####################.##########################
|
||||||
|
#######################################+####################################+########.#######################################################
|
||||||
|
#########################################################################################################################.##############.####
|
||||||
|
##############################.###############+##############################################################################################
|
||||||
|
#####################..################-#######################################+.#########################+.##############+##################
|
||||||
|
##############################################################.#####################################################+########################
|
||||||
|
###+############################################################################################-############################################
|
||||||
|
########+#####################################-.####################################################+########################################
|
||||||
|
##########################-.#######+##############################################....#######################################################
|
||||||
|
####################.##############################.-###########################+..##########################################################
|
||||||
|
######+######################+##########+-######################################..-############################-######-+#####################
|
||||||
|
#####################+######################################+-##################...##########################################################
|
||||||
|
+#####+#######+.-#################++##############+#############################+...-####+######-##############################.#############
|
||||||
|
+++++++++++++############################################-##########+######.+#####+.....-####################################################
|
||||||
|
++++++++++++++++++++++++++#########++########################################################################################################
|
||||||
|
+++++++++..++++++++++++++++++++++++++#########++#####################################################################+#######################
|
||||||
|
+++++++++++++++++++++++++++++++++++++++++++++++++###++..+#++###########################################.#####################################
|
||||||
|
++++--+++++++++++++++++++++++++++++++++++--+++++++++++++++++###++.####++################.+#################+#############################--##
|
||||||
|
+++++++++++.-++++++++++.-++++++++++++++++++++++++++++++++++++++++++++++++##+++##############################################--###############
|
||||||
|
+++++++++++++++++++++++++++++++++++++++++++.+++++++.+++++++.+++++++++++++++++++.+++++#++++####+######################+#######################
|
||||||
|
++++++-+++++++++.-++++++++++++.-+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-####+#####################+########+###
|
||||||
|
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.-+#####+##################+###
|
||||||
|
++++++++++++++++++++++++++++++++++++++++++++++++++++++..-+++++.+++++++++++++++++++++++++++.++++++++++++++++++++++++++++++.++++###++##########
|
||||||
|
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++####
|
||||||
|
##++##++++--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-++++++++++++++++
|
||||||
|
------#+++##+++++++++---++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.++++++++++++++++
|
||||||
|
-------.----+#++++#++++++++---+++--+++++++++++++++++++++++++..++++--+++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++++-+++
|
||||||
|
-------------------+++++++#+++++++++++----+++-+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
----------------------------++++-+##+++-------+#+#+--+++#+--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++
|
||||||
|
------------.----------------------+++++#+##++#######++++---------++---+++++++++++++++++++++++++++++++++++++-++++++.+++++++++++++++++++++++++
|
||||||
|
-.-----.---------------------------++---++#+++++++++++--++#+-----------------++++--++++--+++++++++++++++++++-+++++++++++-+++++++-++++++++++++
|
||||||
|
.--...........---------------------+#+---++++++++###++-...---+------+++###---------------+++..-+++---+++++++++++++++++++++++++++-++++++++++++
|
||||||
|
--+--.....................---------+#----++++++++###++----########+++++++--+#++----------------------+++---+++--+++++++++++++++++++++++-.++++
|
||||||
|
+++++---...........................+#--++++++#######+++++++++++#####+++++-+---++++-------------------------------+++---+++---++++++++++++++++
|
||||||
|
+-......-+--............-------#######+++++++#+++++####++++++++#++++.++++....-+----+++-----------------.---------------------+++---+++---++++
|
||||||
|
+-........--++++++######+#+++++#####++###++++#+++#.#+++++#...++#++...++++--....--+-+-.--++-----------------------------------------------++--
|
||||||
|
#+---+####++++++######+++###+++#+++#+++++++++#++##.#+++++#...++#++--##+++++-...+..-..-----++++---------------------------------.-------------
|
||||||
|
+++++###++++++++#+++#..++++++...+++#+++++++++#++##.++++++++++++#+++++++###+.......-....---+--------------------------------------------------
|
||||||
|
+++++###.........++#...++++++...+++#########+#++++++++++++###############++.-....-.....-...--++....--.---------------------------------------
|
||||||
|
....+##..........+++.##++++++++++++###+++++++#######################.+###++...................-....................----..--------------------
|
||||||
|
....+##..###+++++++++++++#+++++#################...#######...#######.+###+......-..+..........-................................----..--------
|
||||||
|
++++++++++++++++#+##############################...#######...############+...............-....-...........................................---
|
||||||
|
+++++##########-####-..#####+...####################################++++#+................+----..............................................
|
||||||
|
##--..+..........###...######-..######################+-++++-..+.............................+-..............................................
|
||||||
|
................+###.####################+---#-...-......-.....+.....+......................-+-..............................................
|
||||||
|
..---.+.+###################---...--.........+.....#.....+.....+....-#...............-.....--+-..............................................
|
||||||
|
##############+.--...........+...............+.....#.....#.....+.....................+--+-.-++-..............................................
|
||||||
|
#+..........++-.............-#........+###++.+.................++++-----...............-..-+#+-..............................................
|
||||||
|
##..+##..-#-................-#......+#######.+.....###+----...-#..+#.+........+........-..++++-..............................................
|
||||||
|
....+##..-#-...++..................-..+++----#--.-+#.--..#.....#.....+...........-...---++++++-..............................................
|
||||||
|
..+++....................#++-----.-+.........#.-...#..-..#...-.#....++..............-+---+++#+-...............+..............................
|
||||||
|
............+++-+----..-.--.-.....--.........#.-.-.+..-..++--..#.......--.........-.-..-++++++--.............................................
|
||||||
|
+-----++.........-.+...-.--.-.....-+-+######-#.......---.-+++--###++++++-........--....-++++++-.......-......................................
|
||||||
|
.................-.+..--.--.----..-+##++++++-#++--+++++++++#+++#++##.+++-..............+++++++......-........................................
|
||||||
|
.........-.-..--+-..-....--...-+++##+++++++++#++.-.#+++++#...++#++##.+++-.......---+---++++++-......-..+++++#+++.............+-..............
|
||||||
|
..-----.......--+-+##++++#++++##+++++++++++++#++...#+++++#...++#++++++++-.........-.--+++++++.......-..+++###-.--......-++...................
|
||||||
|
--++-+##++++++++#++##..++++++...+++#+++++++++#+++#+++++++++++++#+++++++##-.....-..-....+++#+..-+#+++##+++######-++++.++#++---........+....-..
|
||||||
|
++++++#+.........++#...++++++...+++#########+#++++++++++++##############+...-...-+-....++++-..++++#+#.++++++++......##+--+##-...++#++-.-.....
|
||||||
|
..##.............+++.#+++++++++++++######++++##############+######...+##+......----.+..++++...-++.++###+++++++++#...........+--++##++-++.....
|
||||||
|
..##.....+++++++#++++++++#+++++#################...########..#####...###+......--.-+++++++....-######+########......++++-...........--.##+#++
|
||||||
|
++++++++++++#################+..################...########.-###########+......+..-++++++-....-##.+##.+#######..............+++........#...-.
|
||||||
|
###############.+###...#####+...###################################+-----......+..++-..++.....-###+-++--------..-#++..-.........-..-++-#-....
|
||||||
|
##...............###...######---######################+---.....+...-.-......--+-.+++-..+..........-.-.-.................+#++-.+........#...#+
|
||||||
|
................+###+####################+---#....--.....+.....+.....+.........--++++--.............--....-----...............--#++---.#.....
|
||||||
|
..+--+#+####################-................+.....#.....+.....+....++.........+.-+++#-........---+-+.+--...........++....+............##+++-
|
||||||
|
#############+.--+-.........-#-..............+.....#.....#-....+...............+..+++#..........-.--++#......---+...........+..........#.....
|
||||||
|
##.-+..-............-....-+..........-+++###.+.................++++-------+--.-+.-++-.........+###++###+++++++...-...-+-............-..#--...
|
||||||
|
++-----.................................###+.+.....--++-------.#-.-+.+---....-++++++-.........-++.+++#++++++++..............--+........#...-.
|
||||||
|
------....................................-++#.-...#.--..#...-.#-....+.......-++++++..........-++##++##++#####...+-.............-...--.+.....
|
||||||
|
------.......................................---...#.--..#...-.#....-+...-...++#..+...........+##-####+#######..........-+--..-........#...-.
|
||||||
|
----...............................................+.--..----..#.......++-..-++#..-...........+##-#############++.............--+--....#.....
|
||||||
|
---...............................................+..--..-+++++#+++++++++---++++-+............-...-.-#+.............###++.+............#+-.-.
|
||||||
|
----..............................................-++++++++#+++#++...++++-.-+++#+.................-.--#-......-.......-..+-.+++++......#+....
|
||||||
|
------............................................-##++++#...++#++...++++--+++++...-..........-++++..............-.+............+.-###+##-...
|
||||||
|
----------.-........................................-+++-.+-+++#+++++++++-+++++#.............-+----.................................-..#+..#+
|
||||||
|
--------------.............-.--............................-+++#+++++++##+++++++.........-++--..+......................................#+....
|
||||||
|
--------------...........---------..........................-#######+####+++#+-........-+---............................................-....
|
||||||
|
----------------......-------------..-..------------........-#####...+###++++-........+----..................................................
|
||||||
|
-----------------.-.-------------------------------..........+####...####++++.......++-------................................................
|
||||||
|
-------------------------------------------------...........-+###########+++.......-+--------..............................................-.
|
||||||
|
------......-------------------------........................+#####+---..+#........+----------............................................-+.
|
||||||
|
---------....---------------------.-...................--.---+.+...-.+...++.......++-------.----..........-.----.............................
|
||||||
|
----------.....-----------------.....................--------+.+.....+...+.....++---------............-----------....................-------.
|
||||||
|
----------..-.......------------..---..............----------++#.....+........+---------........-------------.----................---------..
|
||||||
|
-------------.......--------------------.....----------------+.+.............+-----------.......------------.------..-.-....-----------------
|
||||||
|
-----------------..-----------------------------------------+-.#-------......+---------------------------------------------------------------
|
@ -587,13 +587,53 @@ class InputEdit(urwid.Edit):
|
|||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
class ClockWidget(urwid.Text):
|
||||||
|
"""Виджет часов"""
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__("")
|
||||||
|
self.update_time()
|
||||||
|
|
||||||
|
def update_time(self):
|
||||||
|
"""Обновляет отображаемое время"""
|
||||||
|
now = datetime.datetime.now()
|
||||||
|
date_str = now.strftime("%d.%m.%Y")
|
||||||
|
time_str = now.strftime("%H:%M:%S")
|
||||||
|
self.set_text(f"{date_str} {time_str}")
|
||||||
|
return True
|
||||||
|
|
||||||
|
class WallpaperWidget(urwid.WidgetWrap):
|
||||||
|
"""Виджет для отображения ASCII-обоев"""
|
||||||
|
def __init__(self, content=""):
|
||||||
|
self.content = content
|
||||||
|
self.widget = self.create_widget()
|
||||||
|
super().__init__(self.widget)
|
||||||
|
|
||||||
|
def create_widget(self):
|
||||||
|
"""Создает виджет с обоями"""
|
||||||
|
# Создаем виджет с обоями, используя Fill для заполнения всего пространства
|
||||||
|
return urwid.AttrMap(
|
||||||
|
urwid.Filler(
|
||||||
|
urwid.Text(self.content),
|
||||||
|
'top'
|
||||||
|
),
|
||||||
|
'wallpaper'
|
||||||
|
)
|
||||||
|
|
||||||
|
def set_content(self, content):
|
||||||
|
"""Обновляет содержимое обоев"""
|
||||||
|
self.content = content
|
||||||
|
self._w = self.create_widget()
|
||||||
|
|
||||||
|
def selectable(self):
|
||||||
|
return False
|
||||||
|
|
||||||
class TelegramTUI:
|
class TelegramTUI:
|
||||||
"""Основной класс приложения"""
|
"""Основной класс приложения"""
|
||||||
|
|
||||||
palette = [
|
palette = [
|
||||||
('header', 'white', 'dark blue', 'bold'),
|
('header', 'white', 'dark blue', 'bold'),
|
||||||
('footer', 'white', 'dark blue', 'bold'),
|
('footer', 'white', 'dark blue', 'bold'),
|
||||||
('bg', 'white', 'black'),
|
('bg', 'black', 'black'),
|
||||||
('selected', 'black', 'light gray'),
|
('selected', 'black', 'light gray'),
|
||||||
('chat', 'white', 'black'),
|
('chat', 'white', 'black'),
|
||||||
('chat_selected', 'black', 'light gray'),
|
('chat_selected', 'black', 'light gray'),
|
||||||
@ -607,6 +647,8 @@ class TelegramTUI:
|
|||||||
('input_disabled', 'dark gray', 'black'),
|
('input_disabled', 'dark gray', 'black'),
|
||||||
('completion_normal', 'white', 'black'),
|
('completion_normal', 'white', 'black'),
|
||||||
('completion_focus', 'black', 'light gray'),
|
('completion_focus', 'black', 'light gray'),
|
||||||
|
('wallpaper', 'dark gray', 'black'), # Цвет для обоев
|
||||||
|
('main_content', 'white', 'black'), # Цвет для основного контента
|
||||||
]
|
]
|
||||||
|
|
||||||
def __init__(self, telegram_client: TelegramClient):
|
def __init__(self, telegram_client: TelegramClient):
|
||||||
@ -634,9 +676,11 @@ class TelegramTUI:
|
|||||||
self.message_list = urwid.ListBox(self.message_walker)
|
self.message_list = urwid.ListBox(self.message_walker)
|
||||||
self.input_edit = InputEdit(('header', "Сообщение: "), telegram_client=telegram_client)
|
self.input_edit = InputEdit(('header', "Сообщение: "), telegram_client=telegram_client)
|
||||||
|
|
||||||
|
# Создаем виджет часов
|
||||||
|
self.clock = ClockWidget()
|
||||||
|
|
||||||
# Создаем экраны
|
# Создаем экраны
|
||||||
self.auth_widget = urwid.Filler(
|
self.auth_widget = urwid.Pile([
|
||||||
urwid.Pile([
|
|
||||||
urwid.Text(('header', "\nДобро пожаловать в Telegram TUI\n"), align='center'),
|
urwid.Text(('header', "\nДобро пожаловать в Telegram TUI\n"), align='center'),
|
||||||
urwid.Divider(),
|
urwid.Divider(),
|
||||||
self.phone_edit,
|
self.phone_edit,
|
||||||
@ -646,7 +690,6 @@ class TelegramTUI:
|
|||||||
self.error_text,
|
self.error_text,
|
||||||
urwid.Text(('help', "Нажмите Enter для подтверждения"), align='center')
|
urwid.Text(('help', "Нажмите Enter для подтверждения"), align='center')
|
||||||
])
|
])
|
||||||
)
|
|
||||||
|
|
||||||
# Создаем левую панель (чаты)
|
# Создаем левую панель (чаты)
|
||||||
self.left_panel = urwid.LineBox(
|
self.left_panel = urwid.LineBox(
|
||||||
@ -671,19 +714,34 @@ class TelegramTUI:
|
|||||||
('weight', 70, self.right_panel)
|
('weight', 70, self.right_panel)
|
||||||
])
|
])
|
||||||
|
|
||||||
# Создаем основной виджет
|
# Создаем заголовок с часами
|
||||||
self.main_widget = urwid.Frame(
|
header = urwid.Columns([
|
||||||
self.auth_widget,
|
('weight', 80, urwid.Text(' Telegram TUI', align='center')),
|
||||||
header=urwid.AttrMap(
|
('pack', self.clock)
|
||||||
urwid.Text(' Telegram TUI', align='center'),
|
])
|
||||||
'header'
|
|
||||||
),
|
# Создаем основной контент
|
||||||
|
self.main_content = urwid.Frame(
|
||||||
|
urwid.Filler(self.auth_widget),
|
||||||
|
header=urwid.AttrMap(header, 'header'),
|
||||||
footer=urwid.AttrMap(
|
footer=urwid.AttrMap(
|
||||||
urwid.Text(' Q: Выход | Tab: Переключение фокуса | Enter: Выбор/Отправка | Esc: Назад', align='center'),
|
urwid.Text(' Q: Выход | Tab: Переключение фокуса | Enter: Выбор/Отправка | Esc: Назад', align='center'),
|
||||||
'footer'
|
'footer'
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Добавляем виджет обоев
|
||||||
|
self.wallpaper = WallpaperWidget()
|
||||||
|
self.load_wallpaper()
|
||||||
|
|
||||||
|
# Создаем основной виджет с обоями
|
||||||
|
self.main_widget = urwid.Overlay(
|
||||||
|
urwid.AttrMap(self.main_content, 'main_content'),
|
||||||
|
self.wallpaper,
|
||||||
|
'center', ('relative', 100),
|
||||||
|
'middle', ('relative', 100)
|
||||||
|
)
|
||||||
|
|
||||||
# Состояние чатов
|
# Состояние чатов
|
||||||
self.current_folder = None
|
self.current_folder = None
|
||||||
self.folders = []
|
self.folders = []
|
||||||
@ -736,13 +794,39 @@ class TelegramTUI:
|
|||||||
self.completion_overlay = None
|
self.completion_overlay = None
|
||||||
self.completion_focus = False # Новое состояние для отслеживания фокуса
|
self.completion_focus = False # Новое состояние для отслеживания фокуса
|
||||||
|
|
||||||
|
# Добавляем таймер обновления часов
|
||||||
|
self.clock_update_task = None
|
||||||
|
|
||||||
|
def load_wallpaper(self):
|
||||||
|
"""Загружает ASCII-обои"""
|
||||||
|
try:
|
||||||
|
# Получаем имя файла обоев из .env
|
||||||
|
wallpaper_name = os.getenv('WALLPAPER', 'default')
|
||||||
|
wallpaper_path = os.path.join('ascii', f"{wallpaper_name}.txt")
|
||||||
|
|
||||||
|
# Проверяем существование файла
|
||||||
|
if os.path.exists(wallpaper_path):
|
||||||
|
with open(wallpaper_path, 'r') as f:
|
||||||
|
content = f.read()
|
||||||
|
# Обновляем виджет обоев
|
||||||
|
self.wallpaper.set_content(content)
|
||||||
|
else:
|
||||||
|
print(f"Файл обоев не найден: {wallpaper_path}")
|
||||||
|
# Используем простой паттерн
|
||||||
|
self.wallpaper.set_content("░" * 80 + "\n" + ("░" + " " * 78 + "░\n") * 23 + "░" * 80)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Ошибка загрузки обоев: {e}")
|
||||||
|
# В случае ошибки используем простой паттерн
|
||||||
|
self.wallpaper.set_content("░" * 80 + "\n" + ("░" + " " * 78 + "░\n") * 23 + "░" * 80)
|
||||||
|
|
||||||
def switch_screen(self, screen_name: str):
|
def switch_screen(self, screen_name: str):
|
||||||
"""Переключение между экранами"""
|
"""Переключение между экранами"""
|
||||||
self.current_screen = screen_name
|
self.current_screen = screen_name
|
||||||
if screen_name == 'auth':
|
if screen_name == 'auth':
|
||||||
self.main_widget.body = self.auth_widget
|
self.main_content.body = urwid.Filler(self.auth_widget)
|
||||||
elif screen_name == 'chats':
|
else:
|
||||||
self.main_widget.body = self.chat_widget
|
self.main_content.body = self.chat_widget
|
||||||
|
|
||||||
async def handle_auth(self, key):
|
async def handle_auth(self, key):
|
||||||
"""Обработка авторизации"""
|
"""Обработка авторизации"""
|
||||||
@ -751,6 +835,10 @@ class TelegramTUI:
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
if self.auth_step == 'phone':
|
if self.auth_step == 'phone':
|
||||||
|
# Скрываем поля кода и пароля
|
||||||
|
self.code_edit.set_edit_text("")
|
||||||
|
self.password_edit.set_edit_text("")
|
||||||
|
|
||||||
phone = normalize_text(self.phone_edit.get_edit_text())
|
phone = normalize_text(self.phone_edit.get_edit_text())
|
||||||
if phone:
|
if phone:
|
||||||
self.phone = phone
|
self.phone = phone
|
||||||
@ -1384,6 +1472,8 @@ class TelegramTUI:
|
|||||||
self.chat_update_task.cancel()
|
self.chat_update_task.cancel()
|
||||||
if self.message_update_task:
|
if self.message_update_task:
|
||||||
self.message_update_task.cancel()
|
self.message_update_task.cancel()
|
||||||
|
if self.clock_update_task:
|
||||||
|
self.clock_update_task.cancel()
|
||||||
|
|
||||||
async def chat_update_loop():
|
async def chat_update_loop():
|
||||||
while True:
|
while True:
|
||||||
@ -1399,6 +1489,7 @@ class TelegramTUI:
|
|||||||
|
|
||||||
self.chat_update_task = asyncio.create_task(chat_update_loop())
|
self.chat_update_task = asyncio.create_task(chat_update_loop())
|
||||||
self.message_update_task = asyncio.create_task(self.message_update_loop())
|
self.message_update_task = asyncio.create_task(self.message_update_loop())
|
||||||
|
self.clock_update_task = asyncio.create_task(self.update_clock())
|
||||||
|
|
||||||
async def stop_auto_updates(self):
|
async def stop_auto_updates(self):
|
||||||
"""Останавливает автоматическое обновление"""
|
"""Останавливает автоматическое обновление"""
|
||||||
@ -1408,6 +1499,9 @@ class TelegramTUI:
|
|||||||
if self.message_update_task:
|
if self.message_update_task:
|
||||||
self.message_update_task.cancel()
|
self.message_update_task.cancel()
|
||||||
self.message_update_task = None
|
self.message_update_task = None
|
||||||
|
if self.clock_update_task:
|
||||||
|
self.clock_update_task.cancel()
|
||||||
|
self.clock_update_task = None
|
||||||
|
|
||||||
async def run(self):
|
async def run(self):
|
||||||
"""Запуск приложения"""
|
"""Запуск приложения"""
|
||||||
@ -1465,23 +1559,29 @@ class TelegramTUI:
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Создаем оверлей
|
# Создаем оверлей
|
||||||
|
if not hasattr(self, 'main_frame'):
|
||||||
|
self.main_frame = self.main_widget
|
||||||
|
|
||||||
self.completion_overlay = urwid.Overlay(
|
self.completion_overlay = urwid.Overlay(
|
||||||
box,
|
box,
|
||||||
self.main_widget,
|
self.main_frame,
|
||||||
'center', ('relative', 50),
|
'left', ('relative', 30),
|
||||||
'middle', ('relative', 30)
|
'top', ('relative', 20),
|
||||||
|
('relative', 50),
|
||||||
|
('relative', 30)
|
||||||
)
|
)
|
||||||
|
|
||||||
# Обновляем главный виджет и устанавливаем фокус на список
|
# Обновляем главный виджет
|
||||||
self.main_widget = self.completion_overlay
|
self.main_widget = self.completion_overlay
|
||||||
self.completion_focus = True
|
self.completion_focus = True
|
||||||
|
|
||||||
def hide_completion_overlay(self):
|
def hide_completion_overlay(self):
|
||||||
"""Скрывает оверлей с меню автодополнения"""
|
"""Скрывает оверлей с меню автодополнения"""
|
||||||
if self.completion_overlay:
|
if self.completion_overlay:
|
||||||
self.main_widget = self.completion_overlay.bottom_w
|
self.main_widget = self.main_frame
|
||||||
self.completion_overlay = None
|
self.completion_overlay = None
|
||||||
self.completion_listbox = None
|
self.completion_listbox = None
|
||||||
|
self.completion_focus = False
|
||||||
|
|
||||||
def handle_completion_navigation(self, key):
|
def handle_completion_navigation(self, key):
|
||||||
"""Обрабатывает навигацию по меню автодополнения"""
|
"""Обрабатывает навигацию по меню автодополнения"""
|
||||||
@ -1500,6 +1600,16 @@ class TelegramTUI:
|
|||||||
return self.completion_listbox.focus_position
|
return self.completion_listbox.focus_position
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
async def update_clock(self):
|
||||||
|
"""Обновляет время в виджете часов"""
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
self.clock.update_time()
|
||||||
|
await asyncio.sleep(1)
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Ошибка обновления часов: {e}")
|
||||||
|
await asyncio.sleep(1)
|
||||||
|
|
||||||
async def main():
|
async def main():
|
||||||
# Загружаем переменные окружения
|
# Загружаем переменные окружения
|
||||||
load_dotenv()
|
load_dotenv()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user