# Обновление 4 — Исправление отображения картинок ## Контекст В update-2 и update-3 была реализована отправка новостей через XHTML-IM (XEP-0071) с картинкой через тег ``. По результатам тестирования картинки не отображаются: - **Gajim** — показывает URL картинки вместо изображения (использует plain-text fallback) - **Monocle Chat (форк Conversations)** — показывает незагруженную заглушку Причины установлены в ходе анализа лога stanza. --- ## Исправление 1 — двойной `` в XHTML-IM ### Проблема slixmpp xep_0071 при присвоении `msg["html"]["body"] = xhtml_body` самостоятельно оборачивает содержимое в ``. Текущая реализация `_build_xhtml` также включает этот тег, в результате в stanza попадает вложенный ``: ```xml ← добавляет slixmpp ← добавляет наш код

...

``` Это невалидный XHTML-IM, что приводит к использованию plain-text fallback в строгих клиентах. ### Решение В методе `_build_xhtml` убрать обёртку `...` — возвращать только внутренние элементы (`

`, `
`). slixmpp добавит `` сам. --- ## Исправление 2 — OOB для отображения картинок в Conversations-клиентах ### Проблема Клиенты семейства Conversations (включая Monocle Chat) блокируют загрузку внешних изображений из XHTML-IM `` по умолчанию — это намеренная защита от трекинг-пикселей. Картинка парсится, но не загружается. ### Решение Дополнительно к XHTML-IM прикреплять URL картинки как **Out-of-Band Data (XEP-0066)**. Conversations и его форки умеют рендерить OOB-ссылки как inline-превью. Для этого к сообщению добавляется элемент: ```xml https://example.com/image.jpg ``` ### Техническая реализация 1. Зарегистрировать плагин `xep_0066` в `JabberConnection` 2. В методе `send_to_room_xhtml` добавить OOB-поле к сообщению, если передан `image_url`: ```python msg["oob"]["url"] = image_url ``` 3. Сигнатуру `send_to_room_xhtml` расширить необязательным параметром `image_url: str | None = None` 4. В `JabberNewsPublisher.publish` передавать `item.image_url` в `send_to_room_xhtml`