MeshCorium v0.8.3 — Fixes & Mobile App
v0.8.3 — Fixes & Mobile App (2026-06-29)
Android WebView Client (NEW)
- Native bottom dock with 5 tabs: notifications, chats, contacts, map, settings
- WebView ↔ native navigation via JavaScript bridge (no page reloads)
- Native dock colors and styles matched to web mobile dock
- Long-press Settings → native client settings → editable server connection URL
- Server URL editing reuses UrlEntryActivity in two modes (initial/edit)
- Connection change without app restart (cookie/cache cleanup + WebView reload)
- FCM push notification registration integrated
- WebView same-origin enforcement for security
- Versioned APK in git: meshcorium-android-client.0.8.3.<hash>.apk
Web: Native Shell Support
- detectNativeShell() with MeshcoriumAndroid bridge + User-Agent fallback
- Web mobile dock hidden in native-shell mode (v-if + CSS fallback)
- installNativeActionBridge() — Android dispatches actions to Vue Router
- Vue → native dock state sync: active tab, notification badge, connection status
- Fixed spacer gaps on contacts, maps and settings pages in native-shell mode
- Settings mobile nodebar repositioned to safe-area bottom (no overlapping)
Fixes
- Fixed long-press Settings gesture race (deferred launch via view.post)
- Fixed icon/label overlap in native dock (height 84dp, itemPaddingBottom 12dp)
- Fixed potential badge "0" visibility (zero-string guard)
- Removed singleTask launchMode from UrlEntryActivity (Activity Result API conflict)
Web: CSS & Layout
- mc-native-shell overrides: dock suppression, spacer removal for all pages
- Removed dead mc-page--global-mobile-dock CSS rule
- Settings workspace and section-stack padding adjusted for native-shell
v0.8.3 — Fixes & Mobile App (2026-06-29) [RU]
Android WebView-клиент (НОВОЕ)
- Нативный нижний dock с 5 вкладками: уведомления, чаты, контакты, карта, настройки
- Навигация WebView ↔ native через JavaScript bridge (без перезагрузок страниц)
- Цвета и стили нативного дока приведены к web-доку
- Долгое нажатие Настройки → нативные настройки клиента → редактируемый URL сервера
- Редактирование URL переиспользует UrlEntryActivity в двух режимах (первый запуск/редактирование)
- Смена подключения без перезапуска приложения (очистка cookies/cache + перезагрузка WebView)
- Интегрирована FCM push-регистрация
- Ограничение WebView доверенным origin (same-origin проверка)
- Версионированный APK в git: meshcorium-android-client.0.8.3.<hash>.apk
Web: Поддержка Native Shell
- detectNativeShell() через MeshcoriumAndroid bridge + User-Agent fallback
- Web-док скрывается в native-shell режиме (v-if + CSS fallback)
- installNativeActionBridge() — Android передаёт действия в Vue Router
- Синхронизация Vue → native dock: активная вкладка, badge, статус подключения
- Исправлены зазоры на страницах контактов, карт и настроек в native-shell режиме
- Мобильный nodebar настроек прижат к safe-area снизу (без наложения)
Исправления
- Исправлена гонка жеста долгого нажатия Настроек (отложенный запуск через view.post)
- Исправлено наложение иконок на подписи в нативном доке (высота 84dp, itemPaddingBottom 12dp)
- Исправлен потенциальный бадж "0" (защита от нулевой строки)
- Убран launchMode="singleTask" у UrlEntryActivity (конфликт с Activity Result API)
Web: CSS & Layout
- mc-native-shell overrides: скрытие дока, устранение зазоров для всех страниц
- Убрано мёртвое CSS-правило mc-page--global-mobile-dock
- Отступы Settings workspace и section-stack скорректированы для native-shell
Dev / Unreleased (2026-06-19)
Message Search in Dialogs (desktop) — GitHub issues #112-118
- Backend (#112): New
GET /api/messages/searchendpoint — full-text search (lower(text) LIKE) with optional@senderfilter (text LIKE 'partialname%:%'). Sorting by proximity to viewport center:ORDER BY ABS(id - viewport_center_id) ASC. Supports both channel and contact conversations. Files:meshcorium_web.py(+88 lines). - Frontend — search panel (#113): New
MessagesSearchPanel.vue— draggable float panel with Pointer Events grip (left edge), text input, ↑↓ navigation, ✕ close. Files:MessagesSearchPanel.vue(new, 105 lines). - Frontend — menu entry (#114): «Search» item in ⋮ menu (MessagesWorkspaceHeader.vue) + i18n in all 4 locale files. Files:
MessagesWorkspaceHeader.vue,en.js,ru.js. - Frontend — search logic (#115):
performSearch()with@nameparsing + API call,loadSearchContext(messageId)— REPLACE messages viaanchor_message_id(25 before + 25 after), ↑↓ navigation,closeSearchPanel()without auto-restore. Files:MessagesView.vue(+150 lines). - Frontend — search highlight (#116): Green ring via ring-span pattern (
.mc-message-highlight-ring.is-search) + yellow text highlight via<mark class="mc-search-match-highlight">.searchHighlightedMessageId(Number|null) propagated through 3-component chain: MessagesView → MessagesChatHistoryPane → MessagesMessageBubble. AddedisSearchHighlightedtov-memoarray for render invalidation. Files:MessagesMessageBubble.vue,MessagesChatHistoryPane.vue. - CSS (#117):
.mc-search-panel,.mc-search-grip,.mc-search-input,.mc-search-nav-btn,.has-search-highlight,.mc-search-match-highlight— search panel and highlight styles..is-searchoverrides base.mc-message-highlight-ringopacity and animation for persistent display. Files:styles.css(+109 lines).
Power Icon for Node Disconnect
- Replaced
disconnect-icon.svg(plug icon) with Feather Icons power.svg —<line>for vertical bar +<path>witha9 9 0 1 1for circle arc, solid#12B8F4color. 15+ iterations confirmed: hand-crafted SVG arcs are unreliable; pre-built library paths are recommended. Files:icons/disconnect-icon.svg,ConnectedShellLayout.vue(cache-buster?v=19).
Files changed this session (11): meshcorium_web.py, MessagesSearchPanel.vue (new), MessagesWorkspaceHeader.vue, MessagesView.vue, MessagesMessageBubble.vue, MessagesChatHistoryPane.vue, styles.css, en.js, ru.js, disconnect-icon.svg, ConnectedShellLayout.vue.
Поиск сообщений в диалоге (desktop) — GitHub issues #112-118
- Бэкенд (#112): Новый endpoint
GET /api/messages/search— полнотекстовый поиск (lower(text) LIKE) с опциональным фильтром@отправитель(text LIKE 'частичное_имя%:%'). Сортировка по близости к центру viewport:ORDER BY ABS(id - viewport_center_id) ASC. Поддержка каналов и контактов. Файлы:meshcorium_web.py(+88 строк). - Фронтенд — панель поиска (#113): Новый
MessagesSearchPanel.vue— перетаскиваемая float-панель с Pointer Events grip (левый край), поле ввода, навигация ↑↓, закрытие ✕. Файлы:MessagesSearchPanel.vue(новый, 105 строк). - Фронтенд — пункт меню (#114): Пункт «Поиск» в меню ⋮ (MessagesWorkspaceHeader.vue) + i18n во всех 4 файлах локализации. Файлы:
MessagesWorkspaceHeader.vue,en.js,ru.js. - Фронтенд — логика поиска (#115):
performSearch()с парсингом@имя+ API-запрос,loadSearchContext(messageId)— REPLACE сообщений черезanchor_message_id(25 до + 25 после), навигация ↑↓,closeSearchPanel()без автовосстановления истории. Файлы:MessagesView.vue(+150 строк). - Фронтенд — подсветка (#116): Зелёное кольцо через ring-span паттерн (
.mc-message-highlight-ring.is-search) + жёлтая подсветка текста через<mark class="mc-search-match-highlight">.searchHighlightedMessageId(Number|null) проброшен через цепочку из 3 компонентов: MessagesView → MessagesChatHistoryPane → MessagesMessageBubble. ПолеisSearchHighlightedдобавлено в массивv-memoдля инвалидации рендера. Файлы:MessagesMessageBubble.vue,MessagesChatHistoryPane.vue. - CSS (#117):
.mc-search-panel,.mc-search-grip,.mc-search-input,.mc-search-nav-btn,.has-search-highlight,.mc-search-match-highlight— стили панели и подсветки..is-searchпереопределяет opacity и animation базового.mc-message-highlight-ringдля постоянного отображения. Файлы:styles.css(+109 строк).
Иконка power ⏻ для отключения от ноды
- Замена
disconnect-icon.svg(иконка штекера) на Feather Icons power.svg —<line>для вертикальной черты +<path>сa9 9 0 1 1для дуги окружности, цвет solid#12B8F4. 15+ итераций подтвердили: самописные SVG-дуги ненадёжны; рекомендуется использовать готовые библиотечные path. Файлы:icons/disconnect-icon.svg,ConnectedShellLayout.vue(cache-buster?v=19).
Файлы, изменённые в сессии (11): meshcorium_web.py, MessagesSearchPanel.vue (новый), MessagesWorkspaceHeader.vue, MessagesView.vue, MessagesMessageBubble.vue, MessagesChatHistoryPane.vue, styles.css, en.js, ru.js, disconnect-icon.svg, ConnectedShellLayout.vue.