瀏覽代碼

fix activity

Signed-off-by: marinofaggiana <ios@nextcloud.com>
marinofaggiana 2 年之前
父節點
當前提交
0d770b67f5
共有 2 個文件被更改,包括 84 次插入5 次删除
  1. 4 5
      iOSClient/Activity/NCActivityTableViewCell.swift
  2. 80 0
      iOSClient/Networking/NCOperationQueue.swift

+ 4 - 5
iOSClient/Activity/NCActivityTableViewCell.swift

@@ -29,6 +29,8 @@ class NCActivityCollectionViewCell: UICollectionViewCell {
 
     @IBOutlet weak var imageView: UIImageView!
 
+    var fileNamePathOrFileId = ""
+
     override func awakeFromNib() {
         super.awakeFromNib()
     }
@@ -254,11 +256,8 @@ extension NCActivityTableViewCell: UICollectionViewDataSource {
 
                     } else {
 
-                        NCCommunication.shared.downloadPreview(fileNamePathOrFileId: activityPreview.source, fileNamePreviewLocalPath: fileNamePath, widthPreview: 0, heightPreview: 0, etag: nil, useInternalEndpoint: false) { _, imagePreview, _, _, _, errorCode, _ in
-                            if errorCode == 0 && imagePreview != nil {
-                                self.collectionView.reloadData()
-                            }
-                        }
+                        cell.fileNamePathOrFileId = activityPreview.source
+                        NCOperationQueue.shared.downloadThumbnailActivity(fileNamePathOrFileId: activityPreview.source, fileNamePreviewLocalPath: fileNamePath, cell: cell, collectionView: collectionView)
                     }
                 }
             }

+ 80 - 0
iOSClient/Networking/NCOperationQueue.swift

@@ -37,6 +37,7 @@ import NCCommunication
     private let copyMoveQueue = Queuer(name: "copyMoveQueue", maxConcurrentOperationCount: 1, qualityOfService: .default)
     private let synchronizationQueue = Queuer(name: "synchronizationQueue", maxConcurrentOperationCount: 1, qualityOfService: .default)
     private let downloadThumbnailQueue = Queuer(name: "downloadThumbnailQueue", maxConcurrentOperationCount: 10, qualityOfService: .default)
+    private let downloadThumbnailActivityQueue = Queuer(name: "downloadThumbnailActivityQueue", maxConcurrentOperationCount: 10, qualityOfService: .default)
     private let downloadAvatarQueue = Queuer(name: "downloadAvatarQueue", maxConcurrentOperationCount: 10, qualityOfService: .default)
     private let unifiedSearchQueue = Queuer(name: "unifiedSearchQueue", maxConcurrentOperationCount: 1, qualityOfService: .default)
 
@@ -48,6 +49,7 @@ import NCCommunication
         copyMoveCancelAll()
         synchronizationCancelAll()
         downloadThumbnailCancelAll()
+        downloadThumbnailActivityCancelAll()
         downloadAvatarCancelAll()
         unifiedSearchCancelAll()
     }
@@ -167,6 +169,34 @@ import NCCommunication
         downloadThumbnailQueue.cancelAll()
     }
 
+    // MARK: - Download Thumbnail Activity
+
+    func downloadThumbnailActivity(fileNamePathOrFileId: String, fileNamePreviewLocalPath: String, cell: NCActivityCollectionViewCell, collectionView: UICollectionView?) {
+
+        cell.imageView?.image = NCBrandColor.cacheImages.file
+
+        if !FileManager.default.fileExists(atPath: fileNamePreviewLocalPath) {
+            for operation in downloadThumbnailActivityQueue.operations as! [NCOperationDownloadThumbnailActivity] {
+                if operation.fileNamePathOrFileId == fileNamePathOrFileId {
+                    return
+                }
+            }
+            downloadThumbnailActivityQueue.addOperation(NCOperationDownloadThumbnailActivity(fileNamePathOrFileId: fileNamePathOrFileId, fileNamePreviewLocalPath: fileNamePreviewLocalPath, cell: cell, collectionView: collectionView))
+        }
+    }
+
+    func cancelDownloadThumbnailActivity(fileNamePathOrFileId: String) {
+        for operation in downloadThumbnailActivityQueue.operations as! [NCOperationDownloadThumbnailActivity] {
+            if operation.fileNamePathOrFileId == fileNamePathOrFileId {
+                operation.cancel()
+            }
+        }
+    }
+
+    func downloadThumbnailActivityCancelAll() {
+        downloadThumbnailActivityQueue.cancelAll()
+    }
+
     // MARK: - Download Avatar
 
     func downloadAvatar(user: String, dispalyName: String?, fileName: String, cell: NCCellProtocol, view: UIView?, cellImageView: UIImageView?) {
@@ -477,6 +507,56 @@ class NCOperationDownloadThumbnail: ConcurrentOperation {
 
 // MARK: -
 
+class NCOperationDownloadThumbnailActivity: ConcurrentOperation {
+
+    var cell: NCActivityCollectionViewCell?
+    var collectionView: UICollectionView?
+    var fileNamePathOrFileId: String = ""
+    var fileNamePreviewLocalPath: String = ""
+
+    init(fileNamePathOrFileId: String, fileNamePreviewLocalPath: String, cell: NCActivityCollectionViewCell?, collectionView: UICollectionView?) {
+        self.fileNamePathOrFileId = fileNamePathOrFileId
+        self.fileNamePreviewLocalPath = fileNamePreviewLocalPath
+        self.cell = cell
+        self.collectionView = collectionView
+    }
+
+    override func start() {
+
+        if isCancelled {
+            self.finish()
+        } else {
+
+            NCCommunication.shared.downloadPreview(
+                fileNamePathOrFileId: fileNamePathOrFileId,
+                fileNamePreviewLocalPath: fileNamePreviewLocalPath,
+                widthPreview: NCGlobal.shared.sizePreview,
+                heightPreview: NCGlobal.shared.sizePreview,
+                sizeIcon: NCGlobal.shared.sizeIcon,
+                etag: nil,
+                queue: NCCommunicationCommon.shared.backgroundQueue) { _, _, imageIcon, _, etag, errorCode, _ in
+
+                    if errorCode == 0, let imageIcon = imageIcon {
+                        DispatchQueue.main.async {
+                            if self.fileNamePathOrFileId == self.cell?.fileNamePathOrFileId, let imageView = self.cell?.imageView {
+                                UIView.transition(with: imageView,
+                                                  duration: 0.75,
+                                                  options: .transitionCrossDissolve,
+                                                  animations: { imageView.image = imageIcon },
+                                                  completion: nil)
+                            } else {
+                                self.collectionView?.reloadData()
+                            }
+                        }
+                    }
+                    self.finish()
+                }
+        }
+    }
+}
+
+// MARK: -
+
 class NCOperationDownloadAvatar: ConcurrentOperation {
 
     var user: String