37 lines
3.1 KiB
Markdown
37 lines
3.1 KiB
Markdown
# Ссылки в сообщениях
|
|
|
|
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
|
|
```
|