diff --git a/ios/RocketChat Watch App/AppView.swift b/ios/RocketChat Watch App/AppView.swift index 564e1cc23..9dccccea6 100644 --- a/ios/RocketChat Watch App/AppView.swift +++ b/ios/RocketChat Watch App/AppView.swift @@ -1,8 +1,7 @@ import SwiftUI struct AppView: View { - @Dependency private var database: Database - @Dependency private var serversDB: ServersDatabase + @Dependency private var database: ServersDatabase @Dependency private var stateProvider: StateProviding @StateObject private var router: AppRouter @@ -17,11 +16,10 @@ struct AppView: View { case .loading: ProgressView() case .roomList(let server): - RoomListView(server: server) - .environment(\.managedObjectContext, database.viewContext) + LoggedInView(server: server) case .serverList: ServerListView() - .environment(\.managedObjectContext, serversDB.viewContext) + .environment(\.managedObjectContext, database.viewContext) } } .onChange(of: router.route) { newValue in diff --git a/ios/RocketChat Watch App/Client/RocketChatClient.swift b/ios/RocketChat Watch App/Client/RocketChatClient.swift index ef1b04e24..9ea8d3ad2 100644 --- a/ios/RocketChat Watch App/Client/RocketChatClient.swift +++ b/ios/RocketChat Watch App/Client/RocketChatClient.swift @@ -12,10 +12,10 @@ protocol RocketChatClientProtocol { } final class RocketChatClient: NSObject { - @Dependency private var serverProvider: ServerProviding + private let server: Server - private var server: Server { - serverProvider.server + init(server: Server) { + self.server = server } private lazy var session = URLSession( diff --git a/ios/RocketChat Watch App/Database/RocketChatDatabase.swift b/ios/RocketChat Watch App/Database/RocketChatDatabase.swift index ace6f75df..5f47dfbba 100644 --- a/ios/RocketChat Watch App/Database/RocketChatDatabase.swift +++ b/ios/RocketChat Watch App/Database/RocketChatDatabase.swift @@ -13,7 +13,11 @@ protocol Database { } final class RocketChatDatabase: Database { - @Dependency private var serverProvider: ServerProviding + private let server: Server + + init(server: Server) { + self.server = server + } var viewContext: NSManagedObjectContext { container.viewContext @@ -29,7 +33,7 @@ final class RocketChatDatabase: Database { }() private lazy var container: NSPersistentContainer = { - let name = serverProvider.server.url.host ?? "default" + let name = server.url.host ?? "default" let container = NSPersistentContainer(name: name, managedObjectModel: Self.model) diff --git a/ios/RocketChat Watch App/Loaders/MessageSender.swift b/ios/RocketChat Watch App/Loaders/MessageSender.swift index 6a9768dfb..54995a937 100644 --- a/ios/RocketChat Watch App/Loaders/MessageSender.swift +++ b/ios/RocketChat Watch App/Loaders/MessageSender.swift @@ -8,14 +8,19 @@ protocol MessageSending { final class MessageSender { @Dependency private var client: RocketChatClientProtocol @Dependency private var database: Database - @Dependency private var serverProvider: ServerProviding + + private let server: Server + + init(server: Server) { + self.server = server + } } extension MessageSender: MessageSending { func sendMessage(_ msg: String, in room: Room) { guard let rid = room.id else { return } - let messageID = database.createTempMessage(msg: msg, in: room, for: serverProvider.server.loggedUser) + let messageID = database.createTempMessage(msg: msg, in: room, for: server.loggedUser) client.sendMessage(id: messageID, rid: rid, msg: msg) .receive(on: DispatchQueue.main) diff --git a/ios/RocketChat Watch App/Providers/ServerProvider.swift b/ios/RocketChat Watch App/Providers/ServerProvider.swift deleted file mode 100644 index cf76e4632..000000000 --- a/ios/RocketChat Watch App/Providers/ServerProvider.swift +++ /dev/null @@ -1,20 +0,0 @@ -import Foundation - -protocol ServerProviding { - var server: Server { get } -} - -final class ServerProvider { - @Dependency private var stateProvider: StateProviding -} - -extension ServerProvider: ServerProviding { - var server: Server { - switch stateProvider.state { - case .loggedIn(let server): - return server - case .loggedOut: - fatalError("Attempt to get server while logged out.") - } - } -} diff --git a/ios/RocketChat Watch App/RocketChatApp.swift b/ios/RocketChat Watch App/RocketChatApp.swift index b752cae4c..b83a16082 100644 --- a/ios/RocketChat Watch App/RocketChatApp.swift +++ b/ios/RocketChat Watch App/RocketChatApp.swift @@ -12,12 +12,8 @@ struct RocketChat_Watch_AppApp: App { Store.register(AppRouting.self, factory: router) Store.register(ServersDatabase.self, factory: DefaultDatabase()) Store.register(StateProviding.self, factory: StateProvider()) - Store.register(ServerProviding.self, factory: ServerProvider()) Store.register(ServersLoading.self, factory: ServersLoader(session: .default)) - Store.register(RocketChatClientProtocol.self, factory: RocketChatClient()) - Store.register(Database.self, factory: RocketChatDatabase()) Store.register(MessagesLoading.self, factory: MessagesLoader()) - Store.register(MessageSending.self, factory: MessageSender()) Store.register(RoomsLoading.self, factory: RoomsLoader()) } diff --git a/ios/RocketChat Watch App/Views/LoggedInView.swift b/ios/RocketChat Watch App/Views/LoggedInView.swift new file mode 100644 index 000000000..0288ce95a --- /dev/null +++ b/ios/RocketChat Watch App/Views/LoggedInView.swift @@ -0,0 +1,26 @@ +import SwiftUI + +struct LoggedInView: View { + @Dependency private var router: AppRouting + + private let database: Database + private let server: Server + + init(server: Server) { + self.server = server + self.database = RocketChatDatabase(server: server) + + registerDependencies() + } + + private func registerDependencies() { + Store.register(Database.self, factory: database) + Store.register(RocketChatClientProtocol.self, factory: RocketChatClient(server: server)) + Store.register(MessageSending.self, factory: MessageSender(server: server)) + } + + var body: some View { + RoomListView(server: server) + .environment(\.managedObjectContext, database.viewContext) + } +} diff --git a/ios/RocketChatRN.xcodeproj/project.pbxproj b/ios/RocketChatRN.xcodeproj/project.pbxproj index 9b230753e..088cd8fa5 100644 --- a/ios/RocketChatRN.xcodeproj/project.pbxproj +++ b/ios/RocketChatRN.xcodeproj/project.pbxproj @@ -80,7 +80,6 @@ 1E4AFC152B5AF09800E2AA7D /* Dependency.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E4AFC142B5AF09800E2AA7D /* Dependency.swift */; }; 1E4AFC172B5AF09C00E2AA7D /* Store.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E4AFC162B5AF09C00E2AA7D /* Store.swift */; }; 1E4AFC1B2B5AFC6A00E2AA7D /* Publisher+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E4AFC1A2B5AFC6A00E2AA7D /* Publisher+Extensions.swift */; }; - 1E4AFC1F2B5B0D0500E2AA7D /* ServerProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E4AFC1E2B5B0D0500E2AA7D /* ServerProvider.swift */; }; 1E4AFC212B5B1AA000E2AA7D /* AppView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E4AFC202B5B1AA000E2AA7D /* AppView.swift */; }; 1E4AFC252B5B1DA300E2AA7D /* StateProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E4AFC242B5B1DA300E2AA7D /* StateProvider.swift */; }; 1E4AFC272B5B23C600E2AA7D /* RetryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E4AFC262B5B23C600E2AA7D /* RetryView.swift */; }; @@ -162,6 +161,7 @@ 1ED038C62B50A21800C007D4 /* WatchMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1ED038C32B50A1F500C007D4 /* WatchMessage.swift */; }; 1ED038CA2B50A58400C007D4 /* ServersLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1ED038C92B50A58400C007D4 /* ServersLoader.swift */; }; 1ED59D4C22CBA77D00C54289 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 1ED59D4B22CBA77D00C54289 /* GoogleService-Info.plist */; }; + 1EDB30F22B5B453A00532C7E /* LoggedInView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EDB30F12B5B453A00532C7E /* LoggedInView.swift */; }; 1EDFD0FA2B589B8F002FEE5F /* MessagesLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EDFD0F92B589B8F002FEE5F /* MessagesLoader.swift */; }; 1EDFD1062B58A66E002FEE5F /* CancelBag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EDFD1052B58A66E002FEE5F /* CancelBag.swift */; }; 1EDFD1082B58AA77002FEE5F /* RoomsLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EDFD1072B58AA77002FEE5F /* RoomsLoader.swift */; }; @@ -393,7 +393,6 @@ 1E4AFC142B5AF09800E2AA7D /* Dependency.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Dependency.swift; sourceTree = ""; }; 1E4AFC162B5AF09C00E2AA7D /* Store.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Store.swift; sourceTree = ""; }; 1E4AFC1A2B5AFC6A00E2AA7D /* Publisher+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Publisher+Extensions.swift"; sourceTree = ""; }; - 1E4AFC1E2B5B0D0500E2AA7D /* ServerProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServerProvider.swift; sourceTree = ""; }; 1E4AFC202B5B1AA000E2AA7D /* AppView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppView.swift; sourceTree = ""; }; 1E4AFC242B5B1DA300E2AA7D /* StateProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StateProvider.swift; sourceTree = ""; }; 1E4AFC262B5B23C600E2AA7D /* RetryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RetryView.swift; sourceTree = ""; }; @@ -441,6 +440,7 @@ 1ED038C32B50A1F500C007D4 /* WatchMessage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WatchMessage.swift; sourceTree = ""; }; 1ED038C92B50A58400C007D4 /* ServersLoader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServersLoader.swift; sourceTree = ""; }; 1ED59D4B22CBA77D00C54289 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = SOURCE_ROOT; }; + 1EDB30F12B5B453A00532C7E /* LoggedInView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoggedInView.swift; sourceTree = ""; }; 1EDFD0F92B589B8F002FEE5F /* MessagesLoader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessagesLoader.swift; sourceTree = ""; }; 1EDFD1052B58A66E002FEE5F /* CancelBag.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CancelBag.swift; sourceTree = ""; }; 1EDFD1072B58AA77002FEE5F /* RoomsLoader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomsLoader.swift; sourceTree = ""; }; @@ -695,7 +695,6 @@ 1E4AFC232B5B1D9C00E2AA7D /* Providers */ = { isa = PBXGroup; children = ( - 1E4AFC1E2B5B0D0500E2AA7D /* ServerProvider.swift */, 1E4AFC242B5B1DA300E2AA7D /* StateProvider.swift */, ); path = Providers; @@ -802,6 +801,7 @@ 1E29A3232B5874FF0093C03C /* MessageComposerView.swift */, 1E9A716E2B59CBCA00477BA2 /* AttachmentView.swift */, 1E4AFC262B5B23C600E2AA7D /* RetryView.swift */, + 1EDB30F12B5B453A00532C7E /* LoggedInView.swift */, ); path = Views; sourceTree = ""; @@ -1905,9 +1905,9 @@ 1ED033BF2B55BF94004F4930 /* Storage.swift in Sources */, 1E29A2F82B585B070093C03C /* MessageResponse.swift in Sources */, 1E29A3042B585B070093C03C /* HTTPMethod.swift in Sources */, - 1E4AFC1F2B5B0D0500E2AA7D /* ServerProvider.swift in Sources */, 1E29A3012B585B070093C03C /* RequestAdapter.swift in Sources */, 1E29A2F52B585B070093C03C /* RoomsResponse.swift in Sources */, + 1EDB30F22B5B453A00532C7E /* LoggedInView.swift in Sources */, 1E29A2F32B585B070093C03C /* MessagesResponse.swift in Sources */, 1E29A2FA2B585B070093C03C /* HistoryRequest.swift in Sources */, 1ED038C62B50A21800C007D4 /* WatchMessage.swift in Sources */,