From dfc397337be17fabfb8302f3b4e39cf38e272e2e Mon Sep 17 00:00:00 2001 From: ericholguin Date: Thu, 23 Mar 2023 23:52:47 -0600 Subject: [PATCH 1/9] view changes, added more obvious buttons, add relay in same view --- .../bitcoin-logo.imageset/Contents.json | 21 +++ .../bitcoin-logo.imageset/bitcoin-logo.svg | 7 + damus/Views/Relays/RelayConfigView.swift | 158 ++++++++++++------ 3 files changed, 132 insertions(+), 54 deletions(-) create mode 100644 damus/Assets.xcassets/bitcoin-logo.imageset/Contents.json create mode 100644 damus/Assets.xcassets/bitcoin-logo.imageset/bitcoin-logo.svg diff --git a/damus/Assets.xcassets/bitcoin-logo.imageset/Contents.json b/damus/Assets.xcassets/bitcoin-logo.imageset/Contents.json new file mode 100644 index 00000000..41fa8e24 --- /dev/null +++ b/damus/Assets.xcassets/bitcoin-logo.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "bitcoin-logo.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/damus/Assets.xcassets/bitcoin-logo.imageset/bitcoin-logo.svg b/damus/Assets.xcassets/bitcoin-logo.imageset/bitcoin-logo.svg new file mode 100644 index 00000000..d3521bdd --- /dev/null +++ b/damus/Assets.xcassets/bitcoin-logo.imageset/bitcoin-logo.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/damus/Views/Relays/RelayConfigView.swift b/damus/Views/Relays/RelayConfigView.swift index c0393257..13208cf5 100644 --- a/damus/Views/Relays/RelayConfigView.swift +++ b/damus/Views/Relays/RelayConfigView.swift @@ -10,8 +10,8 @@ import SwiftUI struct RelayConfigView: View { let state: DamusState @State var new_relay: String = "" - @State var show_add_relay: Bool = false @State var relays: [RelayDescriptor] + @State private var showActionButtons = false @Environment(\.dismiss) var dismiss @@ -37,72 +37,122 @@ struct RelayConfigView: View { .onReceive(handle_notify(.switched_timeline)) { _ in dismiss() } - .sheet(isPresented: $show_add_relay) { - AddRelayView(show_add_relay: $show_add_relay, relay: $new_relay) { m_relay in - guard var relay = m_relay else { - return - } - - if relay.starts(with: "wss://") == false && relay.starts(with: "ws://") == false { - relay = "wss://" + relay - } - - if relay.hasSuffix("/") { - relay.removeLast(); - } - - guard let url = URL(string: relay) else { - return - } - - guard let ev = state.contacts.event else { - return - } - - guard let privkey = state.keypair.privkey else { - return - } - - let info = RelayInfo.rw - - guard (try? state.pool.add_relay(url, info: info)) != nil else { - return - } - - state.pool.connect(to: [relay]) - - guard let new_ev = add_relay(ev: ev, privkey: privkey, current_relays: state.pool.descriptors, relay: relay, info: info) else { - return - } - - process_contact_event(state: state, ev: ev) - - state.pool.send(.event(new_ev)) - } - } } var MainContent: some View { Form { Section { - List(Array(relays), id: \.url) { relay in - RelayView(state: state, relay: relay.url.absoluteString) - } + AddRelayView(relay: $new_relay) } header: { HStack { - Text("Relays", comment: "Header text for relay server list for configuration.") - Spacer() - Button(action: { show_add_relay = true }) { - Image(systemName: "plus") - .foregroundColor(.accentColor) + Text(NSLocalizedString("Connect To Relay", comment: "Label for section for adding a relay server.")) + .font(.system(size: 18, weight: .heavy)) + .padding(.bottom, 5) + } + } footer: { + VStack { + HStack { + Spacer() + if(!new_relay.isEmpty) { + Button(NSLocalizedString("Cancel", comment: "Button to cancel out of view adding user inputted relay.")) { + new_relay = "" + UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil) + } + .font(.system(size: 14, weight: .bold)) + .frame(width: 80, height: 30) + .foregroundColor(.white) + .background(LINEAR_GRADIENT) + .clipShape(Capsule()) + .padding(EdgeInsets(top: 15, leading: 0, bottom: 0, trailing: 0)) + + Button(NSLocalizedString("Add", comment: "Button to confirm adding user inputted relay.")) { + + if new_relay.starts(with: "wss://") == false && new_relay.starts(with: "ws://") == false { + new_relay = "wss://" + new_relay + } + + if new_relay.hasSuffix("/") { + new_relay.removeLast(); + } + + guard let url = URL(string: new_relay) else { + return + } + + guard let ev = state.contacts.event else { + return + } + + guard let privkey = state.keypair.privkey else { + return + } + + let info = RelayInfo.rw + + guard (try? state.pool.add_relay(url, info: info)) != nil else { + return + } + + state.pool.connect(to: [new_relay]) + + guard let new_ev = add_relay(ev: ev, privkey: privkey, current_relays: state.pool.descriptors, relay: new_relay, info: info) else { + return + } + + process_contact_event(state: state, ev: ev) + + state.pool.send(.event(new_ev)) + + new_relay = "" + + UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil) + } + .font(.system(size: 14, weight: .bold)) + .frame(width: 80, height: 30) + .foregroundColor(.white) + .background(LINEAR_GRADIENT) + .clipShape(Capsule()) + .padding(EdgeInsets(top: 15, leading: 0, bottom: 0, trailing: 0)) + } } } } + Section { + List(Array(relays), id: \.url) { relay in + RelayView(state: state, relay: relay.url.absoluteString, showActionButtons: $showActionButtons) + } + } header: { + HStack { + Text(NSLocalizedString("Connected Relays", comment: "Section title for relay servers that are connected.")) + .font(.system(size: 18, weight: .heavy)) + .padding(.bottom, 5) + } + } + if recommended.count > 0 { - Section(NSLocalizedString("Recommended Relays", comment: "Section title for recommend relay servers that could be added as part of configuration")) { + Section { List(recommended, id: \.url) { r in - RecommendedRelayView(damus: state, relay: r.url.absoluteString) + RecommendedRelayView(damus: state, relay: r.url.absoluteString, showActionButtons: $showActionButtons) + } + } header: { + Text(NSLocalizedString("Recommended Relays", comment: "Section title for recommend relay servers that could be added as part of configuration")) + .font(.system(size: 18, weight: .heavy)) + .padding(.bottom, 5) + } + } + } + .navigationTitle(NSLocalizedString("Relays", comment: "Title of relays view")) + .navigationBarTitleDisplayMode(.large) + .toolbar { + if state.keypair.privkey != nil { + if showActionButtons { + Button("Done") { + showActionButtons.toggle() + } + } else { + Button("Edit") { + showActionButtons.toggle() } } } From e996d5703b94226a7e6d94e803b5615e806041b8 Mon Sep 17 00:00:00 2001 From: ericholguin Date: Thu, 23 Mar 2023 23:53:35 -0600 Subject: [PATCH 2/9] buttons moved to relay config view to be outside of form --- damus/Views/AddRelayView.swift | 71 ++++++++++------------------------ 1 file changed, 20 insertions(+), 51 deletions(-) diff --git a/damus/Views/AddRelayView.swift b/damus/Views/AddRelayView.swift index cb9b5299..832018b4 100644 --- a/damus/Views/AddRelayView.swift +++ b/damus/Views/AddRelayView.swift @@ -8,72 +8,41 @@ import SwiftUI struct AddRelayView: View { - @Binding var show_add_relay: Bool @Binding var relay: String - let action: (String?) -> Void - var body: some View { - VStack(alignment: .leading) { - Form { - Section(NSLocalizedString("Add Relay", comment: "Label for section for adding a relay server.")) { - ZStack(alignment: .leading) { - HStack{ - TextField(NSLocalizedString("wss://some.relay.com", comment: "Placeholder example for relay server address."), text: $relay) - .padding(2) - .padding(.leading, 25) - .autocorrectionDisabled(true) - .textInputAutocapitalization(.never) - - Label("", systemImage: "xmark.circle.fill") - .foregroundColor(.blue) - .padding(.trailing, -25.0) - .opacity((relay == "") ? 0.0 : 1.0) - .onTapGesture { - self.relay = "" - } - } - - Label("", systemImage: "doc.on.clipboard") - .padding(.leading, -10) - .onTapGesture { - if let pastedrelay = UIPasteboard.general.string { - self.relay = pastedrelay - } - } + ZStack(alignment: .leading) { + HStack{ + TextField(NSLocalizedString("wss://some.relay.com", comment: "Placeholder example for relay server address."), text: $relay) + .padding(2) + .padding(.leading, 25) + .autocorrectionDisabled(true) + .textInputAutocapitalization(.never) + + Label("", systemImage: "xmark.circle.fill") + .foregroundColor(.accentColor) + .padding(.trailing, -25.0) + .opacity((relay == "") ? 0.0 : 1.0) + .onTapGesture { + self.relay = "" } - } } - VStack { - HStack { - Button(NSLocalizedString("Cancel", comment: "Button to cancel out of view adding user inputted relay.")) { - show_add_relay = false - action(nil) - } - .contentShape(Rectangle()) - - Spacer() - - Button(NSLocalizedString("Add", comment: "Button to confirm adding user inputted relay.")) { - show_add_relay = false - action(relay) - relay = "" - } - .buttonStyle(.borderedProminent) - .contentShape(Rectangle()) + Label("", systemImage: "doc.on.clipboard") + .padding(.leading, -10) + .onTapGesture { + if let pastedrelay = UIPasteboard.general.string { + self.relay = pastedrelay } - .padding() } } } } struct AddRelayView_Previews: PreviewProvider { - @State static var show: Bool = true @State static var relay: String = "" static var previews: some View { - AddRelayView(show_add_relay: $show, relay: $relay, action: {_ in }) + AddRelayView(relay: $relay) } } From 8297859f188287fd8a111d76bc486e81c7c6dff3 Mon Sep 17 00:00:00 2001 From: ericholguin Date: Thu, 23 Mar 2023 23:54:22 -0600 Subject: [PATCH 3/9] made relay removal more obvious --- damus/Views/Relays/RelayView.swift | 58 +++++++++++++++++++++--------- 1 file changed, 42 insertions(+), 16 deletions(-) diff --git a/damus/Views/Relays/RelayView.swift b/damus/Views/Relays/RelayView.swift index 4a5fa01b..2facc40a 100644 --- a/damus/Views/Relays/RelayView.swift +++ b/damus/Views/Relays/RelayView.swift @@ -11,32 +11,53 @@ struct RelayView: View { let state: DamusState let relay: String + @Binding var showActionButtons: Bool + var body: some View { Group { HStack { - RelayStatus(pool: state.pool, relay: relay) - RelayType(is_paid: state.relay_metadata.lookup(relay_id: relay)?.is_paid ?? false) - if let meta = state.relay_metadata.lookup(relay_id: relay) { - NavigationLink { - RelayDetailView(state: state, relay: relay, nip11: meta) - } label: { - Text(relay) + if let privkey = state.keypair.privkey { + if showActionButtons { + RemoveButton(privkey: privkey, showText: false) } + else { + RelayStatus(pool: state.pool, relay: relay) + } + } + + RelayType(is_paid: state.relay_metadata.lookup(relay_id: relay)?.is_paid ?? false) + + if let meta = state.relay_metadata.lookup(relay_id: relay) { + Text(relay) + .background( + NavigationLink("", destination: RelayDetailView(state: state, relay: relay, nip11: meta)).opacity(0.0) + .disabled(showActionButtons) + ) + Spacer() + + Image(systemName: "info.circle") + .font(.system(size: 20, weight: .medium)) + .foregroundColor(Color.accentColor) } else { Text(relay) + Spacer() + Image(systemName: "questionmark.circle") + .font(.system(size: 20, weight: .medium)) + .foregroundColor(.gray) } } } .swipeActions { if let privkey = state.keypair.privkey { - RemoveAction(privkey: privkey) + RemoveButton(privkey: privkey, showText: false) + .tint(.red) } } .contextMenu { CopyAction(relay: relay) if let privkey = state.keypair.privkey { - RemoveAction(privkey: privkey) + RemoveButton(privkey: privkey, showText: true) } } } @@ -48,9 +69,9 @@ struct RelayView: View { Label(NSLocalizedString("Copy", comment: "Button to copy a relay server address."), systemImage: "doc.on.doc") } } - - func RemoveAction(privkey: String) -> some View { - Button { + + func RemoveButton(privkey: String, showText: Bool) -> some View { + Button(action: { guard let ev = state.contacts.event else { return } @@ -62,15 +83,20 @@ struct RelayView: View { 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") + }) { + if showText { + Text(NSLocalizedString("Disconnect", comment: "Button to disconnect from a relay server.")) + } + Image(systemName: "minus.circle.fill") + .font(.system(size: 20, weight: .medium)) + .foregroundColor(.red) + .padding(.leading, 5) } - .tint(.red) } } struct RelayView_Previews: PreviewProvider { static var previews: some View { - RelayView(state: test_damus_state(), relay: "wss://relay.damus.io") + RelayView(state: test_damus_state(), relay: "wss://relay.damus.io", showActionButtons: .constant(false)) } } From 13c0c0d6792559c705af852756d1e4873edfa470 Mon Sep 17 00:00:00 2001 From: ericholguin Date: Thu, 23 Mar 2023 23:54:42 -0600 Subject: [PATCH 4/9] made relay addition more obvious --- damus/Views/Relays/RecommendedRelayView.swift | 75 +++++++++++++++---- 1 file changed, 60 insertions(+), 15 deletions(-) diff --git a/damus/Views/Relays/RecommendedRelayView.swift b/damus/Views/Relays/RecommendedRelayView.swift index c76bcd04..76b9dc5d 100644 --- a/damus/Views/Relays/RecommendedRelayView.swift +++ b/damus/Views/Relays/RecommendedRelayView.swift @@ -12,22 +12,33 @@ struct RecommendedRelayView: View { let relay: String let add_button: Bool - init(damus: DamusState, relay: String) { + @Binding var showActionButtons: Bool + + init(damus: DamusState, relay: String, showActionButtons: Binding) { self.damus = damus self.relay = relay self.add_button = true + self._showActionButtons = showActionButtons } - init(damus: DamusState, relay: String, add_button: Bool) { + init(damus: DamusState, relay: String, add_button: Bool, showActionButtons: Binding) { self.damus = damus self.relay = relay self.add_button = add_button + self._showActionButtons = showActionButtons } var body: some View { ZStack { HStack { + if let privkey = damus.keypair.privkey { + if showActionButtons && add_button { + AddButton(privkey: privkey, showText: false) + } + } + RelayType(is_paid: damus.relay_metadata.lookup(relay_id: relay)?.is_paid ?? false) + Text(relay).layoutPriority(1) if let meta = damus.relay_metadata.lookup(relay_id: relay) { @@ -37,41 +48,75 @@ struct RecommendedRelayView: View { EmptyView() } .opacity(0.0) + .disabled(showActionButtons) Spacer() + Image(systemName: "info.circle") + .font(.system(size: 20, weight: .medium)) .foregroundColor(Color.accentColor) + } else { + Spacer() + + Image(systemName: "questionmark.circle") + .font(.system(size: 20, weight: .medium)) + .foregroundColor(.gray) } } } .swipeActions { if add_button { if let privkey = damus.keypair.privkey { - AddAction(privkey: privkey) + AddButton(privkey: privkey, showText: false) + .tint(.accentColor) } } } + .contextMenu { + CopyAction(relay: relay) + + if let privkey = damus.keypair.privkey { + AddButton(privkey: privkey, showText: true) + } + } } - func AddAction(privkey: String) -> some View { + func CopyAction(relay: String) -> some View { Button { - guard let ev_before_add = damus.contacts.event else { - return - } - 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(state: damus, ev: ev_after_add) - damus.pool.send(.event(ev_after_add)) + UIPasteboard.general.setValue(relay, forPasteboardType: "public.plain-text") } label: { - Label(NSLocalizedString("Add Relay", comment: "Button to add recommended relay server."), systemImage: "plus.circle") + Label(NSLocalizedString("Copy", comment: "Button to copy a relay server address."), systemImage: "doc.on.doc") } - .tint(.accentColor) + } + + func AddButton(privkey: String, showText: Bool) -> some View { + Button(action: { + add_action(privkey: privkey) + }) { + if showText { + Text(NSLocalizedString("Connect", comment: "Button to connect to recommended relay server.")) + } + Image(systemName: "plus.circle.fill") + .font(.system(size: 20, weight: .medium)) + .foregroundColor(.accentColor) + .padding(.leading, 5) + } + } + + func add_action(privkey: String) { + guard let ev_before_add = damus.contacts.event else { + return + } + 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(state: damus, ev: ev_after_add) + damus.pool.send(.event(ev_after_add)) } } struct RecommendedRelayView_Previews: PreviewProvider { static var previews: some View { - RecommendedRelayView(damus: test_damus_state(), relay: "wss://relay.damus.io") + RecommendedRelayView(damus: test_damus_state(), relay: "wss://relay.damus.io", showActionButtons: .constant(false)) } } From 4ebdd01b6c39b406c0cff63a181734bb94d5e42f Mon Sep 17 00:00:00 2001 From: ericholguin Date: Thu, 23 Mar 2023 23:55:14 -0600 Subject: [PATCH 5/9] use bitcoin logo instead of dirty fiat --- damus/Views/Relays/RelayType.swift | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/damus/Views/Relays/RelayType.swift b/damus/Views/Relays/RelayType.swift index 40e3d54c..6aeb5746 100644 --- a/damus/Views/Relays/RelayType.swift +++ b/damus/Views/Relays/RelayType.swift @@ -11,9 +11,12 @@ struct RelayType: View { let is_paid: Bool var body: some View { - - Image(systemName: is_paid ? "dollarsign.circle.fill" : "globe.americas.fill") - .foregroundColor(is_paid ? Color("DamusGreen") : .gray) + if is_paid { + Image("bitcoin-logo") + } else { + Image(systemName: "globe.americas.fill") + .foregroundColor(.gray) + } } } From 5e972dbf2dfb770524c9f2cbee97ea5adc899929 Mon Sep 17 00:00:00 2001 From: ericholguin Date: Thu, 23 Mar 2023 23:55:40 -0600 Subject: [PATCH 6/9] Use more recognized icons --- damus/Views/Relays/RelayStatus.swift | 37 +++++++++++++++++++--------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/damus/Views/Relays/RelayStatus.swift b/damus/Views/Relays/RelayStatus.swift index 47cada28..b05187aa 100644 --- a/damus/Views/Relays/RelayStatus.swift +++ b/damus/Views/Relays/RelayStatus.swift @@ -14,16 +14,21 @@ struct RelayStatus: View { let timer = Timer.publish(every: 2, on: .main, in: .common).autoconnect() @State var conn_color: Color = .gray + @State var conn_image: String = "wifi.slash" + @State var connecting: Bool = false - func update_connection_color() { + func update_connection() { for relay in pool.relays { if relay.id == self.relay { let c = relay.connection if c.isConnected { - conn_color = .green + conn_image = "checkmark" + conn_color = .accentColor } else if c.isConnecting || c.isReconnecting { - conn_color = .yellow + connecting = true } else { + //conn_image = "wifi.exclamationmark" + conn_image = "xmark" conn_color = .red } } @@ -31,15 +36,25 @@ struct RelayStatus: View { } var body: some View { - Circle() - .frame(width: 8.0, height: 8.0) - .foregroundColor(conn_color) - .onReceive(timer) { _ in - update_connection_color() - } - .onAppear() { - update_connection_color() + HStack { + if connecting { + ProgressView() + .padding(.trailing, 5) + } else { + Image(systemName: conn_image) + .frame(width: 8.0, height: 8.0) + .foregroundColor(conn_color) + .padding(.leading, 5) + .padding(.trailing, 10) } + } + .onReceive(timer) { _ in + update_connection() + } + .onAppear() { + update_connection() + } + } } From 6fc70748fe6a66c60cb2e3c1123a6e58d6af4664 Mon Sep 17 00:00:00 2001 From: ericholguin Date: Thu, 23 Mar 2023 23:56:04 -0600 Subject: [PATCH 7/9] connect or disconnect from relay detail view --- damus/Views/Relays/RelayDetailView.swift | 46 ++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/damus/Views/Relays/RelayDetailView.swift b/damus/Views/Relays/RelayDetailView.swift index c5dcbbf9..aca3a793 100644 --- a/damus/Views/Relays/RelayDetailView.swift +++ b/damus/Views/Relays/RelayDetailView.swift @@ -16,6 +16,15 @@ struct RelayDetailView: View { @Environment(\.dismiss) var dismiss + func check_connection() -> Bool { + for relay in state.pool.relays { + if relay.id == self.relay { + return true + } + } + return false + } + func FieldText(_ str: String?) -> some View { Text(str ?? "No data available") } @@ -23,6 +32,42 @@ struct RelayDetailView: View { var body: some View { Group { Form { + + if let privkey = state.keypair.privkey { + if check_connection() { + Button(action: { + guard let ev = state.contacts.event else { + return + } + + let descriptors = state.pool.descriptors + guard let new_ev = remove_relay( ev: ev, current_relays: descriptors, privkey: privkey, relay: relay) else { + return + } + + process_contact_event(state: state, ev: new_ev) + state.pool.send(.event(new_ev)) + dismiss() + }) { + Text("Disconnect From Relay", comment: "Button to disconnect from the relay.") + } + } else { + Button(action: { + guard let ev_before_add = state.contacts.event else { + return + } + guard let ev_after_add = add_relay(ev: ev_before_add, privkey: privkey, current_relays: state.pool.descriptors, relay: relay, info: .rw) else { + return + } + process_contact_event(state: state, ev: ev_after_add) + state.pool.send(.event(ev_after_add)) + dismiss() + }) { + Text("Connect To Relay", comment: "Button to connect to the relay.") + } + } + } + if let pubkey = nip11.pubkey { Section(NSLocalizedString("Admin", comment: "Label to display relay contact user.")) { UserView(damus_state: state, pubkey: pubkey) @@ -68,6 +113,7 @@ struct RelayDetailView: View { dismiss() } .navigationTitle(nip11.name ?? "") + .navigationBarTitleDisplayMode(.inline) } private func nipsList(nips: [Int]) -> AttributedString { From b2ee924692641f0c0b53a675adadf9edc1f4d584 Mon Sep 17 00:00:00 2001 From: ericholguin Date: Thu, 23 Mar 2023 23:56:31 -0600 Subject: [PATCH 8/9] add button to make relay adds more obvious --- damus/Views/UserRelaysView.swift | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/damus/Views/UserRelaysView.swift b/damus/Views/UserRelaysView.swift index e7897a31..83a3e98e 100644 --- a/damus/Views/UserRelaysView.swift +++ b/damus/Views/UserRelaysView.swift @@ -13,6 +13,7 @@ struct UserRelaysView: View { let relays: [String] @State var relay_state: [(String, Bool)] + @State private var showAddButton = false init (state: DamusState, pubkey: String, relays: [String]) { self.state = state @@ -30,12 +31,25 @@ struct UserRelaysView: View { var body: some View { List(relay_state, id: \.0) { (r, add) in - RecommendedRelayView(damus: state, relay: r, add_button: add) + RecommendedRelayView(damus: state, relay: r, add_button: add, showActionButtons: $showAddButton) } .onReceive(handle_notify(.relays_changed)) { _ in self.relay_state = UserRelaysView.make_relay_state(pool: state.pool, relays: self.relays) } .navigationBarTitle("Relays") + .toolbar{ + if state.keypair.privkey != nil { + if showAddButton { + Button("Done") { + showAddButton.toggle() + } + } else { + Button("Show Add") { + showAddButton.toggle() + } + } + } + } } } From d15a2f04017e5f4af3b8a83d7ce57575c2f6744b Mon Sep 17 00:00:00 2001 From: ericholguin Date: Sat, 25 Mar 2023 08:22:19 -0600 Subject: [PATCH 9/9] update icons --- .../bitcoin-logo.imageset/bitcoin-logo.svg | 4 ++-- damus/Views/Relays/RecommendedRelayView.swift | 4 ++-- damus/Views/Relays/RelayStatus.swift | 11 +++++------ damus/Views/Relays/RelayView.swift | 4 ++-- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/damus/Assets.xcassets/bitcoin-logo.imageset/bitcoin-logo.svg b/damus/Assets.xcassets/bitcoin-logo.imageset/bitcoin-logo.svg index d3521bdd..cf814514 100644 --- a/damus/Assets.xcassets/bitcoin-logo.imageset/bitcoin-logo.svg +++ b/damus/Assets.xcassets/bitcoin-logo.imageset/bitcoin-logo.svg @@ -1,7 +1,7 @@ - - + + diff --git a/damus/Views/Relays/RecommendedRelayView.swift b/damus/Views/Relays/RecommendedRelayView.swift index 76b9dc5d..c3537b26 100644 --- a/damus/Views/Relays/RecommendedRelayView.swift +++ b/damus/Views/Relays/RecommendedRelayView.swift @@ -53,13 +53,13 @@ struct RecommendedRelayView: View { Spacer() Image(systemName: "info.circle") - .font(.system(size: 20, weight: .medium)) + .font(.system(size: 20, weight: .regular)) .foregroundColor(Color.accentColor) } else { Spacer() Image(systemName: "questionmark.circle") - .font(.system(size: 20, weight: .medium)) + .font(.system(size: 20, weight: .regular)) .foregroundColor(.gray) } } diff --git a/damus/Views/Relays/RelayStatus.swift b/damus/Views/Relays/RelayStatus.swift index b05187aa..b711bcf9 100644 --- a/damus/Views/Relays/RelayStatus.swift +++ b/damus/Views/Relays/RelayStatus.swift @@ -14,7 +14,7 @@ struct RelayStatus: View { let timer = Timer.publish(every: 2, on: .main, in: .common).autoconnect() @State var conn_color: Color = .gray - @State var conn_image: String = "wifi.slash" + @State var conn_image: String = "network" @State var connecting: Bool = false func update_connection() { @@ -22,13 +22,12 @@ struct RelayStatus: View { if relay.id == self.relay { let c = relay.connection if c.isConnected { - conn_image = "checkmark" - conn_color = .accentColor + conn_image = "network" + conn_color = .green } else if c.isConnecting || c.isReconnecting { connecting = true } else { - //conn_image = "wifi.exclamationmark" - conn_image = "xmark" + conn_image = "exclamationmark.circle.fill" conn_color = .red } } @@ -39,7 +38,7 @@ struct RelayStatus: View { HStack { if connecting { ProgressView() - .padding(.trailing, 5) + .padding(.trailing, 4) } else { Image(systemName: conn_image) .frame(width: 8.0, height: 8.0) diff --git a/damus/Views/Relays/RelayView.swift b/damus/Views/Relays/RelayView.swift index 2facc40a..62e91c90 100644 --- a/damus/Views/Relays/RelayView.swift +++ b/damus/Views/Relays/RelayView.swift @@ -36,13 +36,13 @@ struct RelayView: View { Spacer() Image(systemName: "info.circle") - .font(.system(size: 20, weight: .medium)) + .font(.system(size: 20, weight: .regular)) .foregroundColor(Color.accentColor) } else { Text(relay) Spacer() Image(systemName: "questionmark.circle") - .font(.system(size: 20, weight: .medium)) + .font(.system(size: 20, weight: .regular)) .foregroundColor(.gray) } }