ScenePhase observing
This commit is contained in:
parent
567d88f101
commit
2e8e115a32
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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") {
|
||||||
|
|
|
@ -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:
|
||||||
|
|
Loading…
Reference in New Issue