6.2 KiB
Вложения в TEXT-сообщениях (SHiNE:attach v=1)
Документ фиксирует текущий формат вложений в текстовых блоках SHiNE.
Область применения
Формат применяется к UTF-8 полю text в TEXT-блоках:
TEXT_POSTTEXT_REPLYTEXT_EDIT_POSTTEXT_EDIT_REPLY
Бинарный формат TextBody не меняется. Вложения являются техническим префиксом внутри обычного текста.
Общий вид
Один attach-блок:
<SHiNE:attach;v=1;name=report.pdf;size=845221;sha256=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef;ar=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA>
Несколько вложений идут подряд в самом начале текста:
<SHiNE:attach;v=1;name=photo.jpg;size=248193;sha256=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;ar=BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB>
<SHiNE:attach;v=1;name=report.pdf;size=845221;sha256=cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc;ar=DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD>
Текст сообщения
После последнего attach-блока идёт обычный пользовательский текст. Пользовательский текст может быть пустым, если есть хотя бы одно валидное вложение.
Клиент SHiNE ограничивает одно сообщение максимум 10 вложениями и сохраняет порядок attach-блоков в том порядке, в котором пользователь прикрепил файлы.
Поля
Обязательные поля:
v=1- версия формата attach-блока;name- имя файла, закодированное черезencodeURIComponent;size- размер файла в байтах;sha256- SHA-256 исходного файла в hex, 64 символа;ar- короткий Arweave Transaction ID, 43 символа, без gateway URL.
Хранение файла
Файл хранится вне блокчейна в Arweave. В блокчейне хранится только метаинформация, достаточная для отображения и проверки:
- имя файла;
- размер;
- SHA-256;
- Arweave
txId.
Создание вложения в UI
UI поддерживает три сценария:
- загрузить новый файл в Arweave выбранным Arweave-кошельком;
- ввести существующий
txId, скачать файл через Arweave gateway и локально посчитатьsize/sha256; - выбрать файл из журнала файлов, загруженных в текущей браузерной сессии.
Журнал хранится только в sessionStorage текущего браузера и не является частью блокчейна.
Отображение
Новый клиент при чтении сообщения:
- читает валидные attach-блоки только из начала текста;
- скрывает технические attach-строки;
- отображает вложения над пользовательским текстом;
- показывает вложения горизонтальной каруселью: одно вложение на экране, переключение свайпом или стрелками, счётчик вида
1 из 3; - определяет тип вложения по расширению имени файла:
- изображение показывает как ограниченное по размеру превью;
- видео показывает как превью с кнопкой воспроизведения и открывает большой HTML5-плеер по нажатию;
- обычный файл показывает как карточку с именем, расширением, размером и скачиванием;
- при перелистывании останавливает воспроизводящееся видео;
- если attach-блок битый, игнорирует только этот блок и продолжает отображать сообщение.
Если файл по ссылке Arweave gateway недоступен, клиент показывает диагностический блок:
- если сообщение создано менее 20 минут назад: файл, скорее всего, ещё не распространился в Arweave, нужно повторить через несколько минут;
- если сообщение старше 20 минут: файл считается недоступным.
Старые клиенты без поддержки формата могут показывать attach-блоки как обычный текст.
Редактирование
При редактировании сообщения UI сохраняет существующие attach-блоки и меняет только пользовательский текст. Удаление сообщения по-прежнему выполняется через edit-блок с пустым текстом, как описано в 11_TEXT_Blocks.md.
Ограничения v1
arдопускает только короткий ArweavetxId, полный URL не используется;- MIME type не записывается, поэтому UI определяет image/video/file по расширению имени файла;
- MIME type, width, height, duration и thumbnail не записываются в блокчейн;
- проверка существующего
txIdскачивает файл локально через gateway, поэтому UI ограничивает максимальный размер такой проверки.