mastodon-ios/Mastodon/Protocol/Provider/DataSourceFacade+Reblog.swift

65 lines
2.3 KiB
Swift

//
// DataSourceFacade+Reblog.swift
// Mastodon
//
// Created by MainasuK on 2022-1-21.
//
import UIKit
import MastodonCore
import MastodonUI
import MastodonSDK
import MastodonLocalization
extension DataSourceFacade {
@MainActor
static func responseToStatusReblogAction(
provider: DataSourceProvider & AuthContextProvider,
status: MastodonStatus
) async throws {
if UserDefaults.shared.askBeforeBoostingAPost {
let alertController = UIAlertController(
title: status.entity.reblogged == true ? L10n.Common.Alerts.BoostAPost.titleUnboost : L10n.Common.Alerts.BoostAPost.titleBoost,
message: nil,
preferredStyle: .alert
)
let cancelAction = UIAlertAction(title: L10n.Common.Alerts.BoostAPost.cancel, style: .default)
alertController.addAction(cancelAction)
let confirmAction = UIAlertAction(
title: status.entity.reblogged == true ? L10n.Common.Alerts.BoostAPost.unboost : L10n.Common.Alerts.BoostAPost.boost,
style: .default
) { _ in
Task { @MainActor in
try? await performReblog(provider: provider, status: status)
}
}
alertController.addAction(confirmAction)
provider.present(alertController, animated: true)
} else {
try await performReblog(provider: provider, status: status)
}
}
}
private extension DataSourceFacade {
@MainActor
static func performReblog(
provider: DataSourceProvider & AuthContextProvider,
status: MastodonStatus
) async throws {
let selectionFeedbackGenerator = UISelectionFeedbackGenerator()
selectionFeedbackGenerator.selectionChanged()
let updatedStatus = try await provider.context.apiService.reblog(
status: status,
authenticationBox: provider.authContext.mastodonAuthenticationBox
).value
let newStatus: MastodonStatus = .fromEntity(updatedStatus)
newStatus.reblog?.isSensitiveToggled = status.isSensitiveToggled
newStatus.isSensitiveToggled = status.isSensitiveToggled
provider.update(status: newStatus, intent: .reblog(updatedStatus.reblogged == true))
}
}