Add a basic info overlay; right-align info
- ID
e4749db- date
2023-06-10 23:15:11+00:00- author
Alex Chan <alex@alexwlchan.net>- parent
698a0e6- message
Add a basic info overlay; right-align info- changed files
Changed files
BlinkReviewer/BlinkReviewer.xcodeproj/project.pbxproj (32078) → BlinkReviewer/BlinkReviewer.xcodeproj/project.pbxproj (32472)
diff --git a/BlinkReviewer/BlinkReviewer.xcodeproj/project.pbxproj b/BlinkReviewer/BlinkReviewer.xcodeproj/project.pbxproj
index 095368c..c02341f 100644
--- a/BlinkReviewer/BlinkReviewer.xcodeproj/project.pbxproj
+++ b/BlinkReviewer/BlinkReviewer.xcodeproj/project.pbxproj
@@ -8,6 +8,7 @@
/* Begin PBXBuildFile section */
940331732A336B5100200C5D /* DeferredRendering.swift in Sources */ = {isa = PBXBuildFile; fileRef = 940331722A336B5100200C5D /* DeferredRendering.swift */; };
+ 941E18FA2A35362600A2EA98 /* Info.swift in Sources */ = {isa = PBXBuildFile; fileRef = 941E18F92A35362600A2EA98 /* Info.swift */; };
945F17B02A33D167004FC479 /* ThumbnailImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 945F17AF2A33D167004FC479 /* ThumbnailImage.swift */; };
945F17B22A33D69B004FC479 /* FavoriteOverlay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 945F17B12A33D69B004FC479 /* FavoriteOverlay.swift */; };
945F17B42A33D726004FC479 /* ReviewStateIcon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 945F17B32A33D726004FC479 /* ReviewStateIcon.swift */; };
@@ -54,6 +55,7 @@
/* Begin PBXFileReference section */
940331722A336B5100200C5D /* DeferredRendering.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeferredRendering.swift; sourceTree = "<group>"; };
+ 941E18F92A35362600A2EA98 /* Info.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Info.swift; sourceTree = "<group>"; };
945F17AF2A33D167004FC479 /* ThumbnailImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThumbnailImage.swift; sourceTree = "<group>"; };
945F17B12A33D69B004FC479 /* FavoriteOverlay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FavoriteOverlay.swift; sourceTree = "<group>"; };
945F17B32A33D726004FC479 /* ReviewStateIcon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReviewStateIcon.swift; sourceTree = "<group>"; };
@@ -148,6 +150,7 @@
children = (
94F7E39D2A331A9E00763DB9 /* Statistics.swift */,
94A083652A33F50900238964 /* Debug.swift */,
+ 941E18F92A35362600A2EA98 /* Info.swift */,
);
path = Info;
sourceTree = "<group>";
@@ -393,6 +396,7 @@
94D2C8B92A320E6F00BEE15B /* ReviewState.swift in Sources */,
94F7E39E2A331A9E00763DB9 /* Statistics.swift in Sources */,
94D2C8C12A32FCE300BEE15B /* PHAssetImage.swift in Sources */,
+ 941E18FA2A35362600A2EA98 /* Info.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
BlinkReviewer/BlinkReviewer/Photos/AssetHelpers.swift (2360) → BlinkReviewer/BlinkReviewer/Photos/AssetHelpers.swift (2485)
diff --git a/BlinkReviewer/BlinkReviewer/Photos/AssetHelpers.swift b/BlinkReviewer/BlinkReviewer/Photos/AssetHelpers.swift
index dec461e..6c7eb49 100644
--- a/BlinkReviewer/BlinkReviewer/Photos/AssetHelpers.swift
+++ b/BlinkReviewer/BlinkReviewer/Photos/AssetHelpers.swift
@@ -21,6 +21,10 @@ extension PHAsset {
return result
}
+
+ func originalFilename() -> String {
+ PHAssetResource.assetResources(for: self).first!.originalFilename
+ }
/// Returns true if an asset is in the given album, false otherwise.
private func isInAlbum(_ album: PHAssetCollection) -> Bool {
BlinkReviewer/BlinkReviewer/Photos/PhotosLibrary.swift (6188) → BlinkReviewer/BlinkReviewer/Photos/PhotosLibrary.swift (6187)
diff --git a/BlinkReviewer/BlinkReviewer/Photos/PhotosLibrary.swift b/BlinkReviewer/BlinkReviewer/Photos/PhotosLibrary.swift
index 24a5830..5acd571 100644
--- a/BlinkReviewer/BlinkReviewer/Photos/PhotosLibrary.swift
+++ b/BlinkReviewer/BlinkReviewer/Photos/PhotosLibrary.swift
@@ -75,7 +75,6 @@ class PhotosLibrary: NSObject, ObservableObject, PHPhotoLibraryChangeObserver {
}
}
-
private func getInitialData() {
DispatchQueue.main.async {
let start = DispatchTime.now()
BlinkReviewer/BlinkReviewer/Views/Info/Info.swift (0) → BlinkReviewer/BlinkReviewer/Views/Info/Info.swift (1020)
diff --git a/BlinkReviewer/BlinkReviewer/Views/Info/Info.swift b/BlinkReviewer/BlinkReviewer/Views/Info/Info.swift
new file mode 100644
index 0000000..40f3963
--- /dev/null
+++ b/BlinkReviewer/BlinkReviewer/Views/Info/Info.swift
@@ -0,0 +1,37 @@
+import SwiftUI
+import Photos
+
+/// Show some info about the asset.
+struct Info: View {
+ var asset: PHAsset
+
+ var body: some View {
+ HStack {
+ HStack {
+ Image(systemName: "calendar")
+ Text("\(asset.creationDate?.ISO8601Format() ?? "(unknown)")")
+ }
+ .font(.title)
+ .padding(10)
+ .foregroundColor(.white)
+ .background(.black.opacity(0.7))
+ .cornerRadius(7.0)
+ .shadow(radius: 2.0)
+ .textSelection(.enabled)
+
+ HStack {
+ Image(systemName: "doc")
+ Text(asset.originalFilename())
+ }
+ .font(.title)
+ .padding(10)
+ .foregroundColor(.white)
+ .background(.black.opacity(0.7))
+ .cornerRadius(7.0)
+ .shadow(radius: 2.0)
+ .textSelection(.enabled)
+
+ }
+
+ }
+}
BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift (7657) → BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift (8102)
diff --git a/BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift b/BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift
index 69a8262..ece2d8d 100644
--- a/BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift
+++ b/BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift
@@ -27,6 +27,7 @@ struct PhotoReviewer: View {
@State var showStatistics: Bool = false
@State var showDebug: Bool = false
+ @State var showInfo: Bool = false
// This contains the big image that is currently in focus. See the comments
// on FocusedImage for why this state is defined outside that view.
@@ -51,20 +52,29 @@ struct PhotoReviewer: View {
Spacer()
}
- HStack {
+ VStack {
Spacer()
- VStack {
- Spacer()
-
- if showDebug {
+ if showDebug {
+ HStack {
+ Spacer()
Debug(asset: focusedAsset, focusedAssetIndex: focusedAssetIndex)
- }
-
- if showStatistics {
+ }.padding()
+ }
+
+ if showInfo {
+ HStack {
+ Spacer()
+ Info(asset: focusedAsset)
+ }.padding()
+ }
+
+ if showStatistics {
+ HStack {
+ Spacer()
Statistics().environmentObject(photosLibrary)
- }
- }.padding()
+ }.padding()
+ }
}.padding()
}
.background(.black)
@@ -163,6 +173,9 @@ struct PhotoReviewer: View {
case let e where e.characters == "s":
showStatistics.toggle()
+ case let e where e.characters == "i":
+ showInfo.toggle()
+
case let e where e.characters == "u":
if photosLibrary.state(of: focusedAsset) != nil {
if let lastUnreviewed = (focusedAssetIndex..<photosLibrary.assets2.count).first(where: { index in