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