FavoriteViewModel.swift 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. //
  2. // FavoriteViewModel.swift
  3. // Mastodon
  4. //
  5. // Created by MainasuK Cirno on 2021-4-6.
  6. //
  7. import UIKit
  8. import Combine
  9. import CoreData
  10. import CoreDataStack
  11. import GameplayKit
  12. import MastodonCore
  13. final class FavoriteViewModel {
  14. var disposeBag = Set<AnyCancellable>()
  15. // input
  16. let context: AppContext
  17. let authContext: AuthContext
  18. let statusFetchedResultsController: StatusFetchedResultsController
  19. let listBatchFetchViewModel = ListBatchFetchViewModel()
  20. // output
  21. var diffableDataSource: UITableViewDiffableDataSource<StatusSection, StatusItem>?
  22. private(set) lazy var stateMachine: GKStateMachine = {
  23. let stateMachine = GKStateMachine(states: [
  24. State.Initial(viewModel: self),
  25. State.Reloading(viewModel: self),
  26. State.Fail(viewModel: self),
  27. State.Idle(viewModel: self),
  28. State.Loading(viewModel: self),
  29. State.NoMore(viewModel: self),
  30. ])
  31. stateMachine.enter(State.Initial.self)
  32. return stateMachine
  33. }()
  34. init(context: AppContext, authContext: AuthContext) {
  35. self.context = context
  36. self.authContext = authContext
  37. self.statusFetchedResultsController = StatusFetchedResultsController(
  38. managedObjectContext: context.managedObjectContext,
  39. domain: authContext.mastodonAuthenticationBox.domain,
  40. additionalTweetPredicate: nil
  41. )
  42. }
  43. }