diff --git a/Dev_Docs/Pending_Features/2026-06-17_1735_dm_files_and_revisions.md b/Dev_Docs/Pending_Features/2026-06-17_1735_dm_files_and_revisions.md index cbd90ac..46505e6 100644 --- a/Dev_Docs/Pending_Features/2026-06-17_1735_dm_files_and_revisions.md +++ b/Dev_Docs/Pending_Features/2026-06-17_1735_dm_files_and_revisions.md @@ -7,12 +7,15 @@ 1. Отправка обычного текста без вложений. 2. Повторная отправка того же логического сообщения с тем же `timeMs + nonce`, но большим `revisionTimeMs`. 3. Обновление текста у уже существующего сообщения в UI без появления нового пузыря. - 4. Игнорирование более старой ревизии на сервере. - 5. Удаление сообщения пустой ревизией (`attachmentsCount = 0`, `encryptedBodyLen = 0`) и исчезновение из UI. - 6. Доставка backlog после переподключения сессии для последней версии сообщения. + 4. Показ в UI метки `изменено: <дата время>` после редактирования. + 5. Игнорирование более старой ревизии на сервере и в клиентском state. + 6. Удаление сообщения пустой ревизией (`attachmentsCount = 0`, `encryptedBodyLen = 0`) и исчезновение из UI. + 7. Работа меню сообщения: `Скопировать как текст / Прочесть / Изменить / Удалить`. + 8. Режим редактирования с возвратом предыдущего draft после отмены или завершения редактирования. + 9. Доставка backlog после переподключения сессии для последней версии сообщения. - ожидаемый результат: - Контентные сообщения `type=1/2` приходят в формате `SHiNE_DM`, сервер хранит только последнюю ревизию по `messageKey`, более старая ревизия не перетирает новую, а пустая ревизия убирает сообщение из интерфейса. + Контентные сообщения `type=1/2` приходят в формате `SHiNE_DM`, сервер хранит только последнюю ревизию по `messageKey`, более старая ревизия не перетирает новую, редактирование обновляет существующий пузырь с пометкой `изменено`, а пустая ревизия убирает сообщение из интерфейса. - статус: pending diff --git a/Dev_Docs/Personal_Messages/README.md b/Dev_Docs/Personal_Messages/README.md index c7e6fac..817e6e9 100644 --- a/Dev_Docs/Personal_Messages/README.md +++ b/Dev_Docs/Personal_Messages/README.md @@ -191,6 +191,9 @@ UI сейчас работает так: - показывает только текст `encryptedBody`; - умеет обновлять уже существующее сообщение по тому же `messageKey`; - не показывает удалённые сообщения; +- позволяет владельцу сообщения вызвать меню `Скопировать как текст / Прочесть / Изменить / Удалить`; +- при редактировании показывает над полем ввода полоску `Редактируем сообщение: ...` с кнопкой отмены; +- после редактирования показывает под временем отдельную строку `изменено: <дата время>`; - не показывает и не принимает вложения. ## Что обязательно помнить diff --git a/VERSION.properties b/VERSION.properties index 2ded924..158a3f5 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.209 -server.version=1.2.198 +client.version=1.2.211 +server.version=1.2.199 diff --git a/shine-UI/js/pages/chat-view.js b/shine-UI/js/pages/chat-view.js index df2e011..706f55d 100644 --- a/shine-UI/js/pages/chat-view.js +++ b/shine-UI/js/pages/chat-view.js @@ -21,14 +21,25 @@ import { showToast } from '../services/channels-ux.js'; export const pageMeta = { id: 'chat-view', title: 'Чат' }; -function openMessageActionsModal({ messageText = '', onReadAloud }) { +function truncatePreviewText(value, maxLen = 72) { + const normalized = String(value || '').replace(/\s+/g, ' ').trim(); + if (!normalized) return ''; + if (normalized.length <= maxLen) return normalized; + return `${normalized.slice(0, Math.max(0, maxLen - 1)).trimEnd()}…`; +} + +function openDeleteMessageConfirmModal({ onConfirm }) { const root = document.getElementById('modal-root'); if (!root) return; root.innerHTML = ` -
Оно исчезнет и у тебя, и у собеседника.
+