Skip to main content

add a path to update this snappily

ID
90687fa
date
2023-06-09 17:02:52+00:00
author
Alex Chan <alex@alexwlchan.net>
parent
2942f9f
message
add a path to update this snappily
changed files
2 files, 35 additions, 3 deletions

Changed files

BlinkReviewer/BlinkReviewer/Photos/PhotosLibrary.swift (2105) → BlinkReviewer/BlinkReviewer/Photos/PhotosLibrary.swift (3091)

diff --git a/BlinkReviewer/BlinkReviewer/Photos/PhotosLibrary.swift b/BlinkReviewer/BlinkReviewer/Photos/PhotosLibrary.swift
index 9a09244..e9126c7 100644
--- a/BlinkReviewer/BlinkReviewer/Photos/PhotosLibrary.swift
+++ b/BlinkReviewer/BlinkReviewer/Photos/PhotosLibrary.swift
@@ -16,6 +16,10 @@ class PhotosLibrary: NSObject, ObservableObject, PHPhotoLibraryChangeObserver {
     @Published var approvedAssets: Set<PHAsset> = Set()
     @Published var rejectedAssets: Set<PHAsset> = Set()
     @Published var needsActionAssets: Set<PHAsset> = Set()
+    
+    private let approved = getAlbum(withName: "Approved")
+    private let rejected = getAlbum(withName: "Rejected")
+    private let needsAction = getAlbum(withName: "Needs Action")
 
     override init() {
         super.init()
@@ -25,9 +29,35 @@ class PhotosLibrary: NSObject, ObservableObject, PHPhotoLibraryChangeObserver {
     
     func updateAsset(atIndex index: Int) {
         self.assets[index] = PHAsset.fetchAssets(withLocalIdentifiers: [self.assets[index].localIdentifier], options: nil).firstObject!
+        
+        // This is an optimisation to make the UI feel snappy -- calling photoLibraryDidChange
+        // takes ~1s to finish, which introduces noticeable latency. :(
+        let asset = self.assets[index]
+        
+        let newAlbums = Set(asset.albums())
+        
+        if (newAlbums.contains(approved)) {
+            approvedAssets.insert(asset)
+        } else {
+            approvedAssets.remove(asset)
+        }
+        
+        if (newAlbums.contains(rejected)) {
+            rejectedAssets.insert(asset)
+        } else {
+            rejectedAssets.remove(asset)
+        }
+        
+        if (newAlbums.contains(needsAction)) {
+            needsActionAssets.insert(asset)
+        } else {
+            needsActionAssets.remove(asset)
+        }
     }
 
     func photoLibraryDidChange(_ changeInstance: PHChange) {
+        print("calling photoLibraryDidChange")
+        print(changeInstance.description)
         updateStatus()
     }
 
@@ -35,9 +65,9 @@ class PhotosLibrary: NSObject, ObservableObject, PHPhotoLibraryChangeObserver {
         DispatchQueue.main.async {
             self.assets = getAllPhotos()
             
-            self.approvedAssets = self.getPhotosIn(album: getAlbum(withName: "Approved"))
-            self.rejectedAssets = self.getPhotosIn(album: getAlbum(withName: "Rejected"))
-            self.needsActionAssets = self.getPhotosIn(album: getAlbum(withName: "Needs Action"))
+            self.approvedAssets = self.getPhotosIn(album: self.approved)
+            self.rejectedAssets = self.getPhotosIn(album: self.rejected)
+            self.needsActionAssets = self.getPhotosIn(album: self.needsAction)
             
             self.isPhotoLibraryAuthorized = PHPhotoLibrary.authorizationStatus() == .authorized
         }

BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift (5730) → BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift (5814)

diff --git a/BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift b/BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift
index 42221d3..d30ce4c 100644
--- a/BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift
+++ b/BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift
@@ -114,6 +114,8 @@ struct PhotoReviewer: View {
                     }
                 }
             
+                photosLibrary.updateAsset(atIndex: selectedAssetIndex)
+            
                 if selectedAssetIndex > 0 {
                     selectedAssetIndex -= 1
                 }