Skip to content

Releases: Bezooom/yandex-messenger-native

v2.165.0: Native Linux Client for Yandex Messenger

Choose a tag to compare

@Bezooom Bezooom released this 15 Jul 18:34

История изменений (Changelog)

Все значимые изменения в проекте документируются в этом файле.
Формат основан на руководстве Keep a Changelog и соответствует семантическому версионированию.


2.162.0 - 2026-06-29

Добавлено

  • Интеграция Libadwaita:
    • Приложение переведено на использование libadwaita (adw::Application / adw::ApplicationWindow).
    • Стандартные плейсхолдеры аватаров заменены на современный виджет adw::Avatar с автоматической поддержкой инициалов и палитры цветов.
    • Добавлен компонент adw::HeaderBar в верхнюю часть интерфейса.
  • Улучшения списка чатов:
    • Внедрено кэширование текстур аватаров в оперативной памяти (AVATAR_CACHE), что устранило мерцание и повторные загрузки при прокрутке.
    • Реализован индикатор закрепленных чатов (булавка 📌) в строках списка.
    • Добавлена автоматическая сортировка чатов: закрепленные чаты всегда располагаются вверху списка, остальные сортируются по времени последнего сообщения.
  • Редактор и ввод сообщений:
    • Обычное поле ввода заменено на многострочный TextView с адаптивной высотой (до 120px) в ScrolledWindow.
    • Отправка сообщения теперь осуществляется по клавише Enter, а перенос строки — по Shift+Enter.
    • Добавлена функция быстрого редактирования последнего отправленного сообщения по клавише Up при пустом вводе.
  • Улучшения чата и истории:
    • Добавлено локальное кэширование строк сообщений (message_rows) для оптимизации UI и предотвращения лишних перерисовок.
    • Добавлена асинхронная загрузка и сохранение L2-кэша (load_cache_l2_async / save_cache_l2_async) в JSON-файлы через фоновый поток.
    • При выборе чата история мгновенно отображается из кэша, пока идет фоновый сетевой запрос.
    • Добавлен автоматический скролл вниз списка сообщений при переключении чатов или получении новых сообщений.
    • Реализованы визуальные разделители дат («Сегодня», «Вчера», даты).
    • Внедрена обработка сообщений-стикеров с отображением картинок размером 128x128px.
    • Внедрен режим «только эмодзи» (увеличенный размер эмодзи до 40px без пузыря баббла при отправке от 1 до 3 эмодзи).
    • Добавлены меню вложений (отправка файла, создание опроса, планирование) и меню заголовка (информация о чате, включение/выключение уведомлений).

Изменено

  • Контейнер сайдбара и чата переведен на gtk::Paned с регулируемой границей и поддержкой компактного режима сайдбара (скрытие текста при ширине < 180px).
  • Базовая ширина сайдбара уменьшена с 320 до 260px.
  • В случае сбоя или пустого каталога стикеров на сервере приложение переключается на встроенные mock-стикеры.

Исправлено

  • Устранена критическая ошибка типов E0308 mismatched types in src/ui/chat_list.rs при обработке коллбеков.
  • Исправлены GTK layout баги (бесконечный цикл и растягивание виджетов до 1048576px) за счет правильной настройки hexpand/vexpand.
  • Исправлена отправка сообщений и привязка коллбеков в ChatView через bind_callbacks.

2.160.0 - 2026-05-10

Изменено

  • Неблокирующий OAuth-диалог:
    • Локальный callback-сервер переведен на фоновый поток, что предотвращает блокировку основного GTK-цикла.
    • Кнопка авторизации меняет состояние на «Ожидаем подтверждения…» со спиннером (Spinner) во время выполнения входа.
    • Тайм-аут ожидания авторизации увеличен до 180 секунд.
    • Корректная обработка Implicit-grant flow (извлечение токена из URL fragment).
  • Упрощение интерфейса входа:
    • Поле ручного ввода токена вынесено под скрытый Expander.
  • Обновление стилей:
    • Добавлены градиенты к кнопкам, радиальное свечение на фоне окна входа и мягкие тени при фокусе на полях ввода.

Исправлено

  • Исправлены паники и ошибки инициализации Tokio-рантайма в src/ui/auth_dialog.rs.

2.158.0 - 2026-05-04

Добавлено

  • Поиск и оптимизация:
    • Добавлена ленивая загрузка медиафайлов.
    • Реализован глобальный поиск по сообщениям через оверлей GlobalSearch с вызовом по горячей клавише Ctrl+K.
    • Реализовано кэширование сообщений в оперативной памяти (L1) и фоновая синхронизация с сервером.

2.156.0 - 2026-04-25

Добавлено

  • Создана базовая архитектурная документация (ARCHITECTURE.md) и файл безопасности (SECURITY.md).
  • Добавлена поддержка автоматического обновления токенов доступа за 5 минут до истечения срока действия.

v2.162.0: Native Linux Client for Yandex Messenger

Choose a tag to compare

@Bezooom Bezooom released this 29 Jun 19:52

Отчет по 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 стабилен, бесконечные циклы расчетов отсутствуют.
  • Основные функции: Авторизация, отображение списка чатов, асинхронное получение сообщений, отправка текста и стикеров работают в штатном режиме.