cloud-dns-ios/dns/BlockedCount.swift

69 lines
1.6 KiB
Swift

import SwiftUI
import Foundation
import AsyncDNSResolver
struct BlockedCount: View {
@Environment(\.scenePhase)
private var scenePhase
@EnvironmentObject
private var viewModel: ViewModel
@State private var txtRecord: String = ""
private static let startIndex = 44
private static let formatter: NumberFormatter = {
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
return formatter
}()
var body: some View {
Text(txtRecord)
.onAppear {
fetchTxtRecord()
}
.onChange(of: viewModel.blocklist) { _ in
fetchTxtRecord()
}
.onChange(of: scenePhase) { newPhase in
if newPhase == .active {
fetchTxtRecord()
}
}
}
private func fetchTxtRecord() {
Task {
do {
let resolver = try AsyncDNSResolver()
let records = try await resolver.queryTXT(name: "stats.invalid")
let text = records.map { $0.txt }.joined()
if let number = text.split(separator: " ").first,
let intValue = Int(number),
let formatted = Self.formatter.string(for: intValue)
{
txtRecord = formatted
}
else {
txtRecord = NSLocalizedString("Error", comment: "")
}
}
catch {
txtRecord = NSLocalizedString("Error", comment: "")
}
}
}
}
#Preview {
BlockedCount()
.environmentObject(ViewModel())
}