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
}