Релиз 1.2.6: sync-статусы, emoji-подсказки и UI-фиксы
Some checks failed
Android Kernel Build / build (push) Failing after 27m7s
Some checks failed
Android Kernel Build / build (push) Failing after 27m7s
This commit is contained in:
@@ -806,14 +806,10 @@ class MessageRepository private constructor(private val context: Context) {
|
||||
packet.chachaKey
|
||||
}
|
||||
|
||||
val isSelfDialog = packet.toPublicKey.trim() == account
|
||||
// Для исходящих сообщений статус доставки меняется ТОЛЬКО по PacketDelivery.
|
||||
val initialDeliveredStatus =
|
||||
if (isOwnMessage && !isSelfDialog) {
|
||||
DeliveryStatus.WAITING.value
|
||||
} else {
|
||||
DeliveryStatus.DELIVERED.value
|
||||
}
|
||||
// Desktop parity (useSynchronize.ts):
|
||||
// own messages received via PacketMessage sync are inserted as DELIVERED immediately.
|
||||
// WAITING is used only for messages created locally on this device before PacketDelivery.
|
||||
val initialDeliveredStatus = DeliveryStatus.DELIVERED.value
|
||||
|
||||
// Создаем entity для кэша и возможной вставки
|
||||
val entity =
|
||||
@@ -1131,6 +1127,23 @@ class MessageRepository private constructor(private val context: Context) {
|
||||
val privateKey = currentPrivateKey ?: return
|
||||
val now = System.currentTimeMillis()
|
||||
|
||||
// Desktop parity recovery:
|
||||
// historically, own synced direct messages ("sync:*" chacha_key) could be saved as WAITING/ERROR
|
||||
// on Android and then incorrectly shown with failed status.
|
||||
// Desktop stores them as DELIVERED from the beginning.
|
||||
val syncedOpponentsWithWrongStatus =
|
||||
messageDao.getSyncedOwnMessageOpponentsWithNonDeliveredStatus(account)
|
||||
val normalizedSyncedCount = messageDao.markSyncedOwnMessagesAsDelivered(account)
|
||||
if (normalizedSyncedCount > 0) {
|
||||
syncedOpponentsWithWrongStatus.forEach { opponentKey ->
|
||||
runCatching { dialogDao.updateDialogFromMessages(account, opponentKey) }
|
||||
}
|
||||
android.util.Log.i(
|
||||
"MessageRepository",
|
||||
"✅ Normalized $normalizedSyncedCount synced own messages to DELIVERED"
|
||||
)
|
||||
}
|
||||
|
||||
// Mark expired messages as ERROR (older than 80 seconds)
|
||||
val expiredCount = messageDao.markExpiredWaitingAsError(account, now - MESSAGE_MAX_TIME_TO_DELIVERED_MS)
|
||||
if (expiredCount > 0) {
|
||||
|
||||
@@ -17,17 +17,18 @@ object ReleaseNotes {
|
||||
val RELEASE_NOTICE = """
|
||||
Update v$VERSION_PLACEHOLDER
|
||||
|
||||
Что обновлено после версии 1.2.4
|
||||
Синхронизация статусов (desktop parity)
|
||||
- Исправлено ложное «ошибка отправки» для сообщений, пришедших в sync с других устройств
|
||||
- Синхронизированные исходящие теперь сразу помечаются как доставленные, как в desktop
|
||||
- Добавлена авто-нормализация старых sync-сообщений со статусами WAITING/ERROR в DELIVERED
|
||||
|
||||
Статусы отправки и прочтения
|
||||
- Исправлены ложные двойные галочки у фото и медиа-сообщений до фактической доставки
|
||||
- Исходящие сообщения теперь остаются в ожидании до реального PacketDelivery с сервера
|
||||
- PacketRead больше не переводит недоставленные сообщения в «прочитано»
|
||||
- Синхронизация статусов между БД, кэшем и UI стала стабильнее в личных чатах и группах
|
||||
Emoji-подсказки в поле ввода
|
||||
- Переработан UI подсказок: отдельный плавающий пузырёк над инпутом без изменения его высоты
|
||||
- Исправлен клиппинг/обрезание пузырька внизу экрана
|
||||
- Рендер эмодзи в подсказках приведён к Apple-like отображению
|
||||
|
||||
Надёжность отображения
|
||||
- Убраны ложные переходы статусов при быстрых событиях синхронизации
|
||||
- Логика read receipts приведена к более корректному серверному подтверждению
|
||||
Полировка интерфейса
|
||||
- В списке чатов выровнен текст после «Draft:» по одной line-height линии
|
||||
""".trimIndent()
|
||||
|
||||
fun getNotice(version: String): String =
|
||||
|
||||
Reference in New Issue
Block a user