提交
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
//
|
||||
// RaiseHandApplicationNotificationViewModel.swift
|
||||
// TUIRoomKit
|
||||
//
|
||||
// Created by janejntang on 2024/5/16.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import RTCRoomEngine
|
||||
|
||||
protocol RaiseHandApplicationNotificationViewModelResponder: AnyObject {
|
||||
func showRaiseHandApplicationNotificationView(userId: String, userName: String, count: Int)
|
||||
func hideRaiseHandApplicationNotificationView()
|
||||
}
|
||||
|
||||
class RaiseHandApplicationNotificationViewModel: NSObject {
|
||||
var delayDisappearanceTime = 5.0
|
||||
lazy var userId: String? = {
|
||||
return inviteSeatList.last?.userId
|
||||
}()
|
||||
lazy var userName: String? = {
|
||||
return inviteSeatList.last?.userName
|
||||
}()
|
||||
lazy var applicationCount: Int? = {
|
||||
return inviteSeatList.count
|
||||
}()
|
||||
weak var responder: RaiseHandApplicationNotificationViewModelResponder?
|
||||
var inviteSeatList: [RequestEntity] {
|
||||
EngineManager.shared.store.inviteSeatList
|
||||
}
|
||||
lazy var isShownRaiseHandApplicationNotificationView: Bool = {
|
||||
return getShownRequestEntity() != nil
|
||||
}()
|
||||
override init() {
|
||||
super.init()
|
||||
subscribeEngine()
|
||||
}
|
||||
|
||||
private func subscribeEngine() {
|
||||
EngineEventCenter.shared.subscribeEngine(event: .onRequestReceived, observer: self)
|
||||
EngineEventCenter.shared.subscribeEngine(event: .onDeletedTakeSeatRequest, observer: self)
|
||||
EngineEventCenter.shared.subscribeUIEvent(key: .TUIRoomKitService_RenewSeatList, responder: self)
|
||||
}
|
||||
|
||||
private func unsubscribeEngine() {
|
||||
EngineEventCenter.shared.unsubscribeEngine(event: .onRequestReceived, observer: self)
|
||||
EngineEventCenter.shared.unsubscribeEngine(event: .onDeletedTakeSeatRequest, observer: self)
|
||||
EngineEventCenter.shared.unsubscribeUIEvent(key: .TUIRoomKitService_RenewSeatList, responder: self)
|
||||
}
|
||||
|
||||
private func getShownRequestEntity() -> RequestEntity? {
|
||||
let currentTime = Date().timeIntervalSince1970
|
||||
guard let lastItem = inviteSeatList.last else { return nil }
|
||||
if delayDisappearanceTime > 0, currentTime - lastItem.timestamp > delayDisappearanceTime {
|
||||
return nil
|
||||
} else {
|
||||
return lastItem
|
||||
}
|
||||
}
|
||||
|
||||
func checkRaiseHandApplicationAction() {
|
||||
RoomRouter.shared.presentPopUpViewController(viewType: .raiseHandApplicationListViewType, height: 720.scale375Height(), backgroundColor: UIColor(0x22262E))
|
||||
}
|
||||
|
||||
deinit {
|
||||
unsubscribeEngine()
|
||||
}
|
||||
}
|
||||
|
||||
extension RaiseHandApplicationNotificationViewModel: RoomEngineEventResponder {
|
||||
func onEngineEvent(name: EngineEventCenter.RoomEngineEvent, param: [String : Any]?) {
|
||||
switch name {
|
||||
case .onRequestReceived:
|
||||
guard let request = param?["request"] as? TUIRequest else { return }
|
||||
guard request.requestAction == .takeSeat else { return }
|
||||
self.userId = request.userId
|
||||
self.userName = request.userName
|
||||
responder?.showRaiseHandApplicationNotificationView(userId: request.userId, userName: request.userName, count: inviteSeatList.count)
|
||||
case .onDeletedTakeSeatRequest:
|
||||
guard let userId = param?["userId"] as? String else { return }
|
||||
guard userId == self.userId else { return }
|
||||
let requestItem = getShownRequestEntity()
|
||||
self.userId = requestItem?.userId
|
||||
self.userName = requestItem?.userName
|
||||
if let requestItem = requestItem {
|
||||
responder?.showRaiseHandApplicationNotificationView(userId: requestItem.userId, userName: requestItem.userName, count: inviteSeatList.count)
|
||||
} else {
|
||||
responder?.hideRaiseHandApplicationNotificationView()
|
||||
}
|
||||
default: break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extension RaiseHandApplicationNotificationViewModel: RoomKitUIEventResponder {
|
||||
func onNotifyUIEvent(key: EngineEventCenter.RoomUIEvent, Object: Any?, info: [AnyHashable : Any]?) {
|
||||
if key == .TUIRoomKitService_RenewSeatList {
|
||||
guard let requestItem = getShownRequestEntity() else { return }
|
||||
responder?.showRaiseHandApplicationNotificationView(userId: requestItem.userId, userName: requestItem.userName, count: inviteSeatList.count)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user