Cached relay metadata

This commit is contained in:
William Casarin
2023-02-09 15:56:26 -08:00
parent 10596ddb09
commit fe444228e6
12 changed files with 127 additions and 73 deletions

View File

@@ -37,7 +37,7 @@ struct RecommendedRelayView: View {
guard let ev_after_add = add_relay(ev: ev_before_add, privkey: privkey, current_relays: damus.pool.descriptors, relay: relay, info: .rw) else {
return
}
process_contact_event(pool: damus.pool, contacts: damus.contacts, pubkey: damus.pubkey, ev: ev_after_add)
process_contact_event(state: damus, ev: ev_after_add)
damus.pool.send(.event(ev_after_add))
}
}

View File

@@ -67,7 +67,7 @@ struct RelayConfigView: View {
return
}
process_contact_event(pool: state.pool, contacts: state.contacts, pubkey: state.pubkey, ev: ev)
process_contact_event(state: state, ev: ev)
state.pool.send(.event(new_ev))
}

View File

@@ -10,10 +10,9 @@ import SwiftUI
struct RelayDetailView: View {
let state: DamusState
let relay: String
let nip11: RelayMetadata
@State private var errorString: String?
@State private var nip11: RelayMetadata?
@State var conn_color: Color
@Environment(\.dismiss) var dismiss
@@ -69,39 +68,7 @@ struct RelayDetailView: View {
.onReceive(handle_notify(.switched_timeline)) { notif in
dismiss()
}
.navigationTitle(nip11?.name ?? "")
.task {
var urlString = relay.replacingOccurrences(of: "wss://", with: "https://")
urlString = urlString.replacingOccurrences(of: "ws://", with: "http://")
guard let url = URL(string: urlString) else {
return
}
var request = URLRequest(url: url)
request.setValue("application/nostr+json", forHTTPHeaderField: "Accept")
var res: (Data, URLResponse)? = nil
do {
res = try await URLSession.shared.data(for: request)
} catch {
errorString = error.localizedDescription
return
}
guard let data = res?.0 else {
errorString = "Relay not responding to metadata request"
return
}
do {
let nip11 = try JSONDecoder().decode(RelayMetadata.self, from: data)
self.nip11 = nip11
} catch {
errorString = error.localizedDescription
}
}
.navigationTitle(nip11.name ?? "")
}
private func nipsList(nips: [Int]) -> AttributedString {
@@ -124,6 +91,7 @@ struct RelayDetailView: View {
struct RelayDetailView_Previews: PreviewProvider {
static var previews: some View {
RelayDetailView(state: test_damus_state(), relay: "wss://nostr.klabo.blog", conn_color: .green)
let metadata = RelayMetadata(name: "name", description: "desc", pubkey: "pubkey", contact: "contact", supported_nips: [1,2,3], software: "software", version: "version")
RelayDetailView(state: test_damus_state(), relay: "relay", nip11: metadata, conn_color: .green)
}
}

View File

@@ -34,9 +34,13 @@ struct RelayView: View {
Circle()
.frame(width: 8.0, height: 8.0)
.foregroundColor(conn_color)
NavigationLink {
RelayDetailView(state: state, relay: relay, conn_color: conn_color)
} label: {
if let meta = state.relay_metadata.lookup(relay_id: relay) {
NavigationLink {
RelayDetailView(state: state, relay: relay, nip11: meta, conn_color: conn_color)
} label: {
Text(relay)
}
} else {
Text(relay)
}
}
@@ -79,7 +83,7 @@ struct RelayView: View {
return
}
process_contact_event(pool: state.pool, contacts: state.contacts, pubkey: state.pubkey, ev: new_ev)
process_contact_event(state: state, ev: new_ev)
state.pool.send(.event(new_ev))
} label: {
Label(NSLocalizedString("Delete", comment: "Button to delete a relay server that the user connects to."), systemImage: "trash")