From 998222e91703892eb66511dee5fee9ca9f811718 Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Wed, 15 Apr 2026 13:54:44 +0200 Subject: [PATCH 01/10] add string Signed-off-by: Marino Faggiana --- iOSClient/Networking/E2EE/NCEndToEndMetadataV2.swift | 2 +- iOSClient/Supporting Files/en.lproj/Localizable.strings | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/iOSClient/Networking/E2EE/NCEndToEndMetadataV2.swift b/iOSClient/Networking/E2EE/NCEndToEndMetadataV2.swift index 9b6d02f35e..638b2277aa 100644 --- a/iOSClient/Networking/E2EE/NCEndToEndMetadataV2.swift +++ b/iOSClient/Networking/E2EE/NCEndToEndMetadataV2.swift @@ -282,7 +282,7 @@ extension NCEndToEndMetadata { let metadataKey = tableUser.metadataKey?.base64EncodedString(), let decryptedMetadataKey = tableUser.metadataKey else { return NKError(errorCode: NCGlobal.shared.errorE2EENoUserFound, - errorDescription: NSLocalizedString("_e2ee_no_user_found_", comment: "")) + errorDescription: NSLocalizedString("_e2ee_no_metadataKey_found_", comment: "")) } // SIGNATURE CHECK diff --git a/iOSClient/Supporting Files/en.lproj/Localizable.strings b/iOSClient/Supporting Files/en.lproj/Localizable.strings index 2c64b7e141..90cbf1c2f3 100644 --- a/iOSClient/Supporting Files/en.lproj/Localizable.strings +++ b/iOSClient/Supporting Files/en.lproj/Localizable.strings @@ -776,6 +776,7 @@ You can stop it at any time, adjust the settings, and enable it again."; "_e2ee_no_dir_" = "End-to-end encryption error, cannot get directory"; "_e2ee_no_certificate_" = "End-to-end encryption error, cannot get certificate"; "_e2ee_no_generate_key_" = "End-to-end encryption error, cannot generate key"; +"_e2ee_no_metadataKey_found_" = "End-to-end encryption error, cannot decrypt metadata key"; "_e2ee_no_user_found_" = "End-to-end encryption error, user not found"; "_e2ee_no_signature_found_" = "End-to-end encryption error, no signature found"; "_e2ee_counter_check_" = "End-to-end encryption error, the counter is lower than the previous one"; From 141d3a4503f48523ade84a4a0967239a3143aa69 Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Wed, 15 Apr 2026 14:16:54 +0200 Subject: [PATCH 02/10] fix color Signed-off-by: Marino Faggiana --- iOSClient/GUI/ComponentView.swift | 2 +- iOSClient/Main/Create/Upload Assets/NCUploadAssetsView.swift | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/iOSClient/GUI/ComponentView.swift b/iOSClient/GUI/ComponentView.swift index 9a24acc557..628a642339 100644 --- a/iOSClient/GUI/ComponentView.swift +++ b/iOSClient/GUI/ComponentView.swift @@ -13,7 +13,7 @@ struct ButtonRounded: ButtonStyle { .padding(.horizontal, 40) .padding(.vertical, 10) .background(disabled ? Color(UIColor.placeholderText) : Color(NCBrandColor.shared.getElement(account: account))) - .foregroundColor(disabled ? Color(UIColor.placeholderText) : Color(NCBrandColor.shared.getText(account: account))) + .foregroundColor(disabled ? Color(UIColor.lightGray) : .white) .clipShape(Capsule()) .opacity(configuration.isPressed ? 0.5 : 1.0) } diff --git a/iOSClient/Main/Create/Upload Assets/NCUploadAssetsView.swift b/iOSClient/Main/Create/Upload Assets/NCUploadAssetsView.swift index 49b0445973..b7edd425aa 100644 --- a/iOSClient/Main/Create/Upload Assets/NCUploadAssetsView.swift +++ b/iOSClient/Main/Create/Upload Assets/NCUploadAssetsView.swift @@ -22,7 +22,6 @@ struct NCUploadAssetsView: View { @State private var renameIndex: Int = 0 @State private var index: Int = 0 - var metadata: tableMetadata? let gridItems: [GridItem] = [GridItem()] let fileNamePath = NSTemporaryDirectory() + "Photo.jpg" let utilityFileSystem = NCUtilityFileSystem() @@ -147,7 +146,7 @@ struct NCUploadAssetsView: View { .onChange(of: model.useAutoUploadFolder) { model.updateUseAutoUploadFolder() } - .toggleStyle(SwitchToggleStyle(tint: Color(NCBrandColor.shared.getElement(account: metadata?.account)))) + .toggleStyle(SwitchToggleStyle(tint: Color(NCBrandColor.shared.getElement(account: model.session.account)))) if model.useAutoUploadFolder { Toggle(isOn: $model.useAutoUploadSubFolder, label: { @@ -158,7 +157,7 @@ struct NCUploadAssetsView: View { .onChange(of: model.useAutoUploadSubFolder) { model.updateUseAutoUploadSubFolder() } - .toggleStyle(SwitchToggleStyle(tint: Color(NCBrandColor.shared.getElement(account: metadata?.account)))) + .toggleStyle(SwitchToggleStyle(tint: Color(NCBrandColor.shared.getElement(account: model.session.account)))) } } From e00c2a66fe07c190a157d36edd9068207cd22ad6 Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Wed, 15 Apr 2026 14:28:24 +0200 Subject: [PATCH 03/10] clear db Signed-off-by: Marino Faggiana --- iOSClient/Data/NCManageDatabase.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/iOSClient/Data/NCManageDatabase.swift b/iOSClient/Data/NCManageDatabase.swift index 42f1eeb380..8e27653fc9 100644 --- a/iOSClient/Data/NCManageDatabase.swift +++ b/iOSClient/Data/NCManageDatabase.swift @@ -211,6 +211,7 @@ final class NCManageDatabase: @unchecked Sendable { self.clearTable(tableMetadataTag.self) self.clearTable(tableRecommendedFiles.self) self.clearTable(tableShare.self) + self.clearTable(tableTrash.self) } func clearDatabase(account: String) { From accd4e3447dbc5a575a4bb5427479733332c2e9e Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Wed, 15 Apr 2026 15:46:57 +0200 Subject: [PATCH 04/10] Trash fix Live Photo Signed-off-by: Marino Faggiana --- Brand/Database.swift | 2 +- iOSClient/Data/NCManageDatabase+Trash.swift | 133 ++++++++++++++++---- 2 files changed, 112 insertions(+), 23 deletions(-) diff --git a/Brand/Database.swift b/Brand/Database.swift index 4c94bbaea3..f083885915 100644 --- a/Brand/Database.swift +++ b/Brand/Database.swift @@ -8,4 +8,4 @@ import Foundation // let databaseName = "nextcloud.realm" let tableAccountBackup = "tableAccountBackup.json" -let databaseSchemaVersion: UInt64 = 408 +let databaseSchemaVersion: UInt64 = 409 diff --git a/iOSClient/Data/NCManageDatabase+Trash.swift b/iOSClient/Data/NCManageDatabase+Trash.swift index c17bfa8456..930880118c 100644 --- a/iOSClient/Data/NCManageDatabase+Trash.swift +++ b/iOSClient/Data/NCManageDatabase+Trash.swift @@ -7,25 +7,40 @@ import UIKit import RealmSwift import NextcloudKit -class tableTrash: Object { - @objc dynamic var account = "" - @objc dynamic var classFile = "" - @objc dynamic var contentType = "" - @objc dynamic var date = NSDate() - @objc dynamic var directory: Bool = false - @objc dynamic var fileId = "" - @objc dynamic var fileName = "" - @objc dynamic var filePath = "" - @objc dynamic var hasPreview: Bool = false - @objc dynamic var iconName = "" - @objc dynamic var size: Int64 = 0 - @objc dynamic var trashbinFileName = "" - @objc dynamic var trashbinOriginalLocation = "" - @objc dynamic var trashbinDeletionTime = NSDate() - - override static func primaryKey() -> String { - return "fileId" - } +/// Represents a trash item stored in Realm. +/// +/// Each object corresponds to a file or folder in the Nextcloud trashbin, +/// associated with a specific account. +/// +/// The `identifier` is used as primary key and is built from: +/// `account + "|" + fileName`, where `fileName` includes the `.dXXXXX` suffix, +/// making each item unique. +/// +/// - `fileName`: name of the file in trash (includes `.dXXXXX`) +/// - `trashbinFileName`: original file name before deletion +/// - `trashbinOriginalLocation`: original path before deletion +/// - `classFile`: type of file (e.g. "image", "video", "document") +/// +/// This model replaces the legacy `tableTrash` schema. +typealias tableTrash = tableTrashV2 +class tableTrashV2: Object { + // Primary key: unique per account + trash item + @Persisted(primaryKey: true) var identifier: String + + @Persisted var account: String = "" + @Persisted var classFile: String = "" + @Persisted var contentType: String = "" + @Persisted var date: Date = Date() + @Persisted var directory: Bool = false + @Persisted var fileId: String = "" + @Persisted var fileName: String = "" + @Persisted var filePath: String = "" + @Persisted var hasPreview: Bool = false + @Persisted var iconName: String = "" + @Persisted var size: Int64 = 0 + @Persisted var trashbinFileName: String = "" + @Persisted var trashbinOriginalLocation: String = "" + @Persisted var trashbinDeletionTime: Date = Date() } extension NCManageDatabase { @@ -38,12 +53,22 @@ extension NCManageDatabase { /// - account: The account string used to associate each trash item. /// - items: An array of `NKTrash` items to be added to the database. func addTrashAsync(items: [NKTrash], account: String) async { + let itemsFiltered = filterOutVideosMatchingImages(items) + await core.performRealmWriteAsync { realm in - items.forEach { trash in + + // Delete all existing trash items for this account. + let existingItems = realm.objects(tableTrash.self) + .where { $0.account == account } + realm.delete(existingItems) + + itemsFiltered.forEach { trash in let object = tableTrash() + + object.identifier = "\(account)|\(trash.fileName)" object.account = account object.contentType = trash.contentType - object.date = trash.date as NSDate + object.date = trash.date object.directory = trash.directory object.fileId = trash.fileId object.fileName = trash.fileName @@ -51,10 +76,11 @@ extension NCManageDatabase { object.hasPreview = trash.hasPreview object.iconName = trash.iconName object.size = trash.size - object.trashbinDeletionTime = trash.trashbinDeletionTime as NSDate + object.trashbinDeletionTime = trash.trashbinDeletionTime object.trashbinFileName = trash.trashbinFileName object.trashbinOriginalLocation = trash.trashbinOriginalLocation object.classFile = trash.classFile + realm.add(object, update: .all) } } @@ -141,4 +167,67 @@ extension NCManageDatabase { .map { tableTrash(value: $0) } } } + + // MARK: - helpers + + /// Filters out video items that have a matching image counterpart based on a shared trash suffix. + /// + /// This function is designed to handle Live Photo pairs in the trash, where both the image + /// (e.g., `.jpg`) and the video (e.g., `.mov`) share the same suffix (e.g., `.d123456`). + /// + /// The logic works as follows: + /// - Extract all suffixes from items classified as `image`. + /// - Build a set of these suffixes for fast lookup. + /// - Iterate through all items: + /// - Keep all non-video items. + /// - For video items, extract their suffix and check if it exists in the image suffix set. + /// - If a match is found, the video is considered part of a Live Photo pair and is excluded. + /// + /// - Parameter items: An array of `NKTrash` items to filter. + /// - Returns: A filtered array where videos paired with images are removed. + func filterOutVideosMatchingImages(_ items: [NKTrash]) -> [NKTrash] { + // Collect suffixes from image items. + let imageSuffixes: Set = Set( + items.compactMap { item in + guard item.classFile == "image" else { return nil } + return trashSuffix(from: item.fileName) + } + ) + + // Remove videos whose suffix matches any image suffix. + return items.filter { item in + guard item.classFile == "video" else { + return true + } + + guard let suffix = trashSuffix(from: item.fileName) else { + return true + } + + return !imageSuffixes.contains(suffix) + } + } + + /// Extracts the suffix component from a trash file name. + /// + /// The suffix is defined as the substring after the last dot (`.`) in the file name. + /// This is typically used to identify related files in the trash (e.g., Live Photo pairs), + /// where files share a common suffix such as `d123456`. + /// + /// Examples: + /// - `file.jpg.d123456` → `d123456` + /// - `video.mov.d987654` → `d987654` + /// + /// If the file name does not contain a dot or the suffix is empty, the function returns `nil`. + /// + /// - Parameter fileName: The full file name string. + /// - Returns: The extracted suffix, or `nil` if not available. + func trashSuffix(from fileName: String) -> String? { + guard let lastDot = fileName.lastIndex(of: ".") else { + return nil + } + + let suffix = String(fileName[fileName.index(after: lastDot)...]) + return suffix.isEmpty ? nil : suffix + } } From ca45f138c2447c25ae792f156d7fd5d54c202e87 Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Thu, 16 Apr 2026 08:44:59 +0200 Subject: [PATCH 05/10] code Signed-off-by: Marino Faggiana --- Nextcloud.xcodeproj/project.pbxproj | 4 +- iOSClient/Data/NCManageDatabase+Trash.swift | 59 ++++++++++++------- .../Trash/Cell/NCTrashCellProtocol.swift | 4 ++ iOSClient/Trash/Cell/NCTrashGridCell.swift | 7 ++- iOSClient/Trash/Cell/NCTrashListCell.swift | 8 +++ iOSClient/Trash/Cell/NCTrashListCell.xib | 25 ++++++-- iOSClient/Trash/NCTrash+Networking.swift | 1 - 7 files changed, 78 insertions(+), 30 deletions(-) diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index ac069e22c1..d6414906f5 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/Nextcloud.xcodeproj/project.pbxproj @@ -6128,8 +6128,8 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/nextcloud/NextcloudKit"; requirement = { - kind = exactVersion; - version = 7.2.8; + branch = trash; + kind = branch; }; }; F788ECC5263AAAF900ADC67F /* XCRemoteSwiftPackageReference "MarkdownKit" */ = { diff --git a/iOSClient/Data/NCManageDatabase+Trash.swift b/iOSClient/Data/NCManageDatabase+Trash.swift index 930880118c..de1809b04e 100644 --- a/iOSClient/Data/NCManageDatabase+Trash.swift +++ b/iOSClient/Data/NCManageDatabase+Trash.swift @@ -38,6 +38,7 @@ class tableTrashV2: Object { @Persisted var hasPreview: Bool = false @Persisted var iconName: String = "" @Persisted var size: Int64 = 0 + @Persisted var livePhoto: Bool = false @Persisted var trashbinFileName: String = "" @Persisted var trashbinOriginalLocation: String = "" @Persisted var trashbinDeletionTime: Date = Date() @@ -80,6 +81,7 @@ extension NCManageDatabase { object.trashbinFileName = trash.trashbinFileName object.trashbinOriginalLocation = trash.trashbinOriginalLocation object.classFile = trash.classFile + object.livePhoto = trash.livePhoto realm.add(object, update: .all) } @@ -173,38 +175,55 @@ extension NCManageDatabase { /// Filters out video items that have a matching image counterpart based on a shared trash suffix. /// /// This function is designed to handle Live Photo pairs in the trash, where both the image - /// (e.g., `.jpg`) and the video (e.g., `.mov`) share the same suffix (e.g., `.d123456`). + /// (e.g. `.jpg`) and the video (e.g. `.mov`) share the same suffix (e.g. `.d123456`). /// /// The logic works as follows: - /// - Extract all suffixes from items classified as `image`. - /// - Build a set of these suffixes for fast lookup. + /// - Extract the suffix from each trash item file name. + /// - Detect which suffixes contain both an image and a video. /// - Iterate through all items: - /// - Keep all non-video items. - /// - For video items, extract their suffix and check if it exists in the image suffix set. - /// - If a match is found, the video is considered part of a Live Photo pair and is excluded. + /// - If an item is a video and its suffix is shared with an image, the video is excluded. + /// - If an item is an image and its suffix is shared with a video, the image is kept and + /// marked with `isLivePhoto = true`. + /// - All other items are returned unchanged. /// - /// - Parameter items: An array of `NKTrash` items to filter. - /// - Returns: A filtered array where videos paired with images are removed. + /// - Parameter items: An array of `NKTrash` items to process. + /// - Returns: A filtered array where Live Photo videos are removed and matching images are marked as Live Photos. func filterOutVideosMatchingImages(_ items: [NKTrash]) -> [NKTrash] { - // Collect suffixes from image items. - let imageSuffixes: Set = Set( - items.compactMap { item in - guard item.classFile == "image" else { return nil } - return trashSuffix(from: item.fileName) + var suffixMap: [String: (hasImage: Bool, hasVideo: Bool)] = [:] + + for item in items { + guard let suffix = trashSuffix(from: item.fileName) else { + continue } - ) + var entry = suffixMap[suffix] ?? (false, false) - // Remove videos whose suffix matches any image suffix. - return items.filter { item in - guard item.classFile == "video" else { - return true + if item.classFile == "image" { + entry.hasImage = true + } else if item.classFile == "video" { + entry.hasVideo = true } + suffixMap[suffix] = entry + } + + return items.compactMap { item -> NKTrash? in guard let suffix = trashSuffix(from: item.fileName) else { - return true + return item + } + let entry = suffixMap[suffix] + let isLive = (entry?.hasImage == true && entry?.hasVideo == true) + + if item.classFile == "video" && isLive { + return nil + } + + if item.classFile == "image" && isLive { + var copy = item + copy.livePhoto = true + return copy } - return !imageSuffixes.contains(suffix) + return item } } diff --git a/iOSClient/Trash/Cell/NCTrashCellProtocol.swift b/iOSClient/Trash/Cell/NCTrashCellProtocol.swift index 61f5e78321..1fe5d9706a 100644 --- a/iOSClient/Trash/Cell/NCTrashCellProtocol.swift +++ b/iOSClient/Trash/Cell/NCTrashCellProtocol.swift @@ -10,6 +10,7 @@ protocol NCTrashCellProtocol { var labelExtension: UILabel! { get set } var labelInfo: UILabel! { get set } var imageItem: UIImageView! { get set } + var statusImg: UIImageView? { get set } var account: String { get set } func selected(_ status: Bool, isEditMode: Bool, account: String) @@ -25,6 +26,9 @@ extension NCTrashCellProtocol where Self: UICollectionViewCell { self.labelExtension?.textColor = NCBrandColor.shared.textColor if self is NCTrashListCell { self.labelInfo?.text = NCUtility().getRelativeDateTitle(tableTrash.trashbinDeletionTime as Date) + if tableTrash.livePhoto { + statusImg?.image = NCUtility().loadImage(named: "livephoto", colors: [NCBrandColor.shared.iconImageColor]) + } } else { let dateFormatter = DateFormatter() dateFormatter.dateStyle = .short diff --git a/iOSClient/Trash/Cell/NCTrashGridCell.swift b/iOSClient/Trash/Cell/NCTrashGridCell.swift index e64671dd9c..a7d6979ab0 100644 --- a/iOSClient/Trash/Cell/NCTrashGridCell.swift +++ b/iOSClient/Trash/Cell/NCTrashGridCell.swift @@ -8,7 +8,7 @@ protocol NCTrashGridCellDelegate: AnyObject { func tapMoreGridItem(with objectId: String, image: UIImage?, sender: Any) } -class NCTrashGridCell: UICollectionViewCell, NCTrashCellProtocol { +class NCTrashGridCell: UICollectionViewCell, NCTrashCellProtocol { @IBOutlet weak var imageItem: UIImageView! @IBOutlet weak var imageSelect: UIImageView! @IBOutlet weak var labelTitle: UILabel! @@ -24,6 +24,11 @@ class NCTrashGridCell: UICollectionViewCell, NCTrashCellProtocol { var account = "" var user = "" + var statusImg: UIImageView? { + get { return nil } + set { imageItem = newValue } + } + override func awakeFromNib() { super.awakeFromNib() initCell() diff --git a/iOSClient/Trash/Cell/NCTrashListCell.swift b/iOSClient/Trash/Cell/NCTrashListCell.swift index 37b60ae724..484e8b7702 100644 --- a/iOSClient/Trash/Cell/NCTrashListCell.swift +++ b/iOSClient/Trash/Cell/NCTrashListCell.swift @@ -11,6 +11,7 @@ protocol NCTrashListCellDelegate: AnyObject { class NCTrashListCell: UICollectionViewCell, NCTrashCellProtocol { @IBOutlet weak var imageItem: UIImageView! + @IBOutlet weak var imageStatus: UIImageView! @IBOutlet weak var imageItemLeftConstraint: NSLayoutConstraint! @IBOutlet weak var imageSelect: UIImageView! @IBOutlet weak var labelTitle: UILabel! @@ -27,6 +28,11 @@ class NCTrashListCell: UICollectionViewCell, NCTrashCellProtocol { var objectId = "" var account = "" + var statusImg: UIImageView? { + get { return imageStatus } + set { imageStatus = newValue } + } + override func awakeFromNib() { super.awakeFromNib() initCell() @@ -60,6 +66,8 @@ class NCTrashListCell: UICollectionViewCell, NCTrashCellProtocol { imageItem.layer.cornerRadius = 6 imageItem.layer.masksToBounds = true + imageStatus.image = nil + // These labels use fonts generated by the custom UIFont helpers defined in // the UIFont extension (e.g. `.callout()`, `.caption1()`). // diff --git a/iOSClient/Trash/Cell/NCTrashListCell.xib b/iOSClient/Trash/Cell/NCTrashListCell.xib index 1ce0ec16b9..1d9cb437ac 100644 --- a/iOSClient/Trash/Cell/NCTrashListCell.xib +++ b/iOSClient/Trash/Cell/NCTrashListCell.xib @@ -22,27 +22,34 @@ + + + + + + + - + - + - @@ -103,6 +77,31 @@ + + + + + + + + + + + + + + + + @@ -155,10 +154,10 @@ - + - + diff --git a/iOSClient/Main/Collection Common/Cell/NCRecommendationsCell.swift b/iOSClient/Main/Collection Common/Cell/NCRecommendationsCell.swift index 507ab98287..21d27676f7 100644 --- a/iOSClient/Main/Collection Common/Cell/NCRecommendationsCell.swift +++ b/iOSClient/Main/Collection Common/Cell/NCRecommendationsCell.swift @@ -92,7 +92,6 @@ class NCRecommendationsCell: UICollectionViewCell, UIGestureRecognizerDelegate { buttonMore.menu = nil buttonMore.showsMenuAsPrimaryAction = true - contentView.bringSubviewToFront(buttonMore) } @objc private func handleTapObserver(_ g: UITapGestureRecognizer) { diff --git a/iOSClient/Media/Cell/NCMediaCell.swift b/iOSClient/Media/Cell/NCMediaCell.swift index 1575f21f6d..c36cc3152f 100644 --- a/iOSClient/Media/Cell/NCMediaCell.swift +++ b/iOSClient/Media/Cell/NCMediaCell.swift @@ -24,7 +24,6 @@ import UIKit class NCMediaCell: UICollectionViewCell { - @IBOutlet weak var imageItem: UIImageView! @IBOutlet weak var imageVisualEffect: UIVisualEffectView! @IBOutlet weak var imageSelect: UIImageView! @@ -46,17 +45,19 @@ class NCMediaCell: UICollectionViewCell { func initCell() { imageStatus.image = nil imageItem.image = nil - imageVisualEffect.alpha = 0.4 + imageSelect.image = NCImageCache.shared.getImageCheckedYes() + imageSelect.alpha = 0 + + imageVisualEffect.isHidden = false + imageVisualEffect.effect = nil + imageVisualEffect.alpha = 0 + imageVisualEffect.isUserInteractionEnabled = false + imageVisualEffect.backgroundColor = UIColor.white.withAlphaComponent(0.2) } func selected(_ status: Bool) { - if status { - imageSelect.isHidden = false - imageVisualEffect.isHidden = false - } else { - imageSelect.isHidden = true - imageVisualEffect.isHidden = true - } + self.imageVisualEffect.alpha = status ? 1 : 0 + self.imageSelect.alpha = status ? 1 : 0 } } diff --git a/iOSClient/Media/Cell/NCMediaCell.xib b/iOSClient/Media/Cell/NCMediaCell.xib index 56d8a386e5..55163a7052 100644 --- a/iOSClient/Media/Cell/NCMediaCell.xib +++ b/iOSClient/Media/Cell/NCMediaCell.xib @@ -1,9 +1,8 @@ - + - - + @@ -27,16 +26,15 @@ -