Skip to main content

WIP

ID
b299180
date
2023-06-09 17:52:06+00:00
author
Alex Chan <alex@alexwlchan.net>
parent
e155f99
message
WIP
changed files
5 files, 31 additions, 41 deletions

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)
+            }
         }
     }
 }