diff --git a/Sources/HomeFeature/Home.swift b/Sources/HomeFeature/Home.swift index 0b920acb..a04be50b 100644 --- a/Sources/HomeFeature/Home.swift +++ b/Sources/HomeFeature/Home.swift @@ -43,7 +43,9 @@ public struct Home { public var weekInReview: FetchWeekInReviewResponse? @Shared(.installationTime) var installationTime = Date().timeIntervalSince1970 @Shared(.build) var build = Build() - @SharedReader(.serverConfig) var serverConfig = ServerConfig() + //@SharedReader(.serverConfig) var serverConfig = ServerConfig() + @ObservationStateIgnored + @ServerConfig_ var serverConfig public var hasChangelog: Bool { self.serverConfig.newestBuild > self.build.number @@ -114,7 +116,7 @@ public struct Home { @Dependency(\.mainRunLoop.now.date) var now @Dependency(\.audioPlayer.play) var playSound @Dependency(\.timeZone) var timeZone - @SharedReader(.serverConfig) var serverConfig = ServerConfig() + //@SharedReader(.serverConfig) var serverConfig = ServerConfig() public init() {} @@ -294,7 +296,8 @@ public struct Home { ) await send(.authenticationResponse(currentPlayerEnvelope)) - async let serverConfigResponse: Void = $serverConfig.persistence.reload() + @ServerConfig_ var serverConfig + async let serverConfigResponse: Void = $serverConfig.reload() async let dailyChallengeResponse: Void = send( .dailyChallengeResponse( @@ -324,7 +327,7 @@ public struct Home { } ) ) - _ = await ( + _ = try await ( serverConfigResponse, dailyChallengeResponse, weekInReviewResponse, activeMatchesResponse ) } catch {} diff --git a/Sources/ServerConfigPersistenceKey/ServerConfigPersistenceKey.swift b/Sources/ServerConfigPersistenceKey/ServerConfigPersistenceKey.swift index 945e5c85..4696dce9 100644 --- a/Sources/ServerConfigPersistenceKey/ServerConfigPersistenceKey.swift +++ b/Sources/ServerConfigPersistenceKey/ServerConfigPersistenceKey.swift @@ -5,6 +5,29 @@ import Dependencies import Foundation @_exported import ServerConfig +@propertyWrapper +public struct ServerConfig_: Equatable { + @Shared(.fileStorage(.serverConfig)) var config = ServerConfig() + + public init(config: ServerConfig = ServerConfig()) { + self.config = config + } + + public var projectedValue: Self { self } + + public var wrappedValue: ServerConfig { + get { config } + nonmutating set { config = newValue } + } + + public func reload() async throws { + @Dependency(\.apiClient) var apiClient + @Shared(.build) var build = Build() + self.config = try await apiClient + .apiRequest(route: .config(build: build.number), as: ServerConfig.self) + } +} + extension PersistenceReaderKey where Self == ServerConfigKey { public static var serverConfig: Self { ServerConfigKey()