Document web link handling, validation and Q8 verification
This commit is contained in:
1 parent
4fcf45d545
commit
d02c55dbcd
2 files changed
+49
No files matched your search
@@ -0,0 +1,36 @@
|
||||
# Ссылки в сообщениях
|
||||
|
||||
Android и Qt распознают `http://`, `https://` и `utun://` в обычном тексте
|
||||
личных и групповых сообщений. HTTP/HTTPS нечувствительны к регистру схемы.
|
||||
Ссылки выделяются цветом и подчёркиванием; длинные веб-адреса переносятся по ширине.
|
||||
Сокращённая строка структурированного PM-приглашения сохраняет полный `utun://` адрес.
|
||||
|
||||
Пробелы, управляющие символы, кавычки и угловые скобки отделяют ссылку от текста.
|
||||
Конечные `. , ; : ! ?` и лишние закрывающие скобки удаляются из распознанного адреса.
|
||||
Сбалансированные скобки в адресе, параметры, fragment и Unicode сохраняются.
|
||||
Адреса без схемы не распознаются. Некорректные веб-адреса остаются обычным текстом.
|
||||
Исходное сообщение в БД и протоколе не меняется.
|
||||
|
||||
Разборщики возвращают диапазоны UTF-16 и полные адреса:
|
||||
`tools/chatgui/src/message_links.cpp`, Android `data/MessageLinks.kt`.
|
||||
Подсветка и нажатие используют эти диапазоны. Android подставляет emoji placeholders
|
||||
только в обычный текст между ссылками: emoji внутри адреса остаётся частью полного URL.
|
||||
Qt использует один QTextLayout для размеров, отрисовки, выделения и координат нажатия.
|
||||
Перетаскивание выделяет текст без открытия ссылки.
|
||||
|
||||
HTTP/HTTPS открываются из GUI системным обработчиком: Android `ACTION_VIEW`,
|
||||
Qt `QDesktopServices::openUrl`. `utun://` запускает существующий JOIN.
|
||||
Ошибки открытия показываются через перевод интерфейса и логируются.
|
||||
Диагностика открытия содержит схему и host, без полного пути/query.
|
||||
|
||||
Общие случаи: `tools/chatgui/tests/message_links_cases.tsv`.
|
||||
Qt `test_invite_links` проверяет разбор, перенесённые веб-ссылки, смесь схем,
|
||||
нажатие, drag/copy и сокращённые приглашения; `test_emoji_playback` — жесты приглашений.
|
||||
Android `tests/test_message_links.kt` проверяет тот же TSV на классах из APK-сборки:
|
||||
|
||||
```bash
|
||||
cd tools/chatgui-android
|
||||
./build.sh noinstall
|
||||
kotlinc tests/test_message_links.kt -classpath app/build/tmp/kotlin-classes/debug -d /tmp/message-links-tests.jar
|
||||
kotlin -classpath /tmp/message-links-tests.jar:app/build/tmp/kotlin-classes/debug Test_message_linksKt ../chatgui/tests/message_links_cases.tsv
|
||||
```
|
||||
@@ -3,6 +3,19 @@
|
||||
Сюда пишется список задач с короткой аннотацией. Если задача большая и имеет ТЗ - то ТЗ оформляется отдельным файлом, а сюда помещается аннотация и ссылка на ТЗ.
|
||||
|
||||
## Текущая задача
|
||||
[+] **Открытие HTTP/HTTPS в сообщениях Android и Qt** — 04.10.2026:
|
||||
общая обработка ссылок по диапазонам текста; веб-адреса открываются системным
|
||||
обработчиком, `utun://` сохраняет JOIN и короткое отображение PM-приглашений.
|
||||
Учтены Unicode, IPv6, скобки, пунктуация, параметры, fragment и emoji в адресах.
|
||||
Qt использует одинаковый layout для отрисовки, размеров, нажатия и выделения.
|
||||
Ошибки открытия переведены и логируются. Общие 15 случаев прошли в Android и Qt;
|
||||
проверки нажатия/drag/copy и приглашений прошли. Чистые сборки Qt и APK — PASS.
|
||||
`check.sh`: 124 passed, 0 failed, 1 skipped; proxy/burst/load — PASS.
|
||||
APK установлен на Q8, проверено системное открытие HTTP и HTTPS через ACTION_VIEW,
|
||||
приложение запущено. Логи: `/tmp/message-links-check.log`,
|
||||
`/tmp/message-links-qt-final-tests.log`, `/tmp/message-links-android-tests.log`.
|
||||
Контракт: `doc/message_links.md`.
|
||||
|
||||
[+] **Заголовок PM-приглашения и короткое отображение ссылки** — 04.10.2026:
|
||||
`ct=invite` содержит зашифрованные название группы и полную ссылку; GUI получает
|
||||
название через `tags.group_name` и добавляет заголовок из перевода интерфейса.
|
||||
|
||||
Reference in new issue
Block a user