diff --git a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatViewModel.kt b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatViewModel.kt index 7dac276..8fd8166 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatViewModel.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatViewModel.kt @@ -1879,6 +1879,15 @@ class ChatViewModel(application: Application) : AndroidViewModel(application) { Log.d(TAG, "👤 Avatar blob read successfully, length: ${avatarBlob.length}") Log.d(TAG, "👤 Avatar blob first 100 chars: ${avatarBlob.take(100)}") + // 🔥 КРИТИЧНО: Desktop ожидает полный data URL, а не просто Base64! + // Добавляем префикс если его нет + val avatarDataUrl = if (avatarBlob.startsWith("data:image")) { + avatarBlob + } else { + "data:image/png;base64,$avatarBlob" + } + Log.d(TAG, "👤 Avatar data URL length: ${avatarDataUrl.length}") + // Генерируем blurhash для preview (как на desktop) val avatarBlurhash = withContext(Dispatchers.IO) { try { @@ -1925,7 +1934,8 @@ class ChatViewModel(application: Application) : AndroidViewModel(application) { // 🔥 КРИТИЧНО: Как в desktop - шифруем аватар с ChaCha ключом (plainKeyAndNonce) // НЕ с AVATAR_PASSWORD! AVATAR_PASSWORD используется только для локального хранения - val encryptedAvatarBlob = MessageCrypto.encryptReplyBlob(avatarBlob, plainKeyAndNonce) + // Используем avatarDataUrl (с префиксом data:image/...) а не avatarBlob! + val encryptedAvatarBlob = MessageCrypto.encryptReplyBlob(avatarDataUrl, plainKeyAndNonce) Log.d(TAG, "👤 Avatar encrypted with ChaCha key, length: ${encryptedAvatarBlob.length}") val avatarAttachmentId = "avatar_$timestamp"