| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- //
- // MoreUserManagerDataCreator.swift
- // TUIRoomKit
- //
- // Created by janejntang on 2024/10/15.
- //
- import Foundation
- class MoreUserManagerDataCreator {
- class func generateMoreUserManagerItems(operation: ConferenceStore) -> [ButtonItemData] {
- return [MoreUserManagerDataCreator.getmMuteAllUsersShareScreenItem(operation: operation)]
- }
-
- class func getmMuteAllUsersShareScreenItem(operation: ConferenceStore) -> ButtonItemData {
- let item = ButtonItemData()
- item.normalIcon = "room_mute_share_screen"
- item.normalTitle = .onlyHostOrAdminCanShareScreen
- item.selectedIcon = "room_unmute_share_screen"
- item.selectedTitle = .allParticipantsCanShareScreen
- item.resourceBundle = tuiRoomKitBundle()
- item.hasLineView = true
- item.action = { sender in
- let getIsScreenShareDisableForAllUser = operation.selectCurrent(RoomSelectors.getIsScreenShareDisableForAllUser)
- MoreUserManagerDataCreator.muteAllShareScreen(isMute: !getIsScreenShareDisableForAllUser, operation: operation)
- }
- item.bindStateClosure = { button, cancellableSet in
- operation.select(RoomSelectors.getIsScreenShareDisableForAllUser)
- .receive(on: RunLoop.main)
- .sink { [weak button] isScreenShareDisableForAllUser in
- guard let button = button else { return }
- button.updateSelectState(isScreenShareDisableForAllUser)
- }
- .store(in: &cancellableSet)
- }
- return item
- }
-
- class func muteAllShareScreen(isMute: Bool, operation: ConferenceStore) {
- if isMute, isGeneralUserSharingScreen(operation: operation) {
- RoomRouter.presentAlert(title: .muteAllShareScreenAlertTitle, message: .muteAllShareScreenAlertMessage, sureTitle: .open, declineTitle: .cancel, sureBlock: {
- EngineManager.shared.muteAllShareScreenAction(isMute: true)
- }, declineBlock: nil)
- } else {
- EngineManager.shared.muteAllShareScreenAction(isMute: isMute)
- }
- }
-
- class func isGeneralUserSharingScreen(operation: ConferenceStore) -> Bool {
- let hasScreenStreamUsers = operation.selectCurrent(UserSelectors.getHasScreenStreamUsers)
- let allUsers = EngineManager.shared.store.attendeeList
- let hasScreenStreamUserItems = allUsers.filter({ hasScreenStreamUsers.contains($0.userId) })
- return hasScreenStreamUserItems.contains(where: { $0.userRole == .generalUser })
- }
- }
- private extension String {
- static let onlyHostOrAdminCanShareScreen = localized("Only the host/admin can share screen")
- static let allParticipantsCanShareScreen = localized("All participants can share screen")
- static let cancel = localized("Cancel")
- static let open = localized("Open")
- static let muteAllShareScreenAlertTitle = localized("Is it turned on that only the host/admin can share the screen?")
- static let muteAllShareScreenAlertMessage = localized("A member is currently sharing the screen, the member's sharing will be terminated after turning on")
- }
|