mirror of https://github.com/lukechilds/damus.git
committed by
GitHub
17 changed files with 309 additions and 87 deletions
@ -0,0 +1,50 @@ |
|||||
|
// |
||||
|
// RecommendedRelayView.swift |
||||
|
// damus |
||||
|
// |
||||
|
// Created by William Casarin on 2022-12-29. |
||||
|
// |
||||
|
|
||||
|
import SwiftUI |
||||
|
|
||||
|
struct RecommendedRelayView: View { |
||||
|
let damus: DamusState |
||||
|
let relay: String |
||||
|
let add_button: Bool |
||||
|
|
||||
|
init(damus: DamusState, relay: String) { |
||||
|
self.damus = damus |
||||
|
self.relay = relay |
||||
|
self.add_button = true |
||||
|
} |
||||
|
|
||||
|
init(damus: DamusState, relay: String, add_button: Bool) { |
||||
|
self.damus = damus |
||||
|
self.relay = relay |
||||
|
self.add_button = add_button |
||||
|
} |
||||
|
|
||||
|
var body: some View { |
||||
|
HStack { |
||||
|
Text(relay) |
||||
|
Spacer() |
||||
|
if let ev = damus.contacts.event, add_button { |
||||
|
if let privkey = damus.keypair.privkey { |
||||
|
Button("Add") { |
||||
|
guard let ev = add_relay(ev: ev, 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) |
||||
|
damus.pool.send(.event(ev)) |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
struct RecommendedRelayView_Previews: PreviewProvider { |
||||
|
static var previews: some View { |
||||
|
RecommendedRelayView(damus: test_damus_state(), relay: "wss://relay.damus.io") |
||||
|
} |
||||
|
} |
@ -0,0 +1,46 @@ |
|||||
|
// |
||||
|
// UserRelaysView.swift |
||||
|
// damus |
||||
|
// |
||||
|
// Created by William Casarin on 2022-12-29. |
||||
|
// |
||||
|
|
||||
|
import SwiftUI |
||||
|
|
||||
|
struct UserRelaysView: View { |
||||
|
let state: DamusState |
||||
|
let pubkey: String |
||||
|
let relays: [String] |
||||
|
|
||||
|
@State var relay_state: [(String, Bool)] |
||||
|
|
||||
|
init (state: DamusState, pubkey: String, relays: [String]) { |
||||
|
self.state = state |
||||
|
self.pubkey = pubkey |
||||
|
self.relays = relays |
||||
|
let relay_state = UserRelaysView.make_relay_state(pool: state.pool, relays: relays) |
||||
|
self._relay_state = State(initialValue: relay_state) |
||||
|
} |
||||
|
|
||||
|
static func make_relay_state(pool: RelayPool, relays: [String]) -> [(String, Bool)] { |
||||
|
return relays.map({ r in |
||||
|
return (r, pool.get_relay(r) == nil) |
||||
|
}).sorted { (a, b) in a.0 < b.0 } |
||||
|
} |
||||
|
|
||||
|
var body: some View { |
||||
|
List(relay_state, id: \.0) { (r, add) in |
||||
|
RecommendedRelayView(damus: state, relay: r, add_button: add) |
||||
|
} |
||||
|
.onReceive(handle_notify(.relays_changed)) { _ in |
||||
|
self.relay_state = UserRelaysView.make_relay_state(pool: state.pool, relays: self.relays) |
||||
|
} |
||||
|
.navigationBarTitle("Relays") |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
struct UserRelaysView_Previews: PreviewProvider { |
||||
|
static var previews: some View { |
||||
|
UserRelaysView(state: test_damus_state(), pubkey: "", relays: []) |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue