loading indicator

Signed-off-by: William Casarin <jb55@jb55.com>
This commit is contained in:
William Casarin
2022-04-18 16:35:18 -07:00
parent f2265153fa
commit 914520205e
2 changed files with 13 additions and 7 deletions

View File

@@ -95,7 +95,12 @@ struct ContentView: View {
var body: some View { var body: some View {
NavigationView { NavigationView {
VStack { VStack {
TopBar(selected: self.timeline) if self.loading {
ProgressView()
.progressViewStyle(.circular)
.padding([.bottom], 4)
}
ZStack { ZStack {
if let pool = self.pool { if let pool = self.pool {
MainContent(pool: pool) MainContent(pool: pool)
@@ -103,6 +108,7 @@ struct ContentView: View {
} }
PostButtonContainer PostButtonContainer
} }
TopBar(selected: self.timeline ?? .friends)
} }
.navigationBarTitle("Damus", displayMode: .inline) .navigationBarTitle("Damus", displayMode: .inline)
} }
@@ -220,14 +226,14 @@ struct ContentView: View {
switch ev { switch ev {
case .connected: case .connected:
self.loading = ((self.pool?.num_connecting ?? 0) > 0)
send_filters(relay_id: relay_id) send_filters(relay_id: relay_id)
case .error(let merr): case .error(let merr):
let desc = merr.debugDescription let desc = merr.debugDescription
if desc.contains("Software caused connection abort") { if desc.contains("Software caused connection abort") {
self.pool?.reconnect(to: [relay_id]) self.pool?.reconnect(to: [relay_id])
} }
case .disconnected: case .disconnected: fallthrough
self.pool?.reconnect(to: [relay_id])
case .cancelled: case .cancelled:
self.pool?.reconnect(to: [relay_id]) self.pool?.reconnect(to: [relay_id])
case .reconnectSuggested(let t): case .reconnectSuggested(let t):
@@ -248,10 +254,6 @@ struct ContentView: View {
return return
} }
if self.loading {
self.loading = false
}
if has_events[ev.id] == nil { if has_events[ev.id] == nil {
has_events[ev.id] = () has_events[ev.id] = ()
let last_k = last_event_of_kind[ev.kind] let last_k = last_event_of_kind[ev.kind]

View File

@@ -35,6 +35,10 @@ class RelayPool {
var descriptors: [RelayDescriptor] { var descriptors: [RelayDescriptor] {
relays.map { $0.descriptor } relays.map { $0.descriptor }
} }
var num_connecting: Int {
return relays.reduce(0) { n, r in n + (r.connection.isConnecting ? 1 : 0) }
}
func remove_handler(sub_id: String) { func remove_handler(sub_id: String) {
handlers = handlers.filter { $0.sub_id != sub_id } handlers = handlers.filter { $0.sub_id != sub_id }