Группы: восстановление ключей по инвайту и Apple Emoji

- Добавлено восстановление локального ключа группы из инвайта при повторном нажатии, даже если на сервере статус уже JOINED.
- В карточке приглашения сначала восстанавливается ключ, затем открывается группа.
- Включено отображение Apple Emoji для названия/описания группы в GroupInfo и в заголовке группы в чате.
- Обновлён превью-заголовок в GroupSetup на Apple Emoji рендер.
This commit is contained in:
2026-03-06 17:23:11 +05:00
parent 5de0777063
commit e9944b3c67
5 changed files with 94 additions and 22 deletions

View File

@@ -284,6 +284,47 @@ class GroupRepository private constructor(context: Context) {
)
}
/**
* Desktop parity fix:
* if user is already joined on server, repeated invite click should still restore local group key.
*/
suspend fun ensureLocalGroupFromInvite(
accountPublicKey: String,
accountPrivateKey: String,
inviteString: String
): GroupJoinResult {
val parsed = parseInviteString(inviteString)
?: return GroupJoinResult(
success = false,
status = GroupStatus.INVALID,
error = "Invalid invite string"
)
val existingGroupKey = getGroupKey(accountPublicKey, accountPrivateKey, parsed.groupId)
if (!existingGroupKey.isNullOrBlank()) {
return GroupJoinResult(
success = true,
status = GroupStatus.JOINED,
dialogPublicKey = toGroupDialogPublicKey(parsed.groupId),
title = parsed.title
)
}
persistJoinedGroup(
accountPublicKey = accountPublicKey,
accountPrivateKey = accountPrivateKey,
parsedInvite = parsed,
emitSystemJoinMessage = false
)
return GroupJoinResult(
success = true,
status = GroupStatus.JOINED,
dialogPublicKey = toGroupDialogPublicKey(parsed.groupId),
title = parsed.title
)
}
suspend fun synchronizeJoinedGroup(
accountPublicKey: String,
accountPrivateKey: String,