// 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 { 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) } }