marinofaggiana 3 years ago
parent
commit
6c4844d663

+ 1 - 1
Share/NCShareExtension.swift

@@ -631,7 +631,7 @@ extension NCShareExtension: UICollectionViewDataSource {
         }
         if metadata.ownerId.count > 0 && metadata.ownerId != activeAccount.userId {
             let fileNameLocalPath = String(CCUtility.getDirectoryUserData()) + "/" + String(CCUtility.getStringUser(activeAccount.user, urlBase: activeAccount.urlBase)) + "-" + metadata.ownerId + ".png"
-            NCOperationQueue.shared.downloadAvatar(user: metadata.ownerId, fileNameLocalPath: fileNameLocalPath, view: collectionView, indexPath: indexPath)
+            NCOperationQueue.shared.downloadAvatar(user: metadata.ownerId, fileNameLocalPath: fileNameLocalPath, cell: cell)
         }
         
         cell.imageSelect.isHidden = true

+ 1 - 1
iOSClient/Activity/NCActivity.swift

@@ -241,7 +241,7 @@ extension NCActivity: UITableViewDataSource {
                 cell.avatar.isHidden = false
                 
                 let fileNameLocalPath = String(CCUtility.getDirectoryUserData()) + "/" + String(CCUtility.getStringUser(appDelegate.user, urlBase: appDelegate.urlBase)) + "-" + activity.user + ".png"
-                NCOperationQueue.shared.downloadAvatar(user: activity.user, fileNameLocalPath: fileNameLocalPath, view: tableView, indexPath: indexPath)
+                NCOperationQueue.shared.downloadAvatar(user: activity.user, fileNameLocalPath: fileNameLocalPath, cell: cell)
             }
             
             // subject

+ 8 - 5
iOSClient/Main/Collection Common/NCCollectionViewCommon.swift

@@ -1333,12 +1333,19 @@ extension NCCollectionViewCommon: UICollectionViewDataSource {
 
     func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
         guard let metadata = dataSource.cellForItemAt(indexPath: indexPath) else { return }
+
         NCOperationQueue.shared.downloadThumbnail(metadata: metadata, urlBase: appDelegate.urlBase, view: collectionView, indexPath: indexPath)
+        
+        if metadata.ownerId.count > 0 && metadata.ownerId != appDelegate.userId && appDelegate.account == metadata.account {
+            let fileNameLocalPath = String(CCUtility.getDirectoryUserData()) + "/" + String(CCUtility.getStringUser(appDelegate.user, urlBase: metadata.urlBase)) + "-" + metadata.ownerId + ".png"
+            NCOperationQueue.shared.downloadAvatar(user: metadata.ownerId, fileNameLocalPath: fileNameLocalPath, cell: cell)
+        }
     }
     
     func collectionView(_ collectionView: UICollectionView, didEndDisplaying cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
         guard let metadata = dataSource.cellForItemAt(indexPath: indexPath) else { return }        
         NCOperationQueue.shared.cancelDownloadThumbnail(metadata: metadata)
+        NCOperationQueue.shared.cancelDownloadAvatar(user: metadata.ownerId)
     }
     
     func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
@@ -1507,11 +1514,7 @@ extension NCCollectionViewCommon: UICollectionViewDataSource {
             if appDelegate.account != metadata.account {
                 cell.imageShared.image = NCBrandColor.cacheImages.shared
             }
-            if metadata.ownerId.count > 0 && metadata.ownerId != appDelegate.userId && appDelegate.account == metadata.account {
-                let fileNameLocalPath = String(CCUtility.getDirectoryUserData()) + "/" + String(CCUtility.getStringUser(appDelegate.user, urlBase: metadata.urlBase)) + "-" + metadata.ownerId + ".png"
-                NCOperationQueue.shared.downloadAvatar(user: metadata.ownerId, fileNameLocalPath: fileNameLocalPath, view: collectionView, indexPath: indexPath)
-            }
-            
+           
             // Transfer
             var progress: Float = 0.0
             var totalBytes: Int64 = 0

+ 31 - 42
iOSClient/Networking/NCOperationQueue.swift

@@ -150,38 +150,36 @@ import NCCommunication
     
     // Download Avatar
     
-    func downloadAvatar(user: String, fileNameLocalPath: String, view: UIView, indexPath: IndexPath) {
+    func downloadAvatar(user: String, fileNameLocalPath: String, cell: UIView) {
 
-        var cell: NCCellProtocol?
-        
-        if view is UICollectionView {
-            if indexPath.section < (view as! UICollectionView).numberOfSections && indexPath.row < (view as! UICollectionView).numberOfItems(inSection: indexPath.section) {
-                cell = (view as! UICollectionView).cellForItem(at: indexPath) as? NCCellProtocol
-            }
-        } else {
-            if indexPath.section < (view as! UITableView).numberOfSections && indexPath.row < (view as! UITableView).numberOfRows(inSection: indexPath.section) {
-                cell = (view as! UITableView).cellForRow(at: indexPath) as? NCCellProtocol
-            }
-        }
+        let cell: NCCellProtocol = cell as! NCCellProtocol
 
         #if !EXTENSION
         let appDelegate = UIApplication.shared.delegate as! AppDelegate
         if let image = appDelegate.avatars[user] {
-            cell?.avatarImageView?.image = image
+            cell.avatarImageView?.image = image
             return
         }
         #endif
                 
-        cell?.avatarImageView?.image = UIImage(named: "avatar")
+        cell.avatarImageView?.image = UIImage(named: "avatar")
         if let image = UIImage(contentsOfFile: fileNameLocalPath) {
-            cell?.avatarImageView?.image = NCUtility.shared.createAvatar(image: image, size: 30)
+            cell.avatarImageView?.image = NCUtility.shared.createAvatar(image: image, size: 30)
         }
         for operation in downloadAvatarQueue.operations as! [NCOperationDownloadAvatar] {
             if operation.user == user {
                 return
             }
         }
-        downloadAvatarQueue.addOperation(NCOperationDownloadAvatar.init(user: user, fileNameLocalPath: fileNameLocalPath, view: view, indexPath: indexPath))
+        downloadAvatarQueue.addOperation(NCOperationDownloadAvatar.init(user: user, fileNameLocalPath: fileNameLocalPath, cell: cell))
+    }
+    
+    func cancelDownloadAvatar(user: String) {
+        for operation in  downloadAvatarQueue.operations as! [NCOperationDownloadAvatar] {
+            if operation.user == user {
+                operation.cancel()
+            }
+        }
     }
     
     @objc func downloadAvatarCancelAll() {
@@ -424,7 +422,7 @@ class NCOperationDownloadThumbnail: ConcurrentOperation {
                     }
                 }
                 
-                if let filePreviewImageView = cell!.filePreviewImageView  {
+                if let filePreviewImageView = cell?.filePreviewImageView  {
                     var previewImage: UIImage!
                     if errorCode == 0 && imageIcon != nil {
                         previewImage = imageIcon
@@ -453,14 +451,12 @@ class NCOperationDownloadAvatar: ConcurrentOperation {
 
     var user: String
     var fileNameLocalPath: String
-    var view: Any
-    var indexPath: IndexPath
+    var cell: NCCellProtocol?
         
-    init(user: String, fileNameLocalPath: String, view: Any, indexPath: IndexPath) {
+    init(user: String, fileNameLocalPath: String, cell: NCCellProtocol) {
         self.user = user
         self.fileNameLocalPath = fileNameLocalPath
-        self.view = view
-        self.indexPath = indexPath
+        self.cell = cell
     }
     
     override func start() {
@@ -469,27 +465,20 @@ class NCOperationDownloadAvatar: ConcurrentOperation {
             self.finish()
         } else {
             NCCommunication.shared.downloadAvatar(user: user, fileNameLocalPath: fileNameLocalPath, size: NCGlobal.shared.avatarSize) { (account, data, errorCode, errorMessage) in
-                if errorCode == 0 {
-                    if var image = UIImage(contentsOfFile: self.fileNameLocalPath) {
-                        image = NCUtility.shared.createAvatar(image: image, size: 30)
-                        
-                        var cell: NCCellProtocol?
-                        
-                        if self.view is UICollectionView {
-                            if self.indexPath.section < (self.view as! UICollectionView).numberOfSections && self.indexPath.row < (self.view as! UICollectionView).numberOfItems(inSection: self.indexPath.section) {
-                                cell = (self.view as! UICollectionView).cellForItem(at: self.indexPath) as? NCCellProtocol
-                            }
-                        } else {
-                            if self.indexPath.section < (self.view as! UITableView).numberOfSections && self.indexPath.row < (self.view as! UITableView).numberOfRows(inSection: self.indexPath.section) {
-                                cell = (self.view as! UITableView).cellForRow(at: self.indexPath) as? NCCellProtocol
-                            }
+                if let avatarImageView = self.cell?.avatarImageView  {
+                    if errorCode == 0 && data != nil {
+                        if var image = UIImage.init(data: data!) {
+                            image = NCUtility.shared.createAvatar(image: image, size: 30)
+                            UIView.transition(with: avatarImageView,
+                                              duration: 0.75,
+                                              options: .transitionCrossDissolve,
+                                              animations: { avatarImageView.image = image },
+                                              completion: nil)
+                            #if !EXTENSION
+                            let appDelegate = UIApplication.shared.delegate as! AppDelegate
+                            appDelegate.avatars[self.user] = image
+                            #endif
                         }
-                        cell?.avatarImageView?.image = image
-                       
-                        #if !EXTENSION
-                        let appDelegate = UIApplication.shared.delegate as! AppDelegate
-                        appDelegate.avatars[self.user] = image
-                        #endif
                     }
                 }
                 self.finish()

+ 1 - 1
iOSClient/Notification/NCNotification.swift

@@ -146,7 +146,7 @@ class NCNotification: UITableViewController, NCNotificationCellDelegate, NCEmpty
                         } else {
                             cell.avatar.isHidden = false
                             cell.avatarLeadingMargin.constant = 50
-                            NCOperationQueue.shared.downloadAvatar(user: userId, fileNameLocalPath: fileNameLocalPath, view: tableView, indexPath: indexPath)
+                            NCOperationQueue.shared.downloadAvatar(user: userId, fileNameLocalPath: fileNameLocalPath, cell: cell)
                         }
                     }
                 }

+ 1 - 1
iOSClient/Select/NCSelect.swift

@@ -522,7 +522,7 @@ extension NCSelect: UICollectionViewDataSource {
             }
             if metadata.ownerId.count > 0 && metadata.ownerId != activeAccount.userId {
                 let fileNameLocalPath = String(CCUtility.getDirectoryUserData()) + "/" + String(CCUtility.getStringUser(activeAccount.user, urlBase: activeAccount.urlBase)) + "-" + metadata.ownerId + ".png"
-                NCOperationQueue.shared.downloadAvatar(user: metadata.ownerId, fileNameLocalPath: fileNameLocalPath, view: collectionView, indexPath: indexPath)
+                NCOperationQueue.shared.downloadAvatar(user: metadata.ownerId, fileNameLocalPath: fileNameLocalPath, cell: cell)
             }
             
             cell.imageSelect.isHidden = true

+ 1 - 1
iOSClient/Share/NCShare.swift

@@ -420,7 +420,7 @@ extension NCShare: UITableViewDataSource {
                 cell.status.text = status.statusMessage
                 
                 let fileNameLocalPath = String(CCUtility.getDirectoryUserData()) + "/" + String(CCUtility.getStringUser(appDelegate.user, urlBase: appDelegate.urlBase)) + "-" + tableShare.shareWith + ".png"
-                NCOperationQueue.shared.downloadAvatar(user: tableShare.shareWith, fileNameLocalPath: fileNameLocalPath, view: tableView, indexPath: indexPath)
+                NCOperationQueue.shared.downloadAvatar(user: tableShare.shareWith, fileNameLocalPath: fileNameLocalPath, cell: cell)
                 
                 if CCUtility.isAnyPermission(toEdit: tableShare.permissions) {
                     cell.switchCanEdit.setOn(true, animated: false)

+ 1 - 1
iOSClient/Share/NCShareComments.swift

@@ -181,7 +181,7 @@ extension NCShareComments: UITableViewDataSource {
             
             // Image
             let fileNameLocalPath = String(CCUtility.getDirectoryUserData()) + "/" + String(CCUtility.getStringUser(appDelegate.user, urlBase: appDelegate.urlBase)) + "-" + tableComments.actorId + ".png"
-            NCOperationQueue.shared.downloadAvatar(user: tableComments.actorId, fileNameLocalPath: fileNameLocalPath, view: tableView, indexPath: indexPath)
+            NCOperationQueue.shared.downloadAvatar(user: tableComments.actorId, fileNameLocalPath: fileNameLocalPath, cell: cell)
             // Username
             cell.labelUser.text = tableComments.actorDisplayName
             cell.labelUser.textColor = NCBrandColor.shared.label