12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- //
- // DiscoveryNewsViewModel.swift
- // Mastodon
- //
- // Created by MainasuK on 2022-4-13.
- //
- import os.log
- import UIKit
- import Combine
- import GameplayKit
- import CoreData
- import CoreDataStack
- import MastodonSDK
- import MastodonCore
- final class DiscoveryNewsViewModel {
-
- var disposeBag = Set<AnyCancellable>()
-
- // input
- let context: AppContext
- let authContext: AuthContext
- let listBatchFetchViewModel = ListBatchFetchViewModel()
- // output
- @Published var links: [Mastodon.Entity.Link] = []
- var diffableDataSource: UITableViewDiffableDataSource<DiscoverySection, DiscoveryItem>?
- private(set) lazy var stateMachine: GKStateMachine = {
- let stateMachine = GKStateMachine(states: [
- State.Initial(viewModel: self),
- State.Reloading(viewModel: self),
- State.Fail(viewModel: self),
- State.Idle(viewModel: self),
- State.Loading(viewModel: self),
- State.NoMore(viewModel: self),
- ])
- stateMachine.enter(State.Initial.self)
- return stateMachine
- }()
-
- let didLoadLatest = PassthroughSubject<Void, Never>()
- @Published var isServerSupportEndpoint = true
- init(context: AppContext, authContext: AuthContext) {
- self.context = context
- self.authContext = authContext
- // end init
-
- Task {
- await checkServerEndpoint()
- } // end Task
- }
-
- deinit {
- os_log(.info, log: .debug, "%{public}s[%{public}ld], %{public}s", ((#file as NSString).lastPathComponent), #line, #function)
- }
-
- }
- extension DiscoveryNewsViewModel {
- func checkServerEndpoint() async {
- do {
- _ = try await context.apiService.trendLinks(
- domain: authContext.mastodonAuthenticationBox.domain,
- query: .init(offset: nil, limit: nil)
- )
- } catch let error as Mastodon.API.Error where error.httpResponseStatus.code == 404 {
- isServerSupportEndpoint = false
- } catch {
- // do nothing
- }
- }
- }
|