diff --git a/Maccy/Models/HistoryItem.swift b/Maccy/Models/HistoryItem.swift index 08e7b726a..c7d08bd70 100644 --- a/Maccy/Models/HistoryItem.swift +++ b/Maccy/Models/HistoryItem.swift @@ -157,6 +157,17 @@ class HistoryItem { return data } + var imageDimensionsValue: String? { + if let data = imageData, let rep = NSBitmapImageRep(data: data) { + return "\(rep.pixelsWide)×\(rep.pixelsHigh)" + } + if let url = fileURLs.first, let data = try? Data(contentsOf: url), + let rep = NSBitmapImageRep(data: data) { + return "\(rep.pixelsWide)×\(rep.pixelsHigh)" + } + return nil + } + var image: NSImage? { guard let data = imageData else { return nil @@ -220,7 +231,7 @@ class HistoryItem { let requestHandler = VNImageRequestHandler(cgImage: cgImage) let request = VNRecognizeTextRequest(completionHandler: recognizeTextHandler) - request.recognitionLevel = .fast + request.recognitionLevel = .accurate do { try requestHandler.perform([request]) diff --git a/Maccy/Observables/HistoryItemDecorator.swift b/Maccy/Observables/HistoryItemDecorator.swift index 573e829d1..03ea97c14 100644 --- a/Maccy/Observables/HistoryItemDecorator.swift +++ b/Maccy/Observables/HistoryItemDecorator.swift @@ -41,6 +41,10 @@ class HistoryItemDecorator: Identifiable, Hashable, HasVisibility { var hasImage: Bool { item.image != nil } + var imageDimensions: String? { + item.imageDimensionsValue + } + var previewImageGenerationTask: Task<(), Error>? var thumbnailImageGenerationTask: Task<(), Error>? var previewImage: NSImage? diff --git a/Maccy/Views/PreviewItemView.swift b/Maccy/Views/PreviewItemView.swift index 9a36e7145..aee7ee881 100644 --- a/Maccy/Views/PreviewItemView.swift +++ b/Maccy/Views/PreviewItemView.swift @@ -21,6 +21,17 @@ struct PreviewItemView: View { previewImage { Image(nsImage: image) .resizable() + .overlay(alignment: .bottomTrailing) { + if let dim = item.item.imageDimensionsValue { + Text(dim) + .font(.caption2) + .foregroundStyle(.white) + .padding(.horizontal, 4) + .padding(.vertical, 2) + .background(.black.opacity(0.5), in: .rect(cornerRadius: 3)) + .padding(4) + } + } } } else { previewImage { @@ -88,6 +99,20 @@ struct PreviewItemView: View { Text("NumberOfCopies", tableName: "PreviewItemView") Text(String(item.item.numberOfCopies)) } + + if let dim = item.item.imageDimensionsValue { + HStack(spacing: 3) { + Text("ImageDimensions", tableName: "PreviewItemView") + Text(dim) + } + } + + if !item.item.title.isEmpty { + HStack(spacing: 3) { + Text("Title", tableName: "PreviewItemView") + Text(item.item.title) + } + } } .controlSize(.small) } diff --git a/Maccy/Views/en.lproj/PreviewItemView.strings b/Maccy/Views/en.lproj/PreviewItemView.strings index 2c3fb5d2d..445b6279a 100644 --- a/Maccy/Views/en.lproj/PreviewItemView.strings +++ b/Maccy/Views/en.lproj/PreviewItemView.strings @@ -2,6 +2,8 @@ "FirstCopyTime" = "First copy time:"; "LastCopyTime" = "Last copy time:"; "NumberOfCopies" = "Number of copies:"; +"ImageDimensions" = "Dimensions:"; +"Title" = "Title:"; "PinKey" = "Press {pinKey} to pin."; "UnpinKey" = "Press {pinKey} to unpin."; "DeleteKey" = "Press {deleteKey} to delete.";