2021-01-28 09:10:30 +01:00
|
|
|
//
|
|
|
|
// PublicTimelineViewController+StatusProvider.swift
|
|
|
|
// Mastodon
|
|
|
|
//
|
|
|
|
// Created by sxiaojian on 2021/1/27.
|
|
|
|
//
|
|
|
|
|
|
|
|
import os.log
|
|
|
|
import UIKit
|
|
|
|
import Combine
|
2021-03-03 09:12:48 +01:00
|
|
|
import CoreData
|
2021-01-28 09:10:30 +01:00
|
|
|
import CoreDataStack
|
|
|
|
import MastodonSDK
|
|
|
|
|
|
|
|
// MARK: - StatusProvider
|
2021-02-08 11:29:27 +01:00
|
|
|
extension PublicTimelineViewController: StatusProvider {
|
2021-03-03 09:12:48 +01:00
|
|
|
|
2021-04-01 08:39:15 +02:00
|
|
|
func status() -> Future<Status?, Never> {
|
2021-01-28 09:10:30 +01:00
|
|
|
return Future { promise in promise(.success(nil)) }
|
|
|
|
}
|
|
|
|
|
2021-04-01 08:39:15 +02:00
|
|
|
func status(for cell: UITableViewCell, indexPath: IndexPath?) -> Future<Status?, Never> {
|
2021-01-28 09:10:30 +01:00
|
|
|
return Future { promise in
|
|
|
|
guard let diffableDataSource = self.viewModel.diffableDataSource else {
|
|
|
|
assertionFailure()
|
|
|
|
promise(.success(nil))
|
|
|
|
return
|
|
|
|
}
|
|
|
|
guard let indexPath = indexPath ?? self.tableView.indexPath(for: cell),
|
|
|
|
let item = diffableDataSource.itemIdentifier(for: indexPath) else {
|
|
|
|
promise(.success(nil))
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
switch item {
|
2021-04-01 08:39:15 +02:00
|
|
|
case .status(let objectID, _):
|
2021-01-28 09:10:30 +01:00
|
|
|
let managedObjectContext = self.viewModel.fetchedResultsController.managedObjectContext
|
|
|
|
managedObjectContext.perform {
|
2021-04-01 08:39:15 +02:00
|
|
|
let status = managedObjectContext.object(with: objectID) as? Status
|
|
|
|
promise(.success(status))
|
2021-01-28 09:10:30 +01:00
|
|
|
}
|
2021-02-03 06:01:50 +01:00
|
|
|
default:
|
|
|
|
promise(.success(nil))
|
2021-01-28 09:10:30 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-04-01 08:39:15 +02:00
|
|
|
func status(for cell: UICollectionViewCell) -> Future<Status?, Never> {
|
2021-01-28 09:10:30 +01:00
|
|
|
return Future { promise in promise(.success(nil)) }
|
|
|
|
}
|
|
|
|
|
2021-03-03 09:12:48 +01:00
|
|
|
var managedObjectContext: NSManagedObjectContext {
|
|
|
|
return viewModel.fetchedResultsController.managedObjectContext
|
|
|
|
}
|
|
|
|
|
2021-02-24 09:11:48 +01:00
|
|
|
var tableViewDiffableDataSource: UITableViewDiffableDataSource<StatusSection, Item>? {
|
|
|
|
return viewModel.diffableDataSource
|
|
|
|
}
|
|
|
|
|
2021-03-03 09:12:48 +01:00
|
|
|
func item(for cell: UITableViewCell?, indexPath: IndexPath?) -> Item? {
|
|
|
|
guard let diffableDataSource = self.viewModel.diffableDataSource else {
|
|
|
|
assertionFailure()
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
guard let indexPath = indexPath ?? cell.flatMap({ self.tableView.indexPath(for: $0) }),
|
|
|
|
let item = diffableDataSource.itemIdentifier(for: indexPath) else {
|
|
|
|
return nil
|
2021-02-24 09:11:48 +01:00
|
|
|
}
|
2021-03-03 09:12:48 +01:00
|
|
|
|
|
|
|
return item
|
2021-02-24 09:11:48 +01:00
|
|
|
}
|
|
|
|
|
2021-03-10 12:12:53 +01:00
|
|
|
func items(indexPaths: [IndexPath]) -> [Item] {
|
|
|
|
guard let diffableDataSource = self.viewModel.diffableDataSource else {
|
|
|
|
assertionFailure()
|
|
|
|
return []
|
|
|
|
}
|
|
|
|
|
|
|
|
var items: [Item] = []
|
|
|
|
for indexPath in indexPaths {
|
|
|
|
guard let item = diffableDataSource.itemIdentifier(for: indexPath) else { continue }
|
|
|
|
items.append(item)
|
|
|
|
}
|
|
|
|
return items
|
|
|
|
}
|
|
|
|
|
2021-01-28 09:10:30 +01:00
|
|
|
}
|