ScenePhase observing
This commit is contained in:
parent
567d88f101
commit
2e8e115a32
|
@ -61,6 +61,8 @@ final class RoomsLoader {
|
|||
|
||||
extension RoomsLoader: RoomsLoading {
|
||||
func start(in url: URL) {
|
||||
stop()
|
||||
|
||||
guard let server = serversDB.server(url: url) else { return }
|
||||
|
||||
loadRooms(in: server)
|
||||
|
|
|
@ -13,6 +13,8 @@ struct MessageListView: View {
|
|||
|
||||
@State private var lastOpen: Date?
|
||||
|
||||
@Environment(\.scenePhase) private var scenePhase
|
||||
|
||||
@FetchRequest<Message> private var messages: FetchedResults<Message>
|
||||
|
||||
init(
|
||||
|
@ -76,6 +78,18 @@ struct MessageListView: View {
|
|||
.onDisappear {
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,6 +10,8 @@ struct RoomListView: View {
|
|||
|
||||
private let server: Server
|
||||
|
||||
@Environment(\.scenePhase) private var scenePhase
|
||||
|
||||
@FetchRequest<Room> private var rooms: FetchedResults<Room>
|
||||
|
||||
init(server: Server) {
|
||||
|
@ -41,8 +43,17 @@ struct RoomListView: View {
|
|||
.onDisappear {
|
||||
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")
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
.toolbar {
|
||||
ToolbarItem(placement: .automatic) {
|
||||
Button("Servers") {
|
||||
|
|
|
@ -34,10 +34,10 @@ struct ServerListView: View {
|
|||
switch state {
|
||||
case .loading:
|
||||
ProgressView()
|
||||
case .loaded:
|
||||
serverList
|
||||
case .loaded where servers.isEmpty:
|
||||
RetryView("No Connected servers.", action: loadServers)
|
||||
case .loaded:
|
||||
serverList
|
||||
case .error(let error) where error == .locked:
|
||||
RetryView("Please unlock your iPhone.", action: loadServers)
|
||||
case .error(let error) where error == .unactive:
|
||||
|
|
Loading…
Reference in New Issue