Untitled
unknown
swift
4 years ago
2.8 kB
13
Indexable
struct HotspotTimelineProvider: TimelineProvider {
typealias Entry = HotspotTimelineEntry
let service = Service.shared
func placeholder(in context: Context) -> HotspotTimelineEntry {
HotspotTimelineEntry.placeholder
}
func getSnapshot(in context: Context, completion: @escaping (HotspotTimelineEntry) -> Void) {
if context.isPreview {
completion(HotspotTimelineEntry.placeholder)
} else {
fetchData { result in
switch result {
case .success(let entry):
completion(entry)
case .failure(_):
completion(HotspotTimelineEntry.placeholder)
}
}
}
}
func getTimeline(in context: Context, completion: @escaping (Timeline<HotspotTimelineEntry>) -> Void) {
fetchData { result in
switch result {
case .success(let entry):
let timeline = Timeline(entries: [entry], policy: .after(Date().addingTimeInterval(60 * 10)))
completion(timeline)
case .failure(_):
let timeline = Timeline(entries: [HotspotTimelineEntry.placeholder], policy: .after(Date().addingTimeInterval(60 * 2)))
completion(timeline)
}
}
}
private func fetchData(completion: @escaping (Result<HotspotTimelineEntry, Error>) -> ()) {
service.fetchRequest(APIKey: "1v5a755imf0n24hqjkgspk18b582soa74fmy981tmrhkluhfhm", SerialNumber: "110991628214200969") { result in
switch result {
case .success(let heliumData):
let entry = HotspotTimelineEntry(date: Date(), hotspots: .init(connected: heliumData.data?.connected, dialable: heliumData.data?.dialable, ipPublic: heliumData.data?.ipPublic, ipEthLocal: heliumData.data?.ipEthLocal, ipWifiLocal: heliumData.data?.ipWifiLocal, syncList: heliumData.data?.syncList, p2PAddress: heliumData.data?.p2PAddress, blockStatus: heliumData.data?.blockStatus, uptime: heliumData.data?.uptime, relay: heliumData.data?.relay, sn: heliumData.data?.sn, address: heliumData.data?.address, heliumOnline: heliumData.data?.heliumOnline, name: heliumData.data?.name, owner: heliumData.data?.owner, p2PAddressUpdateAt: heliumData.data?.p2PAddressUpdateAt, producedAt: heliumData.data?.producedAt, version: heliumData.data?.version, sdPercentage: heliumData.data?.sdPercentage, synced: heliumData.data?.synced, online: heliumData.data?.online, isHealth: heliumData.data?.isHealth, relayed: heliumData.data?.relayed, networkStatus: heliumData.data?.networkStatus))
case .failure(let error):
completion(.failure(error))
}
}
}
}
Editor is loading...