// // NCShareUserCell.swift // Nextcloud // // Created by Henrik Storch on 15.11.2021. // Copyright © 2021 Henrik Storch. All rights reserved. // // Author Henrik Storch // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . import UIKit import DropDown import NextcloudKit class NCShareUserCell: UITableViewCell, NCCellProtocol { @IBOutlet weak var imageItem: UIImageView! @IBOutlet weak var labelTitle: UILabel! @IBOutlet weak var buttonMenu: UIButton! @IBOutlet weak var imageStatus: UIImageView! @IBOutlet weak var status: UILabel! @IBOutlet weak var btnQuickStatus: UIButton! @IBOutlet weak var labelQuickStatus: UILabel! @IBOutlet weak var imageDownArrow: UIImageView! var tableShare: tableShare? weak var delegate: NCShareUserCellDelegate? var fileAvatarImageView: UIImageView? { return imageItem } var fileUser: String? { get { return tableShare?.shareWith } set {} } func setupCellUI(userId: String) { guard let tableShare = tableShare else { return } self.accessibilityCustomActions = [UIAccessibilityCustomAction( name: NSLocalizedString("_show_profile_", comment: ""), target: self, selector: #selector(tapAvatarImage))] labelTitle.text = tableShare.shareWithDisplayname labelTitle.textColor = .label isUserInteractionEnabled = true labelQuickStatus.isHidden = false imageDownArrow.isHidden = false buttonMenu.isHidden = false buttonMenu.accessibilityLabel = NSLocalizedString("_more_", comment: "") imageItem.image = NCShareCommon.shared.getImageShareType(shareType: tableShare.shareType) let status = NCUtility.shared.getUserStatus(userIcon: tableShare.userIcon, userStatus: tableShare.userStatus, userMessage: tableShare.userMessage) imageStatus.image = status.onlineStatus self.status.text = status.statusMessage // If the initiator or the recipient is not the current user, show the list of sharees without any options to edit it. if tableShare.uidOwner != userId && tableShare.uidFileOwner != userId { isUserInteractionEnabled = false labelQuickStatus.isHidden = true imageDownArrow.isHidden = true buttonMenu.isHidden = true } btnQuickStatus.accessibilityHint = NSLocalizedString("_user_sharee_footer_", comment: "") btnQuickStatus.setTitle("", for: .normal) btnQuickStatus.contentHorizontalAlignment = .left if tableShare.permissions == NCGlobal.shared.permissionCreateShare { labelQuickStatus.text = NSLocalizedString("_share_file_drop_", comment: "") } else { // Read Only if CCUtility.isAnyPermission(toEdit: tableShare.permissions) { labelQuickStatus.text = NSLocalizedString("_share_editing_", comment: "") } else { labelQuickStatus.text = NSLocalizedString("_share_read_only_", comment: "") } } } override func awakeFromNib() { super.awakeFromNib() let tapGesture = UITapGestureRecognizer(target: self, action: #selector(tapAvatarImage)) imageItem?.addGestureRecognizer(tapGesture) buttonMenu.setImage(UIImage(named: "shareMenu")?.image(color: .gray, size: 50), for: .normal) labelQuickStatus.textColor = NCBrandColor.shared.customer imageDownArrow.image = NCUtility.shared.loadImage(named: "arrowtriangle.down.fill", color: NCBrandColor.shared.customer) } @objc func tapAvatarImage(_ sender: UITapGestureRecognizer) { delegate?.showProfile(with: tableShare, sender: sender) } @IBAction func touchUpInsideMenu(_ sender: Any) { delegate?.tapMenu(with: tableShare, sender: sender) } @IBAction func quickStatusClicked(_ sender: Any) { delegate?.quickStatus(with: tableShare, sender: sender) } } protocol NCShareUserCellDelegate: AnyObject { func tapMenu(with tableShare: tableShare?, sender: Any) func showProfile(with tableComment: tableShare?, sender: Any) func quickStatus(with tableShare: tableShare?, sender: Any) } // MARK: - NCSearchUserDropDownCell class NCSearchUserDropDownCell: DropDownCell, NCCellProtocol { @IBOutlet weak var imageItem: UIImageView! @IBOutlet weak var imageStatus: UIImageView! @IBOutlet weak var status: UILabel! @IBOutlet weak var imageShareeType: UIImageView! @IBOutlet weak var centerTitle: NSLayoutConstraint! private var user: String = "" var fileAvatarImageView: UIImageView? { return imageItem } var fileUser: String? { get { return user } set { user = newValue ?? "" } } func setupCell(sharee: NKSharee, baseUrl: NCUserBaseUrl) { imageItem.image = NCShareCommon.shared.getImageShareType(shareType: sharee.shareType) imageShareeType.image = NCShareCommon.shared.getImageShareType(shareType: sharee.shareType) let status = NCUtility.shared.getUserStatus(userIcon: sharee.userIcon, userStatus: sharee.userStatus, userMessage: sharee.userMessage) imageStatus.image = status.onlineStatus self.status.text = status.statusMessage if self.status.text?.count ?? 0 > 0 { centerTitle.constant = -5 } else { centerTitle.constant = 0 } imageItem.image = NCUtility.shared.loadUserImage( for: sharee.shareWith, displayName: nil, userBaseUrl: baseUrl) let fileName = baseUrl.userBaseUrl + "-" + sharee.shareWith + ".png" if NCManageDatabase.shared.getImageAvatarLoaded(fileName: fileName) == nil { let fileNameLocalPath = String(CCUtility.getDirectoryUserData()) + "/" + fileName let etag = NCManageDatabase.shared.getTableAvatar(fileName: fileName)?.etag NextcloudKit.shared.downloadAvatar( user: sharee.shareWith, fileNameLocalPath: fileNameLocalPath, sizeImage: NCGlobal.shared.avatarSize, avatarSizeRounded: NCGlobal.shared.avatarSizeRounded, etag: etag) { _, imageAvatar, _, etag, error in if error == .success, let etag = etag, let imageAvatar = imageAvatar { NCManageDatabase.shared.addAvatar(fileName: fileName, etag: etag) self.imageItem.image = imageAvatar } else if error.errorCode == NCGlobal.shared.errorNotModified, let imageAvatar = NCManageDatabase.shared.setAvatarLoaded(fileName: fileName) { self.imageItem.image = imageAvatar } } } } }