Преглед на файлове

load gallery-view async

B. Petersen преди 2 години
родител
ревизия
7c3cdb9f07
променени са 2 файла, в които са добавени 19 реда и са изтрити 8 реда
  1. 1 2
      deltachat-ios/Controller/AllMediaViewController.swift
  2. 18 6
      deltachat-ios/Controller/GalleryViewController.swift

+ 1 - 2
deltachat-ios/Controller/AllMediaViewController.swift

@@ -91,8 +91,7 @@ class AllMediaViewController: UIPageViewController {
     // MARK: - factory
     private func makeViewController(_ page: Page) -> UIViewController {
         if page.type1 == DC_MSG_IMAGE {
-            let allMedia = dcContext.getChatMedia(chatId: chatId, messageType: page.type1, messageType2: page.type2, messageType3: page.type3)
-            return GalleryViewController(context: dcContext, chatId: chatId, mediaMessageIds: allMedia.reversed())
+            return GalleryViewController(context: dcContext, chatId: chatId)
         } else {
             return FilesViewController(context: dcContext, chatId: chatId, type1: page.type1, type2: page.type2, type3: page.type3)
         }

+ 18 - 6
deltachat-ios/Controller/GalleryViewController.swift

@@ -7,7 +7,7 @@ class GalleryViewController: UIViewController {
     private let dcContext: DcContext
     // MARK: - data
     private let chatId: Int
-    private var mediaMessageIds: [Int]
+    private var mediaMessageIds: [Int] = []
     private var galleryItemCache: [Int: GalleryItem] = [:]
 
     // MARK: - subview specs
@@ -72,10 +72,9 @@ class GalleryViewController: UIViewController {
         return config
     }()
 
-    init(context: DcContext, chatId: Int, mediaMessageIds: [Int]) {
+    init(context: DcContext, chatId: Int) {
         self.dcContext = context
         self.chatId = chatId
-        self.mediaMessageIds = mediaMessageIds
         super.init(nibName: nil, bundle: nil)
     }
 
@@ -88,9 +87,7 @@ class GalleryViewController: UIViewController {
         super.viewDidLoad()
         setupSubviews()
         title = String.localized("images_and_videos")
-        if mediaMessageIds.isEmpty {
-            emptyStateView.isHidden = false
-        }
+        loadMediaAsync()
     }
 
     override func viewWillAppear(_ animated: Bool) {
@@ -132,6 +129,21 @@ class GalleryViewController: UIViewController {
         UIMenuController.shared.update()
     }
 
+    private func loadMediaAsync() {
+        DispatchQueue.global(qos: .userInteractive).async { [weak self] in
+            guard let self = self else { return }
+            let ids: [Int]
+            ids = self.dcContext.getChatMedia(chatId: self.chatId, messageType: DC_MSG_IMAGE, messageType2: DC_MSG_GIF, messageType3: DC_MSG_VIDEO).reversed()
+            DispatchQueue.main.async { [weak self] in
+                guard let self = self else { return }
+                self.galleryItemCache = [:]
+                self.mediaMessageIds = ids
+                self.emptyStateView.isHidden = !ids.isEmpty
+                self.grid.reloadData()
+            }
+        }
+    }
+
     // MARK: - updates
     private func updateFloatingTimeLabel() {
         if let indexPath = grid.indexPathsForVisibleItems.min() {