From 2e8e115a32af9d71bd0dbfa1176cb571f77bee04 Mon Sep 17 00:00:00 2001 From: Djorkaeff Alexandre Date: Thu, 1 Feb 2024 18:04:27 -0300 Subject: [PATCH] ScenePhase observing --- ios/RocketChat Watch App/Loaders/RoomsLoader.swift | 2 ++ .../Views/MessageListView.swift | 14 ++++++++++++++ ios/RocketChat Watch App/Views/RoomListView.swift | 13 ++++++++++++- .../Views/ServerListView.swift | 4 ++-- 4 files changed, 30 insertions(+), 3 deletions(-) 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: