TM-SGNL-iOS/Signal/ConversationView/ConversationViewModel.swift
TeleMessage developers dde0620daf initial commit
2025-05-03 12:28:28 -07:00

66 lines
2.4 KiB
Swift

//
// Copyright 2023 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
import SignalServiceKit
import SignalUI
class ConversationViewModel {
let groupCallInProgress: Bool
let isSystemContact: Bool
let shouldShowVerifiedBadge: Bool
let unreadMentionMessageIds: [String]
static func load(for thread: TSThread, tx: SDSAnyReadTransaction) -> ConversationViewModel {
let groupCallInProgress = GroupCallInteractionFinder().unendedCallsForGroupThread(thread, transaction: tx)
.filter { !$0.joinedMemberAcis.isEmpty }
.count > 0
let isSystemContact = thread.isSystemContact(contactsManager: SSKEnvironment.shared.contactManagerImplRef, tx: tx)
let unreadMentionMessageIds = MentionFinder.messagesMentioning(
aci: DependenciesBridge.shared.tsAccountManager.localIdentifiers(tx: tx.asV2Read)!.aci,
in: thread,
includeReadMessages: false,
tx: tx
).map { $0.uniqueId }
return ConversationViewModel(
groupCallInProgress: groupCallInProgress,
isSystemContact: isSystemContact,
shouldShowVerifiedBadge: shouldShowVerifiedBadge(for: thread, tx: tx),
unreadMentionMessageIds: unreadMentionMessageIds
)
}
init(
groupCallInProgress: Bool,
isSystemContact: Bool,
shouldShowVerifiedBadge: Bool,
unreadMentionMessageIds: [String]
) {
self.groupCallInProgress = groupCallInProgress
self.isSystemContact = isSystemContact
self.shouldShowVerifiedBadge = shouldShowVerifiedBadge
self.unreadMentionMessageIds = unreadMentionMessageIds
}
private static func shouldShowVerifiedBadge(for thread: TSThread, tx: SDSAnyReadTransaction) -> Bool {
let identityManager = DependenciesBridge.shared.identityManager
switch thread {
case let groupThread as TSGroupThread:
if groupThread.groupModel.groupMembers.isEmpty {
return false
}
return !identityManager.groupContainsUnverifiedMember(groupThread.uniqueId, tx: tx.asV2Read)
case let contactThread as TSContactThread:
return identityManager.verificationState(for: contactThread.contactAddress, tx: tx.asV2Read) == .verified
default:
owsFailDebug("Showing conversation for unexpected thread type.")
return false
}
}
}