TM-SGNL-iOS/SignalUI/Utils/GroupViewUtils.swift
TeleMessage developers dde0620daf initial commit
2025-05-03 12:28:28 -07:00

89 lines
4 KiB
Swift

//
// Copyright 2020 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
import Foundation
import UIKit
import SafariServices
import SignalServiceKit
public class GroupViewUtils {
public static func formatGroupMembersLabel(memberCount: Int) -> String {
let format = OWSLocalizedString("GROUP_MEMBER_COUNT_LABEL_%d", tableName: "PluralAware",
comment: "The 'group member count' indicator when there are no members in the group.")
return String.localizedStringWithFormat(format, memberCount)
}
public static func updateGroupWithActivityIndicator<T>(
fromViewController: UIViewController,
updateDescription: String,
updateBlock: @escaping () async throws -> T,
completion: ((T?) -> Void)?
) {
// GroupsV2 TODO: Should we allow cancel here?
ModalActivityIndicatorViewController.present(
fromViewController: fromViewController,
canCancel: false,
asyncBlock: { modalActivityIndicator in
do {
try await GroupManager.waitForMessageFetchingAndProcessingWithTimeout(description: updateDescription)
let value = try await updateBlock()
modalActivityIndicator.dismiss {
completion?(value)
}
} catch GroupsV2Error.redundantChange {
// Treat GroupsV2Error.redundantChange as a success.
modalActivityIndicator.dismiss {
completion?(nil)
}
} catch {
owsFailDebugUnlessNetworkFailure(error)
modalActivityIndicator.dismiss {
GroupViewUtils.showUpdateErrorUI(error: error)
}
}
}
)
}
public class func showUpdateErrorUI(error: Error) {
AssertIsOnMainThread()
owsFailDebug(error.localizedDescription)
if error.isNetworkFailureOrTimeout {
OWSActionSheets.showActionSheet(title: OWSLocalizedString("ERROR_NETWORK_FAILURE",
comment: "Error indicating network connectivity problems."),
message: OWSLocalizedString("UPDATE_GROUP_FAILED_DUE_TO_NETWORK",
comment: "Error indicating that a group could not be updated due to network connectivity problems."))
} else {
OWSActionSheets.showActionSheet(title: OWSLocalizedString("UPDATE_GROUP_FAILED",
comment: "Error indicating that a group could not be updated."))
}
}
public static func showInvalidGroupMemberAlert(fromViewController: UIViewController) {
let actionSheet = ActionSheetController(title: CommonStrings.errorAlertTitle,
message: OWSLocalizedString("EDIT_GROUP_ERROR_CANNOT_ADD_MEMBER",
comment: "Error message indicating the a user can't be added to a group."))
actionSheet.addAction(ActionSheetAction(title: CommonStrings.learnMore,
style: .default) { _ in
self.showCantAddMemberView(fromViewController: fromViewController)
})
actionSheet.addAction(OWSActionSheets.okayAction)
fromViewController.presentActionSheet(actionSheet)
}
private static func showCantAddMemberView(fromViewController: UIViewController) {
guard let url = URL(string: "https://support.signal.org/hc/articles/360007319331") else {
owsFailDebug("Invalid url.")
return
}
let vc = SFSafariViewController(url: url)
fromViewController.present(vc, animated: true, completion: nil)
}
}