Signal-iOS/SignalServiceKit/MessageBackup/MessageBackupManager+Shims.swift
2024-01-08 13:30:25 -06:00

131 lines
4.2 KiB
Swift

//
// Copyright 2023 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
import Foundation
import GRDB
import LibSignalClient
public enum MessageBackup {}
extension MessageBackup {
public enum Shims {
public typealias BlockingManager = _MessageBackup_BlockingManagerShim
public typealias ProfileManager = _MessageBackup_ProfileManagerShim
}
public enum Wrappers {
public typealias BlockingManager = _MessageBackup_BlockingManagerWrapper
public typealias ProfileManager = _MessageBackup_ProfileManagerWrapper
}
}
// MARK: - BlockingManager
public protocol _MessageBackup_BlockingManagerShim {
func blockedAddresses(tx: DBReadTransaction) -> Set<SignalServiceAddress>
func addBlockedAddress(_ address: SignalServiceAddress, tx: DBWriteTransaction)
}
public class _MessageBackup_BlockingManagerWrapper: _MessageBackup_BlockingManagerShim {
private let blockingManager: BlockingManager
public init(_ blockingManager: BlockingManager) {
self.blockingManager = blockingManager
}
public func blockedAddresses(tx: DBReadTransaction) -> Set<SignalServiceAddress> {
return blockingManager.blockedAddresses(transaction: SDSDB.shimOnlyBridge(tx))
}
public func addBlockedAddress(_ address: SignalServiceAddress, tx: DBWriteTransaction) {
blockingManager.addBlockedAddress(address, blockMode: .localShouldNotLeaveGroups, transaction: SDSDB.shimOnlyBridge(tx))
}
}
// MARK: - ProfileManager
public protocol _MessageBackup_ProfileManagerShim {
func getUserProfile(for address: SignalServiceAddress, tx: DBReadTransaction) -> OWSUserProfile?
func allWhitelistedRegisteredAddresses(tx: DBReadTransaction) -> [SignalServiceAddress]
func isThread(inProfileWhitelist thread: TSThread, tx: DBReadTransaction) -> Bool
func addToWhitelist(_ address: SignalServiceAddress, tx: DBWriteTransaction)
func addToWhitelist(_ thread: TSGroupThread, tx: DBWriteTransaction)
func setProfileGivenName(
givenName: String?,
familyName: String?,
profileKey: Data?,
address: SignalServiceAddress,
tx: DBWriteTransaction
)
}
public class _MessageBackup_ProfileManagerWrapper: _MessageBackup_ProfileManagerShim {
private let profileManager: ProfileManager
public init(_ profileManager: ProfileManager) {
self.profileManager = profileManager
}
public func getUserProfile(for address: SignalServiceAddress, tx: DBReadTransaction) -> OWSUserProfile? {
profileManager.getUserProfile(for: address, transaction: SDSDB.shimOnlyBridge(tx))
}
public func allWhitelistedRegisteredAddresses(tx: DBReadTransaction) -> [SignalServiceAddress] {
profileManager.allWhitelistedRegisteredAddresses(tx: SDSDB.shimOnlyBridge(tx))
}
public func isThread(inProfileWhitelist thread: TSThread, tx: DBReadTransaction) -> Bool {
profileManager.isThread(inProfileWhitelist: thread, transaction: SDSDB.shimOnlyBridge(tx))
}
public func addToWhitelist(_ address: SignalServiceAddress, tx: DBWriteTransaction) {
profileManager.addUser(
toProfileWhitelist: address,
userProfileWriter: .storageService, /* TODO */
transaction: SDSDB.shimOnlyBridge(tx)
)
}
public func addToWhitelist(_ thread: TSGroupThread, tx: DBWriteTransaction) {
profileManager.addThread(toProfileWhitelist: thread, transaction: SDSDB.shimOnlyBridge(tx))
}
public func setProfileGivenName(
givenName: String?,
familyName: String?,
profileKey: Data?,
address: SignalServiceAddress,
tx: DBWriteTransaction
) {
profileManager.setProfileGivenName(
givenName,
familyName: familyName,
for: address,
userProfileWriter: .storageService /* TODO */,
authedAccount: .implicit(),
transaction: SDSDB.shimOnlyBridge(tx)
)
if let profileKey {
profileManager.setProfileKeyData(
profileKey,
for: address,
userProfileWriter: .storageService, /* TODO */
authedAccount: .implicit(),
transaction: SDSDB.shimOnlyBridge(tx)
)
}
}
}