mirror of
https://github.com/luxfi/safe-ios.git
synced 2026-10-30 15:19:20 +00:00
52 lines
1.6 KiB
Swift
52 lines
1.6 KiB
Swift
//
|
|
// ENSNameLoader.swift
|
|
// Multisig
|
|
//
|
|
// Created by Dmitry Bespalov on 06.05.20.
|
|
// Copyright © 2020 Gnosis Ltd. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
import Combine
|
|
|
|
protocol ENSNameLoaderDelegate {
|
|
func ensNameLoaderDidLoadName(_ loader: ENSNameLoader)
|
|
}
|
|
|
|
class ENSNameLoader: ObservableObject {
|
|
private var subscribers = Set<AnyCancellable>()
|
|
private var delegate: ENSNameLoaderDelegate?
|
|
|
|
@Published
|
|
var isLoading: Bool = true
|
|
|
|
init(safe: Safe, delegate: ENSNameLoaderDelegate? = nil) {
|
|
self.delegate = delegate
|
|
Just(safe.address!)
|
|
.compactMap { Address($0) }
|
|
.receive(on: DispatchQueue.global())
|
|
.map { address -> String? in
|
|
let chain = safe.chain!
|
|
|
|
if let ensRegistryAddress = AddressString(chain.ensRegistryAddress ?? "") {
|
|
let manager = BlockchainDomainManager(rpcURL: chain.authenticatedRpcUrl,
|
|
chainId: chain.id!,
|
|
ensRegistryAddress: ensRegistryAddress)
|
|
return manager.ensName(for: address)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
.receive(on: RunLoop.main)
|
|
.sink(receiveCompletion: { [weak self] completion in
|
|
self?.isLoading = false
|
|
}, receiveValue: { [weak self, unowned safe] ensName in
|
|
safe.ensName = ensName
|
|
guard let `self` = self else { return }
|
|
self.delegate?.ensNameLoaderDidLoadName(self)
|
|
})
|
|
.store(in: &subscribers)
|
|
}
|
|
|
|
}
|