ScenePhase observing

This commit is contained in:
Djorkaeff Alexandre 2024-02-01 18:04:27 -03:00
parent 567d88f101
commit 2e8e115a32
4 changed files with 30 additions and 3 deletions

View File

@ -61,6 +61,8 @@ final class RoomsLoader {
extension RoomsLoader: RoomsLoading { extension RoomsLoader: RoomsLoading {
func start(in url: URL) { func start(in url: URL) {
stop()
guard let server = serversDB.server(url: url) else { return } guard let server = serversDB.server(url: url) else { return }
loadRooms(in: server) loadRooms(in: server)

View File

@ -13,6 +13,8 @@ struct MessageListView: View {
@State private var lastOpen: Date? @State private var lastOpen: Date?
@Environment(\.scenePhase) private var scenePhase
@FetchRequest<Message> private var messages: FetchedResults<Message> @FetchRequest<Message> private var messages: FetchedResults<Message>
init( init(
@ -76,6 +78,18 @@ struct MessageListView: View {
.onDisappear { .onDisappear {
messagesLoader.stop() messagesLoader.stop()
} }
.onChange(of: scenePhase) { phase in
switch phase {
case .active:
guard let roomID = room.id else { return }
messagesLoader.start(on: roomID)
case .background, .inactive:
messagesLoader.stop()
@unknown default:
break
}
}
} }
} }
} }

View File

@ -10,6 +10,8 @@ struct RoomListView: View {
private let server: Server private let server: Server
@Environment(\.scenePhase) private var scenePhase
@FetchRequest<Room> private var rooms: FetchedResults<Room> @FetchRequest<Room> private var rooms: FetchedResults<Room>
init(server: Server) { init(server: Server) {
@ -41,8 +43,17 @@ struct RoomListView: View {
.onDisappear { .onDisappear {
roomsLoader.stop() roomsLoader.stop()
} }
.onChange(of: scenePhase) { phase in
switch phase {
case .active:
roomsLoader.start(in: server.url)
case .background, .inactive:
roomsLoader.stop()
@unknown default:
break
}
}
.navigationTitle("Rooms") .navigationTitle("Rooms")
.navigationBarTitleDisplayMode(.inline)
.toolbar { .toolbar {
ToolbarItem(placement: .automatic) { ToolbarItem(placement: .automatic) {
Button("Servers") { Button("Servers") {

View File

@ -34,10 +34,10 @@ struct ServerListView: View {
switch state { switch state {
case .loading: case .loading:
ProgressView() ProgressView()
case .loaded:
serverList
case .loaded where servers.isEmpty: case .loaded where servers.isEmpty:
RetryView("No Connected servers.", action: loadServers) RetryView("No Connected servers.", action: loadServers)
case .loaded:
serverList
case .error(let error) where error == .locked: case .error(let error) where error == .locked:
RetryView("Please unlock your iPhone.", action: loadServers) RetryView("Please unlock your iPhone.", action: loadServers)
case .error(let error) where error == .unactive: case .error(let error) where error == .unactive: