Convert to RoomInfoBasicViewData

This commit is contained in:
ismailgulek
2020-09-23 12:46:33 +03:00
parent 447c5aec07
commit e90b5ecd89
6 changed files with 46 additions and 64 deletions
@@ -40,11 +40,25 @@ class RoomInfoBasicTableViewCell: GroupedTableViewCell {
@IBOutlet private weak var roomNameLabel: UILabel!
@IBOutlet private weak var roomAddressLabel: UILabel!
func configure(withViewModel viewModel: RoomInfoBasicTableViewCellVM) {
viewModel.setAvatar(in: avatarImageView)
viewModel.setEncryptionIcon(in: badgeImageView)
roomNameLabel.text = viewModel.roomName
roomAddressLabel.text = viewModel.roomAddress
func configure(withViewData viewData: RoomInfoBasicViewData) {
let avatarImage = AvatarGenerator.generateAvatar(forMatrixItem: viewData.roomId, withDisplayName: viewData.roomDisplayName)
if let avatarUrl = viewData.avatarUrl {
avatarImageView.enableInMemoryCache = true
avatarImageView.setImageURI(avatarUrl,
withType: nil,
andImageOrientation: .up,
toFitViewSize: avatarImageView.frame.size,
with: MXThumbnailingMethodCrop,
previewImage: avatarImage,
mediaManager: viewData.mediaManager)
} else {
avatarImageView.image = avatarImage
}
badgeImageView.image = viewData.encryptionImage
roomNameLabel.text = viewData.roomDisplayName
roomAddressLabel.text = viewData.mainRoomAlias
}
}
@@ -17,9 +17,12 @@
import Foundation
import MatrixKit
protocol RoomInfoBasicTableViewCellVM {
func setAvatar(in avatarImageView: MXKImageView)
func setEncryptionIcon(in imageView: UIImageView)
var roomName: String? { get }
var roomAddress: String? { get }
struct RoomInfoBasicViewData {
let avatarUrl: String?
let mediaManager: MXMediaManager?
let roomId: String
let roomDisplayName: String?
let mainRoomAlias: String?
let encryptionImage: UIImage?
}
@@ -63,7 +63,7 @@ final class RoomInfoListViewController: UIViewController {
private enum RowType: Equatable {
case `default`
case destructive
case basicInfo(_ viewModel: RoomInfoBasicTableViewCellVM)
case basicInfo(_ viewData: RoomInfoBasicViewData)
case textView
static func == (lhs: RoomInfoListViewController.RowType, rhs: RoomInfoListViewController.RowType) -> Bool {
@@ -139,7 +139,7 @@ final class RoomInfoListViewController: UIViewController {
private func updateSections(with viewData: RoomInfoListViewData) {
var tmpSections: [Section] = []
let rowBasicInfo = Row(type: .basicInfo(viewData.basicInfoViewModel), text: nil, accessoryType: .none, action: nil)
let rowBasicInfo = Row(type: .basicInfo(viewData.basicInfoViewData), text: nil, accessoryType: .none, action: nil)
var sectionBasicInfo = Section(header: nil,
rows: [rowBasicInfo],
@@ -311,9 +311,9 @@ extension RoomInfoListViewController: UITableViewDataSource {
cell.contentView.backgroundColor = .clear
cell.tintColor = theme.tintColor
return cell
case .basicInfo(let basicInfoViewModel):
case .basicInfo(let basicInfoViewData):
let cell: RoomInfoBasicTableViewCell = tableView.dequeueReusableCell(for: indexPath)
cell.configure(withViewModel: basicInfoViewModel)
cell.configure(withViewData: basicInfoViewData)
cell.selectionStyle = .none
cell.vc_hideSeparator()
cell.update(theme: theme)
@@ -22,6 +22,6 @@ import Foundation
struct RoomInfoListViewData {
let numberOfMembers: Int
let isEncrypted: Bool
let basicInfoViewModel: RoomInfoBasicTableViewCellVM
let basicInfoViewData: RoomInfoBasicViewData
let roomTopic: String?
}
@@ -33,9 +33,18 @@ final class RoomInfoListViewModel: NSObject, RoomInfoListViewModelType {
weak var coordinatorDelegate: RoomInfoListViewModelCoordinatorDelegate?
private var viewData: RoomInfoListViewData {
let encryptionImage = EncryptionTrustLevelBadgeImageHelper.roomBadgeImage(for: room.summary.roomEncryptionTrustLevel())
let basicInfoViewData = RoomInfoBasicViewData(avatarUrl: room.summary.avatar,
mediaManager: session.mediaManager,
roomId: room.roomId,
roomDisplayName: room.summary.displayname,
mainRoomAlias: room.summary.aliases?.first,
encryptionImage: encryptionImage)
return RoomInfoListViewData(numberOfMembers: Int(room.summary.membersCount.joined),
isEncrypted: room.summary.isEncrypted,
basicInfoViewModel: self,
basicInfoViewData: basicInfoViewData,
roomTopic: room.summary.topic)
}
@@ -108,47 +117,3 @@ final class RoomInfoListViewModel: NSObject, RoomInfoListViewModelType {
self.viewDelegate?.roomInfoListViewModel(self, didUpdateViewState: viewState)
}
}
extension RoomInfoListViewModel: RoomInfoBasicTableViewCellVM {
func setAvatar(in avatarImageView: MXKImageView) {
let avatarImage = AvatarGenerator.generateAvatar(forMatrixItem: room.roomId, withDisplayName: room.summary.displayname)
if let avatarUrl = room.summary.avatar ?? session.roomSummary(withRoomId: room.roomId)?.avatar {
avatarImageView.enableInMemoryCache = true
avatarImageView.setImageURI(avatarUrl,
withType: nil,
andImageOrientation: .up,
toFitViewSize: avatarImageView.frame.size,
with: MXThumbnailingMethodCrop,
previewImage: avatarImage,
mediaManager: session.mediaManager)
} else {
avatarImageView.image = avatarImage
}
}
func setEncryptionIcon(in imageView: UIImageView) {
guard let summary = room.summary else {
imageView.image = nil
imageView.isHidden = true
return
}
if summary.isEncrypted {
imageView.isHidden = false
imageView.image = EncryptionTrustLevelBadgeImageHelper.roomBadgeImage(for: summary.roomEncryptionTrustLevel())
} else {
imageView.isHidden = true
}
}
var roomName: String? {
return room.summary.displayname
}
var roomAddress: String? {
return room.summary.aliases?.first
}
}