Document avatar bundles, crop selection and original-image galleries
This commit is contained in:
1 parent
cee3228e5f
commit
cdc5474279
1 file changed
+27
-10
+27
-10
@@ -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 МиБ;
|
||||
|
||||
Reference in new issue
Block a user