53 lines
1.6 KiB
Swift
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)
|
|
}
|
|
}
|