Skip to main content

add a stats overlay

ID
80e5bcf
date
2023-06-09 09:13:59+00:00
author
Alex Chan <alex@alexwlchan.net>
parent
3cca041
message
add a stats overlay
changed files
4 files, 80 additions, 14 deletions

Changed files

BlinkReviewer/BlinkReviewer.xcodeproj/project.pbxproj (26649) → BlinkReviewer/BlinkReviewer.xcodeproj/project.pbxproj (27079)

diff --git a/BlinkReviewer/BlinkReviewer.xcodeproj/project.pbxproj b/BlinkReviewer/BlinkReviewer.xcodeproj/project.pbxproj
index 05161e6..7f1c8fb 100644
--- a/BlinkReviewer/BlinkReviewer.xcodeproj/project.pbxproj
+++ b/BlinkReviewer/BlinkReviewer.xcodeproj/project.pbxproj
@@ -23,6 +23,7 @@
 		94D751222A31BD8E005859E7 /* PhotoReviewer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94D751212A31BD8E005859E7 /* PhotoReviewer.swift */; };
 		94D7512B2A31D6AC005859E7 /* AssetHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94D7512A2A31D6AC005859E7 /* AssetHelpers.swift */; };
 		94D751302A31DC4A005859E7 /* ThumbnailList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94D7512F2A31DC4A005859E7 /* ThumbnailList.swift */; };
+		94F7E39E2A331A9E00763DB9 /* Statistics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94F7E39D2A331A9E00763DB9 /* Statistics.swift */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
@@ -63,6 +64,7 @@
 		94D751212A31BD8E005859E7 /* PhotoReviewer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoReviewer.swift; sourceTree = "<group>"; };
 		94D7512A2A31D6AC005859E7 /* AssetHelpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetHelpers.swift; sourceTree = "<group>"; };
 		94D7512F2A31DC4A005859E7 /* ThumbnailList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThumbnailList.swift; sourceTree = "<group>"; };
+		94F7E39D2A331A9E00763DB9 /* Statistics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Statistics.swift; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -166,6 +168,7 @@
 				94D751212A31BD8E005859E7 /* PhotoReviewer.swift */,
 				94D7512F2A31DC4A005859E7 /* ThumbnailList.swift */,
 				94D2C8C02A32FCE300BEE15B /* PHAssetImage.swift */,
+				94F7E39D2A331A9E00763DB9 /* Statistics.swift */,
 			);
 			path = Views;
 			sourceTree = "<group>";
@@ -320,6 +323,7 @@
 				94D751302A31DC4A005859E7 /* ThumbnailList.swift in Sources */,
 				94D751222A31BD8E005859E7 /* PhotoReviewer.swift in Sources */,
 				94D2C8B92A320E6F00BEE15B /* ReviewState.swift in Sources */,
+				94F7E39E2A331A9E00763DB9 /* Statistics.swift in Sources */,
 				94D2C8C12A32FCE300BEE15B /* PHAssetImage.swift in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;

BlinkReviewer/BlinkReviewer/Photos/PhotosLibrary.swift (929) → BlinkReviewer/BlinkReviewer/Photos/PhotosLibrary.swift (1449)

diff --git a/BlinkReviewer/BlinkReviewer/Photos/PhotosLibrary.swift b/BlinkReviewer/BlinkReviewer/Photos/PhotosLibrary.swift
index 1b40479..19f3b52 100644
--- a/BlinkReviewer/BlinkReviewer/Photos/PhotosLibrary.swift
+++ b/BlinkReviewer/BlinkReviewer/Photos/PhotosLibrary.swift
@@ -33,4 +33,22 @@ class PhotosLibrary: NSObject, ObservableObject, PHPhotoLibraryChangeObserver {
             self.isPhotoLibraryAuthorized = PHPhotoLibrary.authorizationStatus() == .authorized
         }
     }
+    
+    func countApproved() -> Int {
+        let album = getAlbum(withName: "Approved")
+        
+        return PHAsset.fetchAssets(in: album, options: nil).count
+    }
+    
+    func countRejected() -> Int {
+        let album = getAlbum(withName: "Rejected")
+        
+        return PHAsset.fetchAssets(in: album, options: nil).count
+    }
+    
+    func countNeedsAction() -> Int {
+        let album = getAlbum(withName: "Needs Action")
+        
+        return PHAsset.fetchAssets(in: album, options: nil).count
+    }
 }

BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift (4912) → BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift (5660)

diff --git a/BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift b/BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift
index 40ebef5..0fe1897 100644
--- a/BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift
+++ b/BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift
@@ -14,28 +14,48 @@ struct PhotoReviewer: View {
     
     @State var selectedAssetIndex: Int
     
+    @State var showStatistics: Bool = false
+    
     init(selectedAssetIndex: Int) {
         self.selectedAssetIndex = selectedAssetIndex
     }
     
     var body: some View {
         if photosLibrary.isPhotoLibraryAuthorized {
-            VStack {
-                ThumbnailList(selectedAssetIndex: $selectedAssetIndex)
-                    .environmentObject(photosLibrary)
-                
-                FullSizeImage(image: fullSizeImage)
-                    .background(.black)
-            }.onAppear {
-                fullSizeImage.asset = photosLibrary.assets[selectedAssetIndex]
+            ZStack {
+                VStack {
+                    ThumbnailList(selectedAssetIndex: $selectedAssetIndex)
+                        .environmentObject(photosLibrary)
+                        .background(.gray.opacity(0.3))
+                    
+                    FullSizeImage(image: fullSizeImage)
+                        .background(.black)
+                }
+                .background(.black)
+                .onAppear {
+                    fullSizeImage.asset = photosLibrary.assets[selectedAssetIndex]
+                    
+                    NSEvent.addLocalMonitorForEvents(matching: .keyDown) { event in
+                        handleKeyEvent(event)
+                        return event
+                    }
+                }.onChange(of: selectedAssetIndex, perform: { newIndex in
+                    fullSizeImage.asset = photosLibrary.assets[newIndex]
+                })
                 
-                NSEvent.addLocalMonitorForEvents(matching: .keyDown) { event in
-                    handleKeyEvent(event)
-                    return event
+                if showStatistics {
+                    HStack {
+                        Spacer()
+                        
+                        VStack {
+                            Spacer()
+                            
+                            Statistics().environmentObject(photosLibrary)
+                        }
+                        .padding()
+                    }.padding()
                 }
-            }.onChange(of: selectedAssetIndex, perform: { newIndex in
-                fullSizeImage.asset = photosLibrary.assets[newIndex]
-            })
+            }
         } else {
             Text("Waiting for Photos Library authorization…")
         }
@@ -125,6 +145,8 @@ struct PhotoReviewer: View {
                     }
                 }
             
+            case 1: // "s"
+                showStatistics.toggle()
             
             default:
                 print(event)

BlinkReviewer/BlinkReviewer/Views/Statistics.swift (0) → BlinkReviewer/BlinkReviewer/Views/Statistics.swift (611)

diff --git a/BlinkReviewer/BlinkReviewer/Views/Statistics.swift b/BlinkReviewer/BlinkReviewer/Views/Statistics.swift
new file mode 100644
index 0000000..4b2059c
--- /dev/null
+++ b/BlinkReviewer/BlinkReviewer/Views/Statistics.swift
@@ -0,0 +1,22 @@
+//
+//  Statistics.swift
+//  BlinkReviewer
+//
+//  Created by Alex Chan on 09/06/2023.
+//
+
+import SwiftUI
+
+struct Statistics: View {
+    @EnvironmentObject var photosLibrary: PhotosLibrary
+    
+    var body: some View {
+        Text("\(photosLibrary.assets.count) photos, \(photosLibrary.countApproved()) approved, \(photosLibrary.countRejected()) rejected, \(photosLibrary.countNeedsAction()) need action")
+            .font(.title)
+            .padding(10)
+            .foregroundColor(.white)
+            .background(.black.opacity(0.7))
+            .cornerRadius(7.0)
+            .shadow(radius: 2.0)
+    }
+}