ConferenceListState.swift 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. //
  2. // ListState.swift
  3. // TUIRoomKit
  4. //
  5. // Created by CY zhao on 2024/6/6.
  6. //
  7. import Foundation
  8. import RTCRoomEngine
  9. struct ConferenceListState {
  10. var scheduledConferences: [ConferenceInfo] = []
  11. var fetchScheduledConferencesCursor = ""
  12. }
  13. struct ConferenceInfo {
  14. var scheduleStartTime: UInt = 0
  15. var scheduleEndTime: UInt = 0
  16. var status: TUIConferenceStatus = []
  17. var timeZone: TimeZone = .current
  18. var attendeeListResult = AttendeeListResult()
  19. var durationTime: UInt = 0
  20. var reminderSecondsBeforeStart = 0
  21. // MARK: basic info
  22. var basicInfo = RoomInfo()
  23. init() {}
  24. init(with conferenceInfo: TUIConferenceInfo) {
  25. self.scheduleStartTime = conferenceInfo.scheduleStartTime
  26. self.scheduleEndTime = conferenceInfo.scheduleEndTime
  27. self.durationTime = self.scheduleEndTime - self.scheduleStartTime
  28. self.status = conferenceInfo.status
  29. self.reminderSecondsBeforeStart = conferenceInfo.reminderSecondsBeforeStart
  30. self.basicInfo = RoomInfo(with: conferenceInfo.basicRoomInfo)
  31. }
  32. }
  33. extension ConferenceInfo: Hashable {
  34. static func ==(lhs: ConferenceInfo, rhs: ConferenceInfo) -> Bool {
  35. return lhs.basicInfo.roomId == rhs.basicInfo.roomId &&
  36. lhs.basicInfo.name == rhs.basicInfo.name &&
  37. lhs.scheduleStartTime == rhs.scheduleStartTime &&
  38. lhs.scheduleEndTime == rhs.scheduleEndTime &&
  39. lhs.status == rhs.status
  40. }
  41. func hash(into hasher: inout Hasher) {
  42. hasher.combine(basicInfo.roomId)
  43. hasher.combine(basicInfo.name)
  44. hasher.combine(scheduleStartTime)
  45. hasher.combine(scheduleEndTime)
  46. hasher.combine(status)
  47. }
  48. }
  49. struct AttendeeListResult: Hashable {
  50. var attendeeList: [UserInfo] = []
  51. var fetchCursor: String = ""
  52. var totalCount: UInt = 0
  53. }
  54. extension TUIConferenceInfo {
  55. convenience init(conferenceInfo: ConferenceInfo) {
  56. self.init()
  57. self.scheduleStartTime = UInt(conferenceInfo.scheduleStartTime)
  58. self.scheduleEndTime = self.scheduleStartTime + conferenceInfo.durationTime
  59. self.scheduleAttendees = conferenceInfo.attendeeListResult.attendeeList.map { $0.userId }
  60. self.basicRoomInfo = TUIRoomInfo(roomInfo: conferenceInfo.basicInfo)
  61. self.reminderSecondsBeforeStart = conferenceInfo.reminderSecondsBeforeStart
  62. }
  63. }
  64. extension TUIConferenceStatus: Hashable {
  65. public func hash(into hasher: inout Hasher) {
  66. hasher.combine(self.rawValue)
  67. }
  68. }