Forráskód Böngészése

Merge pull request #1256 from deltachat/fix_memory_related_crash

Fix app crash in gallery
cyBerta 4 éve
szülő
commit
ae572b5b28
1 módosított fájl, 26 hozzáadás és 11 törlés
  1. 26 11
      deltachat-ios/Model/GalleryItem.swift

+ 26 - 11
deltachat-ios/Model/GalleryItem.swift

@@ -13,8 +13,25 @@ class GalleryItem: ContextMenuItem {
     }
 
     var thumbnailImage: UIImage? {
-        willSet {
-            onImageLoaded?(newValue)
+        get {
+            if let fileUrl = self.fileUrl {
+                if let image = ThumbnailCache.shared.restoreImage(key: fileUrl.absoluteString) {
+                    return image
+                } else {
+                    loadThumbnail()
+                }
+            }
+            return nil
+        }
+        set {
+            if let fileUrl = self.fileUrl {
+                if let image = newValue {
+                    ThumbnailCache.shared.storeImage(image: image, key: fileUrl.absoluteString)
+                    onImageLoaded?(newValue)
+                } else {
+                    ThumbnailCache.shared.deleteImage(key: fileUrl.absoluteString)
+                }
+            }
         }
     }
 
@@ -29,7 +46,6 @@ class GalleryItem: ContextMenuItem {
 
     init(msgId: Int) {
         self.msg = DcMsg(id: msgId)
-
         if let key = msg.fileURL?.absoluteString, let image = ThumbnailCache.shared.restoreImage(key: key) {
             self.thumbnailImage = image
         } else {
@@ -53,20 +69,19 @@ class GalleryItem: ContextMenuItem {
 
     private func loadImageThumbnail(from url: URL) {
         DispatchQueue.global(qos: .userInteractive).async {
-            let image = ImageFormat.loadImageFrom(url: url)
-            DispatchQueue.main.async { [weak self] in
-                    self?.thumbnailImage = image
+            if let image = ImageFormat.loadImageFrom(url: url) {
+                DispatchQueue.main.async { [weak self] in
+                        self?.thumbnailImage = image
+                }
             }
         }
     }
 
     private func loadVideoThumbnail(from url: URL) {
         DispatchQueue.global(qos: .userInteractive).async {
-            let thumbnailImage = DcUtils.generateThumbnailFromVideo(url: url)
-            DispatchQueue.main.async { [weak self] in
-                self?.thumbnailImage = thumbnailImage
-                if let image = thumbnailImage {
-                    ThumbnailCache.shared.storeImage(image: image, key: url.absoluteString)
+            if let thumbnailImage = DcUtils.generateThumbnailFromVideo(url: url) {
+                DispatchQueue.main.async { [weak self] in
+                    self?.thumbnailImage = thumbnailImage
                 }
             }
         }