debug relay event timeline for debugging

Signed-off-by: William Casarin <jb55@jb55.com>
This commit is contained in:
William Casarin
2022-04-16 09:35:24 -07:00
parent d3d8b56a08
commit 4491db5cdd

View File

@@ -27,6 +27,7 @@ enum Sheets: Identifiable {
enum Timeline { enum Timeline {
case friends case friends
case global case global
case debug
} }
struct ContentView: View { struct ContentView: View {
@@ -46,47 +47,57 @@ struct ContentView: View {
var MainContent: some View { var MainContent: some View {
ScrollView { ScrollView {
ForEach(events, id: \.id) { ForEach(events, id: \.id) { ev in
if timeline == .global || (timeline == .friends && is_friend($0.pubkey)) { if ev.is_local && timeline == .debug || (timeline == .global && !ev.is_local) || (timeline == .friends && is_friend(ev.pubkey)) {
EventView(event: $0, profile: profiles[$0.pubkey]?.profile) NavigationLink(destination: EventDetailView(event: ev)) {
EventView(event: ev, profile: profiles[ev.pubkey]?.profile)
}
.buttonStyle(PlainButtonStyle())
} }
} }
} }
} }
var TopBar: some View { func TimelineButton(timeline: Timeline, img: String) -> some View {
HStack { Button(action: {switch_timeline(timeline)}) {
Button(action: {switch_timeline(.friends)}) { Label("", systemImage: img)
Label("", systemImage: "person.2") }
} .frame(maxWidth: .infinity)
.padding([.trailing], 50.0) .foregroundColor(self.timeline != timeline ? .gray : .primary)
.foregroundColor(self.timeline == .global ? .gray : .primary) }
Button(action: {switch_timeline(.global)}) { func TopBar(selected: Timeline) -> some View {
Label("", systemImage: "globe.americas") HStack {
TimelineButton(timeline: .friends, img: selected == .friends ? "person.2.fill" : "person.2")
TimelineButton(timeline: .global, img: selected == .global ? "globe.americas.fill" : "globe.americas")
TimelineButton(timeline: .debug, img: selected == .debug ? "wrench.fill" : "wrench")
}
}
var PostButtonContainer: some View {
VStack {
Spacer()
HStack {
Spacer()
PostButton() {
self.active_sheet = .post
}
} }
.padding([.leading], 50.0)
.foregroundColor(self.timeline == .friends ? .gray : .primary)
} }
} }
var body: some View { var body: some View {
VStack { NavigationView {
TopBar VStack {
ZStack { TopBar(selected: self.timeline)
MainContent ZStack {
.padding() MainContent
VStack { .padding()
Spacer() PostButtonContainer
HStack {
Spacer()
PostButton() {
self.active_sheet = .post
}
}
} }
} }
.navigationBarTitle("Damus", displayMode: .inline)
} }
.onAppear() { .onAppear() {
self.connect() self.connect()
@@ -190,10 +201,17 @@ struct ContentView: View {
func handle_event(relay_id: String, conn_event: NostrConnectionEvent) { func handle_event(relay_id: String, conn_event: NostrConnectionEvent) {
switch conn_event { switch conn_event {
case .ws_event(let ev): case .ws_event(let ev):
if let wsev = ws_nostr_event(relay: relay_id, ev: ev) {
wsev.flags |= 1
self.events.insert(wsev, at: 0)
}
switch ev { switch ev {
case .connected: case .connected:
send_filters(relay_id: relay_id) send_filters(relay_id: relay_id)
case .disconnected: fallthrough case .disconnected:
self.pool?.connect(to: [relay_id])
case .cancelled: case .cancelled:
self.pool?.connect(to: [relay_id]) self.pool?.connect(to: [relay_id])
case .reconnectSuggested(let t): case .reconnectSuggested(let t):
@@ -203,6 +221,7 @@ struct ContentView: View {
default: default:
break break
} }
print("ws_event \(ev)") print("ws_event \(ev)")
case .nostr_event(let ev): case .nostr_event(let ev):
@@ -230,6 +249,7 @@ struct ContentView: View {
} }
} }
case .notice(let msg): case .notice(let msg):
self.events.insert(NostrEvent(content: "NOTICE from \(relay_id): \(msg)", pubkey: "system"), at: 0)
print(msg) print(msg)
} }
} }
@@ -287,3 +307,28 @@ func get_profiles()
*/ */
func ws_nostr_event(relay: String, ev: WebSocketEvent) -> NostrEvent? {
switch ev {
case .binary(let dat):
return NostrEvent(content: "binary data? \(dat.count) bytes", pubkey: relay)
case .cancelled:
return NostrEvent(content: "cancelled", pubkey: relay)
case .connected:
return NostrEvent(content: "connected", pubkey: relay)
case .disconnected:
return NostrEvent(content: "disconnected", pubkey: relay)
case .error(let err):
return NostrEvent(content: "error \(err.debugDescription)", pubkey: relay)
case .text(let txt):
return NostrEvent(content: "text \(txt)", pubkey: relay)
case .pong:
return NostrEvent(content: "pong", pubkey: relay)
case .ping:
return NostrEvent(content: "ping", pubkey: relay)
case .viabilityChanged(let b):
return NostrEvent(content: "viabilityChanged \(b)", pubkey: relay)
case .reconnectSuggested(let b):
return NostrEvent(content: "reconnectSuggested \(b)", pubkey: relay)
}
}