Add a comment about the list of internal identifiers
- ID
59a0bb7- date
2023-06-16 06:19:22+00:00- author
Alex Chan <alex@alexwlchan.net>- parent
053eb3e- message
Add a comment about the list of internal identifiers- changed files
2 files, 24 additions, 10 deletions
Changed files
BlinkReviewer/Blink.xcodeproj/project.pbxproj (34154) → BlinkReviewer/Blink.xcodeproj/project.pbxproj (34154)
diff --git a/BlinkReviewer/Blink.xcodeproj/project.pbxproj b/BlinkReviewer/Blink.xcodeproj/project.pbxproj
index e2012de..e36ce3d 100644
--- a/BlinkReviewer/Blink.xcodeproj/project.pbxproj
+++ b/BlinkReviewer/Blink.xcodeproj/project.pbxproj
@@ -588,7 +588,7 @@
CODE_SIGN_ENTITLEMENTS = Blink/Blink.entitlements;
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
- CURRENT_PROJECT_VERSION = 43;
+ CURRENT_PROJECT_VERSION = 44;
DEVELOPMENT_ASSET_PATHS = "\"Blink/Preview Content\"";
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
@@ -615,7 +615,7 @@
CODE_SIGN_ENTITLEMENTS = Blink/Blink.entitlements;
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
- CURRENT_PROJECT_VERSION = 43;
+ CURRENT_PROJECT_VERSION = 44;
DEVELOPMENT_ASSET_PATHS = "\"Blink/Preview Content\"";
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
@@ -640,7 +640,7 @@
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 43;
+ CURRENT_PROJECT_VERSION = 44;
GENERATE_INFOPLIST_FILE = YES;
MACOSX_DEPLOYMENT_TARGET = 13.3;
MARKETING_VERSION = 1.0;
@@ -658,7 +658,7 @@
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 43;
+ CURRENT_PROJECT_VERSION = 44;
GENERATE_INFOPLIST_FILE = YES;
MACOSX_DEPLOYMENT_TARGET = 13.3;
MARKETING_VERSION = 1.0;
@@ -675,7 +675,7 @@
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 43;
+ CURRENT_PROJECT_VERSION = 44;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = net.alexwlchan.BlinkReviewerUITests;
@@ -691,7 +691,7 @@
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 43;
+ CURRENT_PROJECT_VERSION = 44;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = net.alexwlchan.BlinkReviewerUITests;
BlinkReviewer/Blink/Photos/PhotosLibrary.swift (14791) → BlinkReviewer/Blink/Photos/PhotosLibrary.swift (15593)
diff --git a/BlinkReviewer/Blink/Photos/PhotosLibrary.swift b/BlinkReviewer/Blink/Photos/PhotosLibrary.swift
index a90038b..def0e3a 100644
--- a/BlinkReviewer/Blink/Photos/PhotosLibrary.swift
+++ b/BlinkReviewer/Blink/Photos/PhotosLibrary.swift
@@ -11,11 +11,25 @@ class PhotosLibrary: NSObject, ObservableObject, PHPhotoLibraryChangeObserver {
@Published var isPhotoLibraryAuthorized = false
@Published var assets: PHFetchResult<PHAsset> = PHFetchResult()
- @Published var assetIdentifiers: [String] = []
- var approvedAssets: PHFetchResult<PHAsset> = PHFetchResult()
- var rejectedAssets: PHFetchResult<PHAsset> = PHFetchResult()
- var needsActionAssets: PHFetchResult<PHAsset> = PHFetchResult()
+
+ @Published var approvedAssets: PHFetchResult<PHAsset> = PHFetchResult()
+ @Published var rejectedAssets: PHFetchResult<PHAsset> = PHFetchResult()
+ @Published var needsActionAssets: PHFetchResult<PHAsset> = PHFetchResult()
+
+ // These lists/sets allow us to do some fast lookups for getting the
+ // state of an image, without going back to the Photos database.
+ // Individual database calls are fast; 25,000 if you need to retrieve
+ // all the thumbnails adds noticeable latency.
+ //
+ // 99% of the time, these match the PHFetchResult data; they differ when
+ // somebody has just modified state (e.g. reviewed a photo as "approved").
+ // We can update the internal set as soon as the PHChangeRequest completes,
+ // without waiting to get the update back from the Photos Library.
+ // That might not seem like much, but the latency is enough to feel
+ // noticeable, and tracking our own copy of that state makes the UI
+ // feel much more responsive.
+ @Published var assetIdentifiers: [String] = []
private var approvedAssetIdentifiers: Set<String> = Set()
private var rejectedAssetIdentifiers: Set<String> = Set()