v2.162.0: Native Linux Client for Yandex Messenger
Отчет по Sprint 6 — Yandex Messenger Native
В рамках Sprint 6 были решены критические проблемы интерфейса, передачи данных и отправки сообщений, а также реализована премиальная темная тема.
Решенные проблемы и багфиксы
1. Устранение критических GTK layout багов
- Проблема: Контейнеры интерфейса (root GtkBox, ChatView, ChatListPanel) имели неверные настройки расширения
hexpand(false)/vexpand(false). Из-за этого при изменении размеров окна GTK4 входил в бесконечный цикл расчета геометрии, пытаясь растянуть виджеты до максимального размера в1048576пикселей, что сопровождалось системными предупреждениями и зависанием UI. - Решение:
- Настройки
hexpandиvexpandдля корневых контейнеров переведены в значениеtrue. - Устаревший вертикальный разделитель заменен на интерактивный
gtk::Panedс возможностью перетаскивания границы сайдбара. - Добавлена поддержка компактного режима сайдбара: при уменьшении его ширины ниже 180px к панели чатов применяется CSS-класс
.compact, скрывающий текстовые превью и имена чатов, оставляя только круглые аватары. - Ширина сайдбара по умолчанию уменьшена до 260px для оптимизации пространства.
- Минимальная высота горизонтального ползунка прокрутки CSS уменьшена до 4px (с увеличением до 8px при наведении) для предотвращения смещения элементов.
- Настройки
2. Исправление пропадания чатов и истории сообщений
- Проблема: Ранее чаты загружались асинхронно через
load_chats()вglib::spawn_future_local, но результат не передавался в компонент отображения списка, из-за чего список чатов оставался пустым. Также отсутствовал механизм мгновенного восстановления истории при переключении диалогов. - Решение:
- Результаты сетевого вызова теперь корректно передаются в метод
set_chats(chats)панели списка чатов. - Интегрировано асинхронное кэширование L2 в фоновом пуле потоков Tokio (
load_cache_l2_async/save_cache_l2_async), которое сохраняет историю сообщений в JSON-файлы. - При выборе чата интерфейс мгновенно считывает сообщения из локального кэша через метод
get_cached_messages_asyncи отображает их пользователю, пока идет фоновый запрос к API за свежей историей. Это полностью решило проблему визуального пропадания сообщений.
- Результаты сетевого вызова теперь корректно передаются в метод
3. Исправление отправки сообщений
- Проблема: Кнопка отправки сообщений не работала, так как в UI-компоненте
ChatViewне вызывался методbind_callbacks(). Коллбекon_sendоставалсяNone, и попытки отправить сообщение игнорировались. - Решение:
- Метод
bind_callbacks()подключен при инициализации макета вmain.rs. - Отправка текстовых сообщений переведена на асинхронную модель взаимодействия с WebSocket-клиентом без блокировки основного потока отрисовки интерфейса GTK.
- Поле ввода переведено с однострочного
Entryна многострочныйTextViewвScrolledWindowс ограничением максимальной высоты (120px). Отправка сообщения выполняется по клавишеEnter, перенос строки — поShift+Enter. - Добавлена функция быстрого редактирования последнего сообщения по клавише
Upпри пустом вводе. - Элементы интерфейса для дополнительных действий (отправка файлов, создание опросов, планирование времени) вынесены в аккуратное всплывающее меню кнопки прикреплений (скрепки).
- Метод
4. Реализация премиальной темной темы
- Проблема: Старый интерфейс использовал контрастные сине-зеленые тона, которые не соответствовали современным стандартам приложений для обмена сообщениями.
- Решение:
- Перезаписана палитра цветов в файле
theme.css. Основной фон приложения переведен в глубокие темные Obsidian-like тона (#09090b), а сайдбар — в темно-серый сланец (#111116). - Бабблы входящих сообщений получили нейтральный темно-серый цвет (
#1e1e28), а исходящих — мягкий синий градиент (#2f80ed->#0056b3). - Заменена заглушка аватаров на полноценный компонент
adw::Avatarиз Libadwaita с поддержкой автоматического подбора цвета и инициалов. - Внедрена система кэширования аватаров в памяти (
AVATAR_CACHE), что устранило мерцание при прокрутке списка чатов и частые сетевые запросы. - Добавлены разделители дат («Сегодня», «Вчера») и увеличенные эмодзи без пузыря при отправке до 3 символов включительно.
- Перезаписана палитра цветов в файле
Текущий статус проекта
- Компиляция: ✅ Проходит успешно, без ошибок (
cargo checkзавершен с 0 ошибок). - Слой UI: Переведен на Libadwaita (
adw::Application/adw::ApplicationWindow). Layout стабилен, бесконечные циклы расчетов отсутствуют. - Основные функции: Авторизация, отображение списка чатов, асинхронное получение сообщений, отправка текста и стикеров работают в штатном режиме.