Skip to content

Komet 0.5.0-dev (build 19)

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 26 Aug 20:49
8c492a6

What's Changed

🗂 Папки — теперь полноценные

b57be4c + 53f0587

Раньше папки только читались с сервера. Теперь есть весь цикл: создание, редактирование, удаление, переупорядочивание.

  • Новая шторка редактирования (folder_edit_sheet.dart, 632 строки): название, ручной выбор чатов, плюс фильтры по типам — Контакты / Не в контактах / Группы / Каналы / Боты, а также «непрочитанные» и «не заглушённые».
  • Шторка действий над папкой (folder_action_sheet.dart) — по долгому тапу/меню.
  • Избранные чаты внутри папки (favorites), порядок папок сохраняется на сервер.
  • Модуль folders.dart переписан (+559 строк): нормальная синхронизация payload'а, флаг «список папок готов», мердж входящего состояния с локальным вместо перезатирания.
  • Создание группы теперь умеет сразу класть чат в папку.
  • Починены галочки прочтения, пропадавшие в папке «Все».

📤 Комет появился в системном «Поделиться» (Android)

5d115e0

Большая новая фича, ~2 000 строк.

  • В манифесте зарегистрированы SEND и SEND_MULTIPLE для текста, картинок, видео, аудио и произвольных файлов — Комет виден в системной шторке шаринга.
  • Нативный ShareIntake.kt принимает интент, копирует файлы в кэш, отдаёт во Flutter через share_intent_bridge.
  • В списке чатов включается режим «выбери, куда отправить» с отдельной нижней панелью-композером (share_composer_bar.dart): можно выбрать несколько чатов, добавить подпись, увидеть миниатюры того, что шаришь.
  • Отдельный share_sender.dart (547 строк) — очередь отправки, ресайз/превью через share_thumbnail.dart, корректные типы вложений.

🎬 Редактор видео

3e6254b — самый крупный коммит релиза (+6 424 / −2 313)

  • Полноценное редактирование видео перед отправкой: обрезка по времени, кадрирование, поворот/отражение, цветокоррекция, рисование/стикеры поверх, отключение звука, выбор качества («Небольшой размер» / «Высокое качество»).
  • Транскодинг: нативный на Android (VideoEditor.kt, MediaCodec) и на iOS (KometVideo.swift, AVFoundation), с фолбэком на ffmpeg на десктопе.
  • Заодно распилен монолитный photo_editor.dart (2 253 строки) — общая часть вынесена в editor_common.dart, фото и видео теперь делят кроп, цветокор и слой разметки.
  • Hero-анимация при открытии превью медиа и зум при кадрировании.
  • Новая Lottie-иконка ic_volume_on_to_off для кнопки «отправить без звука».

🔔 Уведомления — два новых механизма

FKM (Android) — 8ce5df9, 6ce3ddc
Свой пуш-канал без Firebase: foreground-сервис держит собственное сокет-соединение, пуш из сокета превращается в тот же набор полей, что шлёт FCM, и рисуется тем же нативным нотификатором. В шторке висит постоянное уведомление сервиса, выключить FKM можно прямо из него. Есть подтверждение при включении, запрос разрешения на уведомления и предложение отключить экономию батареи. Работает только на Android — на iOS показывается заглушка.

Web Push через PWA (iOS) — 5ac407f, 1012628
Обход того, что sideload-сборка на iOS не получает APNs-токен: Комет сам поднимает веб-сессию MAX (max_web_socket.dart + max_web_protocol.dart, 453 строки), сам её подтверждает с этого же устройства — номер и код вводить не надо, только пароль при включённой 2FA. Дальше пользователь ставит push.komet.pw на экран «Домой», разрешает уведомления, и подписка регистрируется автоматически. Добавлена панель состояния (сервис, токен, дата привязки, устройство) и кнопка «Отключить» — она честно завершает веб-сессию и убирает её из списка устройств.

Фиксы старых уведомлений — 3e4edc5

  • уведомление больше не приходит, когда чат уже открыт;
  • тап по уведомлению наконец открывает нужный чат;
  • вернулась зелёная точка «в сети» в списке чатов;
  • починены реакции на сторис (заодно story_viewer_screen похудел на 287 строк);
  • новый ChatNotifications.kt + notification_bridge.dart как общий слой между FCM/FKM и UI.

📞 Звонки

  • Плавающий бейдж свёрнутого звонка (eb94461, +711 строк) — перетаскиваемая плашка с видео собеседника, залипающая по краям, поверх всего приложения. Общий draggable_floating_layer теперь используют и кружки, и звонок.
  • Выбор микрофона (c3027a8) — шторка со списком устройств, отдельная группа «Мониторы — звук системы», интеграция с PulseAudio на Linux (pulse_audio.dart), режим --no-mute (звук идёт даже с выключенным микрофоном) с явной подсказкой в интерфейсе.
  • Ссылки на звонок (4749233) — шторка создания группового звонка, «Отправить в MAX», старт звонка по ссылке.
  • Анимированные Lottie-иконки микрофона и камеры вместо мгновенной подмены Icon (ic_mic_on_to_off, ic_videocam_on_to_off).
  • Экран не гаснет во время звонка, записи кружка и голосового (screen_wake.dart).
  • Починена смена иконки приложения на iOS.

🍏 iOS перестал быть пасынком

0030ded, dbdb378, 2e8abe7

  • Нативные KometVideo.swift (транскодинг) и KometVideoNote.swift (запись кружков, 396 строк) — раньше этого на iOS просто не было.
  • KometNotifications.swift, Runner.entitlements, обновлённый Info.plist и Podfile.
  • Починены Opus/Ogg-энкодер, кроппер кружков, открытие ссылок, шаринг.
  • Bottom sheet с условиями теперь открывается сам по нажатию кнопки входа.
  • Убран дубликат токена в Keychain, честные ошибки при вводе пароля (d9e29f8).
  • В CI добавлена сборка iOS в flutter-dev.yml, поправлены build-ios.yml и оба release-воркфлоу.

🧩 Мини-приложения: полноценный JS-мост

f7a986f (+763 строки моста), 198f137, fcf9f12, 04235e0

Реализован практически весь WebApp API: secure_storage_* и device_storage_* (с лимитами на размер и количество ключей, хранение в отдельной таблице webapp_storage), биометрия (biometry_), NFC (nfc_), haptic feedback, setup_back_button, setup_closing_behaviour, защита от скриншотов, яркость экрана, get_viewport_size, download_file, web_app_share / web_app_max_share, запрос телефона, verify_mobile_id.

Отдельно допилен Цифровой ID: корректный initDataRaw (сервер ждёт канонический, а не percent-encoded), тот же device_id, что в хендшейке (иначе device_mismatch), обработка внешних callback-ссылок с ретраями, пока сессия не поднимется.

Переход по komet:// и max:// теперь обрабатывается внутри приложения, включая ссылки из мини-аппов, а не выкидывает в браузер.

💬 Чат и список чатов

Превью медиа в списке чатов (8c8c87d) — у последнего сообщения теперь показывается миниатюра и иконка типа: фото, видео, кружок, аудио, файл, стикер, контакт, геолокация, опрос, репост, звонок/пропущенный/видеозвонок. Плюс иконки-бейджи у каналов, групп и ботов. Всё кэшируется в БД (chat_preview_media.dart).

UX чата (d91759a, 6dc1835, 0f41879, 3cfe3a3)

  • Переписано выделение текста в сообщениях: выделение работает через несколько параграфов, корректно ведёт себя при скролле, выбор слова по двойному тапу, починено копирование выделенного (issue #75).
  • Новый reply_preview.dart — в ответах показывается миниатюра вложения (круглая для кружков), а если у медиа есть подпись — только иконка.
  • Выровнена панель композера, убрана самодельная retain_offset_physics в пользу нормального якоря скролла.
  • Автозаглавная буква в начале предложений (композер, подписи к вложениям, редактирование).
  • Одиночное фото больше не режется в квадрат — размер считается по реальному соотношению сторон; подписи получили отступы.
  • Обложки у файловых пузырей, доработана история аватарок.
  • Рефакторинг пересланных сообщений (05ca3a9) — общий bubble_context вместо дублирования в каждом типе пузыря.
  • Починен краш при редактировании сообщения с фото и краш меню действий над клавиатурой (одиночный тикер → TickerProviderStateMixin).
  • Поправлено расположение текста в инлайн-кнопке типа clipboard.

Вложения (615ce2c, 27b81af, 9b37565)

  • Плитка камеры в шторке вложений реально снимает фото, а при выданном разрешении показывает живой предпросмотр с задней камеры.
  • В пикер попадают все фото и видео: убраны фильтры по размеру и длительности, добавлена постраничная подгрузка по 120 штук.
  • Аккуратный запрос разрешений через permission_handler.

👤 Профиль, контакты, приватность

  • Чёрный список — новый экран (blacklist_screen.dart, ecaa132).
  • Удалённые аккаунты скрываются из контактов, чистятся из локальной БД (0091b5f).
  • Экран «Инфо» сильно расширен: разделы «Пакет входа», «Чаты в пакете входа», «Настройки отдельных чатов», «Эксперименты» — телефон, id аватарки, статус аккаунта, опции контакта/профиля, время сервера, хеш конфигурации, счётчики чатов/сообщений/контактов/присутствий.
  • В инфо о чате добавлены строки о флагах: пересылка запрещена, копирование запрещено, звонить могут админы, все могут закреплять, ссылка видна участникам, подтверждать отправку, название меняет владелец, реклама отключена, ID пользователя.
  • Экран спуфинга переразбит на секции (метод, тип устройства, основное, региональное, идентификаторы).
  • В настройках прокси показывается текущее состояние.
  • Подтверждение отправки сообщения для чатов с соответствующим флагом.

🛠 Техническое и мелочи

  • Новые зависимости: image_picker, camera, permission_handler. kolibri подтянут 0.1.2 → 0.1.4.
  • route_settle.dart — отложенная работа до окончания анимации перехода, чтобы не дёргать кадры (плюс тесты).
  • Починен spectrum_background под Impeller, ужесточён analysis_options.yaml.
  • Кружки: возможный фикс пропадания медиа-дорожки на кастомных прошивках Android ниже 16 (video_note_frame.dart).
  • Линукс: нативный декор окон выбирается по окружению (PR #68).
  • Адаптирован PR #60 под feature/FullStack.
  • Из репозитория убраны протокольные заметки: calls-protocol.md, calls-opcodes.txt, max-deeplinks.md, banners-informer.md (−1 200 строк).
  • Генератор Lottie-иконок tool/make_morph_icons.py доучен новым спекам.

Full Changelog: v0.5.0-dev.18...v0.5.0-dev.19