TM-SGNL-iOS/SignalServiceKit/Profiles/VersionedProfiles.swift
TeleMessage developers dde0620daf initial commit
2025-05-03 12:28:28 -07:00

123 lines
3.6 KiB
Swift

//
// Copyright 2020 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
import Foundation
public import LibSignalClient
public struct VersionedProfileUpdate {
// This will only be set if there is a profile avatar.
public let avatarUrlPath: OptionalChange<String?>
public init(avatarUrlPath: OptionalChange<String?>) {
self.avatarUrlPath = avatarUrlPath
}
}
// MARK: -
@objc
public protocol VersionedProfiles: AnyObject {
@objc(clearProfileKeyCredentialForServiceId:transaction:)
func clearProfileKeyCredential(
for aci: AciObjC,
transaction: SDSAnyWriteTransaction
)
func clearProfileKeyCredentials(transaction: SDSAnyWriteTransaction)
}
// MARK: -
public protocol VersionedProfilesSwift: VersionedProfiles {
func updateProfile(
profileGivenName: OWSUserProfile.NameComponent?,
profileFamilyName: OWSUserProfile.NameComponent?,
profileBio: String?,
profileBioEmoji: String?,
profileAvatarMutation: VersionedProfileAvatarMutation,
visibleBadgeIds: [String],
profileKey: Aes256Key,
authedAccount: AuthedAccount
) async throws -> VersionedProfileUpdate
func versionedProfileRequest(
for aci: Aci,
profileKey: ProfileKey,
shouldRequestCredential: Bool,
udAccessKey: SMKUDAccessKey?,
auth: ChatServiceAuth
) throws -> VersionedProfileRequest
func validProfileKeyCredential(
for aci: Aci,
transaction: SDSAnyReadTransaction
) throws -> ExpiringProfileKeyCredential?
func didFetchProfile(
profile: SignalServiceProfile,
profileRequest: VersionedProfileRequest
) async
func clearProfileKeyCredentials(tx: DBWriteTransaction)
}
// MARK: -
public enum VersionedProfileAvatarMutation {
/// There's an existing avatar that we want to keep.
case keepAvatar
/// There's either (a) no existing avatar and we don't want one after this
/// change or (b) an existing avatar that we want to clear.
case clearAvatar
/// We want to set a new avatar.
case changeAvatar(Data)
}
// MARK: -
@objc
public class MockVersionedProfiles: NSObject, VersionedProfilesSwift, VersionedProfiles {
public func clearProfileKeyCredential(for aci: AciObjC,
transaction: SDSAnyWriteTransaction) {}
public func clearProfileKeyCredentials(transaction: SDSAnyWriteTransaction) {}
var didClearProfileKeyCredentials = false
public func clearProfileKeyCredentials(tx: DBWriteTransaction) {
didClearProfileKeyCredentials = true
}
public func versionedProfileRequest(
for aci: Aci,
profileKey: ProfileKey,
shouldRequestCredential: Bool,
udAccessKey: SMKUDAccessKey?,
auth: ChatServiceAuth
) throws -> VersionedProfileRequest {
owsFail("Not implemented.")
}
public func didFetchProfile(profile: SignalServiceProfile, profileRequest: VersionedProfileRequest) async {}
public func updateProfile(
profileGivenName: OWSUserProfile.NameComponent?,
profileFamilyName: OWSUserProfile.NameComponent?,
profileBio: String?,
profileBioEmoji: String?,
profileAvatarMutation: VersionedProfileAvatarMutation,
visibleBadgeIds: [String],
profileKey: Aes256Key,
authedAccount: AuthedAccount
) async throws -> VersionedProfileUpdate {
owsFail("Not implemented.")
}
public func validProfileKeyCredential(for aci: Aci,
transaction: SDSAnyReadTransaction) throws -> ExpiringProfileKeyCredential? {
owsFail("Not implemented")
}
}