Browse Source

Document avatar bundles, crop selection and original-image galleries

master
evgeny 5 days ago
parent
commit
cdc5474279
  1. 37
      doc/member_files.txt

37
doc/member_files.txt

@ -273,7 +273,7 @@ Stop сервиса/группы завершает все принадлежа
Новое членство обнаруживается через снимки участников и повторяет публикацию.
Между серверами автоматического копирования нет.
userinfo содержит строковые avatar_server (16 hex цифр) и avatar_file (64 hex SHA256 + .png).
userinfo содержит строковые avatar_server (16 hex цифр) и avatar_file (64 hex SHA256 + .json).
Оба поля отсутствуют при удалённой аватарке. Профиль подписан ключом участника;
смена имени/адресов сохраняет остальные плоские JSON-атрибуты. userinfo ограничен
1024 байтами UTF-8. Merkle, JOIN_INFO_RESP, CHANNEL_INVITE и JOIN_REQUEST используют
@ -281,19 +281,36 @@ userinfo содержит строковые avatar_server (16 hex цифр) и
профиль инвайтера, не создавая более свежую запись только с именем. Обе стороны
нужно обновить: обратной совместимости нет.
Снимок участника CHAT_MEMBER_DISPLAY_SIZE теперь 157 байт: прежние 79 байт,
avatar_server:8LE, avatar_file:69 (с NUL), storage_role:1. storage_role обозначает
Снимок участника CHAT_MEMBER_DISPLAY_SIZE теперь 158 байт: прежние 79 байт,
avatar_server:8LE, avatar_file:70 (с NUL), storage_role:1. storage_role обозначает
подписанную роль сервера, независимо от существующей колонки storage — сетевого
приоритета, который может быть 0 у сервера за NAT. Потребители используют общий
chat_member.h; локальное изменение профиля также вызывает MEMBER_UPDATED.
В Settings → Profile доступны Upload avatar, выбор storage-сервера, предпросмотр
и Remove avatar. Изменения применяются сразу, независимо от Save других настроек.
Worker проверяет размер входного изображения (до 16 мегапикселей), обрезает центральный
квадрат и сохраняет статический PNG 256×256. Файл ограничен 1 МиБ. Сервер проверяет
каноническое имя/SHA256, размер и запрещает замену под прежним именем и rename
в/из avatars. Файлы и каталог входят в обычные инкрементальные квоты/счётчики.
Прежние версии сохраняются на сервере; владелец может удалить их через файловый браузер.
Перед загрузкой desktop/Android показывают редактор: неподвижная квадратная рамка,
перемещение фото и масштабирование (мышь/колесо или жесты). Отмена не публикует новую ссылку.
Worker принимает JPEG/PNG/WebP до 32 МиБ и 16 мегапикселей. Исходные байты, включая EXIF,
сохраняются без изменений. Выбранная область после EXIF-ориентации становится WebP lossy
256×256, quality=85, максимум 1 МиБ. Описание JSON (максимум 4096 байт): version=1,
original/preview — имена объектов; original_bytes/preview_bytes, width/height — размеры
ориентированного оригинала; x/y/w/h — нормализованный квадрат в его координатах.
Все объекты лежат в avatars/<SHA256 собственных байтов>.<jpg|png|webp|json>.
Порядок COMMIT: оригинал, превью, описание; затем подписанная ссылка на описание.
Повтор использует уже сохранённые неизменяемые объекты. Сервер проверяет имя/SHA256,
лимит объекта и запрещает замену под прежним именем и rename в/из avatars.
Файлы и каталог входят в обычные квоты. Прежние версии сохраняются на сервере;
владелец может удалить их через файловый браузер. Старые PNG-ссылки не поддерживаются.
Клик по аватарке сообщения/участника открывает галерею пользователя: LIST каталога
выбирает только описания, проходит все страницы cursor/version, сортирует mtime DESC,
при равенстве — по имени. Изначально выбрана текущая подписанная ссылка. Большое фото —
полный оригинал, до его загрузки показывается превью. Внизу пять квадратных позиций:
две предыдущие, выбранная по центру, две следующие; за границами списка позиции пустые.
Desktop: кнопки/клавиши ←/→; Android: кнопки/свайпы при исходном масштабе. Превью кликабельны.
Загружаются выбранный оригинал и видимые превью; закрытие отменяет запросы без других владельцев.
Для DM источник — общий канал, из которого берётся отображаемая аватарка.
AvatarManager общий для списка участников и сообщений, максимум две операции
одновременно, одинаковые хеши не скачиваются параллельно. Изменение своего профиля
@ -302,8 +319,8 @@ AvatarManager общий для списка участников и сообщ
отображается отдельной точкой поверх фотографии. Поздний результат старой ссылки
пополняет кеш, но не заменяет картинку новой ссылки.
Кеш аккаунта: <db_path>/avatar_cache/<local_UID_hex>/<sha256>.png; без db_path
используется Qt AppLocalDataLocation. Проверяются SHA256 и квадратный PNG до 512×512;
Кеш аккаунта: <db_path>/avatar_cache/<local_UID_hex>/<sha256>.<расширение>; без db_path
используется Qt AppLocalDataLocation. Проверяются SHA256 объектов, описание и WebP 256×256;
превышение/битая картинка не публикуются. Публикация кеша атомарна через QSaveFile,
незавершённые download/part очищаются при старте. Готовые файлы не требуют TTL/STAT:
смена содержимого меняет имя. Дисковый LRU — 100 МиБ, кеш QImage — 32 МиБ;

Loading…
Cancel
Save