WIP
- ID
b299180- date
2023-06-09 17:52:06+00:00- author
Alex Chan <alex@alexwlchan.net>- parent
e155f99- message
WIP- changed files
Changed files
BlinkReviewer/BlinkReviewer/BlinkReviewerApp.swift (389) → BlinkReviewer/BlinkReviewer/BlinkReviewerApp.swift (338)
diff --git a/BlinkReviewer/BlinkReviewer/BlinkReviewerApp.swift b/BlinkReviewer/BlinkReviewer/BlinkReviewerApp.swift
index 47c80db..800e20f 100644
--- a/BlinkReviewer/BlinkReviewer/BlinkReviewerApp.swift
+++ b/BlinkReviewer/BlinkReviewer/BlinkReviewerApp.swift
@@ -13,7 +13,7 @@ struct BlinkReviewerApp: App {
var body: some Scene {
WindowGroup {
- PhotoReviewer(selectedAssetIndex: photosLibrary.assets2.count - 1)
+ PhotoReviewer()
.environmentObject(photosLibrary)
}
}
BlinkReviewer/BlinkReviewer/Photos/AlbumHelpers.swift (807) → BlinkReviewer/BlinkReviewer/Photos/AlbumHelpers.swift (811)
diff --git a/BlinkReviewer/BlinkReviewer/Photos/AlbumHelpers.swift b/BlinkReviewer/BlinkReviewer/Photos/AlbumHelpers.swift
index 2da334e..6d14ffd 100644
--- a/BlinkReviewer/BlinkReviewer/Photos/AlbumHelpers.swift
+++ b/BlinkReviewer/BlinkReviewer/Photos/AlbumHelpers.swift
@@ -14,7 +14,7 @@ import Photos
func getAlbum(withName name: String) -> PHAssetCollection {
let collections =
PHAssetCollection
- .fetchAssetCollections(with: .album, subtype: .albumRegular, options: nil)
+ .fetchAssetCollections(with: .album, subtype: .albumRegular, options: nil)
var thisAssetCollection: PHAssetCollection? = nil
BlinkReviewer/BlinkReviewer/Photos/PhotosLibrary.swift (3213) → BlinkReviewer/BlinkReviewer/Photos/PhotosLibrary.swift (3212)
diff --git a/BlinkReviewer/BlinkReviewer/Photos/PhotosLibrary.swift b/BlinkReviewer/BlinkReviewer/Photos/PhotosLibrary.swift
index 459cdd2..f09be91 100644
--- a/BlinkReviewer/BlinkReviewer/Photos/PhotosLibrary.swift
+++ b/BlinkReviewer/BlinkReviewer/Photos/PhotosLibrary.swift
@@ -59,7 +59,7 @@ class PhotosLibrary: NSObject, ObservableObject, PHPhotoLibraryChangeObserver {
let options = PHFetchOptions()
options.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: true)]
-// options.fetchLimit = 50
+ options.fetchLimit = 150
self.assets2 = PHAsset.fetchAssets(with: PHAssetMediaType.image, options: options)
BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift (5926) → BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift (5950)
diff --git a/BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift b/BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift
index 05d9c11..ce1ecae 100644
--- a/BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift
+++ b/BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift
@@ -12,14 +12,10 @@ struct PhotoReviewer: View {
@EnvironmentObject var photosLibrary: PhotosLibrary
@ObservedObject var fullSizeImage: PHAssetImage = PHAssetImage(nil, size: PHImageManagerMaximumSize, deliveryMode: .highQualityFormat)
- @State var selectedAssetIndex: Int
+ @State var selectedAssetIndex: Int = -1
@State var showStatistics: Bool = false
- init(selectedAssetIndex: Int) {
- self.selectedAssetIndex = selectedAssetIndex
- }
-
var body: some View {
if photosLibrary.isPhotoLibraryAuthorized {
ZStack {
@@ -31,6 +27,9 @@ struct PhotoReviewer: View {
// FullSizeImage(image: fullSizeImage)
// .background(.black)
}
+ .onAppear {
+ selectedAssetIndex = photosLibrary.assets2.count - 1
+ }
.background(.black)
// .onAppear {
// fullSizeImage.asset = photosLibrary.assets2.object(at: selectedAssetIndex)
BlinkReviewer/BlinkReviewer/Views/ThumbnailList.swift (3600) → BlinkReviewer/BlinkReviewer/Views/ThumbnailList.swift (3398)
diff --git a/BlinkReviewer/BlinkReviewer/Views/ThumbnailList.swift b/BlinkReviewer/BlinkReviewer/Views/ThumbnailList.swift
index b13f254..ae76209 100644
--- a/BlinkReviewer/BlinkReviewer/Views/ThumbnailList.swift
+++ b/BlinkReviewer/BlinkReviewer/Views/ThumbnailList.swift
@@ -19,7 +19,7 @@ struct PHFetchResultCollection: RandomAccessCollection, Equatable {
var endIndex: Int { fetchResult.count }
subscript(position: Int) -> PHAsset {
- fetchResult.object(at: position)
+ fetchResult.object(at: fetchResult.count - position - 1)
}
}
@@ -41,34 +41,25 @@ struct ThumbnailList: View {
return PHFetchResultCollection(fetchResult: photosLibrary.assets2)
}
-
- private var thumbnails: some View {
- // Implementation note: we use the localIdentifier rather than the
- // array index as the id here, because the app gets way slower if
- // you use the array index -- it tries to regenerate a bunch of
- // the thumbnails every time you change position.
- ForEach(
- Array(zip(assets.indices, assets)), id: \.1.localIdentifier) { index, asset in
-// Text("asset \(index)")
- ThumbnailImage(
- thumbnail: PHAssetImage(asset, size: CGSize(width: 70, height: 70), deliveryMode: .opportunistic),
- state: photosLibrary.state(for: asset),
- isFavorite: asset.isFavorite,
- isSelected: photosLibrary.assets2.count - 1 - index == selectedAssetIndex
- ).onTapGesture {
- selectedAssetIndex = photosLibrary.assets2.count - 1 - index
- }
- }
- }
-
var body: some View {
ScrollViewReader { proxy in
ScrollView(.horizontal) {
LazyHStack(spacing: 5) {
// TODO: placeholder images for start/end
- thumbnails
-
+ ForEach(
+ Array(zip(assets.indices, assets)), id: \.1.localIdentifier) { index, asset in
+ // Text("asset \(index)")
+ ThumbnailImage(
+ thumbnail: PHAssetImage(asset, size: CGSize(width: 70, height: 70), deliveryMode: .opportunistic),
+ state: photosLibrary.state(for: asset),
+ isFavorite: asset.isFavorite,
+ isSelected: photosLibrary.assets2.count - 1 - index == selectedAssetIndex
+ ).onTapGesture {
+ selectedAssetIndex = photosLibrary.assets2.count - 1 - index
+ }
+ }
+
// Note: these two uses of RTL direction are a way to get the LazyHStack
// to start on the right-hand side (i.e. the newest image) without loading
// everything else in the view.
@@ -79,19 +70,19 @@ struct ThumbnailList: View {
// See https://developer.apple.com/documentation/swiftui/view/scrollposition(initialanchor:)
.flipsForRightToLeftLayoutDirection(true)
.environment(\.layoutDirection, .rightToLeft)
- }.padding()
+ }.padding()
}
- .frame(height: 90)
- .flipsForRightToLeftLayoutDirection(true)
- .environment(\.layoutDirection, .rightToLeft)
- .onChange(of: selectedAssetIndex, perform: { newIndex in
- withAnimation {
- proxy.scrollTo(selectedAssetIndex, anchor: .center)
- }
- })
- .onAppear {
+ .frame(height: 90)
+ .flipsForRightToLeftLayoutDirection(true)
+ .environment(\.layoutDirection, .rightToLeft)
+ .onChange(of: selectedAssetIndex, perform: { newIndex in
+ withAnimation {
proxy.scrollTo(selectedAssetIndex, anchor: .center)
}
+ })
+ .onAppear {
+ proxy.scrollTo(selectedAssetIndex, anchor: .center)
+ }
}
}
}