mastodon-ios/MastodonIntent/Handler/HashtagIntentHandler.swift

46 lines
1.4 KiB
Swift

// Copyright © 2023 Mastodon gGmbH. All rights reserved.
import Foundation
import Intents
import MastodonSDK
class HashtagIntentHandler: INExtension, HashtagIntentHandling {
func provideHashtagOptionsCollection(for intent: HashtagIntent, searchTerm: String?) async throws -> INObjectCollection<NSString> {
guard let authenticationBox = WidgetExtension.appContext
.authenticationService
.mastodonAuthenticationBoxes
.first
else {
return INObjectCollection(items: [])
}
var results: [NSString] = []
if let searchTerm, searchTerm.isEmpty == false {
let searchResults = try await WidgetExtension.appContext
.apiService
.search(query: .init(q: searchTerm, type: .hashtags), authenticationBox: authenticationBox)
.value
.hashtags
.compactMap { $0.name as NSString }
results = searchResults
} else {
let followedTags = try await WidgetExtension.appContext.apiService.getFollowedTags(
domain: authenticationBox.domain,
query: Mastodon.API.Account.FollowedTagsQuery(limit: nil),
authenticationBox: authenticationBox)
.value
.compactMap { $0.name as NSString }
results = followedTags
}
return INObjectCollection(items: results)
}
}