Исправление инверсии онлайн-статуса и border индикатора

This commit is contained in:
2026-03-08 18:09:49 +05:00
parent 8e27542c5b
commit 30e9e3664c
6 changed files with 10 additions and 11 deletions

View File

@@ -191,9 +191,10 @@ final class DialogRepository {
if !title.isEmpty { dialog.opponentTitle = title } if !title.isEmpty { dialog.opponentTitle = title }
if !username.isEmpty { dialog.opponentUsername = username } if !username.isEmpty { dialog.opponentUsername = username }
if verified > 0 { dialog.verified = max(dialog.verified, verified) } if verified > 0 { dialog.verified = max(dialog.verified, verified) }
// online: 0 = offline, 1 = online, -1 = not provided (don't update) // Server protocol: 0 = ONLINE, 1 = OFFLINE (matches desktop OnlineState enum)
// -1 = not provided (don't update)
if online >= 0 { if online >= 0 {
dialog.isOnline = online > 0 dialog.isOnline = online == 0
if !dialog.isOnline { dialog.lastSeen = Int64(Date().timeIntervalSince1970 * 1000) } if !dialog.isOnline { dialog.lastSeen = Int64(Date().timeIntervalSince1970 * 1000) }
} }
dialogs[publicKey] = dialog dialogs[publicKey] = dialog

View File

@@ -30,7 +30,7 @@ final class RecentSearchesRepository: ObservableObject {
publicKey: user.publicKey, publicKey: user.publicKey,
title: user.title, title: user.title,
username: user.username, username: user.username,
lastSeenText: user.online == 1 ? "online" : "last seen recently" lastSeenText: user.online == 0 ? "online" : "last seen recently"
) )
add(recent) add(recent)
} }

View File

@@ -60,9 +60,7 @@ struct AvatarView: View {
.overlay { .overlay {
Circle() Circle()
.stroke( .stroke(
colorScheme == .dark Color.black,
? Color(hex: 0x1A1B1E)
: Color.white,
lineWidth: badgeBorderWidth lineWidth: badgeBorderWidth
) )
} }

View File

@@ -216,7 +216,7 @@ private extension ChatListSearchContent {
HStack(spacing: 12) { HStack(spacing: 12) {
AvatarView( AvatarView(
initials: initials, colorIndex: colorIdx, initials: initials, colorIndex: colorIdx,
size: 48, isOnline: user.online == 1, size: 48, isOnline: user.online == 0,
isSavedMessages: isSelf isSavedMessages: isSelf
) )

View File

@@ -71,7 +71,7 @@ private extension SearchResultsSection {
initials: initials, initials: initials,
colorIndex: colorIdx, colorIndex: colorIdx,
size: 42, size: 42,
isOnline: user.online == 1, isOnline: user.online == 0,
isSavedMessages: isSelf isSavedMessages: isSelf
) )
@@ -100,7 +100,7 @@ private extension SearchResultsSection {
Spacer() Spacer()
if user.online == 1 { if user.online == 0 {
Circle() Circle()
.fill(RosettaColors.online) .fill(RosettaColors.online)
.frame(width: 8, height: 8) .frame(width: 8, height: 8)

View File

@@ -170,7 +170,7 @@ final class SearchViewModel: ObservableObject {
title: "Saved Messages", title: "Saved Messages",
publicKey: SessionManager.shared.currentPublicKey, publicKey: SessionManager.shared.currentPublicKey,
verified: 0, verified: 0,
online: 1 online: 0
)) ))
} }
@@ -186,7 +186,7 @@ final class SearchViewModel: ObservableObject {
title: dialog.opponentTitle, title: dialog.opponentTitle,
publicKey: dialog.opponentKey, publicKey: dialog.opponentKey,
verified: dialog.verified, verified: dialog.verified,
online: dialog.isOnline ? 1 : 0 online: dialog.isOnline ? 0 : 1
)) ))
} }