get a scrolling list of images
- ID
6231083- date
2023-06-08 07:44:19+00:00- author
Alex Chan <alex@alexwlchan.net>- parent
eaa34f3- message
get a scrolling list of images- changed files
Changed files
BlinkReviewer/BlinkReviewer.xcodeproj/project.pbxproj (23614) → BlinkReviewer/BlinkReviewer.xcodeproj/project.pbxproj (24062)
diff --git a/BlinkReviewer/BlinkReviewer.xcodeproj/project.pbxproj b/BlinkReviewer/BlinkReviewer.xcodeproj/project.pbxproj
index 4d642b8..2f0f404 100644
--- a/BlinkReviewer/BlinkReviewer.xcodeproj/project.pbxproj
+++ b/BlinkReviewer/BlinkReviewer.xcodeproj/project.pbxproj
@@ -17,6 +17,7 @@
94D7511C2A31A7B1005859E7 /* ThumbnailItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94D7511B2A31A7B1005859E7 /* ThumbnailItem.swift */; };
94D7511E2A31B243005859E7 /* PreviewImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94D7511D2A31B243005859E7 /* PreviewImage.swift */; };
94D751202A31B53E005859E7 /* AlbumInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94D7511F2A31B53E005859E7 /* AlbumInfo.swift */; };
+ 94D751222A31BD8E005859E7 /* PhotoReviewer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94D751212A31BD8E005859E7 /* PhotoReviewer.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -51,6 +52,7 @@
94D7511B2A31A7B1005859E7 /* ThumbnailItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThumbnailItem.swift; sourceTree = "<group>"; };
94D7511D2A31B243005859E7 /* PreviewImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreviewImage.swift; sourceTree = "<group>"; };
94D7511F2A31B53E005859E7 /* AlbumInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlbumInfo.swift; sourceTree = "<group>"; };
+ 94D751212A31BD8E005859E7 /* PhotoReviewer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoReviewer.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -142,6 +144,7 @@
94D7511B2A31A7B1005859E7 /* ThumbnailItem.swift */,
94D7511D2A31B243005859E7 /* PreviewImage.swift */,
94D7511F2A31B53E005859E7 /* AlbumInfo.swift */,
+ 94D751212A31BD8E005859E7 /* PhotoReviewer.swift */,
);
path = Views;
sourceTree = "<group>";
@@ -281,6 +284,7 @@
94D7511E2A31B243005859E7 /* PreviewImage.swift in Sources */,
94D750F02A31A796005859E7 /* BlinkReviewerApp.swift in Sources */,
94D751202A31B53E005859E7 /* AlbumInfo.swift in Sources */,
+ 94D751222A31BD8E005859E7 /* PhotoReviewer.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
BlinkReviewer/BlinkReviewer/ContentView.swift (1516) → BlinkReviewer/BlinkReviewer/ContentView.swift (512)
diff --git a/BlinkReviewer/BlinkReviewer/ContentView.swift b/BlinkReviewer/BlinkReviewer/ContentView.swift
index 2525587..e8955b6 100644
--- a/BlinkReviewer/BlinkReviewer/ContentView.swift
+++ b/BlinkReviewer/BlinkReviewer/ContentView.swift
@@ -8,16 +8,6 @@
import SwiftUI
import Photos
-struct AssetData: Codable, Identifiable {
- var localIdentifier: String
- var creationDate: String?
- var isFavorite: Bool
-
- var id: String {
- localIdentifier
- }
-}
-
struct ContentView: View {
var allPhotos: [PHAsset] {
var photos: [PHAsset] = []
@@ -30,31 +20,7 @@ struct ContentView: View {
return photos
}
- @State private var selectedAssetIndex: Int = 0
- @State private var selectedAsset: PHAsset? = nil
-
var body: some View {
- VStack {
- Divider()
- ScrollViewReader { value in
- ScrollView(.horizontal) {
- Button("Jump to #8") {
- value.scrollTo(8, anchor: .center)
- }
- .padding()
-
- LazyHStack(spacing: 10) {
- ForEach(allPhotos, id: \.localIdentifier) { photo in
- ThumbnailItem(label: "\(photo.localIdentifier)")
- }
- }.padding()
- }.frame(height: 100)
- }
- Divider()
-
- PreviewImage(asset: allPhotos[selectedAssetIndex])
-
- Spacer()
- }
+ PhotoReviewer(assets: allPhotos)
}
}
BlinkReviewer/BlinkReviewer/Views/AlbumInfo.swift (1107) → BlinkReviewer/BlinkReviewer/Views/AlbumInfo.swift (1106)
diff --git a/BlinkReviewer/BlinkReviewer/Views/AlbumInfo.swift b/BlinkReviewer/BlinkReviewer/Views/AlbumInfo.swift
index d758343..9d3fd4f 100644
--- a/BlinkReviewer/BlinkReviewer/Views/AlbumInfo.swift
+++ b/BlinkReviewer/BlinkReviewer/Views/AlbumInfo.swift
@@ -34,7 +34,7 @@ struct AlbumInfo: View {
.font(.title2)
.padding(5)
.background(Color(red: 1.0, green: 1.0, blue: 1.0, opacity: 0.9))
- .cornerRadius(10.0)
+ .cornerRadius(7.0)
}
}
}.padding()
BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift (0) → BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift (1794)
diff --git a/BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift b/BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift
new file mode 100644
index 0000000..e3f6b0f
--- /dev/null
+++ b/BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift
@@ -0,0 +1,63 @@
+//
+// PhotoReviewer.swift
+// BlinkReviewer
+//
+// Created by Alex Chan on 08/06/2023.
+//
+
+import SwiftUI
+import Photos
+
+struct PhotoReviewer: View {
+ var assets: [PHAsset]
+ @State private var selectedAssetIndex: Int = 0
+
+ var body: some View {
+ VStack {
+ Divider()
+ ScrollViewReader { value in
+ ScrollView(.horizontal) {
+ LazyHStack(spacing: 10) {
+ ForEach(assets, id: \.localIdentifier) { photo in
+ ThumbnailItem(label: "\(photo.localIdentifier)")
+ }
+ }.padding()
+ }.frame(height: 100).onAppear {
+ value.scrollTo(assets[selectedAssetIndex].localIdentifier, anchor: .center)
+ }
+ }
+ Divider()
+
+ PreviewImage(asset: assets[selectedAssetIndex])
+
+ Spacer()
+ }.onAppear {
+ NSEvent.addLocalMonitorForEvents(matching: .keyDown) { event in
+
+ print("about to handle event \(event)")
+ handleKeyEvent(event)
+ print("finished handling event \(event)")
+
+ return event
+ }
+ }
+ }
+
+ private func handleKeyEvent(_ event: NSEvent) {
+ switch event.keyCode {
+ case 123: // Left arrow key
+ if selectedAssetIndex > 0 {
+ selectedAssetIndex -= 1
+ }
+
+ case 124: // Right arrow key
+ if selectedAssetIndex < assets.count - 1 {
+ selectedAssetIndex += 1
+ }
+
+ default:
+ print(event)
+ break
+ }
+ }
+}
BlinkReviewer/BlinkReviewer/Views/PreviewImage.swift (2218) → BlinkReviewer/BlinkReviewer/Views/PreviewImage.swift (2622)
diff --git a/BlinkReviewer/BlinkReviewer/Views/PreviewImage.swift b/BlinkReviewer/BlinkReviewer/Views/PreviewImage.swift
index 1f87230..85fc388 100644
--- a/BlinkReviewer/BlinkReviewer/Views/PreviewImage.swift
+++ b/BlinkReviewer/BlinkReviewer/Views/PreviewImage.swift
@@ -29,8 +29,22 @@ extension PHAsset {
options.isNetworkAccessAllowed = true
var image = NSImage()
+
+ let start = DispatchTime.now()
+ var elapsed = start
+
+ func printElapsed(_ label: String) -> Void {
+ let now = DispatchTime.now()
+
+ let totalInterval = Double(now.uptimeNanoseconds - start.uptimeNanoseconds) / 1_000_000_000
+ let elapsedInterval = Double(now.uptimeNanoseconds - elapsed.uptimeNanoseconds) / 1_000_000_000
+
+ elapsed = DispatchTime.now()
- PHImageManager.default()
+ print("Time to \(label):\n \(elapsedInterval) seconds (\(totalInterval) total)")
+ }
+
+ PHCachingImageManager()
.requestImage(
for: self,
targetSize: PHImageManagerMaximumSize,
@@ -40,6 +54,8 @@ extension PHAsset {
image = result!
}
)
+
+ printElapsed("getting image \(self.localIdentifier)")
return image
}
@@ -64,14 +80,6 @@ struct PreviewImage: View {
Spacer()
}
}.padding()
-
-// VStack {
-// Text(asset.localIdentifier)
-// .background(.white)
-//
-// Spacer()
-// }
}
-
}
}