diff --git a/ios/RocketChat Watch App/Loaders/RoomsLoader.swift b/ios/RocketChat Watch App/Loaders/RoomsLoader.swift index a3714d22f..f4e85e8ed 100644 --- a/ios/RocketChat Watch App/Loaders/RoomsLoader.swift +++ b/ios/RocketChat Watch App/Loaders/RoomsLoader.swift @@ -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) diff --git a/ios/RocketChat Watch App/Views/MessageListView.swift b/ios/RocketChat Watch App/Views/MessageListView.swift index a2a88bf70..0bb4e488d 100644 --- a/ios/RocketChat Watch App/Views/MessageListView.swift +++ b/ios/RocketChat Watch App/Views/MessageListView.swift @@ -13,6 +13,8 @@ struct MessageListView: View { @State private var lastOpen: Date? + @Environment(\.scenePhase) private var scenePhase + @FetchRequest private var messages: FetchedResults 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 + } + } } } } diff --git a/ios/RocketChat Watch App/Views/RoomListView.swift b/ios/RocketChat Watch App/Views/RoomListView.swift index f3d733d37..a4e739003 100644 --- a/ios/RocketChat Watch App/Views/RoomListView.swift +++ b/ios/RocketChat Watch App/Views/RoomListView.swift @@ -10,6 +10,8 @@ struct RoomListView: View { private let server: Server + @Environment(\.scenePhase) private var scenePhase + @FetchRequest private var rooms: FetchedResults 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") { diff --git a/ios/RocketChat Watch App/Views/ServerListView.swift b/ios/RocketChat Watch App/Views/ServerListView.swift index 7780e7198..adaa72c0e 100644 --- a/ios/RocketChat Watch App/Views/ServerListView.swift +++ b/ios/RocketChat Watch App/Views/ServerListView.swift @@ -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: