damus

nostr ios client
git clone git://jb55.com/damus
Log | Files | Refs | README | LICENSE

RelayView.swift (2713B)


      1 //
      2 //  RelayView.swift
      3 //  damus
      4 //
      5 //  Created by William Casarin on 2022-10-16.
      6 //
      7 
      8 import SwiftUI
      9 
     10 struct RelayView: View {
     11     let state: DamusState
     12     let relay: String
     13     
     14     let timer = Timer.publish(every: 2, on: .main, in: .common).autoconnect()
     15     @State var conn_color: Color = .gray
     16     
     17     func update_connection_color() {
     18         for relay in state.pool.relays {
     19             if relay.id == self.relay {
     20                 let c = relay.connection
     21                 if c.isConnected {
     22                     conn_color = .green
     23                 } else if c.isConnecting || c.isReconnecting {
     24                     conn_color = .yellow
     25                 } else {
     26                     conn_color = .red
     27                 }
     28             }
     29         }
     30     }
     31     
     32     var body: some View {
     33         HStack {
     34             Circle()
     35                 .frame(width: 8.0, height: 8.0)
     36                 .foregroundColor(conn_color)
     37             Text(relay)
     38         }
     39         .onReceive(timer) { _ in
     40             update_connection_color()
     41         }
     42         .onAppear() {
     43             update_connection_color()
     44         }
     45         .swipeActions {
     46             if let privkey = state.keypair.privkey {
     47                 RemoveAction(privkey: privkey)
     48             }
     49         }
     50         .contextMenu {
     51             CopyAction(relay: relay)
     52             
     53             if let privkey = state.keypair.privkey {
     54                 RemoveAction(privkey: privkey)
     55             }
     56         }
     57     }
     58     
     59     func CopyAction(relay: String) -> some View {
     60         Button {
     61             UIPasteboard.general.setValue(relay, forPasteboardType: "public.plain-text")
     62         } label: {
     63             Label(NSLocalizedString("Copy", comment: "Button to copy a relay server address."), systemImage: "doc.on.doc")
     64         }
     65     }
     66     
     67     func RemoveAction(privkey: String) -> some View {
     68         Button {
     69             guard let ev = state.contacts.event else {
     70                 return
     71             }
     72             
     73             let descriptors = state.pool.descriptors
     74             guard let new_ev = remove_relay( ev: ev, current_relays: descriptors, privkey: privkey, relay: relay) else {
     75                 return
     76             }
     77             
     78             process_contact_event(pool: state.pool, contacts: state.contacts, pubkey: state.pubkey, ev: new_ev)
     79             state.pool.send(.event(new_ev))
     80         } label: {
     81             Label(NSLocalizedString("Delete", comment: "Button to delete a relay server that the user connects to."), systemImage: "trash")
     82         }
     83         .tint(.red)
     84     }
     85 }
     86 
     87 struct RelayView_Previews: PreviewProvider {
     88     static var previews: some View {
     89         RelayView(state: test_damus_state(), relay: "wss://relay.damus.io", conn_color: .red)
     90     }
     91 }