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