mastodon-ios/Mastodon/Scene/Notification/NotificationTimeline/NotificationTimelineViewCon...

53 lines
1.6 KiB
Swift

//
// NotificationTimelineViewController+DataSourceProvider.swift
// Mastodon
//
// Created by MainasuK on 2022-1-26.
//
import UIKit
import MastodonSDK
extension NotificationTimelineViewController: 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 feed):
let item: DataSourceItem? = {
guard feed.kind == .notificationAll || feed.kind == .notificationMentions else { return nil }
//TODO: Get relationship
if let notification = feed.notification {
let mastodonNotification = MastodonNotification.fromEntity(notification, relationship: nil)
return .notification(record: mastodonNotification)
} else {
return nil
}
}()
return item
default:
return nil
}
}
func update(status: MastodonStatus, intent: MastodonStatus.UpdateIntent) {
Task {
await viewModel.loadLatest()
}
}
@MainActor
private func indexPath(for cell: UITableViewCell) async -> IndexPath? {
return tableView.indexPath(for: cell)
}
}