68 lines
1.8 KiB
Swift
68 lines
1.8 KiB
Swift
//
|
|
// DataSourceFacade+Hashtag.swift
|
|
// Mastodon
|
|
//
|
|
// Created by MainasuK on 2022-1-20.
|
|
//
|
|
|
|
import UIKit
|
|
import CoreDataStack
|
|
import MastodonSDK
|
|
|
|
extension DataSourceFacade {
|
|
@MainActor
|
|
static func coordinateToHashtagScene(
|
|
provider: DataSourceProvider,
|
|
tag: DataSourceItem.TagKind
|
|
) async {
|
|
switch tag {
|
|
case .entity(let entity):
|
|
await coordinateToHashtagScene(provider: provider, tag: entity)
|
|
case .record(let record):
|
|
await coordinateToHashtagScene(provider: provider, tag: record)
|
|
}
|
|
}
|
|
|
|
@MainActor
|
|
static func coordinateToHashtagScene(
|
|
provider: DataSourceProvider,
|
|
tag: Mastodon.Entity.Tag
|
|
) async {
|
|
let hashtagTimelineViewModel = HashtagTimelineViewModel(
|
|
context: provider.context,
|
|
hashtag: tag.name
|
|
)
|
|
|
|
provider.coordinator.present(
|
|
scene: .hashtagTimeline(viewModel: hashtagTimelineViewModel),
|
|
from: provider,
|
|
transition: .show
|
|
)
|
|
}
|
|
|
|
@MainActor
|
|
static func coordinateToHashtagScene(
|
|
provider: DataSourceProvider,
|
|
tag: ManagedObjectRecord<Tag>
|
|
) async {
|
|
let managedObjectContext = provider.context.managedObjectContext
|
|
let _name: String? = try? await managedObjectContext.perform {
|
|
guard let tag = tag.object(in: managedObjectContext) else { return nil }
|
|
return tag.name
|
|
}
|
|
|
|
guard let name = _name else { return }
|
|
|
|
let hashtagTimelineViewModel = HashtagTimelineViewModel(
|
|
context: provider.context,
|
|
hashtag: name
|
|
)
|
|
|
|
provider.coordinator.present(
|
|
scene: .hashtagTimeline(viewModel: hashtagTimelineViewModel),
|
|
from: provider,
|
|
transition: .show
|
|
)
|
|
}
|
|
}
|