mastodon-ios/Mastodon/Scene/HomeTimeline/HomeTimelineViewController+...

45 lines
1.4 KiB
Swift
Raw Normal View History

//
// HomeTimelineViewController+DataSourceProvider.swift
// Mastodon
//
// Created by MainasuK on 2022-1-13.
//
import UIKit
extension HomeTimelineViewController: DataSourceProvider {
func item(from source: DataSourceItem.Source) async -> DataSourceItem? {
var _indexPath = source.indexPath
if _indexPath == nil, let cell = source.tableViewCell {
_indexPath = await self.indexPath(for: cell)
}
guard let indexPath = _indexPath else { return nil }
guard let item = viewModel.diffableDataSource?.itemIdentifier(for: indexPath) else {
return nil
}
switch item {
case .feed(let record):
let managedObjectContext = context.managedObjectContext
let item: DataSourceItem? = try? await managedObjectContext.perform {
guard let feed = record.object(in: managedObjectContext) else { return nil }
guard feed.kind == .home else { return nil }
if let status = feed.status {
return .status(record: .init(objectID: status.objectID))
} else {
return nil
}
}
return item
default:
return nil
}
}
@MainActor
private func indexPath(for cell: UITableViewCell) async -> IndexPath? {
return tableView.indexPath(for: cell)
}
}