// // CreateFilterService.swift // Tusker // // Created by Shadowfacts on 12/3/22. // Copyright © 2022 Shadowfacts. All rights reserved. // import Foundation import Pachyderm @MainActor class CreateFilterService { private let filter: EditedFilter private let mastodonController: MastodonController init(filter: EditedFilter, mastodonController: MastodonController) { self.filter = filter self.mastodonController = mastodonController } func run() async throws { let updateFrom: AnyFilter if mastodonController.instanceFeatures.filtersV2 { let updates = filter.keywords.map { FilterV2.KeywordUpdate.add(keyword: $0.keyword, wholeWord: $0.wholeWord) } let req = FilterV2.create(title: filter.title!, context: filter.contexts, expiresIn: filter.expiresIn, action: filter.action, keywords: updates) let (updated, _) = try await mastodonController.run(req) updateFrom = .v2(updated) } else { let req = Client.createFilterV1(phrase: filter.keywords.first!.keyword, context: filter.contexts, irreversible: nil, wholeWord: filter.keywords.first!.wholeWord, expiresIn: filter.expiresIn) let (updated, _) = try await mastodonController.run(req) updateFrom = .v1(updated) } let context = mastodonController.persistentContainer.viewContext let mo = FilterMO(context: context) mo.updateFrom(apiFilter: updateFrom, context: context) mastodonController.persistentContainer.save(context: context) } }