development
swift 51 lines 1.69 KB
Raw
1 import Combine
2 import Foundation
3
4 @MainActor
5 final class AppState: ObservableObject {
6 @Published var hasCompletedOnboarding: Bool {
7 didSet {
8 UserDefaults.standard.set(hasCompletedOnboarding, forKey: Keys.hasCompletedOnboarding)
9 }
10 }
11
12 let contentRepository: ContentRepository
13 let searchService: SearchService
14 let favoritesStore: FavoritesStore
15 let recentSearchStore: RecentSearchStore
16 let recentlyViewedStore: RecentlyViewedStore
17 let guideEngine: OndeGuideEngine
18 let answerService: GuideAnswerService
19 let accountStore: AccountStore
20
21 init() {
22 OndeEnvironmentBootstrap.configureIfNeeded()
23
24 let repository = ContentRepository()
25 let favoritesStore = FavoritesStore()
26 let recentSearchStore = RecentSearchStore()
27 let recentlyViewedStore = RecentlyViewedStore()
28 let guideEngine = OndeGuideEngine()
29 let accountStore = AccountStore()
30
31 self.contentRepository = repository
32 self.searchService = SearchService(repository: repository)
33 self.favoritesStore = favoritesStore
34 self.recentSearchStore = recentSearchStore
35 self.recentlyViewedStore = recentlyViewedStore
36 self.guideEngine = guideEngine
37 self.answerService = GuideAnswerService(repository: repository, guideEngine: guideEngine)
38 self.accountStore = accountStore
39 guideEngine.refreshStorageUsage()
40 self.hasCompletedOnboarding = UserDefaults.standard.bool(
41 forKey: Keys.hasCompletedOnboarding)
42 }
43
44 func completeOnboarding() {
45 hasCompletedOnboarding = true
46 }
47 }
48
49 private enum Keys {
50 static let hasCompletedOnboarding = "klepon.hasCompletedOnboarding"
51 }