From 1129e0e03562f3e75fb17d731509ae37610798b9 Mon Sep 17 00:00:00 2001 From: Nick Reisenauer Date: Mon, 22 Jun 2026 13:43:22 -0700 Subject: [PATCH 01/11] Add macOS port implementation plan (docs) Phased plan for bringing SnipSnaps to macOS (Mac App Store, sandboxed): Photos surface port + new on-disk file-cleanup surface. Verification-grounded against current Apple docs. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/macos-port-plan.md | 185 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100644 docs/macos-port-plan.md diff --git a/docs/macos-port-plan.md b/docs/macos-port-plan.md new file mode 100644 index 0000000..42635f9 --- /dev/null +++ b/docs/macos-port-plan.md @@ -0,0 +1,185 @@ +# SnipSnaps for macOS — Implementation Plan + +**Status:** proposed (planning only — no code changes yet) +**Target:** native macOS destination on the existing SwiftUI target +**Distribution:** Mac App Store + App Sandbox (decided) +**Author:** planning doc, 2026-06-22 + +--- + +## Goal + +Bring SnipSnaps to macOS with **two cleanup surfaces**: + +1. **Photos** — the existing iCloud/Photos review-and-delete experience, ported to Mac. +2. **Files (new)** — review and clean up loose files on disk: Downloads, Desktop, Documents, on-disk screenshots, big/old/duplicate junk. + +Distribution is **Mac App Store, sandboxed** — which has one important consequence baked into the whole plan: the Files surface **cannot silently scan** `~/Downloads`, `~/Desktop`, `~/Documents`. The user grants each folder once via a system picker; we persist that grant with a security-scoped bookmark. This is the standard, App-Review-approved model (Gemini 2, CleanMyMac ship this way). + +--- + +## Target & distribution decision (settled) + +- **Native macOS destination** on the existing single SwiftUI target — add **"Mac"** to *Supported Destinations*. The repo is already set up for this (`SDKROOT = auto`, existing `#if canImport(UIKit) / #elseif canImport(AppKit)` seams, `typealias PlatformImage = NSImage`). +- **Not** Mac Catalyst (scaled-iPad feel, awkward for a Finder-style file UI) and **not** "Designed for iPad" (strict iOS sandbox → no real file access → Files feature impossible). +- **Mac App Store + App Sandbox.** App Review permits destructive cleanup utilities; the only constraint is the user-granted-folder access model above. + +--- + +## What ports vs. what's new (grounded in the current code) + +| Area | Verdict | +|---|---| +| `PhotoLibrary` fetch/count/sort/delete (`Utils/Photos.swift`) | **Runs on macOS as-is.** PhotoKit + `PHAssetChangeRequest.deleteAssets` via `performChanges` (`Photos.swift:688`) is first-class on Mac; the existing `PHPhotosError.userCancelled` handling already matches the Mac system confirmation. | +| `PhotoReviewHistory`, `ReviewMode`, value types, image cache (NSImage branch) | **Reusable as-is.** | +| Similar/duplicate scan (`fetchSimilarPhotoGroups`, `thumbnailImage`, `differenceHash`, `featurePrint`) | **Currently a no-op on macOS** — wrapped in `#if canImport(UIKit)`, AppKit branch returns `[]`. Needs a CGImage refactor (Phase 2). | +| Unguarded UIKit (haptics, `UIApplication.open`, UIKit colors) | **Won't compile on Mac.** Must guard/replace (Phase 1). | +| iOS-only SwiftUI modifiers (`navigationBarTitleDisplayMode`, `topBar*`, `.tabBar`, `fullScreenCover`, `presentationDetents`) | **Won't compile on Mac.** Must guard/swap (Phase 1). | +| Files cleanup surface | **Net-new.** ~60–70% of the *shape* clones from the Photos flow; ~0% ports by direct call (everything is bound to `PHAsset`). | + +--- + +## Phase 0 — Project config + entitlements *(prerequisite, ~1 day)* + +Nothing compiles or runs on Mac until this is done. + +- [ ] Add **"Mac"** to the target's *Supported Destinations*; set `MACOSX_DEPLOYMENT_TARGET` (current `SUPPORTED_PLATFORMS` is `iphoneos iphonesimulator` only; `SDKROOT = auto` already correct). +- [ ] Populate `SnipSnaps/SnipSnaps.entitlements` (currently empty ``): + - `com.apple.security.app-sandbox` = `true` *(mandatory for Mac App Store)* + - `com.apple.security.personal-information.photos-library` = `true` *(with the sandbox on, the Photos library is unreachable without this)* + - `com.apple.security.files.user-selected.read-write` = `true` *(read-write to user-picked Downloads/Desktop/Documents folders)* + - `com.apple.security.files.bookmarks.app-scope` = `true` *(persist folder grants across launches)* + - `com.apple.security.files.downloads.read-write` = `true` *(optional convenience: pre-grants Downloads with no picker; no Desktop/Documents equivalent exists)* +- [ ] Add `Info.plist` usage strings: `NSDesktopFolderUsageDescription`, `NSDocumentsFolderUsageDescription`, `NSDownloadsFolderUsageDescription` (keep existing `NSPhotoLibraryUsageDescription`). + +> ⚠️ With the sandbox on, any file access outside the container that isn't a granted/bookmarked URL **silently fails** — it is not a build error. Route all file access through granted URLs. + +**Payoff:** the project builds for a Mac destination; gates everything else. + +--- + +## Phase 1 — Make the Photos build compile + run on macOS *(cheap win, ~1–2 days)* + +Fix the unguarded platform code so the existing Photos features build and run on Mac. **Every mode except Similar works immediately** after this, because the engine and PhotoKit deletion are already cross-platform. + +**Unguarded UIKit (breaks the build):** +- [ ] `ContentView.swift:40` — wrap `UIImpactFeedbackGenerator(...)` in `#if canImport(UIKit)`. +- [ ] `SettingsView.swift:78`, `:170`, `:222` — replace `UIApplication.shared.open(url)` with SwiftUI `@Environment(\.openURL)` (cross-platform, cleanest). +- [ ] `SettingsView.swift:92`, `:201`, `ScreenshotDemoView.swift:371` — replace `Color(UIColor.tertiaryLabel)` with `.foregroundStyle(.tertiary)`. +- [ ] `Design/AppColors.swift` — give `background`/`card` platform-conditional definitions. `Color(.systemGroupedBackground)` / `.secondarySystemGroupedBackground` don't exist on AppKit. Map AppKit → `Color(nsColor: .windowBackgroundColor)` / `.controlBackgroundColor` (or define an asset-catalog color set so `AppColor` is one cross-platform source of truth). Same for inline `Color(.tertiarySystemGroupedBackground)` in `HomeView` (3×), `ScreenshotDemoView` (4×), and `Color(.secondarySystemBackground)` / `Color(.tertiarySystemFill)` in `ReviewSessionView`'s card views. + +**iOS-only SwiftUI modifiers (`#if os(iOS)` or swap):** +- [ ] `.navigationBarTitleDisplayMode(...)` — `ReviewSessionView` (`:303`, `:1063`, `:2093`) + `HomeView:175`. +- [ ] `ToolbarItem(placement: .topBarLeading/.topBarTrailing)` → cross-platform placements (`.navigation`/`.primaryAction`/`.cancellationAction`) — `ReviewSessionView` (`:313`, `:1067`, `:2095`) + `HomeView:177`. +- [ ] `.toolbar(.hidden, for: .tabBar)` — `ReviewSessionView:323`, `:1078` (omit on macOS). +- [ ] `.fullScreenCover(item:)` → `.sheet(item:)` on macOS — `ReviewSessionView:1079`. +- [ ] `statusBarHidden` (`ReviewSessionView:1981`) and `.presentationDetents([...])` (`:2100`) — wrap in `#if os(iOS)`. +- [ ] Optionally `#if os(iOS)` out the DEBUG-only `ScreenshotDemoView` for the first Mac build. + +**Payoff:** a running Mac app that fetches, counts, reviews, and deletes Photos across all modes except Similar. + +--- + +## Phase 2 — Restore Similar/duplicate detection on macOS *(~2–3 days)* + +The headline 1.0.4 "Similar" mode is a silent empty screen on Mac until this is done. + +- [ ] Refactor `thumbnailImage` (`Photos.swift:1296`), `featurePrint` (`:1342`), `differenceHash` (`:1373`) to operate on **`CGImage`** instead of `UIImage`. `differenceHash` is already pure CoreGraphics; Vision (`VNGenerateImageFeaturePrintRequest`) is fully cross-platform. +- [ ] Lift the `fetchSimilarPhotoGroups` body (`Photos.swift:515+`) out of `#if canImport(UIKit)`. The **only** platform-conditional step becomes `PHAsset → CGImage` (request a `CGImage` directly, or `NSImage.cgImage(forProposedRect:context:hints:)` on the AppKit side). +- [ ] Re-tune thresholds against Mac-rendered thumbnails (dHash hamming ≤ 14, Vision distance ≤ 0.35) — NSImage→CGImage color-space differences can shift values. + +**Payoff:** Photos surface reaches feature parity on Mac. + +> Video and Live Photo playback are already `#if`-gated and degrade to a still image — acceptable for v1. AppKit playback parity (`AVPlayerView`, `PHLivePhotoView` on macOS) is optional later work. + +--- + +## Phase 3 — Mac-native review UX polish *(~1–2 days)* + +The touch-tuned swipe loop feels broken with a mouse and gives no haptics on Mac. + +- [ ] Add keyboard shortcuts via `.keyboardShortcut` / `.onKeyPress`: ← or Delete = delete, → or Return = keep, Cmd-Z = undo, Space = preview. +- [ ] Make the decision-bar buttons the primary interaction; keep the `DragGesture` swipe for trackpad users. +- [ ] Optional: `NSHapticFeedbackManager` for trackpad feedback (haptics already no-op on macOS). + +**Payoff:** feels like a Mac app, not a stretched phone app. + +> **Milestone candidate:** Phases 0–3 are a shippable "SnipSnaps for Mac — Photos" release on their own. + +--- + +## Phase 4 — Net-new Files cleanup surface *(the harder half, ~8–15 days)* + +Build a parallel engine + UI, keyed on a `FileItem` value type, cloning the proven Photos patterns. Gate behind `#if os(macOS)` so iOS is untouched. + +### 4a. Folder access + persistence (the platform plumbing) +- [ ] New "Files" tab (SF Symbol `folder`) alongside Home + Settings, `#if os(macOS)`. +- [ ] Empty-state onboarding: "Choose a folder" with quick presets for Downloads / Desktop / Documents, each opening `.fileImporter(allowedContentTypes: [.folder])` / `NSOpenPanel(canChooseDirectories: true)`. +- [ ] On grant: create an **app-scoped security-scoped bookmark** (`url.bookmarkData(options: .withSecurityScope, …)`), persist it; list granted folders with a revoke control. +- [ ] On launch: resolve bookmarks (`URL(resolvingBookmarkData:options:.withSecurityScope, bookmarkDataIsStale:&stale)`), recreate if stale. +- [ ] Wrap **every** access in `startAccessingSecurityScopedResource()` / `stopAccessingSecurityScopedResource()` — use `defer` rigorously (leaks otherwise). + +### 4b. Scan engine (`FileLibrary`, the on-disk analog of `PhotoLibrary`) +- [ ] Enumerate granted folders via `FileManager.enumerator(at:includingPropertiesForKeys:options:)` prefetching `.fileSizeKey`, `.contentModificationDateKey`, `.creationDateKey`, `.isDirectoryKey`, `.contentTypeKey`. +- [ ] Build `[FileItem]` (url, size, created, modified, contentType). Run off the main actor with the existing `SimilarPhotoScanProgress`-style progress + partial-results streaming and cancellation (mirror the `scanTask` pattern). +- [ ] **Categories** (the file analog of `ReviewMode`): + - **Large Files** — size desc, configurable threshold (e.g. ≥ 50 MB). + - **Old Files** — `modificationDate` older than N months. + - **On-Disk Screenshots** — UTType `.png`/`.image` + filename match (`Screenshot`/`Screen Shot`, locale-aware) **OR** `kMDItemIsScreenCapture` Spotlight metadata. Combine signals; let the user confirm. + - **Downloads Clutter** — everything in Downloads by age/size. + - **Duplicate Files** — size-bucket pre-pass, then SHA-256 only within same-size buckets. For near-duplicate images, reuse the dHash + Vision pipeline from Phase 2, fed `CGImageSourceCreateWithURL` instead of `PHCachingImageManager`. + +### 4c. Review UI (`FileReviewSessionView`) +- [ ] Clone the swipe card stack + decision bar + deferred-delete summary + per-item Undo, keyed on `FileItem`. +- [ ] Thumbnails via `QLThumbnailGenerator` (any file type) or `CGImageSource` (images). Card shows name, size, path, dates. +- [ ] Keyboard shortcuts (same scheme as Phase 3). + +### 4d. Deletion (safety-critical) +- [ ] Mark in-memory during review (fully reversible — nothing touched on disk); only the final **"Move N to Trash"** button acts. +- [ ] Delete via `FileManager.trashItem(at:resultingItemURL:)` — **never** `removeItem` (permanent). Capture `resultingItemURL` (files are renamed on collision). +- [ ] Persist `[originalURL → resultingItemURL]` pairs for a post-trash Undo (`moveItem`); macOS Cmd-Z / Restore-from-Trash also work, so this is nice-to-have. +- [ ] **Do not** call `trashItem` inside an `NSFileCoordinator.coordinate` block (deadlock). +- [ ] Exclude `.app` bundles, packages, symlinks, dotfiles, and iCloud-evicted `.icloud` placeholders. + +### 4e. File-scoped review memory +- [ ] Extend the `PhotoReviewHistory` design, re-keyed from `PHAsset.localIdentifier` to a **stable file identity** (`.fileResourceIdentifierKey` / volume-id+inode, or bookmark data) since paths change. Same expiration windows. + +**Payoff:** delivers your distinctive second goal — cleaning loose Downloads/Desktop/Documents junk. + +--- + +## Recommended architectural refactor (optional but worth it) + +Before/while building Phase 4, factor the decision/swipe/summary/undo state machine into a generic **`ReviewEngine`** with a small protocol (`id`, thumbnail provider, `sizeBytes`, dates, delete action). Have both `PHAsset` and `FileItem` conform. Then Photos and Files share one engine + one card view, with platform-specific input (touch+haptics on iOS, keyboard+trackpad on macOS). Turns "copy-paste" into real reuse. + +--- + +## Effort summary (solo) + +| Scope | Effort | +|---|---| +| Phases 0–3: Photos on macOS | ~1.5–2.5 weeks | +| Phase 4: Files surface | ~2–3 weeks | +| **Both, shipped well** | **~4–6 weeks** | + +Suggested sequencing: ship **Phases 0–3 as "SnipSnaps for Mac (Photos)"** first, then follow with the Files surface as a feature update. + +--- + +## Top risks / gotchas + +1. **Similar mode silently empty on Mac** until the Phase 2 CGImage refactor — don't ship the Mac build with it visible-but-broken; port it or hide it. +2. **Empty entitlements file today** — with the sandbox on, missing `photos-library` / file entitlements = silent runtime denial, not a build error. +3. **Grant folders, not individual files** — a single-file sandbox extension doesn't grant write to the parent dir, and trash is a *move* out of it, so trashing a lone picked file fails with `NSFileWriteNoPermissionError`. +4. **No full-disk auto-scan on the App Store** — no Desktop/Documents entitlement exists (only Downloads), so the user grants each folder. Set product expectations: this is a per-folder model by design. +5. **Destructive safety on files > Photos** — Photos has Recently Deleted (30-day); files must use `trashItem` (recoverable), exclude bundles/symlinks/dotfiles/`.icloud` placeholders. +6. **Security-scoped bookmark hygiene** — persist them or the user re-picks every launch; handle `bookmarkDataIsStale`; balance every `start`/`stop` with `defer`. +7. **iCloud "Desktop & Documents Folders"** — enumerating/hashing dataless placeholders can pull gigabytes; detect `NSURLUbiquitousItemIsDownloadedKey` and skip/warn. +8. **Touch-tuned swipe UX** feels wrong with a mouse — Phase 3 keyboard shortcuts + button-first interaction are not optional polish, they're required for a usable desktop loop. +9. **App Store privacy labels (2026 rules)** — disclose local data handling accurately. + +--- + +## Verification notes + +The macOS platform facts above were web-verified against current Apple docs (entitlement key reference, "Requesting Changes to the Photo Library," App Review Guideline 2.4.5(i)) and four adversarial checks (sandbox file delete, PhotoKit delete UX, App Review approval, target choice) — all returned *confirmed-with-conditions*; the conditions are folded into the phases and risks above. From 45264df0e5e9c6de4e22e3ffb7299d3cc9400a86 Mon Sep 17 00:00:00 2001 From: Nick Reisenauer Date: Mon, 22 Jun 2026 13:43:25 -0700 Subject: [PATCH 02/11] macOS Phase 0-1: native Mac target, sandbox entitlements, fix UIKit-only code Phase 0 (project config): - Add macosx to SUPPORTED_PLATFORMS and MACOSX_DEPLOYMENT_TARGET=14.0 on the app target's two configs only (test targets untouched). Native Mac destination on the existing SwiftUI target (not Catalyst). - Add SnipSnaps-macOS.entitlements (app-sandbox + photos-library) wired via CODE_SIGN_ENTITLEMENTS[sdk=macosx*]; iOS keeps the existing entitlements file. Phase 1 (make the Photos build compile + run on macOS): - AppColors: cross-platform semantic colors; AppKit (NSColor) branch for the background/card/chip/fill/separator families that have no UIKit equivalent. - Guard UIKit-only haptics (ContentView) behind #if canImport(UIKit). - SettingsView: UIApplication.shared.open -> @Environment(.openURL). - Replace Color(UIColor.tertiaryLabel) / Color(.tertiarySystemGroupedBackground) etc. with .tertiary / AppColor tokens. - Guard iOS-only SwiftUI modifiers (navigationBarTitleDisplayMode, .tabBar, statusBarHidden, presentationDetents) with #if os(iOS); swap topBar* toolbar placements for cross-platform cancellation/confirmation/primaryAction; fullScreenCover -> sheet on macOS. Verified: macOS build SUCCEEDED (xcodebuild, signing disabled). Similar/ duplicate scan remains a no-op on macOS pending the Phase 2 CGImage refactor. iOS build not run here (iOS 26.5 platform not installed on this machine); iOS code paths are unchanged or behind #if guards. Co-Authored-By: Claude Opus 4.8 (1M context) --- SnipSnaps.xcodeproj/project.pbxproj | 8 +++-- SnipSnaps/ContentView.swift | 2 ++ SnipSnaps/Design/AppColors.swift | 34 ++++++++++++++++--- SnipSnaps/SnipSnaps-macOS.entitlements | 10 ++++++ .../Views/Marketing/ScreenshotDemoView.swift | 10 +++--- .../Views/Review/ReviewSessionView.swift | 34 +++++++++++++++---- SnipSnaps/Views/Tabs/HomeView.swift | 10 +++--- SnipSnaps/Views/Tabs/SettingsView.swift | 11 +++--- 8 files changed, 91 insertions(+), 28 deletions(-) create mode 100644 SnipSnaps/SnipSnaps-macOS.entitlements diff --git a/SnipSnaps.xcodeproj/project.pbxproj b/SnipSnaps.xcodeproj/project.pbxproj index 8f80c80..2606610 100644 --- a/SnipSnaps.xcodeproj/project.pbxproj +++ b/SnipSnaps.xcodeproj/project.pbxproj @@ -280,6 +280,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_ENTITLEMENTS = SnipSnaps/SnipSnaps.entitlements; + "CODE_SIGN_ENTITLEMENTS[sdk=macosx*]" = SnipSnaps/SnipSnaps-macOS.entitlements; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 45; DEAD_CODE_STRIPPING = YES; @@ -307,7 +308,8 @@ PRODUCT_NAME = "$(TARGET_NAME)"; REGISTER_APP_GROUPS = YES; SDKROOT = auto; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx"; + MACOSX_DEPLOYMENT_TARGET = 14.0; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 6.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -320,6 +322,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_ENTITLEMENTS = SnipSnaps/SnipSnaps.entitlements; + "CODE_SIGN_ENTITLEMENTS[sdk=macosx*]" = SnipSnaps/SnipSnaps-macOS.entitlements; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 45; DEAD_CODE_STRIPPING = YES; @@ -347,7 +350,8 @@ PRODUCT_NAME = "$(TARGET_NAME)"; REGISTER_APP_GROUPS = YES; SDKROOT = auto; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx"; + MACOSX_DEPLOYMENT_TARGET = 14.0; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 6.0; TARGETED_DEVICE_FAMILY = "1,2"; diff --git a/SnipSnaps/ContentView.swift b/SnipSnaps/ContentView.swift index 6481beb..e10836a 100644 --- a/SnipSnaps/ContentView.swift +++ b/SnipSnaps/ContentView.swift @@ -37,8 +37,10 @@ struct ContentView: View { } .accentColor(AppColor.primary) .onChange(of: selectedTab) { + #if canImport(UIKit) let generator = UIImpactFeedbackGenerator(style: .light) generator.impactOccurred() + #endif } } } diff --git a/SnipSnaps/Design/AppColors.swift b/SnipSnaps/Design/AppColors.swift index 8e95c6b..2329bb9 100644 --- a/SnipSnaps/Design/AppColors.swift +++ b/SnipSnaps/Design/AppColors.swift @@ -1,16 +1,40 @@ import SwiftUI +#if canImport(UIKit) +import UIKit +#elseif canImport(AppKit) +import AppKit +#endif + +// Cross-platform semantic colors. The label/fill/background families differ +// between UIKit and AppKit (e.g. there is no NSColor.systemGroupedBackground), +// so the platform-specific values are split below. The vivid system accents +// (systemRed/Pink/Green) and SwiftUI's hierarchical primary/secondary resolve +// on both platforms, so they stay shared. enum AppColor { static let primary = Color.accentColor - static let background = Color(.systemGroupedBackground) - static let card = Color(.secondarySystemGroupedBackground) - static let text = Color(.label) - static let subtext = Color(.secondaryLabel) - static let separator = Color(.separator) + static let text = Color.primary + static let subtext = Color.secondary static let shadow = Color.black.opacity(0.05) static let delete = Color(.systemRed) static let keep = Color(.systemPink) static let success = Color(.systemGreen) static let deleteBackground = Color(.systemRed).opacity(0.16) static let keepBackground = Color(.systemGreen).opacity(0.16) + + #if canImport(UIKit) + static let background = Color(.systemGroupedBackground) + static let card = Color(.secondarySystemGroupedBackground) + static let chip = Color(.tertiarySystemGroupedBackground) + static let elevatedCard = Color(.secondarySystemBackground) + static let fill = Color(.tertiarySystemFill) + static let separator = Color(.separator) + #elseif canImport(AppKit) + static let background = Color(nsColor: .windowBackgroundColor) + static let card = Color(nsColor: .controlBackgroundColor) + static let chip = Color(nsColor: .unemphasizedSelectedContentBackgroundColor) + static let elevatedCard = Color(nsColor: .controlBackgroundColor) + static let fill = Color(nsColor: .quaternaryLabelColor) + static let separator = Color(nsColor: .separatorColor) + #endif } diff --git a/SnipSnaps/SnipSnaps-macOS.entitlements b/SnipSnaps/SnipSnaps-macOS.entitlements new file mode 100644 index 0000000..50e9bd3 --- /dev/null +++ b/SnipSnaps/SnipSnaps-macOS.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.personal-information.photos-library + + + diff --git a/SnipSnaps/Views/Marketing/ScreenshotDemoView.swift b/SnipSnaps/Views/Marketing/ScreenshotDemoView.swift index fab104d..43458b3 100644 --- a/SnipSnaps/Views/Marketing/ScreenshotDemoView.swift +++ b/SnipSnaps/Views/Marketing/ScreenshotDemoView.swift @@ -103,7 +103,7 @@ private struct ScreenshotHomeDemo: View { .foregroundStyle(.secondary) .padding(.horizontal, 10) .padding(.vertical, 6) - .background(Color(.tertiarySystemGroupedBackground), in: Capsule(style: .continuous)) + .background(AppColor.chip, in: Capsule(style: .continuous)) .padding(.top, 2) } if title == "Similar Photos" { @@ -117,7 +117,7 @@ private struct ScreenshotHomeDemo: View { .foregroundStyle(.secondary) .padding(.horizontal, 10) .padding(.vertical, 6) - .background(Color(.tertiarySystemGroupedBackground), in: Capsule(style: .continuous)) + .background(AppColor.chip, in: Capsule(style: .continuous)) .padding(.top, 2) } if title == "Videos" { @@ -131,7 +131,7 @@ private struct ScreenshotHomeDemo: View { .foregroundStyle(.secondary) .padding(.horizontal, 10) .padding(.vertical, 6) - .background(Color(.tertiarySystemGroupedBackground), in: Capsule(style: .continuous)) + .background(AppColor.chip, in: Capsule(style: .continuous)) .padding(.top, 2) } } @@ -307,7 +307,7 @@ private struct ScreenshotSummaryDemo: View { } } .padding(10) - .background(Color(.tertiarySystemGroupedBackground), in: RoundedRectangle(cornerRadius: 12, style: .continuous)) + .background(AppColor.chip, in: RoundedRectangle(cornerRadius: 12, style: .continuous)) } } .padding(16) @@ -368,7 +368,7 @@ private struct ScreenshotSettingsDemo: View { Image(systemName: "chevron.right") .font(.footnote) .fontWeight(.semibold) - .foregroundStyle(Color(UIColor.tertiaryLabel)) + .foregroundStyle(.tertiary) } } footer: { Text("Resets review size, sorting, review memory, and lifetime deleted stats on this device. This does not delete photos.") diff --git a/SnipSnaps/Views/Review/ReviewSessionView.swift b/SnipSnaps/Views/Review/ReviewSessionView.swift index 2335a0d..e1985cc 100644 --- a/SnipSnaps/Views/Review/ReviewSessionView.swift +++ b/SnipSnaps/Views/Review/ReviewSessionView.swift @@ -300,8 +300,10 @@ struct ReviewSessionView: View { } } .navigationTitle(mode.title) + #if os(iOS) .navigationBarTitleDisplayMode(.inline) .navigationBarBackButtonHidden(true) + #endif .sheet(isPresented: $showMetadataSheet) { if let asset = currentAsset, let currentPhotoDetails { @@ -310,7 +312,7 @@ struct ReviewSessionView: View { } .toolbar { if !showSummary || !deleteAssets.isEmpty { - ToolbarItem(placement: .topBarLeading) { + ToolbarItem(placement: .cancellationAction) { Button { dismiss() } label: { @@ -320,7 +322,9 @@ struct ReviewSessionView: View { } } } + #if os(iOS) .toolbar(.hidden, for: .tabBar) + #endif .onAppear { loadAssets() } .onChange(of: currentIndex) { _, _ in updateCaching() @@ -1060,11 +1064,13 @@ struct SimilarReviewSessionView: View { } } .navigationTitle("Similar") + #if os(iOS) .navigationBarTitleDisplayMode(.inline) .navigationBarBackButtonHidden(true) + #endif .toolbar { if !showSummary || !deleteAssets.isEmpty { - ToolbarItem(placement: .topBarLeading) { + ToolbarItem(placement: .cancellationAction) { Button { cancelScan() dismiss() @@ -1075,10 +1081,18 @@ struct SimilarReviewSessionView: View { } } } + #if os(iOS) .toolbar(.hidden, for: .tabBar) + #endif + #if os(iOS) .fullScreenCover(item: $zoomTarget) { target in FullScreenPhotoView(asset: target.asset) } + #else + .sheet(item: $zoomTarget) { target in + FullScreenPhotoView(asset: target.asset) + } + #endif .sheet(item: $metadataTarget) { target in PhotoMetadataSheet(asset: target.asset, details: target.details) } @@ -1978,7 +1992,9 @@ private struct FullScreenPhotoView: View { .padding(.trailing, 16) .accessibilityLabel("Close") } + #if os(iOS) .statusBarHidden(true) + #endif } private func magnification(in size: CGSize) -> some Gesture { @@ -2090,14 +2106,18 @@ private struct PhotoMetadataSheet: View { #endif } .navigationTitle(asset.mediaType == .video ? "Video Details" : "Photo Details") + #if os(iOS) .navigationBarTitleDisplayMode(.inline) + #endif .toolbar { - ToolbarItem(placement: .topBarTrailing) { + ToolbarItem(placement: .confirmationAction) { Button("Done") { dismiss() } } } } + #if os(iOS) .presentationDetents([.medium, .large]) + #endif } } @@ -2123,7 +2143,7 @@ private struct AssetLocationMapView: View { .clipShape(RoundedRectangle(cornerRadius: 14, style: .continuous)) .overlay { RoundedRectangle(cornerRadius: 14, style: .continuous) - .strokeBorder(Color(.separator).opacity(0.35), lineWidth: 0.5) + .strokeBorder(AppColor.separator.opacity(0.35), lineWidth: 0.5) } .accessibilityLabel("Capture location map") } @@ -2178,7 +2198,7 @@ private struct PhotoCardView: View { } } .frame(width: fittedSize.width, height: fittedSize.height) - .background(Color(.secondarySystemBackground), in: RoundedRectangle(cornerRadius: 28, style: .continuous)) + .background(AppColor.elevatedCard, in: RoundedRectangle(cornerRadius: 28, style: .continuous)) .clipShape(RoundedRectangle(cornerRadius: 28, style: .continuous)) .overlay( RoundedRectangle(cornerRadius: 28, style: .continuous) @@ -2312,7 +2332,7 @@ private struct CardBackdropView: View { var body: some View { RoundedRectangle(cornerRadius: 28, style: .continuous) - .fill(Color(.secondarySystemBackground)) + .fill(AppColor.elevatedCard) .overlay( RoundedRectangle(cornerRadius: 28, style: .continuous) .strokeBorder(Color.white.opacity(0.24), lineWidth: 0.5) @@ -2379,7 +2399,7 @@ private struct PhotoAssetImageView: View { .opacity(isLoaded ? 1 : 0) } else { Rectangle() - .fill(Color(.tertiarySystemFill)) + .fill(AppColor.fill) } #if canImport(PhotosUI) && canImport(UIKit) diff --git a/SnipSnaps/Views/Tabs/HomeView.swift b/SnipSnaps/Views/Tabs/HomeView.swift index 807cbe1..f6f64f5 100644 --- a/SnipSnaps/Views/Tabs/HomeView.swift +++ b/SnipSnaps/Views/Tabs/HomeView.swift @@ -172,9 +172,11 @@ struct HomeView: View { } .background(AppColor.background) .navigationTitle("SnipSnaps") + #if os(iOS) .navigationBarTitleDisplayMode(.large) + #endif .toolbar { - ToolbarItem(placement: .topBarTrailing) { + ToolbarItem(placement: .primaryAction) { if isRefreshingCounts { updatingCountsIndicator } @@ -271,7 +273,7 @@ struct HomeView: View { .foregroundStyle(.secondary) .padding(.horizontal, 10) .padding(.vertical, 6) - .background(Color(.tertiarySystemGroupedBackground), in: Capsule(style: .continuous)) + .background(AppColor.chip, in: Capsule(style: .continuous)) } .accessibilityLabel("Sort screenshots by \(screenshotSortOption.title)") } @@ -299,7 +301,7 @@ struct HomeView: View { .foregroundStyle(.secondary) .padding(.horizontal, 10) .padding(.vertical, 6) - .background(Color(.tertiarySystemGroupedBackground), in: Capsule(style: .continuous)) + .background(AppColor.chip, in: Capsule(style: .continuous)) } .accessibilityLabel("Sort videos by \(videoSortOption.subtitle)") } @@ -327,7 +329,7 @@ struct HomeView: View { .foregroundStyle(.secondary) .padding(.horizontal, 10) .padding(.vertical, 6) - .background(Color(.tertiarySystemGroupedBackground), in: Capsule(style: .continuous)) + .background(AppColor.chip, in: Capsule(style: .continuous)) } .accessibilityLabel("Sort similar groups by \(similarSortOption.subtitle)") } diff --git a/SnipSnaps/Views/Tabs/SettingsView.swift b/SnipSnaps/Views/Tabs/SettingsView.swift index 7fb90da..49287f0 100644 --- a/SnipSnaps/Views/Tabs/SettingsView.swift +++ b/SnipSnaps/Views/Tabs/SettingsView.swift @@ -11,6 +11,7 @@ import SwiftUI struct SettingsView: View { private let defaultReviewLimit = 20 + @Environment(\.openURL) private var openURL @AppStorage("reviewLimit") private var reviewLimit: Int = 20 @AppStorage("screenshotSortOption") private var screenshotSortOptionRawValue: String = ScreenshotSortOption.recent.rawValue @AppStorage("videoSortOption") private var videoSortOptionRawValue: String = VideoSortOption.largest.rawValue @@ -75,7 +76,7 @@ struct SettingsView: View { Section("Support") { Button { if let url = URL(string: "https://github.com/Kyter-com/SnipSnaps") { - UIApplication.shared.open(url) + openURL(url) } } label: { HStack { @@ -89,7 +90,7 @@ struct SettingsView: View { Spacer() Image(systemName: "arrow.up.forward") .font(.footnote) - .foregroundStyle(Color(UIColor.tertiaryLabel)) + .foregroundStyle(.tertiary) } } settingsLink( @@ -167,7 +168,7 @@ struct SettingsView: View { ) -> some View { Button { if let url = URL(string: url) { - UIApplication.shared.open(url) + openURL(url) } } label: { settingsRow( @@ -198,7 +199,7 @@ struct SettingsView: View { Image(systemName: trailingSystemImage) .font(.footnote) .fontWeight(trailingSystemImage == "chevron.right" ? .semibold : .regular) - .foregroundStyle(Color(UIColor.tertiaryLabel)) + .foregroundStyle(.tertiary) } } @@ -219,7 +220,7 @@ struct SettingsView: View { let encodedSubject = subject.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? "" if let url = URL(string: "mailto:\(email)?subject=\(encodedSubject)") { - UIApplication.shared.open(url) + openURL(url) } } } From 7647f1ac7474df0de8e1680e2d0a05389e4b71cc Mon Sep 17 00:00:00 2001 From: Nick Reisenauer Date: Mon, 22 Jun 2026 13:58:07 -0700 Subject: [PATCH 03/11] Fix macOS launch crash: use .formStyle(.grouped) in Settings SettingsView's Form used the macOS-default columnar form style, whose label-column layout failed to converge and tripped AppKit's 'Update Constraints in Window pass' cycle (NSGenericException / SIGABRT) at launch. SwiftUI's TabView eagerly lays out all tabs on macOS, so the whole app aborted even though Home was frontmost. .formStyle(.grouped) lays rows edge-to-edge (no column solve) and matches the grouped look the app already uses on iOS (where .grouped is the Form default, so iOS is visually unchanged). Verified: app builds, launches, and renders Home + Settings on macOS without crashing. Co-Authored-By: Claude Opus 4.8 (1M context) --- SnipSnaps/Views/Tabs/SettingsView.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/SnipSnaps/Views/Tabs/SettingsView.swift b/SnipSnaps/Views/Tabs/SettingsView.swift index 49287f0..d2844a8 100644 --- a/SnipSnaps/Views/Tabs/SettingsView.swift +++ b/SnipSnaps/Views/Tabs/SettingsView.swift @@ -132,6 +132,7 @@ struct SettingsView: View { ) } } + .formStyle(.grouped) .navigationTitle("Settings") .alert("Reset Local Settings?", isPresented: $showResetLocalSettingsAlert) { Button("Reset", role: .destructive) { From fd8ee7bfd938d94ac224129a0e90b4a645ca0b8e Mon Sep 17 00:00:00 2001 From: Nick Reisenauer Date: Mon, 22 Jun 2026 13:59:24 -0700 Subject: [PATCH 04/11] docs: record macOS Form layout-cycle crash + fix in port plan Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/macos-port-plan.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/macos-port-plan.md b/docs/macos-port-plan.md index 42635f9..bf6f028 100644 --- a/docs/macos-port-plan.md +++ b/docs/macos-port-plan.md @@ -177,6 +177,7 @@ Suggested sequencing: ship **Phases 0–3 as "SnipSnaps for Mac (Photos)"** firs 7. **iCloud "Desktop & Documents Folders"** — enumerating/hashing dataless placeholders can pull gigabytes; detect `NSURLUbiquitousItemIsDownloadedKey` and skip/warn. 8. **Touch-tuned swipe UX** feels wrong with a mouse — Phase 3 keyboard shortcuts + button-first interaction are not optional polish, they're required for a usable desktop loop. 9. **App Store privacy labels (2026 rules)** — disclose local data handling accurately. +10. **macOS `Form` default style crashes at launch** *(found + fixed in Phase 1)* — SwiftUI's default columnar `Form` style on macOS can trip an AppKit "Update Constraints in Window pass" cycle (`NSGenericException`/SIGABRT) once a form has enough rows. `TabView` eagerly lays out all tabs on macOS, so a crash in any tab aborts the whole app at launch. Fix: `.formStyle(.grouped)` (no-op on iOS, where grouped is already the default). Watch for the same cycle in any future macOS `Form`/`List`-heavy screens (e.g. the Files-folder settings). --- From 5259bf45f4832439e3bb44cf0fbc1add2d9d47de Mon Sep 17 00:00:00 2001 From: Nick Reisenauer Date: Mon, 22 Jun 2026 14:05:32 -0700 Subject: [PATCH 05/11] macOS Phase 2: restore Similar/duplicate scan on macOS (shared CGImage core) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The entire similar-photo pipeline (fetchSimilarPhotoGroups, thumbnailImage, featurePrint, differenceHash) was wrapped in #if canImport(UIKit) with the AppKit branch returning [], so Similar mode was a silent no-op on macOS. Refactor so the comparison core is platform-shared: - thumbnailImage(->UIImage) becomes thumbnailCGImage(->CGImage); the only platform-conditional step is PlatformImage->CGImage (UIImage.cgImage vs NSImage.cgImage(forProposedRect:context:hints:)). - differenceHash now takes a CGImage; featurePrint requests a CGImage directly. - Lift fetchSimilarPhotoGroups + the helpers out of the UIKit gate (Vision, CoreGraphics, PhotoKit are all available on macOS). iOS behavior is unchanged by construction: the same CGImage is extracted from the same PHImageManager UIImage and fed to the same dHash/Vision math, so the matching thresholds are identical. Verified: macOS build SUCCEEDED and the app launches/runs with the scan compiled in. NOT yet verified: real duplicate matching on macOS — this Mac's Photos library is empty (0 assets), so thumbnailCGImage/dHash/Vision never receive real input. Needs a populated macOS Photos library to confirm matching accuracy + any NSImage->CGImage color-space threshold drift. Co-Authored-By: Claude Opus 4.8 (1M context) --- SnipSnaps/Utils/Photos.swift | 39 ++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/SnipSnaps/Utils/Photos.swift b/SnipSnaps/Utils/Photos.swift index f02b108..345313d 100644 --- a/SnipSnaps/Utils/Photos.swift +++ b/SnipSnaps/Utils/Photos.swift @@ -512,7 +512,6 @@ enum PhotoLibrary { progressHandler: ((SimilarPhotoScanProgress) async -> Void)? = nil, partialGroupsHandler: (([SimilarPhotoGroup]) async -> Void)? = nil ) async -> [SimilarPhotoGroup] { - #if canImport(UIKit) let options = PHFetchOptions() options.sortDescriptors = [ NSSortDescriptor(key: "creationDate", ascending: sort == .oldest) @@ -557,12 +556,12 @@ enum PhotoLibrary { for (index, asset) in assets.enumerated() { guard !Task.isCancelled else { return sortedSimilarGroups(groups, sort: sort).prefix(maxGroups).map { $0 } } if !usedIdentifiers.contains(asset.localIdentifier), - let image = thumbnailImage( + let cgImage = thumbnailCGImage( for: asset, targetSize: CGSize(width: 18, height: 16), deliveryMode: .highQualityFormat ), - let hash = differenceHash(for: image) { + let hash = differenceHash(for: cgImage) { fingerprints.append(SimilarPhotoFingerprint(asset: asset, hash: hash, aspectRatio: aspectRatio(for: asset))) } if index == 0 || index == assets.count - 1 || index.isMultiple(of: 20) { @@ -676,9 +675,6 @@ enum PhotoLibrary { )) await partialGroupsHandler?(sortedGroups) return sortedGroups - #else - return [] - #endif } @discardableResult @@ -1292,21 +1288,23 @@ enum PhotoLibrary { (lhs ^ rhs).nonzeroBitCount } - #if canImport(UIKit) - private static func thumbnailImage( + // Renders a PHAsset thumbnail straight to a CGImage so the dHash and Vision + // comparison core is shared across platforms; only the PlatformImage -> + // CGImage step differs (UIImage.cgImage vs NSImage.cgImage(forProposedRect:)). + private static func thumbnailCGImage( for asset: PHAsset, targetSize: CGSize, contentMode: PHImageContentMode = .aspectFill, deliveryMode: PHImageRequestOptionsDeliveryMode = .fastFormat, allowsNetworkAccess: Bool = false - ) -> UIImage? { + ) -> CGImage? { let options = PHImageRequestOptions() options.isNetworkAccessAllowed = allowsNetworkAccess options.deliveryMode = deliveryMode options.resizeMode = .exact options.isSynchronous = true - var image: UIImage? + var cgImage: CGImage? imageManager.requestImage( for: asset, targetSize: targetSize, @@ -1314,10 +1312,15 @@ enum PhotoLibrary { options: options ) { result, info in let isCancelled = (info?[PHImageCancelledKey] as? Bool) ?? false - guard !isCancelled else { return } - image = result + guard !isCancelled, let result else { return } + #if canImport(UIKit) + cgImage = result.cgImage + #elseif canImport(AppKit) + var proposedRect = CGRect(origin: .zero, size: result.size) + cgImage = result.cgImage(forProposedRect: &proposedRect, context: nil, hints: nil) + #endif } - return image + return cgImage } private static func featurePrintDistance( @@ -1347,12 +1350,11 @@ enum PhotoLibrary { return cached } - guard let image = thumbnailImage( + guard let cgImage = thumbnailCGImage( for: asset, targetSize: CGSize(width: 160, height: 160), contentMode: .aspectFit - ), - let cgImage = image.cgImage else { + ) else { return nil } @@ -1370,9 +1372,7 @@ enum PhotoLibrary { } } - private static func differenceHash(for image: UIImage) -> UInt64? { - guard let cgImage = image.cgImage else { return nil } - + private static func differenceHash(for cgImage: CGImage) -> UInt64? { let width = 9 let height = 8 var pixels = [UInt8](repeating: 0, count: width * height) @@ -1410,7 +1410,6 @@ enum PhotoLibrary { } return hash } - #endif private static func onThisDayPredicate(referenceDate: Date = Date()) -> NSPredicate? { let calendar = Calendar.current From 2a684b79b80cd3f77743454d79cc737261a5790b Mon Sep 17 00:00:00 2001 From: Nick Reisenauer Date: Mon, 22 Jun 2026 14:20:49 -0700 Subject: [PATCH 06/11] macOS Phase 4: on-disk Files cleanup surface (macOS-only) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit New macOS-only 'Files' tab that reviews loose files in user-granted folders (Downloads/Desktop/Documents/any) and moves confirmed files to the Trash. All new code is #if os(macOS) so iOS is untouched. - FileFolderStore: user grants folders via NSOpenPanel; access persisted as app-scoped security-scoped bookmarks, reopened each launch. No silent full-disk scan (sandbox: user picks each folder). - FileLibrary: enumerates granted folders into FileItems; categories Everything / Large (>=50MB) / Old (>180d) / Screenshots (image + name heuristic); single-pass counts; deletion via FileManager.trashItem (recoverable) — never removeItem. Skips dirs/symlinks/packages; capped scan. - FilesView: onboarding + folder management + category cards with live counts. - FileReviewSessionView: swipe + ←/→ keyboard + ⌘Z undo review flow, async QuickLook thumbnails, deferred 'Move N to Trash' summary. - Entitlements: files.user-selected.read-write (build setting flipped to readwrite) + files.bookmarks.app-scope; Info.plist Desktop/Documents/ Downloads usage strings. Verified live on macOS: granted the real Downloads folder, scan produced real counts (4715 everything / 3229 old / 6 large / 5 screenshots), categories render. Review-card + trash UI built; trash action not exercised on real files by me (destructive). MVP scope — content-hash dedup and persistent file review memory are deferred (Phase 4b). Co-Authored-By: Claude Opus 4.8 (1M context) --- SnipSnaps.xcodeproj/project.pbxproj | 4 +- SnipSnaps/ContentView.swift | 7 + SnipSnaps/Files/FileFolderStore.swift | 109 +++++ SnipSnaps/Files/FileLibrary.swift | 135 ++++++ SnipSnaps/Files/FileModels.swift | 75 +++ SnipSnaps/Info.plist | 6 + SnipSnaps/SnipSnaps-macOS.entitlements | 4 + .../Views/Files/FileReviewSessionView.swift | 446 ++++++++++++++++++ SnipSnaps/Views/Files/FilesView.swift | 239 ++++++++++ 9 files changed, 1023 insertions(+), 2 deletions(-) create mode 100644 SnipSnaps/Files/FileFolderStore.swift create mode 100644 SnipSnaps/Files/FileLibrary.swift create mode 100644 SnipSnaps/Files/FileModels.swift create mode 100644 SnipSnaps/Views/Files/FileReviewSessionView.swift create mode 100644 SnipSnaps/Views/Files/FilesView.swift diff --git a/SnipSnaps.xcodeproj/project.pbxproj b/SnipSnaps.xcodeproj/project.pbxproj index 2606610..d789fe3 100644 --- a/SnipSnaps.xcodeproj/project.pbxproj +++ b/SnipSnaps.xcodeproj/project.pbxproj @@ -288,7 +288,7 @@ ENABLE_APP_SANDBOX = YES; ENABLE_HARDENED_RUNTIME = YES; ENABLE_PREVIEWS = YES; - ENABLE_USER_SELECTED_FILES = readonly; + ENABLE_USER_SELECTED_FILES = readwrite; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = SnipSnaps/Info.plist; "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; @@ -330,7 +330,7 @@ ENABLE_APP_SANDBOX = YES; ENABLE_HARDENED_RUNTIME = YES; ENABLE_PREVIEWS = YES; - ENABLE_USER_SELECTED_FILES = readonly; + ENABLE_USER_SELECTED_FILES = readwrite; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = SnipSnaps/Info.plist; "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; diff --git a/SnipSnaps/ContentView.swift b/SnipSnaps/ContentView.swift index e10836a..4928ac5 100644 --- a/SnipSnaps/ContentView.swift +++ b/SnipSnaps/ContentView.swift @@ -29,6 +29,13 @@ struct ContentView: View { Label("Home", systemImage: "house") } .tag(0) + #if os(macOS) + FilesView() + .tabItem { + Label("Files", systemImage: "folder") + } + .tag(2) + #endif SettingsView() .tabItem { Label("Settings", systemImage: "gearshape") diff --git a/SnipSnaps/Files/FileFolderStore.swift b/SnipSnaps/Files/FileFolderStore.swift new file mode 100644 index 0000000..9a79bd6 --- /dev/null +++ b/SnipSnaps/Files/FileFolderStore.swift @@ -0,0 +1,109 @@ +#if os(macOS) +import Foundation +import SwiftUI + +// Persists the folders the user has granted access to as app-scoped +// security-scoped bookmarks (com.apple.security.files.bookmarks.app-scope), and +// keeps that access open for the app session so the scan/trash engine can read +// and write inside them. Sandbox rule: the user must pick each folder via the +// system panel — there is no Desktop/Documents entitlement for silent scanning. +@MainActor +final class FileFolderStore: ObservableObject { + struct Folder: Identifiable, Hashable { + let url: URL + var id: URL { url } + var name: String { url.lastPathComponent } + } + + @Published private(set) var folders: [Folder] = [] + + private let defaultsKey = "filesGrantedFolderBookmarksV1" + private var accessing: [URL] = [] + + init() { + restore() + } + + // The URL comes from NSOpenPanel and is already accessible; capture a durable + // app-scoped bookmark so the grant survives relaunch. + func add(_ url: URL) { + guard !folders.contains(where: { $0.url.path == url.path }) else { return } + do { + let data = try url.bookmarkData( + options: .withSecurityScope, + includingResourceValuesForKeys: nil, + relativeTo: nil + ) + var stored = storedBookmarks() + stored.append(data) + save(stored) + restore() + } catch { + NSLog("SnipSnaps: failed to bookmark folder \(url.path): \(error)") + } + } + + func remove(_ folder: Folder) { + let kept = storedBookmarks().filter { data in + resolve(data)?.url.path != folder.url.path + } + save(kept) + restore() + } + + // MARK: - Private + + private func restore() { + // Balance any previously-opened scopes before re-opening the fresh set. + for url in accessing { + url.stopAccessingSecurityScopedResource() + } + accessing = [] + + var resolved: [Folder] = [] + var refreshed: [Data] = [] + for data in storedBookmarks() { + guard let entry = resolve(data) else { continue } + if resolved.contains(where: { $0.url.path == entry.url.path }) { continue } + if entry.url.startAccessingSecurityScopedResource() { + accessing.append(entry.url) + } + resolved.append(Folder(url: entry.url)) + refreshed.append(entry.refreshedData ?? data) + } + folders = resolved + save(refreshed) + } + + private func resolve(_ data: Data) -> (url: URL, refreshedData: Data?)? { + var stale = false + guard let url = try? URL( + resolvingBookmarkData: data, + options: .withSecurityScope, + relativeTo: nil, + bookmarkDataIsStale: &stale + ) else { + return nil + } + guard stale else { return (url, nil) } + let fresh = try? url.bookmarkData( + options: .withSecurityScope, + includingResourceValuesForKeys: nil, + relativeTo: nil + ) + return (url, fresh) + } + + private func storedBookmarks() -> [Data] { + UserDefaults.standard.array(forKey: defaultsKey) as? [Data] ?? [] + } + + private func save(_ bookmarks: [Data]) { + if bookmarks.isEmpty { + UserDefaults.standard.removeObject(forKey: defaultsKey) + } else { + UserDefaults.standard.set(bookmarks, forKey: defaultsKey) + } + } +} +#endif diff --git a/SnipSnaps/Files/FileLibrary.swift b/SnipSnaps/Files/FileLibrary.swift new file mode 100644 index 0000000..81d2a73 --- /dev/null +++ b/SnipSnaps/Files/FileLibrary.swift @@ -0,0 +1,135 @@ +#if os(macOS) +import Foundation +import UniformTypeIdentifiers + +// On-disk analog of PhotoLibrary: enumerates the user-granted folders, buckets +// files into review categories, and moves confirmed files to the Trash +// (recoverable) — never a permanent delete. All work is value-type based so it +// runs off the main actor. +enum FileLibrary { + static let largeFileMinimumBytes: Int64 = 50 * 1024 * 1024 + static let oldFileAgeDays = 180 + // Cap enumeration so a huge folder tree can't stall a scan/count indefinitely. + static let maxFilesExamined = 50_000 + + private static let resourceKeys: Set = [ + .fileSizeKey, .contentModificationDateKey, .creationDateKey, + .isRegularFileKey, .isDirectoryKey, .isSymbolicLinkKey, + .isPackageKey, .contentTypeKey + ] + + static func scan(folders: [URL], category: FileReviewCategory, limit: Int) -> [FileItem] { + let oldCutoff = Calendar.current.date(byAdding: .day, value: -oldFileAgeDays, to: Date()) ?? .distantPast + var items: [FileItem] = [] + var examined = 0 + + for folder in folders { + guard let enumerator = enumerator(for: folder) else { continue } + for case let url as URL in enumerator { + if examined >= maxFilesExamined { break } + guard let item = makeItem(url) else { continue } + examined += 1 + if matches(item, category: category, oldCutoff: oldCutoff) { + items.append(item) + } + } + } + + return Array(sorted(items, category: category).prefix(limit)) + } + + // Single-pass tally for the category cards. + static func counts(folders: [URL]) -> [FileReviewCategory: Int] { + let oldCutoff = Calendar.current.date(byAdding: .day, value: -oldFileAgeDays, to: Date()) ?? .distantPast + var counts: [FileReviewCategory: Int] = [:] + var examined = 0 + + for folder in folders { + guard let enumerator = enumerator(for: folder) else { continue } + for case let url as URL in enumerator { + if examined >= maxFilesExamined { break } + guard let item = makeItem(url) else { continue } + examined += 1 + counts[.everything, default: 0] += 1 + if item.size >= largeFileMinimumBytes { counts[.large, default: 0] += 1 } + if item.modified < oldCutoff { counts[.old, default: 0] += 1 } + if item.isScreenshot { counts[.screenshots, default: 0] += 1 } + } + } + return counts + } + + struct TrashResult: Sendable { + let trashed: Int + let freedBytes: Int64 + let failed: [String] + } + + static func moveToTrash(_ items: [FileItem]) -> TrashResult { + let fm = FileManager.default + var trashed = 0 + var freed: Int64 = 0 + var failed: [String] = [] + for item in items { + var resultingURL: NSURL? + do { + try fm.trashItem(at: item.url, resultingItemURL: &resultingURL) + trashed += 1 + freed += item.size + } catch { + failed.append(item.name) + } + } + return TrashResult(trashed: trashed, freedBytes: freed, failed: failed) + } + + // MARK: - Private + + private static func enumerator(for folder: URL) -> FileManager.DirectoryEnumerator? { + FileManager.default.enumerator( + at: folder, + includingPropertiesForKeys: Array(resourceKeys), + options: [.skipsHiddenFiles, .skipsPackageDescendants] + ) + } + + private static func makeItem(_ url: URL) -> FileItem? { + guard let rv = try? url.resourceValues(forKeys: resourceKeys) else { return nil } + // Only loose regular files: skip directories, symlinks, and packages (.app etc). + guard rv.isRegularFile == true, + rv.isDirectory != true, + rv.isSymbolicLink != true, + rv.isPackage != true else { + return nil + } + let modified = rv.contentModificationDate ?? .distantPast + return FileItem( + url: url, + size: Int64(rv.fileSize ?? 0), + modified: modified, + created: rv.creationDate ?? modified, + contentType: rv.contentType + ) + } + + private static func matches(_ item: FileItem, category: FileReviewCategory, oldCutoff: Date) -> Bool { + switch category { + case .everything: return true + case .large: return item.size >= largeFileMinimumBytes + case .old: return item.modified < oldCutoff + case .screenshots: return item.isScreenshot + } + } + + private static func sorted(_ items: [FileItem], category: FileReviewCategory) -> [FileItem] { + switch category { + case .large: + return items.sorted { $0.size > $1.size } + case .old: + return items.sorted { $0.modified < $1.modified } + case .everything, .screenshots: + return items.sorted { $0.modified > $1.modified } + } + } +} +#endif diff --git a/SnipSnaps/Files/FileModels.swift b/SnipSnaps/Files/FileModels.swift new file mode 100644 index 0000000..4209917 --- /dev/null +++ b/SnipSnaps/Files/FileModels.swift @@ -0,0 +1,75 @@ +#if os(macOS) +import Foundation +import UniformTypeIdentifiers + +enum FileDecision { + case keep + case delete +} + +// One loose on-disk file surfaced for review. Value type built from URL resource +// values so it is Sendable and can be scanned off the main actor. +struct FileItem: Identifiable, Hashable, Sendable { + let url: URL + let size: Int64 + let modified: Date + let created: Date + let contentType: UTType? + + var id: URL { url } + var name: String { url.lastPathComponent } + var parentPath: String { url.deletingLastPathComponent().path } + + var sizeText: String { + ByteCountFormatter.string(fromByteCount: size, countStyle: .file) + } + + var isImage: Bool { + contentType?.conforms(to: .image) ?? false + } + + // macOS screenshots land on disk as images named "Screenshot …" / "Screen Shot …". + // Filenames can be localized or renamed, so this is a heuristic the user confirms. + var isScreenshot: Bool { + guard isImage else { return false } + let lower = name.lowercased() + return lower.contains("screenshot") || lower.contains("screen shot") + } +} + +enum FileReviewCategory: String, CaseIterable, Identifiable, Sendable { + case everything + case large + case old + case screenshots + + var id: String { rawValue } + + var title: String { + switch self { + case .everything: return "Everything" + case .large: return "Large Files" + case .old: return "Old Files" + case .screenshots: return "Screenshots" + } + } + + var subtitle: String { + switch self { + case .everything: return "Every file in your folders" + case .large: return "Files 50 MB and up" + case .old: return "Untouched for 6+ months" + case .screenshots: return "Screenshots saved to disk" + } + } + + var systemImage: String { + switch self { + case .everything: return "folder" + case .large: return "internaldrive" + case .old: return "clock.badge.xmark" + case .screenshots: return "rectangle.on.rectangle" + } + } +} +#endif diff --git a/SnipSnaps/Info.plist b/SnipSnaps/Info.plist index b1fbc45..32cd71a 100644 --- a/SnipSnaps/Info.plist +++ b/SnipSnaps/Info.plist @@ -6,5 +6,11 @@ NSPhotoLibraryUsageDescription SnipSnaps needs access to your photo library so you can review your photos and pick which ones to delete. For example, you swipe through your recent photos or screenshots, mark the ones you do not want, and SnipSnaps deletes only the ones you confirm. + NSDesktopFolderUsageDescription + SnipSnaps reviews files in folders you choose so you can clean up clutter. It only ever moves the files you confirm to the Trash. + NSDocumentsFolderUsageDescription + SnipSnaps reviews files in folders you choose so you can clean up clutter. It only ever moves the files you confirm to the Trash. + NSDownloadsFolderUsageDescription + SnipSnaps reviews files in folders you choose so you can clean up clutter. It only ever moves the files you confirm to the Trash. diff --git a/SnipSnaps/SnipSnaps-macOS.entitlements b/SnipSnaps/SnipSnaps-macOS.entitlements index 50e9bd3..618ffad 100644 --- a/SnipSnaps/SnipSnaps-macOS.entitlements +++ b/SnipSnaps/SnipSnaps-macOS.entitlements @@ -6,5 +6,9 @@ com.apple.security.personal-information.photos-library + com.apple.security.files.user-selected.read-write + + com.apple.security.files.bookmarks.app-scope + diff --git a/SnipSnaps/Views/Files/FileReviewSessionView.swift b/SnipSnaps/Views/Files/FileReviewSessionView.swift new file mode 100644 index 0000000..e0793d3 --- /dev/null +++ b/SnipSnaps/Views/Files/FileReviewSessionView.swift @@ -0,0 +1,446 @@ +#if os(macOS) +import SwiftUI +import AppKit +import QuickLookThumbnailing + +struct FileReviewSessionView: View { + let category: FileReviewCategory + let folders: [URL] + + @Environment(\.dismiss) private var dismiss + @State private var isScanning = true + @State private var items: [FileItem] = [] + @State private var index = 0 + @State private var kept: [FileItem] = [] + @State private var toDelete: [FileItem] = [] + @State private var lastUndo: UndoStep? + @State private var showSummary = false + @State private var deleteInProgress = false + @State private var resultMessage: String? + @State private var dragOffset: CGSize = .zero + @AppStorage("fileReviewLimit") private var reviewLimit = 200 + + private struct UndoStep { + let item: FileItem + let decision: FileDecision + let index: Int + } + + private var current: FileItem? { + items.indices.contains(index) ? items[index] : nil + } + + var body: some View { + ZStack { + AppColor.background.ignoresSafeArea() + if isScanning { + scanningView + } else if items.isEmpty { + emptyView + } else if showSummary { + summaryView + } else { + reviewView + } + } + .navigationTitle(category.title) + .toolbar { + ToolbarItem(placement: .cancellationAction) { + Button { + dismiss() + } label: { + Image(systemName: "xmark") + } + .help("Close review") + } + } + .onAppear(perform: load) + } + + // MARK: - States + + private var scanningView: some View { + VStack(spacing: 12) { + ProgressView().controlSize(.large) + Text("Scanning your folders…") + .font(.headline) + .foregroundStyle(.secondary) + } + } + + private var emptyView: some View { + ContentUnavailableView { + Label("Nothing to review", systemImage: category.systemImage) + } description: { + Text("No \(category.title.lowercased()) found in the folders you granted.") + } actions: { + Button("Back") { dismiss() } + } + } + + private var reviewView: some View { + VStack(spacing: 16) { + header + .padding(.horizontal, 24) + .padding(.top, 12) + if let current { + card(for: current) + .padding(.horizontal, 24) + } + decisionBar + .padding(.horizontal, 24) + .padding(.bottom, 14) + } + } + + private var header: some View { + HStack(spacing: 12) { + Text("\(min(index + 1, items.count)) of \(items.count)") + .font(.footnote.weight(.medium)) + .foregroundStyle(.secondary) + .monospacedDigit() + ProgressView(value: Double(index), total: Double(max(items.count, 1))) + .tint(AppColor.primary) + if !toDelete.isEmpty { + Label("\(toDelete.count)", systemImage: "trash") + .font(.footnote.weight(.semibold)) + .foregroundStyle(AppColor.delete) + } + } + } + + private func card(for item: FileItem) -> some View { + VStack(spacing: 0) { + FileThumbnailView(url: item.url) + .frame(maxWidth: .infinity, maxHeight: .infinity) + .frame(minHeight: 260) + .background(AppColor.elevatedCard) + .clipped() + + VStack(alignment: .leading, spacing: 6) { + Text(item.name) + .font(.headline) + .lineLimit(2) + .truncationMode(.middle) + HStack(spacing: 10) { + Label(item.sizeText, systemImage: "internaldrive") + Label(item.modified.formatted(.relative(presentation: .named)), systemImage: "calendar") + } + .font(.caption) + .foregroundStyle(.secondary) + Text(item.parentPath) + .font(.caption2) + .foregroundStyle(.tertiary) + .lineLimit(1) + .truncationMode(.middle) + } + .frame(maxWidth: .infinity, alignment: .leading) + .padding(14) + .background(AppColor.card) + } + .clipShape(RoundedRectangle(cornerRadius: 20, style: .continuous)) + .overlay( + RoundedRectangle(cornerRadius: 20, style: .continuous) + .strokeBorder(AppColor.separator.opacity(0.4), lineWidth: 0.5) + ) + .overlay(swipeBadge) + .offset(dragOffset) + .rotationEffect(.degrees(Double(dragOffset.width / 28))) + .gesture( + DragGesture(minimumDistance: 6) + .onChanged { dragOffset = $0.translation } + .onEnded(handleDragEnd) + ) + .animation(.snappy(duration: 0.28), value: index) + .id(item.id) + } + + private var swipeBadge: some View { + ZStack { + if dragOffset.width < -24 { + badge(systemImage: "trash.fill", tint: AppColor.delete, alignment: .topLeading) + } else if dragOffset.width > 24 { + badge(systemImage: "checkmark", tint: AppColor.success, alignment: .topTrailing) + } + } + .allowsHitTesting(false) + } + + private func badge(systemImage: String, tint: Color, alignment: Alignment) -> some View { + Image(systemName: systemImage) + .font(.system(size: 26, weight: .bold)) + .foregroundStyle(.white) + .padding(16) + .background(tint, in: Circle()) + .padding(20) + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: alignment) + .opacity(min(abs(dragOffset.width) / 120, 1)) + } + + private var decisionBar: some View { + HStack(spacing: 18) { + Button { + applyDecision(.delete) + } label: { + Label("Trash", systemImage: "xmark") + .frame(maxWidth: .infinity) + } + .tint(AppColor.delete) + .keyboardShortcut(.leftArrow, modifiers: []) + + Button { + undo() + } label: { + Image(systemName: "arrow.uturn.backward") + } + .disabled(lastUndo == nil) + .keyboardShortcut("z", modifiers: .command) + + Button { + applyDecision(.keep) + } label: { + Label("Keep", systemImage: "checkmark") + .frame(maxWidth: .infinity) + } + .tint(AppColor.success) + .keyboardShortcut(.rightArrow, modifiers: []) + } + .controlSize(.large) + .buttonStyle(.borderedProminent) + } + + private var summaryView: some View { + ScrollView { + VStack(spacing: 20) { + VStack(spacing: 6) { + Text("Review complete") + .font(.title2.weight(.semibold)) + Text("\(kept.count) kept · \(toDelete.count) to trash") + .font(.subheadline) + .foregroundStyle(.secondary) + } + .padding(.top, 12) + + if let resultMessage { + Label(resultMessage, systemImage: "checkmark.circle.fill") + .font(.subheadline.weight(.medium)) + .foregroundStyle(AppColor.success) + .padding(14) + .frame(maxWidth: .infinity, alignment: .leading) + .background(AppColor.card, in: RoundedRectangle(cornerRadius: 14, style: .continuous)) + } + + if !toDelete.isEmpty { + VStack(alignment: .leading, spacing: 8) { + HStack { + Text("To move to Trash") + .font(.subheadline.weight(.semibold)) + Spacer() + Text(reclaimText) + .font(.footnote) + .foregroundStyle(.secondary) + } + ForEach(toDelete) { item in + HStack(spacing: 10) { + FileThumbnailView(url: item.url) + .frame(width: 40, height: 40) + .clipShape(RoundedRectangle(cornerRadius: 8, style: .continuous)) + Text(item.name) + .font(.callout) + .lineLimit(1) + .truncationMode(.middle) + Spacer() + Text(item.sizeText) + .font(.caption) + .foregroundStyle(.secondary) + } + } + } + .padding(16) + .frame(maxWidth: .infinity, alignment: .leading) + .background(AppColor.card, in: RoundedRectangle(cornerRadius: 14, style: .continuous)) + } + } + .padding(20) + } + .safeAreaInset(edge: .bottom) { + summaryActionBar + } + } + + private var summaryActionBar: some View { + Group { + if toDelete.isEmpty { + Button { + dismiss() + } label: { + Text("Done").fontWeight(.semibold).frame(maxWidth: .infinity) + } + .buttonStyle(.borderedProminent) + .controlSize(.large) + } else { + Button(role: .destructive) { + performDelete() + } label: { + HStack { + if deleteInProgress { + ProgressView().controlSize(.small) + } else { + Image(systemName: "trash.fill") + } + Text("Move \(toDelete.count) to Trash") + .fontWeight(.semibold) + } + .frame(maxWidth: .infinity) + } + .buttonStyle(.borderedProminent) + .tint(AppColor.delete) + .controlSize(.large) + .disabled(deleteInProgress) + } + } + .padding(16) + .background(.bar) + } + + private var reclaimText: String { + let bytes = toDelete.reduce(Int64(0)) { $0 + $1.size } + return ByteCountFormatter.string(fromByteCount: bytes, countStyle: .file) + } + + // MARK: - Actions + + private func load() { + isScanning = true + let folders = folders + let category = category + let limit = max(20, min(reviewLimit, 1000)) + Task { + let scanned = await Task.detached(priority: .userInitiated) { + FileLibrary.scan(folders: folders, category: category, limit: limit) + }.value + await MainActor.run { + items = scanned + index = 0 + kept = [] + toDelete = [] + lastUndo = nil + showSummary = false + isScanning = false + } + } + } + + private func applyDecision(_ decision: FileDecision) { + guard let item = current else { return } + lastUndo = UndoStep(item: item, decision: decision, index: index) + switch decision { + case .keep: kept.append(item) + case .delete: toDelete.append(item) + } + dragOffset = .zero + advance() + } + + private func advance() { + index += 1 + if index >= items.count { + showSummary = true + } + } + + private func undo() { + guard let step = lastUndo else { return } + switch step.decision { + case .keep: kept.removeAll { $0.id == step.item.id } + case .delete: toDelete.removeAll { $0.id == step.item.id } + } + showSummary = false + index = step.index + lastUndo = nil + } + + private func handleDragEnd(_ value: DragGesture.Value) { + let threshold: CGFloat = 110 + if value.translation.width < -threshold { + applyDecision(.delete) + } else if value.translation.width > threshold { + applyDecision(.keep) + } else { + withAnimation(.snappy(duration: 0.25)) { dragOffset = .zero } + } + } + + private func performDelete() { + guard !toDelete.isEmpty, !deleteInProgress else { return } + deleteInProgress = true + let targets = toDelete + Task { + let result = await Task.detached(priority: .userInitiated) { + FileLibrary.moveToTrash(targets) + }.value + await MainActor.run { + deleteInProgress = false + let freed = ByteCountFormatter.string(fromByteCount: result.freedBytes, countStyle: .file) + if result.failed.isEmpty { + resultMessage = "Moved \(result.trashed) to Trash · \(freed) freed" + } else { + resultMessage = "Moved \(result.trashed) · \(result.failed.count) couldn't be moved" + } + toDelete = [] + lastUndo = nil + } + } + } +} + +// Async QuickLook thumbnail for any file type (falls back to the file's icon). +private struct FileThumbnailView: View { + let url: URL + + @Environment(\.displayScale) private var displayScale + @State private var image: NSImage? + + var body: some View { + GeometryReader { proxy in + ZStack { + if let image { + Image(nsImage: image) + .resizable() + .aspectRatio(contentMode: .fit) + .frame(maxWidth: .infinity, maxHeight: .infinity) + } else { + Image(systemName: "doc") + .font(.system(size: 32)) + .foregroundStyle(.secondary) + } + } + .frame(width: proxy.size.width, height: proxy.size.height) + .onAppear { load(into: proxy.size) } + .onChange(of: url) { _, _ in load(into: proxy.size) } + } + } + + private func load(into size: CGSize) { + let target = CGSize(width: max(size.width, 80), height: max(size.height, 80)) + let request = QLThumbnailGenerator.Request( + fileAt: url, + size: target, + scale: displayScale, + representationTypes: .all + ) + QLThumbnailGenerator.shared.generateBestRepresentation(for: request) { representation, _ in + guard let nsImage = representation?.nsImage else { return } + let boxed = UncheckedSendableBox(nsImage) + Task { @MainActor in image = boxed.value } + } + } +} + +// Hands a known-safe non-Sendable value (the rendered thumbnail) from QuickLook's +// completion queue to the main actor without tripping Swift 6's data-race check. +private struct UncheckedSendableBox: @unchecked Sendable { + let value: T + init(_ value: T) { self.value = value } +} +#endif diff --git a/SnipSnaps/Views/Files/FilesView.swift b/SnipSnaps/Views/Files/FilesView.swift new file mode 100644 index 0000000..94df381 --- /dev/null +++ b/SnipSnaps/Views/Files/FilesView.swift @@ -0,0 +1,239 @@ +#if os(macOS) +import SwiftUI +import AppKit + +struct FilesView: View { + @StateObject private var store = FileFolderStore() + @State private var counts: [FileReviewCategory: Int] = [:] + @State private var isCounting = false + @State private var selectedCategory: FileReviewCategory? + + var body: some View { + NavigationStack { + ScrollView { + VStack(alignment: .leading, spacing: 20) { + if store.folders.isEmpty { + onboarding + } else { + grantedFoldersSection + categoriesSection + } + } + .padding(20) + } + .background(AppColor.background) + .navigationTitle("Files") + .toolbar { + ToolbarItem(placement: .primaryAction) { + if store.folders.isEmpty { + if isCounting { ProgressView().controlSize(.small) } + } else { + Button { + chooseFolder() + } label: { + Label("Add Folder", systemImage: "plus") + } + } + } + } + .navigationDestination(item: $selectedCategory) { category in + FileReviewSessionView(category: category, folders: store.folders.map(\.url)) + } + } + .onChange(of: store.folders) { _, _ in refreshCounts() } + .onAppear { refreshCounts() } + } + + // MARK: - Onboarding + + private var onboarding: some View { + VStack(alignment: .leading, spacing: 18) { + VStack(alignment: .leading, spacing: 8) { + Image(systemName: "folder.badge.plus") + .font(.system(size: 44)) + .foregroundStyle(AppColor.primary) + Text("Clean up your files") + .font(.title2.weight(.semibold)) + Text("Choose a folder and SnipSnaps helps you review what's inside — big files, old files, leftover screenshots. Only the files you confirm are moved to the Trash, so nothing is deleted permanently.") + .font(.subheadline) + .foregroundStyle(.secondary) + .fixedSize(horizontal: false, vertical: true) + } + + VStack(spacing: 10) { + quickFolderButton("Downloads", systemImage: "arrow.down.circle.fill", url: Self.downloadsURL) + quickFolderButton("Desktop", systemImage: "menubar.dock.rectangle", url: Self.desktopURL) + quickFolderButton("Documents", systemImage: "doc.fill", url: Self.documentsURL) + Button { + chooseFolder() + } label: { + Label("Choose Another Folder…", systemImage: "folder") + .frame(maxWidth: .infinity) + } + .controlSize(.large) + } + + Text("SnipSnaps can only see folders you pick here.") + .font(.footnote) + .foregroundStyle(.tertiary) + } + .frame(maxWidth: .infinity, alignment: .leading) + .padding(20) + .background(AppColor.card, in: RoundedRectangle(cornerRadius: 16, style: .continuous)) + } + + private func quickFolderButton(_ title: String, systemImage: String, url: URL?) -> some View { + Button { + chooseFolder(startingAt: url) + } label: { + Label("Add \(title)", systemImage: systemImage) + .frame(maxWidth: .infinity, alignment: .leading) + } + .controlSize(.large) + .buttonStyle(.borderedProminent) + .tint(AppColor.primary) + .disabled(url == nil) + } + + // MARK: - Granted folders + + private var grantedFoldersSection: some View { + VStack(alignment: .leading, spacing: 10) { + Text("FOLDERS") + .font(.footnote.weight(.semibold)) + .foregroundStyle(.secondary) + VStack(spacing: 8) { + ForEach(store.folders) { folder in + HStack(spacing: 12) { + Image(systemName: "folder.fill") + .foregroundStyle(AppColor.primary) + VStack(alignment: .leading, spacing: 2) { + Text(folder.name).font(.headline) + Text(folder.url.path) + .font(.caption) + .foregroundStyle(.secondary) + .lineLimit(1) + .truncationMode(.middle) + } + Spacer() + Button(role: .destructive) { + store.remove(folder) + } label: { + Image(systemName: "minus.circle.fill") + } + .buttonStyle(.borderless) + .help("Stop reviewing this folder") + } + .padding(12) + .background(AppColor.card, in: RoundedRectangle(cornerRadius: 12, style: .continuous)) + } + } + } + } + + // MARK: - Categories + + private var categoriesSection: some View { + VStack(alignment: .leading, spacing: 10) { + HStack { + Text("REVIEW") + .font(.footnote.weight(.semibold)) + .foregroundStyle(.secondary) + if isCounting { + ProgressView().controlSize(.small) + } + } + VStack(spacing: 12) { + ForEach(FileReviewCategory.allCases) { category in + Button { + selectedCategory = category + } label: { + FileCategoryCard(category: category, count: counts[category]) + } + .buttonStyle(.plain) + } + } + } + } + + // MARK: - Folder picking + + private func chooseFolder(startingAt directory: URL? = nil) { + let panel = NSOpenPanel() + panel.canChooseDirectories = true + panel.canChooseFiles = false + panel.allowsMultipleSelection = true + panel.prompt = "Grant Access" + panel.message = "Choose a folder for SnipSnaps to review. Only files you confirm are moved to the Trash." + if let directory { panel.directoryURL = directory } + guard panel.runModal() == .OK else { return } + for url in panel.urls { + store.add(url) + } + } + + private func refreshCounts() { + let folders = store.folders.map(\.url) + guard !folders.isEmpty else { + counts = [:] + return + } + isCounting = true + Task { + let tally = await Task.detached(priority: .utility) { + FileLibrary.counts(folders: folders) + }.value + await MainActor.run { + counts = tally + isCounting = false + } + } + } + + private static var downloadsURL: URL? { + try? FileManager.default.url(for: .downloadsDirectory, in: .userDomainMask, appropriateFor: nil, create: false) + } + private static var desktopURL: URL? { + try? FileManager.default.url(for: .desktopDirectory, in: .userDomainMask, appropriateFor: nil, create: false) + } + private static var documentsURL: URL? { + try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) + } +} + +private struct FileCategoryCard: View { + let category: FileReviewCategory + let count: Int? + + var body: some View { + HStack(spacing: 16) { + Image(systemName: category.systemImage) + .font(.title3.weight(.semibold)) + .foregroundStyle(AppColor.primary) + .frame(width: 44, height: 44) + .background(AppColor.primary.opacity(0.12), in: RoundedRectangle(cornerRadius: 12, style: .continuous)) + VStack(alignment: .leading, spacing: 3) { + Text(category.title) + .font(.headline) + .foregroundStyle(AppColor.text) + Text(category.subtitle) + .font(.subheadline) + .foregroundStyle(.secondary) + } + Spacer() + Text(countText) + .font(.title2.weight(.bold)) + .foregroundStyle(.tertiary) + .monospacedDigit() + } + .padding(16) + .frame(maxWidth: .infinity) + .background(AppColor.card, in: RoundedRectangle(cornerRadius: 16, style: .continuous)) + } + + private var countText: String { + guard let count else { return "…" } + return count > 9999 ? "9999+" : "\(count)" + } +} +#endif From b902724acc0e57e1657ab73531fa8cfe52c2dfd5 Mon Sep 17 00:00:00 2001 From: Nick Reisenauer Date: Mon, 22 Jun 2026 14:25:39 -0700 Subject: [PATCH 07/11] Make Files surface cohesive with Photos (shared settings + stats) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Files review now uses the shared @AppStorage("reviewLimit") "Review Size" setting instead of a separate hardcoded limit. - Files deletions accumulate into the shared totalDeletedCount/totalDeletedBytes lifetime stats; Settings 'Lifetime Stats' relabeled 'Deleted photos' -> 'Deleted items' since it now covers both surfaces. - FilesView re-tallies category counts when a review session closes (deletions now reflected), mirroring HomeView's post-review refresh. - Files summary gains the same Lifetime card + kept/trashed tally as Photos. Still Phase 4b: 'Remember Reviewed' skip-memory for files (needs persistent file identity) — Files currently re-shows every file each scan. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../Views/Files/FileReviewSessionView.swift | 38 +++++++++++++++++-- SnipSnaps/Views/Files/FilesView.swift | 5 +++ SnipSnaps/Views/Tabs/SettingsView.swift | 2 +- 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/SnipSnaps/Views/Files/FileReviewSessionView.swift b/SnipSnaps/Views/Files/FileReviewSessionView.swift index e0793d3..38edefc 100644 --- a/SnipSnaps/Views/Files/FileReviewSessionView.swift +++ b/SnipSnaps/Views/Files/FileReviewSessionView.swift @@ -17,8 +17,13 @@ struct FileReviewSessionView: View { @State private var showSummary = false @State private var deleteInProgress = false @State private var resultMessage: String? + @State private var deletedCount = 0 @State private var dragOffset: CGSize = .zero - @AppStorage("fileReviewLimit") private var reviewLimit = 200 + // Shared with the Photos review so "Review Size" and the lifetime "Space + // freed" stats behave the same across both surfaces. + @AppStorage("reviewLimit") private var reviewLimit: Int = 20 + @AppStorage("totalDeletedCount") private var totalDeletedCount: Int = 0 + @AppStorage("totalDeletedBytes") private var totalDeletedBytes: Int = 0 private struct UndoStep { let item: FileItem @@ -215,7 +220,7 @@ struct FileReviewSessionView: View { VStack(spacing: 6) { Text("Review complete") .font(.title2.weight(.semibold)) - Text("\(kept.count) kept · \(toDelete.count) to trash") + Text("\(kept.count) kept · \(toDelete.count + deletedCount) to trash") .font(.subheadline) .foregroundStyle(.secondary) } @@ -260,6 +265,24 @@ struct FileReviewSessionView: View { .frame(maxWidth: .infinity, alignment: .leading) .background(AppColor.card, in: RoundedRectangle(cornerRadius: 14, style: .continuous)) } + + if totalDeletedCount > 0 { + VStack(alignment: .leading, spacing: 4) { + Text("Lifetime") + .font(.footnote.weight(.semibold)) + .foregroundStyle(.secondary) + HStack { + Text("\(totalDeletedCount) deleted") + Spacer() + Text(totalDeletedBytesText) + } + .font(.footnote) + .foregroundStyle(.secondary) + } + .padding(16) + .frame(maxWidth: .infinity, alignment: .leading) + .background(AppColor.card, in: RoundedRectangle(cornerRadius: 14, style: .continuous)) + } } .padding(20) } @@ -308,13 +331,18 @@ struct FileReviewSessionView: View { return ByteCountFormatter.string(fromByteCount: bytes, countStyle: .file) } + private var totalDeletedBytesText: String { + guard totalDeletedBytes > 0 else { return "0 KB" } + return ByteCountFormatter.string(fromByteCount: Int64(totalDeletedBytes), countStyle: .file) + } + // MARK: - Actions private func load() { isScanning = true let folders = folders let category = category - let limit = max(20, min(reviewLimit, 1000)) + let limit = max(5, min(reviewLimit, 200)) Task { let scanned = await Task.detached(priority: .userInitiated) { FileLibrary.scan(folders: folders, category: category, limit: limit) @@ -325,6 +353,7 @@ struct FileReviewSessionView: View { kept = [] toDelete = [] lastUndo = nil + deletedCount = 0 showSummary = false isScanning = false } @@ -387,6 +416,9 @@ struct FileReviewSessionView: View { } else { resultMessage = "Moved \(result.trashed) · \(result.failed.count) couldn't be moved" } + deletedCount += result.trashed + totalDeletedCount += result.trashed + totalDeletedBytes += Int(result.freedBytes) toDelete = [] lastUndo = nil } diff --git a/SnipSnaps/Views/Files/FilesView.swift b/SnipSnaps/Views/Files/FilesView.swift index 94df381..eee23ff 100644 --- a/SnipSnaps/Views/Files/FilesView.swift +++ b/SnipSnaps/Views/Files/FilesView.swift @@ -41,6 +41,11 @@ struct FilesView: View { } } .onChange(of: store.folders) { _, _ in refreshCounts() } + // Re-tally when a review session closes (files may have been trashed), the + // same way HomeView refreshes counts after a Photos review. + .onChange(of: selectedCategory) { _, newValue in + if newValue == nil { refreshCounts() } + } .onAppear { refreshCounts() } } diff --git a/SnipSnaps/Views/Tabs/SettingsView.swift b/SnipSnaps/Views/Tabs/SettingsView.swift index d2844a8..4259b9f 100644 --- a/SnipSnaps/Views/Tabs/SettingsView.swift +++ b/SnipSnaps/Views/Tabs/SettingsView.swift @@ -51,7 +51,7 @@ struct SettingsView: View { Text("No deletions yet.") .foregroundStyle(.secondary) } else { - LabeledContent("Deleted photos", value: "\(totalDeletedCount)") + LabeledContent("Deleted items", value: "\(totalDeletedCount)") LabeledContent("Space freed", value: totalDeletedBytesText) } } From 9f7c82676591a24096ef202325e69ca0a1ed71db Mon Sep 17 00:00:00 2001 From: Nick Reisenauer Date: Mon, 22 Jun 2026 14:35:06 -0700 Subject: [PATCH 08/11] macOS Phase 4b: Files 'Remember Reviewed' + duplicate detection Closes the last cohesion gaps between Files and Photos: - FileReviewHistory: on-disk analog of PhotoReviewHistory, keyed on file path, honoring the same ReviewMemoryOption windows. Files review marks items reviewed on keep/delete and unmarks on undo; scans exclude reviewed paths. - FilesView cards now show 'X not reviewed - Y total' and respect the shared 'Remember Reviewed' setting (counts refresh when it changes); FileLibrary.counts returns total + notReviewed per category (FileCounts), mirroring Photos. - New Duplicates category: exact-content dupes via size-bucket + streamed SHA-256 (CryptoKit), surfacing redundant copies (keeps the oldest). Shown as a scan-on-demand 'Scan' card like Photos' Similar. - Reset Local Settings also clears file review memory; app launch compacts it. Builds on macOS. Deferred: near-duplicate image matching (could reuse the Phase 2 dHash+Vision core fed CGImageSource from disk). Co-Authored-By: Claude Opus 4.8 (1M context) --- SnipSnaps/Files/FileLibrary.swift | 83 +++++++++++++--- SnipSnaps/Files/FileModels.swift | 15 +++ SnipSnaps/Files/FileReviewHistory.swift | 96 +++++++++++++++++++ SnipSnaps/SnipSnapsApp.swift | 3 + .../Views/Files/FileReviewSessionView.swift | 10 +- SnipSnaps/Views/Files/FilesView.swift | 44 +++++++-- SnipSnaps/Views/Tabs/SettingsView.swift | 3 + 7 files changed, 234 insertions(+), 20 deletions(-) create mode 100644 SnipSnaps/Files/FileReviewHistory.swift diff --git a/SnipSnaps/Files/FileLibrary.swift b/SnipSnaps/Files/FileLibrary.swift index 81d2a73..a02aea6 100644 --- a/SnipSnaps/Files/FileLibrary.swift +++ b/SnipSnaps/Files/FileLibrary.swift @@ -1,6 +1,7 @@ #if os(macOS) import Foundation import UniformTypeIdentifiers +import CryptoKit // On-disk analog of PhotoLibrary: enumerates the user-granted folders, buckets // files into review categories, and moves confirmed files to the Trash @@ -18,7 +19,11 @@ enum FileLibrary { .isPackageKey, .contentTypeKey ] - static func scan(folders: [URL], category: FileReviewCategory, limit: Int) -> [FileItem] { + static func scan(folders: [URL], category: FileReviewCategory, limit: Int, excluding reviewed: Set = []) -> [FileItem] { + if category == .duplicates { + return duplicateRedundantCopies(folders: folders, excluding: reviewed, limit: limit) + } + let oldCutoff = Calendar.current.date(byAdding: .day, value: -oldFileAgeDays, to: Date()) ?? .distantPast var items: [FileItem] = [] var examined = 0 @@ -29,7 +34,7 @@ enum FileLibrary { if examined >= maxFilesExamined { break } guard let item = makeItem(url) else { continue } examined += 1 - if matches(item, category: category, oldCutoff: oldCutoff) { + if matches(item, category: category, oldCutoff: oldCutoff), !reviewed.contains(item.url.path) { items.append(item) } } @@ -38,10 +43,12 @@ enum FileLibrary { return Array(sorted(items, category: category).prefix(limit)) } - // Single-pass tally for the category cards. - static func counts(folders: [URL]) -> [FileReviewCategory: Int] { + // Single-pass tally for the category cards: total and not-yet-reviewed per + // category (duplicates is scan-on-demand, so it is omitted here). + static func counts(folders: [URL], reviewedPaths reviewed: Set) -> [FileReviewCategory: FileCounts] { let oldCutoff = Calendar.current.date(byAdding: .day, value: -oldFileAgeDays, to: Date()) ?? .distantPast - var counts: [FileReviewCategory: Int] = [:] + var total: [FileReviewCategory: Int] = [:] + var fresh: [FileReviewCategory: Int] = [:] var examined = 0 for folder in folders { @@ -50,13 +57,66 @@ enum FileLibrary { if examined >= maxFilesExamined { break } guard let item = makeItem(url) else { continue } examined += 1 - counts[.everything, default: 0] += 1 - if item.size >= largeFileMinimumBytes { counts[.large, default: 0] += 1 } - if item.modified < oldCutoff { counts[.old, default: 0] += 1 } - if item.isScreenshot { counts[.screenshots, default: 0] += 1 } + let notReviewed = !reviewed.contains(item.url.path) + func bump(_ category: FileReviewCategory) { + total[category, default: 0] += 1 + if notReviewed { fresh[category, default: 0] += 1 } + } + bump(.everything) + if item.size >= largeFileMinimumBytes { bump(.large) } + if item.modified < oldCutoff { bump(.old) } + if item.isScreenshot { bump(.screenshots) } } } - return counts + + var result: [FileReviewCategory: FileCounts] = [:] + for category in [FileReviewCategory.everything, .large, .old, .screenshots] { + result[category] = FileCounts(total: total[category] ?? 0, notReviewed: fresh[category] ?? 0) + } + return result + } + + // Exact-content duplicates: bucket by size, hash only collision buckets, then + // surface the redundant copies (every copy except the oldest "original" in + // each identical group). Unique file sizes never get hashed. + static func duplicateRedundantCopies(folders: [URL], excluding reviewed: Set, limit: Int) -> [FileItem] { + var bySize: [Int64: [FileItem]] = [:] + var examined = 0 + for folder in folders { + guard let enumerator = enumerator(for: folder) else { continue } + for case let url as URL in enumerator { + if examined >= maxFilesExamined { break } + guard let item = makeItem(url), item.size > 0 else { continue } + examined += 1 + bySize[item.size, default: []].append(item) + } + } + + var redundant: [FileItem] = [] + for (_, sameSize) in bySize where sameSize.count > 1 { + var byHash: [String: [FileItem]] = [:] + for item in sameSize { + guard let hash = contentHash(item.url) else { continue } + byHash[hash, default: []].append(item) + } + for (_, identical) in byHash where identical.count > 1 { + let ordered = identical.sorted { $0.created < $1.created } + for copy in ordered.dropFirst() where !reviewed.contains(copy.url.path) { + redundant.append(copy) + } + } + } + return Array(redundant.sorted { $0.size > $1.size }.prefix(limit)) + } + + private static func contentHash(_ url: URL) -> String? { + guard let handle = try? FileHandle(forReadingFrom: url) else { return nil } + defer { try? handle.close() } + var hasher = SHA256() + while let chunk = try? handle.read(upToCount: 1 << 20), !chunk.isEmpty { + hasher.update(data: chunk) + } + return hasher.finalize().map { String(format: "%02x", $0) }.joined() } struct TrashResult: Sendable { @@ -118,6 +178,7 @@ enum FileLibrary { case .large: return item.size >= largeFileMinimumBytes case .old: return item.modified < oldCutoff case .screenshots: return item.isScreenshot + case .duplicates: return false // handled separately via duplicateRedundantCopies } } @@ -127,7 +188,7 @@ enum FileLibrary { return items.sorted { $0.size > $1.size } case .old: return items.sorted { $0.modified < $1.modified } - case .everything, .screenshots: + case .everything, .screenshots, .duplicates: return items.sorted { $0.modified > $1.modified } } } diff --git a/SnipSnaps/Files/FileModels.swift b/SnipSnaps/Files/FileModels.swift index 4209917..7f978e7 100644 --- a/SnipSnaps/Files/FileModels.swift +++ b/SnipSnaps/Files/FileModels.swift @@ -37,20 +37,33 @@ struct FileItem: Identifiable, Hashable, Sendable { } } +// Total vs not-yet-reviewed tally for a category, mirroring the Photos +// ReviewModeCounts so the Files cards can show "X not reviewed · Y total". +struct FileCounts: Sendable { + let total: Int + let notReviewed: Int +} + enum FileReviewCategory: String, CaseIterable, Identifiable, Sendable { case everything case large case old case screenshots + case duplicates var id: String { rawValue } + // Like Photos' "Similar", duplicate detection hashes file contents, so it is a + // scan-on-demand surface rather than a precomputed count on the cards. + var showsScanAction: Bool { self == .duplicates } + var title: String { switch self { case .everything: return "Everything" case .large: return "Large Files" case .old: return "Old Files" case .screenshots: return "Screenshots" + case .duplicates: return "Duplicates" } } @@ -60,6 +73,7 @@ enum FileReviewCategory: String, CaseIterable, Identifiable, Sendable { case .large: return "Files 50 MB and up" case .old: return "Untouched for 6+ months" case .screenshots: return "Screenshots saved to disk" + case .duplicates: return "Identical copies of a file" } } @@ -69,6 +83,7 @@ enum FileReviewCategory: String, CaseIterable, Identifiable, Sendable { case .large: return "internaldrive" case .old: return "clock.badge.xmark" case .screenshots: return "rectangle.on.rectangle" + case .duplicates: return "square.on.square" } } } diff --git a/SnipSnaps/Files/FileReviewHistory.swift b/SnipSnaps/Files/FileReviewHistory.swift new file mode 100644 index 0000000..7378dfe --- /dev/null +++ b/SnipSnaps/Files/FileReviewHistory.swift @@ -0,0 +1,96 @@ +#if os(macOS) +import Foundation + +// On-disk analog of PhotoReviewHistory: remembers which files the user has +// already reviewed so the shared "Remember Reviewed" setting skips them on later +// scans, using the same ReviewMemoryOption windows as the Photos surface. +// Keyed on file path — a moved/renamed file is treated as new, which is the +// pragmatic stable key for loose files. +enum FileReviewHistory { + private static let storeKey = "fileReviewedPaths" + private static let maxEntries = 20_000 + private static let maxPersistentAge: TimeInterval = 5 * 365 * 24 * 60 * 60 + private static let sessionLock = NSLock() + nonisolated(unsafe) private static var sessionPaths: Set = [] + + static func reviewedPaths(memoryOption: ReviewMemoryOption) -> Set { + guard memoryOption != .never else { return [] } + if memoryOption == .session { + sessionLock.lock() + defer { sessionLock.unlock() } + return sessionPaths + } + return Set(filteredEntries(memoryOption: memoryOption).keys) + } + + static func markReviewed(_ path: String, memoryOption: ReviewMemoryOption) { + guard memoryOption != .never else { return } + if memoryOption == .session { + sessionLock.lock() + sessionPaths.insert(path) + while sessionPaths.count > maxEntries, let excess = sessionPaths.first { + sessionPaths.remove(excess) + } + sessionLock.unlock() + return + } + var entries = persistentEntries() + entries[path] = Date().timeIntervalSince1970 + store(entries) + } + + static func unmarkReviewed(_ path: String, memoryOption: ReviewMemoryOption) { + guard memoryOption != .never else { return } + if memoryOption == .session { + sessionLock.lock() + sessionPaths.remove(path) + sessionLock.unlock() + return + } + var entries = persistentEntries() + entries.removeValue(forKey: path) + store(entries) + } + + static func clearAll() { + sessionLock.lock() + sessionPaths.removeAll() + sessionLock.unlock() + UserDefaults.standard.removeObject(forKey: storeKey) + } + + static func compact() { + store(persistentEntries()) + } + + // MARK: - Private + + private static func filteredEntries(memoryOption: ReviewMemoryOption) -> [String: TimeInterval] { + let entries = persistentEntries() + guard let interval = memoryOption.expirationInterval, interval > 0 else { return entries } + let cutoff = Date().timeIntervalSince1970 - interval + return entries.filter { $0.value >= cutoff } + } + + private static func persistentEntries() -> [String: TimeInterval] { + guard let dictionary = UserDefaults.standard.dictionary(forKey: storeKey) else { return [:] } + return dictionary.compactMapValues { value in + if let number = value as? NSNumber { return number.doubleValue } + return value as? TimeInterval + } + } + + private static func store(_ entries: [String: TimeInterval]) { + let cutoff = Date().timeIntervalSince1970 - maxPersistentAge + let limited = entries + .filter { $0.value >= cutoff } + .sorted { $0.value > $1.value } + .prefix(maxEntries) + guard !limited.isEmpty else { + UserDefaults.standard.removeObject(forKey: storeKey) + return + } + UserDefaults.standard.set(Dictionary(uniqueKeysWithValues: limited.map { ($0.key, $0.value) }), forKey: storeKey) + } +} +#endif diff --git a/SnipSnaps/SnipSnapsApp.swift b/SnipSnaps/SnipSnapsApp.swift index 339854e..eb12019 100644 --- a/SnipSnaps/SnipSnapsApp.swift +++ b/SnipSnaps/SnipSnapsApp.swift @@ -13,6 +13,9 @@ struct SnipSnapsApp: App { init() { PhotoReviewHistory.compactStoredHistory() + #if os(macOS) + FileReviewHistory.compact() + #endif } var body: some Scene { diff --git a/SnipSnaps/Views/Files/FileReviewSessionView.swift b/SnipSnaps/Views/Files/FileReviewSessionView.swift index 38edefc..a95fbc7 100644 --- a/SnipSnaps/Views/Files/FileReviewSessionView.swift +++ b/SnipSnaps/Views/Files/FileReviewSessionView.swift @@ -24,6 +24,7 @@ struct FileReviewSessionView: View { @AppStorage("reviewLimit") private var reviewLimit: Int = 20 @AppStorage("totalDeletedCount") private var totalDeletedCount: Int = 0 @AppStorage("totalDeletedBytes") private var totalDeletedBytes: Int = 0 + @AppStorage("reviewMemoryOption") private var reviewMemoryOptionRawValue: String = ReviewMemoryOption.thirtyDays.rawValue private struct UndoStep { let item: FileItem @@ -31,6 +32,10 @@ struct FileReviewSessionView: View { let index: Int } + private var reviewMemoryOption: ReviewMemoryOption { + ReviewMemoryOption(rawValue: reviewMemoryOptionRawValue) ?? .thirtyDays + } + private var current: FileItem? { items.indices.contains(index) ? items[index] : nil } @@ -343,9 +348,10 @@ struct FileReviewSessionView: View { let folders = folders let category = category let limit = max(5, min(reviewLimit, 200)) + let reviewed = FileReviewHistory.reviewedPaths(memoryOption: reviewMemoryOption) Task { let scanned = await Task.detached(priority: .userInitiated) { - FileLibrary.scan(folders: folders, category: category, limit: limit) + FileLibrary.scan(folders: folders, category: category, limit: limit, excluding: reviewed) }.value await MainActor.run { items = scanned @@ -367,6 +373,7 @@ struct FileReviewSessionView: View { case .keep: kept.append(item) case .delete: toDelete.append(item) } + FileReviewHistory.markReviewed(item.url.path, memoryOption: reviewMemoryOption) dragOffset = .zero advance() } @@ -384,6 +391,7 @@ struct FileReviewSessionView: View { case .keep: kept.removeAll { $0.id == step.item.id } case .delete: toDelete.removeAll { $0.id == step.item.id } } + FileReviewHistory.unmarkReviewed(step.item.url.path, memoryOption: reviewMemoryOption) showSummary = false index = step.index lastUndo = nil diff --git a/SnipSnaps/Views/Files/FilesView.swift b/SnipSnaps/Views/Files/FilesView.swift index eee23ff..bb2bf23 100644 --- a/SnipSnaps/Views/Files/FilesView.swift +++ b/SnipSnaps/Views/Files/FilesView.swift @@ -4,9 +4,14 @@ import AppKit struct FilesView: View { @StateObject private var store = FileFolderStore() - @State private var counts: [FileReviewCategory: Int] = [:] + @State private var counts: [FileReviewCategory: FileCounts] = [:] @State private var isCounting = false @State private var selectedCategory: FileReviewCategory? + @AppStorage("reviewMemoryOption") private var reviewMemoryOptionRawValue: String = ReviewMemoryOption.thirtyDays.rawValue + + private var reviewMemoryOption: ReviewMemoryOption { + ReviewMemoryOption(rawValue: reviewMemoryOptionRawValue) ?? .thirtyDays + } var body: some View { NavigationStack { @@ -46,6 +51,7 @@ struct FilesView: View { .onChange(of: selectedCategory) { _, newValue in if newValue == nil { refreshCounts() } } + .onChange(of: reviewMemoryOptionRawValue) { _, _ in refreshCounts() } .onAppear { refreshCounts() } } @@ -153,7 +159,11 @@ struct FilesView: View { Button { selectedCategory = category } label: { - FileCategoryCard(category: category, count: counts[category]) + FileCategoryCard( + category: category, + counts: counts[category], + memoryActive: reviewMemoryOption != .never + ) } .buttonStyle(.plain) } @@ -184,9 +194,10 @@ struct FilesView: View { return } isCounting = true + let reviewed = FileReviewHistory.reviewedPaths(memoryOption: reviewMemoryOption) Task { let tally = await Task.detached(priority: .utility) { - FileLibrary.counts(folders: folders) + FileLibrary.counts(folders: folders, reviewedPaths: reviewed) }.value await MainActor.run { counts = tally @@ -208,7 +219,8 @@ struct FilesView: View { private struct FileCategoryCard: View { let category: FileReviewCategory - let count: Int? + let counts: FileCounts? + let memoryActive: Bool var body: some View { HStack(spacing: 16) { @@ -224,9 +236,15 @@ private struct FileCategoryCard: View { Text(category.subtitle) .font(.subheadline) .foregroundStyle(.secondary) + if let summary = countSummary { + Text(summary) + .font(.caption.weight(.medium)) + .foregroundStyle(.tertiary) + .monospacedDigit() + } } Spacer() - Text(countText) + Text(displayCount) .font(.title2.weight(.bold)) .foregroundStyle(.tertiary) .monospacedDigit() @@ -236,9 +254,19 @@ private struct FileCategoryCard: View { .background(AppColor.card, in: RoundedRectangle(cornerRadius: 16, style: .continuous)) } - private var countText: String { - guard let count else { return "…" } - return count > 9999 ? "9999+" : "\(count)" + private var displayCount: String { + if category.showsScanAction { return "Scan" } + guard let counts else { return "…" } + let value = memoryActive ? counts.notReviewed : counts.total + return value > 9999 ? "9999+" : "\(value)" + } + + private var countSummary: String? { + guard !category.showsScanAction, let counts else { return nil } + if memoryActive { + return "\(counts.notReviewed) not reviewed · \(counts.total) total" + } + return "\(counts.total) total" } } #endif diff --git a/SnipSnaps/Views/Tabs/SettingsView.swift b/SnipSnaps/Views/Tabs/SettingsView.swift index 4259b9f..50fba42 100644 --- a/SnipSnaps/Views/Tabs/SettingsView.swift +++ b/SnipSnaps/Views/Tabs/SettingsView.swift @@ -211,6 +211,9 @@ struct SettingsView: View { similarSortOptionRawValue = SimilarSortOption.recent.rawValue reviewMemoryOptionRawValue = ReviewMemoryOption.thirtyDays.rawValue PhotoReviewHistory.clearAll() + #if os(macOS) + FileReviewHistory.clearAll() + #endif totalDeletedCount = 0 totalDeletedBytes = 0 } From fd76267d18f93d5e4ca21dfaaf05a53183042f0f Mon Sep 17 00:00:00 2001 From: Nick Reisenauer Date: Mon, 22 Jun 2026 14:43:56 -0700 Subject: [PATCH 09/11] docs: update macOS port plan with progress log at pause point Records what shipped (Phases 0-2, 4, 4b + cohesion), deviations (skipped Phase 3, Form crash fix, per-SDK entitlements), verification reality (macOS green; iOS unbuildable here; Photos lib empty; destructive paths not driven), and what remains. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/macos-port-plan.md | 40 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/docs/macos-port-plan.md b/docs/macos-port-plan.md index bf6f028..f313f2c 100644 --- a/docs/macos-port-plan.md +++ b/docs/macos-port-plan.md @@ -1,9 +1,45 @@ # SnipSnaps for macOS — Implementation Plan -**Status:** proposed (planning only — no code changes yet) +**Status:** in progress — Phases 0–2, 4, 4b implemented on branch `macos-port-phase-0-1` (local, **not pushed**). Phase 3 + a few follow-ups remain. **Target:** native macOS destination on the existing SwiftUI target **Distribution:** Mac App Store + App Sandbox (decided) -**Author:** planning doc, 2026-06-22 +**Author:** planning doc, 2026-06-22 · last updated 2026-06-22 (pause point) + +--- + +## Progress log (pause point) + +All work is on branch `macos-port-phase-0-1`. Commits, newest first: + +| Commit | What | +|---|---| +| `9f7c826` | Phase 4b — Files "Remember Reviewed" (`FileReviewHistory`) + duplicate detection (size-bucket + SHA-256) | +| `b902724` | Files↔Photos cohesion — shared `reviewLimit`, lifetime `totalDeletedCount`/`Bytes`, post-review count refresh | +| `2a684b7` | Phase 4 — on-disk Files cleanup surface (`SnipSnaps/Files/*`, `Views/Files/*`, macOS-only) | +| `5259bf4` | Phase 2 — Similar/duplicate scan on macOS (shared `CGImage` core) | +| `fd8ee7b` | docs — record the Form layout-cycle crash + fix | +| `7647f1a` | Crash fix — `.formStyle(.grouped)` in Settings | +| `45264df` | Phase 0–1 — native Mac target, sandbox entitlements, UIKit-only fixes | +| `1129e0e` | This plan doc | + +**Done:** Phase 0–1, Phase 2, Phase 4 (incl. Duplicates), and full Files↔Photos settings/stats cohesion (the original plan folded Phase 3's keyboard shortcuts into the Files review early). + +**Deviations from the original plan:** +- Built order was 0–1 → 2 → **4 → 4b**, skipping Phase 3 (polish) at the user's request to reach the Files feature sooner. +- Hit and fixed a macOS-only launch crash not anticipated in the plan: the default columnar `Form` style → AppKit "Update Constraints in Window pass" abort (see risk #10). Fix: `.formStyle(.grouped)`. +- A separate per-SDK entitlements file (`SnipSnaps-macOS.entitlements` via `CODE_SIGN_ENTITLEMENTS[sdk=macosx*]`) is used so iOS keeps its own; the project already had `ENABLE_APP_SANDBOX=YES` / `ENABLE_USER_SELECTED_FILES` build settings (flipped to `readwrite` for Phase 4). + +**Verification reality (this machine):** +- macOS builds verified green at every phase; app launches and the Files surface works live on a real Downloads folder (real scan counts). +- **iOS not buildable here** — the iOS 26.5 platform isn't installed in this Xcode, so iOS was verified only by construction (changes guarded/behavior-preserving). Build iOS on a normal setup before shipping. +- **Photos features not runtime-tested** — this Mac's Photos library is empty (0 assets), so Similar-matching accuracy on macOS is unverified. +- **Destructive Files paths not driven by Claude** — Trash, duplicate review, and remember-reviewed skip were left for the user to exercise (avoiding deletion of real files); they compile and the app launches. + +**Remaining:** +- Phase 3 — move Settings into a macOS `Settings`/⌘, window; Photos-side review keyboard shortcuts. +- Near-duplicate *image* matching for Files (reuse the Phase 2 dHash+Vision core fed `CGImageSource` from disk). +- Runtime-confirm the destructive Files flows + Similar matching on a Mac with a populated Photos library; iOS regression build. +- A macOS app-icon slot in the asset catalog before shipping. --- From a9339819fdb8d076332707a76c300a197ecfac3a Mon Sep 17 00:00:00 2001 From: Nick Reisenauer Date: Wed, 24 Jun 2026 18:07:40 -0700 Subject: [PATCH 10/11] macOS: native UI/UX & desktop pass (sidebar, menus, keyboard, Liquid Glass, Finder, bug fixes) Make the Mac build feel like a real native app rather than a ported phone app. Bumps MACOSX_DEPLOYMENT_TARGET 14.0 -> 26.0 (iOS target stays 18.5 - they are independent settings) so Liquid Glass APIs are used directly inside #if os(macOS) with no availability gating; iOS is untouched. Shell & window: - Replace the iOS bottom TabView with a native NavigationSplitView sidebar on macOS (Photos / Files); iOS keeps its tabs. - Move Settings into a macOS Settings{} scene (Cmd-,); add default/min window size + resizability; Mac title-bar Refresh; persist sidebar selection. - Replace deprecated .accentColor with .tint. Keyboard & menu bar: - New Commands/AppCommands.swift: Edit > Undo (Cmd-Z), File > Add Folder (Shift-Cmd-O), a Review menu, and a Help menu wired to the real support/legal URLs, all routed to the active review via focusedSceneValue. - Keyboard shortcuts on all three review surfaces (left/right/Delete/Space/Esc/ Return) on hidden buttons; Cmd-keys owned by the menu. Finder integration (Files surface): - Reveal in Finder, Quick Look (Space), Open (double-click / Cmd-O), right-click context menus, drag-a-folder-to-add, a sort menu, and Show-in-Trash. Liquid Glass & visual polish: - Design/GlassStyle.swift helpers (glass buttons, glass info-chips, hover lift + pointer cursor); adaptive AppColor.cardEdge; monospaced hero digits. - Fix a Light-mode bug where the window and card colors collapsed to the same gray (cards were near-invisible) - now a proper recessed/raised hierarchy. Bug fixes (Files engine + counts): - Skip iCloud (.icloud) placeholder files so a scan can't trigger multi-GB downloads; use on-disk allocated size for "space freed". - Report the 50k-file scan cap via ScanResult.truncated instead of silently returning an empty result. - Make scans cancellable; harden security-scoped bookmarks (preserve transiently offline grants, allow removing dead ones, recover an inaccessible folder via re-add, surface an inaccessible warning). - Fix a HomeView count-cache generation race (cross-platform). - Surface trash/hash failures; snapshot the Remember-Reviewed option per session; bucket duplicates by logical (not allocated) size. Accessibility & icon: - Honor Reduce Motion; VoiceOver (hide the decorative count, merge cards, add Files swipe actions); Dynamic Type growth; localized screenshot-name detection. - Add a macOS app icon (squircle generated from the iOS artwork). macOS build verified green and launches. Not yet runtime-tested on a populated Photos library or a real iOS build (neither available on this machine); shared- file changes are #if os(macOS)-gated or cross-platform-safe. Co-Authored-By: Claude Opus 4.8 (1M context) --- SnipSnaps.xcodeproj/project.pbxproj | 4 +- .../AppIcon.appiconset/Contents.json | 10 + .../AppIcon.appiconset/mac_1024.png | Bin 0 -> 345357 bytes .../AppIcon.appiconset/mac_128.png | Bin 0 -> 10064 bytes .../AppIcon.appiconset/mac_16.png | Bin 0 -> 679 bytes .../AppIcon.appiconset/mac_256.png | Bin 0 -> 28224 bytes .../AppIcon.appiconset/mac_32.png | Bin 0 -> 1636 bytes .../AppIcon.appiconset/mac_512.png | Bin 0 -> 91948 bytes .../AppIcon.appiconset/mac_64.png | Bin 0 -> 4003 bytes SnipSnaps/Commands/AppCommands.swift | 110 ++++++++++ SnipSnaps/ContentView.swift | 100 ++++++++-- SnipSnaps/Design/AppColors.swift | 17 +- SnipSnaps/Design/GlassStyle.swift | 67 +++++++ SnipSnaps/Files/FileFolderStore.swift | 51 ++++- SnipSnaps/Files/FileLibrary.swift | 87 +++++--- SnipSnaps/Files/FileModels.swift | 55 ++++- SnipSnaps/Files/FinderActions.swift | 27 +++ SnipSnaps/SnipSnapsApp.swift | 15 ++ .../Views/Files/FileReviewSessionView.swift | 188 ++++++++++++++++-- SnipSnaps/Views/Files/FilesView.swift | 79 +++++++- .../Views/Review/ReviewSessionView.swift | 180 ++++++++++++++--- SnipSnaps/Views/Tabs/HomeView.swift | 69 +++++-- SnipSnaps/Views/Tabs/SettingsView.swift | 15 +- docs/macos-port-plan.md | 20 +- 24 files changed, 970 insertions(+), 124 deletions(-) create mode 100644 SnipSnaps/Assets.xcassets/AppIcon.appiconset/mac_1024.png create mode 100644 SnipSnaps/Assets.xcassets/AppIcon.appiconset/mac_128.png create mode 100644 SnipSnaps/Assets.xcassets/AppIcon.appiconset/mac_16.png create mode 100644 SnipSnaps/Assets.xcassets/AppIcon.appiconset/mac_256.png create mode 100644 SnipSnaps/Assets.xcassets/AppIcon.appiconset/mac_32.png create mode 100644 SnipSnaps/Assets.xcassets/AppIcon.appiconset/mac_512.png create mode 100644 SnipSnaps/Assets.xcassets/AppIcon.appiconset/mac_64.png create mode 100644 SnipSnaps/Commands/AppCommands.swift create mode 100644 SnipSnaps/Design/GlassStyle.swift create mode 100644 SnipSnaps/Files/FinderActions.swift diff --git a/SnipSnaps.xcodeproj/project.pbxproj b/SnipSnaps.xcodeproj/project.pbxproj index d789fe3..17b86bb 100644 --- a/SnipSnaps.xcodeproj/project.pbxproj +++ b/SnipSnaps.xcodeproj/project.pbxproj @@ -309,7 +309,7 @@ REGISTER_APP_GROUPS = YES; SDKROOT = auto; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx"; - MACOSX_DEPLOYMENT_TARGET = 14.0; + MACOSX_DEPLOYMENT_TARGET = 26.0; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 6.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -351,7 +351,7 @@ REGISTER_APP_GROUPS = YES; SDKROOT = auto; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx"; - MACOSX_DEPLOYMENT_TARGET = 14.0; + MACOSX_DEPLOYMENT_TARGET = 26.0; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 6.0; TARGETED_DEVICE_FAMILY = "1,2"; diff --git a/SnipSnaps/Assets.xcassets/AppIcon.appiconset/Contents.json b/SnipSnaps/Assets.xcassets/AppIcon.appiconset/Contents.json index 3d184c9..853f14c 100644 --- a/SnipSnaps/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/SnipSnaps/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -31,51 +31,61 @@ "size" : "1024x1024" }, { + "filename" : "mac_16.png", "idiom" : "mac", "scale" : "1x", "size" : "16x16" }, { + "filename" : "mac_32.png", "idiom" : "mac", "scale" : "2x", "size" : "16x16" }, { + "filename" : "mac_32.png", "idiom" : "mac", "scale" : "1x", "size" : "32x32" }, { + "filename" : "mac_64.png", "idiom" : "mac", "scale" : "2x", "size" : "32x32" }, { + "filename" : "mac_128.png", "idiom" : "mac", "scale" : "1x", "size" : "128x128" }, { + "filename" : "mac_256.png", "idiom" : "mac", "scale" : "2x", "size" : "128x128" }, { + "filename" : "mac_256.png", "idiom" : "mac", "scale" : "1x", "size" : "256x256" }, { + "filename" : "mac_512.png", "idiom" : "mac", "scale" : "2x", "size" : "256x256" }, { + "filename" : "mac_512.png", "idiom" : "mac", "scale" : "1x", "size" : "512x512" }, { + "filename" : "mac_1024.png", "idiom" : "mac", "scale" : "2x", "size" : "512x512" diff --git a/SnipSnaps/Assets.xcassets/AppIcon.appiconset/mac_1024.png b/SnipSnaps/Assets.xcassets/AppIcon.appiconset/mac_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..e35354331c9dfa7aea4120264258d77978bb74b7 GIT binary patch literal 345357 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�r@7v{|>?_A~BKDezLAr0If;xe; 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%0Al+u}aCo{d%!%DtkKM^n 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

8I?I<7 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%0ALrns_ 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

-u!13TP`I2 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 literal 0 HcmV?d00001 diff --git a/SnipSnaps/Assets.xcassets/AppIcon.appiconset/mac_128.png b/SnipSnaps/Assets.xcassets/AppIcon.appiconset/mac_128.png new file mode 100644 index 0000000000000000000000000000000000000000..cf22bdde5d98e4dbb5be72ad836273d86924c049 GIT binary patch literal 10064 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 N002ovPDHLkV1gVqMkxRQ literal 0 HcmV?d00001 diff --git a/SnipSnaps/Assets.xcassets/AppIcon.appiconset/mac_256.png b/SnipSnaps/Assets.xcassets/AppIcon.appiconset/mac_256.png new file mode 100644 index 0000000000000000000000000000000000000000..ddc5ed21e28a9167f8216980f2937012b63eba5b GIT binary patch literal 28224 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 literal 0 HcmV?d00001 diff --git a/SnipSnaps/Assets.xcassets/AppIcon.appiconset/mac_32.png b/SnipSnaps/Assets.xcassets/AppIcon.appiconset/mac_32.png new file mode 100644 index 0000000000000000000000000000000000000000..125530d29491fe74da221ef0f3f927aa02844d07 GIT binary patch literal 1636 zcmV-q2AlbbP)OD1R2Fb5fYyg7d9NQKtdciz?qNBDpELb z;uR(m=>aG^{7kP*^dx<^LS5s3{etLS^{g1|(o}PA7Q&WDo|9A3E*o?Xk?5bcNiNNX} zy0-xsEJ#kBI(622|78(*!pxFg!0sg`B88b1K}5*&{Cua=IeX*AjoTYRge?FX&1Uo0X_}tN^Slrd$4;Khe?bk4 zW@ehE=?l$f^Ebd}snTKq4l2R{Ix#WvwKPr7WLZ`KiJ5sbb8Dlr>_XXfNx8i52<3_c z^N1u_mKAB5K0h%r@pV84#0&tFlamJcBuQRWRR!GE(3^OC%uqFM4S$F-8DTAzw!PL2 zAy9B=`68kbbBR+`O_JnA;MK{=NgafJkdK2WPoBIGLU>{TVx#d;uFy+HSvdUzo__9G z+C#nqP{!{s+g-e+O5ts`J5>WqJML#fu*Y<^kErfyB&$s%|2l zi6`WXtc)Dx&hszx!>^p+)8id*jx;#Z;0a;y>`3}^-Z=#0+lN2N&n|s|C$IjL!jEBQ z9!LlJHv&Laan7NthzKSQpD)oHo8;<8U*c0w9pv=rUFMc*)B+>{f;Z}^5xfz6HJA8` zEk{O-lP#q*VNg+3aMxuUo!1r`NYSI$I?h|CUxu{JlS3W4r9-1)suf_APS5D(23F0P zDP|D^F3e`s7cQa_FpXQyZ3ZwfZe|s!%8dJuf1WaJLtN%a)9B?&UMj1Fk`+oKk?)`P z%)A56B3YpnrJ^y?$vl_dT3~2-mQn(?CB1tC&`9(tS@S65J%;LVqFoXs(o7;FNo2GZ z`QtU=^~;X=6{TH^IIDo6k+-{nx!D^uvUwt*ADPVn!p;Cdw4_X16hrR;&50;~pA+hd z<9_D2)Ah_P1+H}hz7~1uwZNaQ8{hnx^5HQBHLffM-krP5(by#>kKuOMS+_+%RjcsF zoNRcUn6@C#IWnTO(uip!kw{IHs8u?mMUJ;h4i87XDOstAMc%vz@y;b2ifUi?UJ)3u zU#TJx!!S4pWzIA2jeKHUS&fcH8mT2EY4DsqH^kVG@{=zXB*BxLqnml!DZF`Wm9TIb z6<>v)?NzXI3IJ0hA3lt!f+&X?%Ka|nCUi@~Ipe^P^1;!P&zvw;a--W78Yv_mmWqTc zbN6X1%@QR6RZMtT4j3w)?xCk4MnZ@jtSeb5Ac875fu#(-@sW&?x?^$Gkp!iT;KjJx zZSeNZS?a6zh@pxA$ir0uv7k(wl=TBpWQ^9T{P*&z#PXubeO4%5s?y8*^S#1I$(dbA zd2sUzNnA#ewfyf-LIYw!Q6D3wEktvcSB<;NM#EQipSo()oDxuKE>d%m)G5O*W1(p9 z>faWrzws+@=_cd*r+^AT-h3bC00YV#0RvefguvEr+k2_Uk5mJUY!06e(H!Pmaa=+afn zv;|sjI;!^qpk@|L6%BP7w=U4T`BzrQp8>PVXpdhbI~6#tx`pZ^l@4%MAu zTU#EIBzdacZolHaf3E-W?p{BHNIzvU#tWTJ=UYWl{F~~2U^{u`fCLzCwOU^dA$(3m z-rv8NJc{wc%;w6n{KMkn;xB<)edB8+-0f->`oE+75q4PjFj4{!fOn}pUh{k}00Y_i iQu1hGZ1DR3O8x`qnXEZ&d4DYc0000HvTN{)hqKLcwpx z9wTS~0swMvUTJzHZC`u-u#j_mjC<4H2>Td?8`agtN6$+i--GJunbfS8ujImb`c#sN zE`%nVRH+Ryo{gY-q~GpP;?y` zTKKyI-Rc+A)!2+Z@fs>T&FL$qJ$FdDyZ!kE`&!DL!NSDQi)`gmTG*t@E$J0z!`zkq z2upCJu&|+xH}vf2>Vt0yd(>`%MD_>;@Fy&8gX@BOpf`v1%7EhW%n#6UZCTeC4x1M# ze-t*OEP8gr1I#6p%Zz>XE282c7gZI1rAlap?i~CtZA9Ieiu)*F!|4jfXCzadAe_~d zSRvay9cso6qmT^dSd?A|ZJ-@??2N=%48%YOz9bi}QyO78`S&vrS3XdCKGguhft)74D8U$ES9 zohp1@o4#SmFxAr&HaC^d(-@bLy2L)Is(CVB4e{+~i(Z10AhAU5c9bE_zr#^RR?=nc zAG=T@+jQOO?$R>CayX?>EsU%lJA7(_weLK3^mh+uzy8HPHJMoqIlKRRDcbajN?6mc7S&IZrI|bRn^^OFP^e3OzFteYZ zs|t@!|KD&bD_-E>L8?$dS)}N&7sJ|DmgQFzvW%WLWH97ujN(Y)K(6vksQF>5u+~PB zkCev@#h$aDE!yrPAmgWWs}t$7G-J9wQE_|8=G6}7`N%Rr$+>s zzQz6~N4l09X&fq4uIBj}kwo!v6N1(2lueDs(80=Jx<9t0DMET0PMi12tQ5vom3`uU_L!xJFK94y7LB4Dyjvz%=g#F`gojQ+#Ye@7(=?5od2wk=I|EwlPJ_1y9cyY+ibm)q}o@&v%IyI*M8Lf@&5@qNinhd@ zn(aGbdzEZrIP1Lueo+Z|kn0x+Dqy$%_U01Dsz2#sBu^tJr6_-MsnK}vnX6I8++HdM zqOK@8-NKUlh&})L*I~N6iSdt5#n?v51;rF>6<}?4lLp_{=>EF-J~%A@0Mkkdl=Y7F zZ9{#4*i{*wc+B`$c%@wEQf2vtu)v9U88xYrlxMU3#(@nF={?_(pfiP zChZf+4yyE>uTkLJ_Y%o|lKE%EU62tJ85Ji;sqZ$*wRC)WdNjJJVGQh$4yN73Cku+8 zS=@OQHFGuxzqO)lxh*m-K6_;;KC^WK#tP+__-0*7NExnU&!K8(+eeJdjOfZjR9jrm z7V2dQX@}G+Va|-1`#We*0)k@b%lLDjTpht&yUU+ z$_+|b83XNFdpTX}oJvj zGMZzT0YB0N9vO%)UO-ZOT0X0$mg~KiInZR6@vx?gRf)OT*(QvPVr6?fyYYJ=CjjtM zKr(p3_CjPp0nzSig|!_Mxg#s~M!$0<6~C7PI5ND+Yks{wnTjzEDLEL?P`OTwh=@=j zlRkL%#s#hy_oENhZVYLPQLEFKiq)J7Dzb>3qR0E#TsEC=hojV6p=Y2wCV-=2G*=PN z7aWCbH3)1`=H9IH`&G1cduja=9e)?=5}zhuE?(y5=0Mt`%jii_Odj@!IT4UACH!r4 zuBrI-=6SrpYyI|>;zpqM(ppA*kplkc7&&Jgb0dt{Xgr&}T)sG3gO{-Ps(=pgwEaG% z=T~m5(o)D$M#fPGt?%+$Yv7x%+Bd8V#G+^n^!|DnzcP2ycayt?%-BLQatK`FdA-4^ zZxBpYhWjVL4^GBRZs85rr&DtPH{e*-oyd#jWE>!UhL;I6A3@o{?4AFhwr}!&G!-vq z9tPJ)gZZbL8jrEfUi7>B?Sb(5CoKKE)VSDPfHxzb6{i>cp2)+8l`2Tust< zGrVyuZ!`wCdP#ZxYc0il7yb#duR%pcrCLm%V|mN+jLr%-)AH877pr^oJ)2jssujTA zJe!IyrA0-DFjQy1^v>ir265aL<=2t(BGj{TaOu zzq~ocJ5=IkPL#$3+$HC@kqlr8D!c8Nl?r2$Zm_dO6f=z%BQ8y3 z0+9VDCa_g~=5?Bi+{u}~qP&7&USXps;TN-KO=m~fez)$VLu(;j7!qN}-N6ESwL+na zCcPCb;`SEVvCH(l&ypE)1~r^2X1LUI44b4Svy=|p?`R>PaI!~#tjTOO@k=hd0*0v= z#$OV_dziavD=x1@8u9G0 zWv}ADtSw{_Z1OL=Mru{VuW^CDB&L=luGdFP2j^V;3YaU7f=|N#m|vpPu)MtOiFx%$ zsG>1%`*BrWm?(kX0C*2zZLk&(m9$BQ5Bj*6pIw1TvparAg&zVvmN;8guloX_!+cglC(buqsgU&6W zs$B?U@&VmmmH^!fg{*IS%@Nl7b!A@QROD!k*Vi7a>%?ydQc@1L-7v;>9P^&LoSicv z>wtm$W|g1cgK=BdW2&dKR>sS^dRjgSi$BzNb8{wNarKSKE`rrHCA9s5N?Pdswd0=x zNvGI%h0Wxm94I0TZmXvn$i=z^A$6zFKUN0_G4Y*wR2ApKL;>_7ns2s?#6|^9Zv1TQ zC4O8Bl>0#)H}Y~)&`o`PeG=n)XA(lm$`Ib@^3*A@&&^m+W=j^eeQUAw)>GN(fAi z@m`O(viv;-(h^Q|fVV2(Gm1q%F1DMnga%laPsDyf-R_RRC--- zY)`Pa3AfPc`iJM_)(P6x=%^1Va2sfq>U#GZL7(g#9VF6;xG*P*=VCTP)&A zrU6<|!Cih%7bd9}*Wn_3oto;sTboKA@z%R-Vc*3ZOSZas28V9ozAOcBx&zco%ts1f zj9z>gc17acw7gq8d5jwYP-zncw?!Oy_*{fArJOHz$1vTRg8H%Dj{jFkF5qze%IIaY za&@W`@#{Qxwm)V)N^f$vCXKif_q2PH$n1i1eod5O$L)5UU(%FQ|`t!@nH z)AK>qw>36e;R_I{e|!@AI@*boO)BzFS&xUYk&}~+&?63w!%cK{vdWmi(TbsV(32>U zO4w#ykyoQ}H>#n&{&Ff6esgh4)Pl)v${uxpG)Qt&hYC~G%sq)T+V^^!eAut0nZp58 zoDft{o7tY&p639q#GO|mlI0U9|7KrFb*ivOzLM`}rz=;xSGAA@E1bnUCZRG#1tY%l zp6lq|LzmjH=+){}e$>IYkvo7sItMYr!*{qsS_s+43b-6DcQ;?{x;I}&5eK)?g!eW_ z>C&#bRHdLk_|j^c`PWpYRpt{AS*>yn>{Ner8-o)|f|1*;B6`q12kPqcX;9Zo*L`L; zyO893$CvYW?YE0z_8)(LkOa3#$ z2c&10*Y7~`{4LOQ5HUCDBUFhvz~cVh=byKS-(^C#LxHI2_rw_O#4k~%K~#}u6Z%`U zm|!%OzXbCQXdwe64%#2Uow><<9C#8G0kRRE$@t1ejZt{NG!reQ1$cSitifn@O3fEu1+6ETTFaLqHh02iqCe^#uci~AG-2)36aqpX}3kmR^gNY3n;b-YI zgAQs;*eaq|Xn*VS-&2;HLKfe?J=GZ%)tmCLW%!opZ>{Ido8}p6k;0x=Qv@Sf-ne@e ztvzI2k=3$ex1sXS8^v}E+2gL6dJG@Ic zaX<%r2+6^=2|P7RX>5%fBV=pjx-`Sw1j5dL6i=NGYQYHl&o@*=!EFZ~SEmoaAdxaK zFo1tf2&*f~NWLi=6e=ss6SHu5=aW$QvfgW$%G=Ck|#QH^!Ll3o);PicY7T^=|dkA zBEEs5$z>Il(0tYYK;>%CL)4GTGK4>|b0_BSZyVEKgWhSe=TEo z^)1)cGnzx?6v4E!VWDpy508$Hn)uzVLEd6q{({>IOST2)wU6wA^z;6tOLM6|+Kwpq z>os9Mi;GGMz!!*VHFZSa$wUVFNf6hPcdOYqT#F*LgX@~~jP8izgETsuF+CtbW7uf z#a%HWAgxA_$aia3zw@VKbZF7#SNTtakiFdGyQkD)qO)_i>R3bH?MJ#dEH%%Lk290f zJbLrRWKDSiAfdfi`~oXv%UteHB}Sfdm;X(}gY*iVmfh7o%v`XBTJL5`y`m_cx~-v9 z0{c2@GPX)6!#e~JrMVqm1A(wQ^6j%Ah~I_W0$v#P)A066Hu>w#ee+j;NKva49C-|Y zXX@1PQ>z5`|cgb?BrxIwc^??(*%GV zi#c7T_AvBnh^GY(Ix%;3_3$F{+`J zEnDAI^(S>r-&Sky*Eh)>ZQsFZ6}mubj)e4uv-F#lJGSOVJSF|dP1Tt77!iFwkE|K< z_;v_g-vXmcdfxC^PD>NvaV2El4;gb))O^;scP#?;#hlA03T(m=y5v2y!5`Y5%Z1f( z3^W95AAUPyxp2Brw^&~8=@wO~^0cs?aBk2DRf^96#aj`~>CnaZ!D@WPs;|b0SECb1 za52TcJGK)1WJKX_x!9H;95$z(& zinb;ac&%=>pGAotc67flOMZc|T--DogBr=?&39w;VX*#3h^XpR;AtV+8ORChJ%nx2=KnqMVlB)m0f zVCk#(di>YIEu^Tc?*mYQ+71i6S9Z*qy$gpy5PcIE8{T;EBcO0o@%1etlMjRO6`N2* z=9Brg0v^KCL&2{503kGR0VIU2Rvg+ZOfVwa{+^^dv1~Xhg^8p1l?>{taOee&#);)@ z^#@oV`I0z0>5JD^p;i*WrjLs+Zv>anJ$=}!E}J`gtkGn)iAO_ckHx}?pXZjYd@i%Lt+ z-+W4d#l`?SXm+SVdpd|zWQ_4^hWiOVx$)4_s>Hs1|MSwrgXpl;#FB8AyGO#t=9j{l zfQ-Wb7;M=77;@+Kj4zQ6O~&~+Z2CX z%@fqhdbcH2haCp1!tUm>(&HZqo(Y)TF8V@)$7#dF=b|@G9E!x2h0N+s%QPcN*hz~P z77iM+!pdV$tFz-56Kn@8EXj=K+AUT#2k!vMXzsm*CEx?rKe3PLtgteb<385}*O=(( zGk}|8DZ%+`dn@#e?#DH#P@=T8I-J(v4kdDI74{?(74~P})P2+g4OxSyrM}5$&`Msn z^orW^WGyG?$QZfFuTEpyA8nT0HAUpQlfJ3Nr7r#lf%-JSDE|J}JFgjgLYxrAx9oCz zEj%;<&wkFT;gCL9&u-j@p!Z51s zV34eF@|Ae30nL$-^gh{%C;L6vq+~bf8P!(4+ZZTqX9cVqfQaDp$0UomOhqfSOhpXN zzF^~ar-GFRk%avnABh82eca@+Zl@AYh$Pgt9!e#jrIxd61irKo8lXyIu{8|NVmB#d zo@Bo;oT&Atj`td0>mzxTES4GjgD^Em^*>_aDA+=}+!Vp$Kv>Ub-95Xct#w>@-H*>b zfSFdjvM2vHpBxa9uT`B4M{Hjr!CIi13b)@j5?Ycujp!Cj6IRT&EiZ76^!F+-GhYF&O)|9|*v^+2NQPEXK_`=XEc-rjH^qzU~;U{fdm#d<9? z0q3f_*>dN0wT)Qfs?lwSwr^WPuPX_MOx9p7FPOyw9GKclY&`lZ^auVm*o{=&{=mNc zlf^Qav2dSBFdp^7LG8wi4oVcj0LfN{)41Wh5#-3Xs}YDKQoxmCqpMY1`j;tC!58O% zO0vijk-1Ug7Z8xpBg1aNkGVXu$`Re|c zgspVu^Y)MjsaV_=mfoWK^yPjLT5K?af&hqVUZL6~r7*UEYaB)6xkz)x5|le$WiR zunnf^>~=FpMDoIv_k>V~Dfc?&IM|%`hR>LC3-+RT`?hjvj_ZnI9I6A;0-f+_`2K$= zQ>~~ub^^A#k{iL!wx1Yc2C4v-3#!dwocIOprr^?P5l*{gGmf>q0C~$>unptF%bfvj zHqy4upRS4!Jvy9ar4FV5!|~Vu!mabxn>Xz!asp^7R>{3U279Z%%$6p5jC!65R;XmZ zu>MF7-pzKa1n9l}GqBI20uGocL;B!ugHOI&%xUkYZ+!@st5zTN`|i&P_TpFG>wW^~ zYKC|G_a_(DGhwF82T?MAUR(-ACPy-BoTh`FH9oet2ek=0epKGY#^ ztI&3L?Tzy+;@KI|lPpL{c;(1w2|r5DGNwBd!%+on(Kgi;g|wG8SBI%1KTbl|3%9rX z^seg^x3UdBt?{gIzW%i=zJs>B{XmQaWiouSEnB1j){~!~JGTelo1L8%8{Qb%eLB1g z2V1m6q1w%CuYS!#y7*-KwdkpM(2C|qv#aY1!L&Dmq{(Kh`iFl5d8}Tn8H>qf8M&4Hc5ZNzXU zgjzX4n!l(8K?MbdF8%i4hld1!LhajLJ)OMcQ6&v~&|V8PC?~ec*u9yQlgUJ zPQ13{`cx^98XUe@aT?a_%K>QBwCVR`i#jG;RBpL0BcQIV3R0+5O+Vwly!N|i3Ntrf z@{PD`E(@_>n(|M>@kQF&e0?=_Dk*C#@kb^ugH~NGZ(mc)g(kU5$#_CL4@bPi;CAzP zu~oij_J7#R#W$wMThkXaZ4)dqz-IXw#yHriKeaZc6QfYN-rV~BGlLs&iX(m|aWppO z1*&MW;f)GP0_fSPSL2zE7B*lpm4-Zv7F^)Da6Y)CM%i0rGG~#gKXO*~M`ctc1o@n= zi7B$A9Gd-CP8p($V6VYJ(X4=?RWAohJoJg`VTg4tGqHe%QDof)2Cbd@U zJ)82lNdn9X3KWV;TFu95*gtYWl&vx%F2aP-*T!*RDW<$>?R(>wbiJU-f*tS#&Rv0G zF?=_?>7#ezPzd2?uzVZHLIo7HEfHB26|PMv+wraZhKUp&3IRgDJadsz023I$Gwxn4(^3D^bjqya~rIpCj+=APU(nH}*< zy6#TbMm?RyL7-q$PCy)i$V>gtV!+Y#GiiGJ*kZlg=320oM{S`;G*NJCMRlYNtp#7` zD7&@kXw5nWU*!*V+-u#;?Lctq;SfPo4Rc5aRZOtdjI*PnW=R z%RX;0)tk+&XBktCSlq>bMHfm-+b^eL~m8MO&DjrcR=h)23n3 zecmKIGy?hqO-~WB=hw^}VHO`!u`YfI&AtroJGY=D*Jvk&cZAI zA6Zj{+fm;l;d3u>-(XoHYA`lg@QQ#UNfa=qEToa~_@$|%uB_p{sEeugg;U7m&lCxq zK`$|9@k>4&@=_iM7TESc9t?V%%$E`BL>(zsML5{g^^SDRrE0@1^I( zm&e{TSE#%fdS3w67EKK4fhcM2A6vdk5__h}Z&Bf8?9Jt1%7Wupp2HZmT$5TRfc2(} z4Xz25yzEjDu;fftm;&b+z+040{xw8Iu;;t;phXT%Y+LSPrXp6p6?6WJ0GU#Y-9^D%My~8;ru_$`3Xz5<)q^y6aS>E6PQCNr1>y@LV5jVyU50MoI8!hq}7x@ zB`hYO1cvRJd2$oef9(ED+D(752b`d~w2#%|spfwR%7#$X9SJALt?+^v@b{YdV=}rt z;+NI!N?=J++wA(eB+?h*$HR(oLk-*Q}L#vy*lQFUcD zzkr2X{L7ddQJ{7)Y+Lb{9oa5a+l^L+Mfan)$AeRjhAUD*kDHuCIU)yKy* zPcWGK2ntKu$Yn878n}n6vHHrh{&6r#4&~(tHRN`uzNSysISecLK}n3ONcEm+UmdnN zUnQrRZm8$>Mx7~!nFq60&0CL`>7})9tH;P;MCl`bqb2HZ{%&$_Y$S1*M*kj}X+BWx zQ$;zX3p54X%o>mzdQ%|dQ(HS%thgIaF}#*+O<7gX_**S#b8QD9@A?xrUgmFkjc%PN zr--=k3W(oc9l^`MV=rp7xZmKC+0`VGJyXzQAyB-u@JkY{pYX=mzTdL^NOkL!Jj>4= z<|FYMs6z$S0L{cPfD_?9kfnfemu zSlU4UA$Hv7H}iZ64FRwMl&2hsM(lbrIWA~0dI`6gu302`Et!~aeTRoXfZg2p65#Up zmKtg7d%JrL!@wHV$@yxg+cvK_g#=gv=}bRAbiBo^9s{hmBK8vwHl}v%b-@!e;Oyac zw~Sq4lAvjR2P#CqoL2MwRhiwaCOQ^hkyf+xORrA~JHK&Gy_WkG{Yw85JPF-dkas_H zf~LnSv^(Uo^s=kCvtKH;Gs1f=*ycz)rie0dlO^<^a+M_q${cH%}@VIPee0BYAmezVO85ioXn#ZJ znuNjOH)iD&qT1ekidD({Bc%Gt>!R@R1=ENUsE2vSvb)`zAc&_1Yq!C_ZXKbQPkvJ} z5!^2`CSRe5o=$k>YX27%o=JcadVi@r%G_sfspe{zwqt)XOz>z?;hjU2-zdA6XOaGRT&;`c?bnPU&UNIc4@29EXYsz!d5Z&>eN>l2n{G7Ec zFUB4gu*|c!TGgH6t@?PyQ`6TRQ3g=X=XeDn-6bMyqx^`gxO`}a3xg4fuTF3^m8bxA zEOG{BYn+;HtN9abZ2h*I$C>4VbS)FtSTWO|p4c(XykdFX`IZrznr~6V~-p9JkjTxcdUQCI*Bz7pQ~xY^%rOJCVRr~R0W$Bltpmy_)7iWFAqq^ zP^CPB)20pKy89ljIqvD)Q1Z{Ad1{*d>z*VM7OcBa7Ib$QHtzq%HvuQOu-5q@vg{XD z-24^Sh3#BnCJw)|sQWgJZ)jMlJMK&7SFTau2(yPiOQ%2}fvVMe(UdRURJ**rlMPgQ zc1-^feh-f)8QO6f@IiT@_@9ZplibrfBsJqIw$la-U^rhvmX_ocrv z5&_9!CX!;)7?#flJ^pYr85p1wmW?3sPJ zU$3CvnwO`bEB7_vH^D5?ewMIEN1ruc+qfpKB(<9&9nTY&ynALwhGnop_J@uHBpXd1 zHb;*ieEI8}kx;{5rkE*8i7yIQM;TmpzBsnf{ikw5HvX%11<*;od1~l=b@}mZ?3Q!) za-|v3x?8PgpX4z6rlik#ZL@-Ln~|W)R>$~${JgiY`)gC8^*n~%7VC$n!16B3$Ktjf zzQ@v~{_Qz%2o|;dhuO4f%<g3hx zP2V=n0FNN2hKM^Tno_xDE;72p@Nfiy$p2l#j0cp`>bq7M5w-rm<}jYpg=r-WL~5;` znTFj?og46r{*{JA8Sjqjb1tb!QIayE$19)GhRN=S^s@%@D7UoMH8}_|LQ7>t(@O|r zIQkOAtv3=&XnpiS5t@uJ= z5tU$vm^RN{vZ%uV5+4AtBnkLUuy^AuBkut4X7_d^oSUz$qB$foYFA@EYuMKKeuFx~ zx|l(-N5UwDlgYw$?R`JQW>>!_&!S6jho_KJCTFZ{_O!|WUmux)`6jaIQIsOazCTpt zzQ;;23(?9O@wiI6B5WId&tc-4dpWsb;~D8ITkStiSlPlg_XpWkqo6%Kr?yxDh#pvFdz(A_RZ5vQzrHu7vkw#Yhvz-3(KK~&#Z-D*9 zUzwZDxBs568Db_gW?ij8lsSzLhcWezR616mj`CI0DD56P+6uD0DyLPwTKyF1_euvg zF;-dV?2maocqBT^+4bX|`!OC%m=YmF6FGXSn--Z>htY%-3PFY5dxjw zr2GNVl(0b_Cz?0n3TzVs1l%X8sM8i{;$pvbcv!snbq=@iHM6x(<%E(Eo<(nK!OO&7 zr4W51{mU4bW%|O_&bEJhR%yeyHeNw?2IQP|=n7j#g*t5d>x-5PANyyKloTPZf#dg? znFT^&4LDUh+XeqV>!MtE&>bXNm|V^F+G^XPg?4k*xE`g-!&hZoVtmj+`ls95CiNqH z#J+>7+77L}4`rHge#`Q7?plW*811zPG~X7RUzYAk!S>2T^tiS5>$YCv^M3g#XOiQ{ z_Wee7!;K2Cm*i^uJD@b%6VMmq{D9%}2S}VWG}%}oMQ4`2XiNGq>-Uu5tdI?6uV(|% zrkTO#CbP|-PhjRQV@v0&R&dJr)Eka88-kZOm%#FIj?YmKtCx{HqI_XQmBkR8^5_{t(Of zCPgB+dhTpWHM02k>p#@_!`t)EmIq4wYaFUMmPCbj2d%Z@0QL>MwI(d4mM4k>RbL7wWB8nF$Gv)$yB(5}agL2fuivq$@Ftyhf zzstwl)d2JZ4{0R3`qYyb=p;uympHg51KOJqbPWe%lXB_K)$zsvOE6b(>vRpOd##cO z+g@h>>)(Axg1&EZN`3dGoW4GGmnfsLql* zu2Qjy$dn&et@%*(f$`-wEw;boK>RJMC6(2TZ9v$d@Op)%`inQBp2|v!3^lztc$?@h z>wjSPMqMGZfsDWDhjLB~C`j%OQsVr|#~48ZiIEuNMBk3}&&=XV3x4gU^)!mT0bcZU zD>WRXq_!CB-BPD{K@(@K`OjaWbT#OhfwzTPQx=Bhyht_wmR%0h!#NV$_g}7!2!EsO zy*~?5lIi|o@%#CiWYt-2#U1bd1vTZSb>Y?;JX=_pQK&hT zk+%W8aZAv#PT4Phd;9XOq?kfQ_o7R<7 ze0edk>D+(XDzf4Os9aVI8yg}5hGVaAUMBxb0g5vRZe@FJew>!K6e>8UmJ9U$NbE@# zD@;2wd6F)*f1mUi9KYyWhO1t)e?w)Hq4ZBM-i9lX%_y^(>T5vVS#+>BBwi7kYLYH` z7AC&=`m11m<&}#esimuzAu^$~`l-(p>6h!F8a~_%J&Yez^8|KDY3gKHk!-(F0fnvy z^-dbYM?l9bAiIwV6OGMXNHLa!{np%+hhaoZBOwLsa?BN3D7yqMIUIJys|2z>!p<#v zu6P+Q4^lpSLTb}Ag;n468`Gn z5m6sB4?l~Yg*qWltKC1HJAGBRB2o2aCniIjvZ0Zok(}r_^oP|h8*PBZyfSTUpX3N4 zZ>DyS;8|Lcl0a|NevN243W_g9^;xlrf(gZC5i2*_)OTgn@itDgxwZ(eMfhcUXb_Gm z!9YHg@u8VFvB!t_ebfrZEqaRK23{P0e#-aS=mEFsu{>@uVwvbo%}BV^SkdUPmR9a1 z)BX%83FpbeR3!q-9bah4W#R8< zg?k)tFpTAZoD&BsP5bvlK5Y$Oua;l+^wq{95wEV_cRewD%3EmqTEJ}%qijM96+h_$FwV? z*bg1GFa$pqX`MD9-ysT!l+Oui#H#(R(ZZzysraC7>N*vH$lwPm;{FlF>wkatDT4iY zU~w;khCgfe!%VSaweaBCB|0M8^CDiaw|>UgTtNI`InrY%5Dw_j-nym@S+q2b!DzcX zWqO_?BuV(FTJu>T1fos?OP6y(9cwgs`;qksV@Nm~CR#_PPmS=ty@SS z1^-0@e<_Z^<%=hf@erSdR~!KkKg$q3E)q*@h(J7IenO7pKzd<1$YUYXa^>!O_0MF(Y|YF6U0a3X40*k> zXdJBuUMl2l!lj^ZY6))%;5kgrU$9&ZngVU@-iQQijzdYw^Iax zrk{F<#Mtp)ocYy>U*zw2&9>;fm{w;gP-mC2r%pqt@^JRKXLpR^zWGX7?v(wQY2Ttf z_pP}aiAvEr&MG(Jk;r3aNu4k|F3VOFSWO zM%RO?0`gk**4~L9Ghg>c=QwbCDD*L(6ohgUMYKPCtyGKh8{PO0*GFl_+Vip%W123= zebkB%lG_||7x~w2r+Ke$2;BtOj_Ib~M5<`m1XyY6y?P#zO!uUO*SGpM=C@B>$|N%+ z#5@7Az;FOf#dm+z#FX{X6tjSwz`&{;i`VSI(Z~#+A3E&W6--=nKI*poso$!CSlaVg z-?XC7q>|jdOr{6fxB^bNMyjzb1;3HB*MWj3n-YIa*B%~0ei9T>yC-MNY;KYci$ zIun!j>;Ou=Is68Eu+=BHk+mN*)}k}P&_ZD zXxq0(>Zip3h1lhXwyK)IZ7MRcqt*x9P1i%WXLjCeK+@8o~*%-}hkW z3{S-79fvUDXDs!6c3lvRs*oIK!dEY~rnNMoJ$l^R%TtW&C|&wRBf-LprRi4b_+GHZ zW(gvPwKwcp|2tW?IQc#1iZ|PGAq+3%--T1us6F;LWM3-2ts}jGHGlkspJSuBWQqBU z&zl0csB&YJv5_mxS50ofhxzU^^-WOVagWL6ScHEgJGbhv59#fo?N`kEnIV2pb)uhB zQD1SA=kKUi^qgBt)$}85YR^>4hQB;^RO9?gJ-UM*SrjS>b*DCC3~a2AURQkmuF+He zrPprgnmqWQfGJetgYp@hzC zybV|4s)z#U>>scBj&DPg8GiU!0{qW!Qu&mn*r)3ym|F<^dn?!j1KCf>+4Xy-7{ahO588n8`T24?G#=dr7k>davn8JJi1a9;0xIYhd{z%Oc0^xW~}R{rjwh zR#V9V#{tbY09UbSr`&1bf@U-XP5PjScORLOxcJy_OUY;Z-RB770R~aB2DB z!?XjkDU}<2!{&2}*qAL-)=}-8JQpwZM02NHIzKiSO=wFQVft`6UJlv*atr1c5uX&> zCPEJgMrnrR_b$rJnX0c-n31)wlbTg? z?nm;5!;dq(&lk=HxTi3CUMFRecWuMcUkniJo*bNB!f|St=L>LHx+&LR>M@pIiE93O zEXjp!Ev&vYpDPA@JNA+@NOXG}qTE-zZeiGu9ZUJr9+BcKG%@#tF56m7>UDhTRA4lQ zzWqXv@Nzhfk!8MkUhwYVB@}opcHB8t<2m5H|JUl4;H_0EhLStd+;^&rSt#8yWA4ZP z^Ip*BUGL`q8he zllN{ps-B7eq1_pX=q<9)i}xIi3JqQB*#1HEL%6AkPhlb75^ zysP(l?)|*B7(7`RkLgU;%vpYf`FitlI8sqi$ne` zHSaz06)AE&tFjcn=ixX^+11-yCVK%+&`@?Zt)Mt_(iEIofj9H%Z-gc~`vX&36jCo@ zek9e=zN{sR7GtaS=Q!Q9?F|^Lxne`Gb*lLJgx($xYY^af?qV@_$K@F?XtuN8u&;L# zQt#{gbv>_QmhMMWPFhT1QrVh?FD|_^(}YE!?D!iw3-( z=wwHeB-=N{s04U)vD;&Pvgld8XQ5iw^D)Ds?C`lqPsjZay3t|8o|B|0hqIaCz?Uoi zpssPUT7`FtNM6#L&0^|>dK#n|KQ#3BC9#V*k&QWaVaxS>om6xLT~V5^`BwJu`%~0j zX_^){FgdF1BAj4+%fNy&n`c5XXL+&FnuJkO1<4yfUY>V)cGCy=Sl+@vGzEQT8v~&W|PFqtk!Mt}!YXDL}+2 zdQ@UagiWkO^y*Up`2(o(@jdt@&f6Nt?6+bJBzdoq5@$koLi}MEKX}}@{2(zJ#6NQx zJ9$f*gq0Ti%jTO$KAm#kjpOBl|B~eCS*flk@vR#ESZ(aO=J|N(iTh{*RYuTvq`7`+ z(JT0+2?CC@n6t+YRxfX)8cr8dF~)dR`S^I@$|&8$yvGv~7@HK1V`-hK=zkBc65U5? z8mz)G=XCOUv~~C9DOA4j4i@mY3AuA~1D?G|ZD3?H&-)2vxg=zTWSn zfGB;qXZ{?peYiF=`TI*~3n%ka+_70417l6gbgmO8$sd}PsTl7)XL=YQ=O1vr_*8Osd#91VCm2rD%YVBeA;HFx%(8aoZEUCxfY>$%N2{#L6qMX zwn+I)_YIZiH9xNL>W6;{Z@urggJydmRN&OBetzNF1rq^W0cVE5|M|No_|W+ZSI6d1 z9|xQYc=VdB1X}SE-q<)1=~O7SoU`9DBbAJ`Z1ZORwqmWl-k^Jkmr1iEG#TAyU48yYk-sV^VxEjk~(37M6z3=mdF^QV}7X?_scb2o}^5=PdU>*K=93< zj5I+^uVCD$3E%(N6u<3*Q&f9|!oJ>;^s}ag+kND-=7U;mrqgbLnx|;B*8hRkGyv?d zC3Sx|g)QikT82_j_|6M&u?6$3d$)WcK|b`YE3$d`gIbDHHya zPfc*{Y>j$m4z^0TyAqD?0yJaXeBh&)o;(k#CXp9lQCdZvb_=u;V4tE@Gyo*!)>!u4 zJKD0V>-1Ks!=hGK_8m^k^bJ!F<>WdhoA=|z&-`iZKJ;l6?6AnsshTiiV=E&~L5wjI9zIp$4}5F_o_Y)qmrXb<9B4Mt%rHA~4@URC z8&r+KD-SV?Q`<&DMXCJ(D@m)^JB<08B=+5?w;S+RjgH!~Zlgu}hN*|%WEXp9--(w# z^QSSo``w_)4w&qhUO3dK8O>f6jCw-&vG-5$gHO${J@z~OJ&O!5D5a{?1UrwDX%hPZ z;LCLBBfwVxC(u)tre%|R0wSR}9v9jGi97)a%gljVRGetHRNKn9TI6-`Q>QT_G>a;}ul!tnyXZ)IulL3&T18wYi2U6^Z z+TKAu3WMWT>$j}T2Ub5K5EUrL*Kp+>-;Y;5`F}!HZh&Tc2K=R#hgGnq?5M^Ba1ER} z!T66pZq_MlR)^UD?%Oh z0yMcCnx{@BHt@r%=n{T!ETx z!XUc>EuBZYk9D!k4E27RmpACQIG@bo04%DI08`OGk#Uh~ZrwgsRv9hIsMUS)f(77; zx~AlIeaabw2C6@WOonG%CMgCoulI_`QSL8tPoVFr{4-tLKi6p9Q9^`9 zE=(w`#vNJ|Ks6zJ;GqiN|73;jG0-CgR?=(;bevctmSFADY6MgAXb^O)8jY{I)|ai& zI8k;`>*hbXi$6}|8KrSmfS3g&TRl~Nm{b-k?)NJm3_0+Mw zdc%hvtg^h!=8%Y=1Ubu7#!3FUftvFw$X`jR^eGuqo(|nMZLYF;?W~Q0MfwIs55;T@ zrXIfaUH>_*yz@7K#@k?+MaK|al41z~$hpA#J;qObV2XZ`b}zg73)bO`n1l6i4g?W- z#66@BLl+zoSZrqKRKK&=KbK$d~$yJy${q2r6 zR?CZW1zpZe%vDh^>Iv}0$7cA@xeC{tSDY*$SOw|C;8@v4H(KY)wxu|!boFbnGRi%_ zSuC0zCYZROAZZLnfXp8QCpYrT`uIHrl5boe76_XJUL}XjZ0gH#lxQPcMpTzp3TNH2 zzOoXTk(o9c$Qvv{A4mMXjDdk*%S;S1xg4N!1pmwW82${IH5?0m9HixsJ= zG+@l?oDm~y+zjx7f=z(yq|?@k*2VysH|tCR^&-3$wE!0xB%1F$??bMfl#w9IO}Vdf zangG+@8QVRC*|2#q(5@F5xIukldN%W`Y;kM0*_6-`lrA%3# zyKXToBu~-Qu1r>*0NIE3VIneTF`OPS?iw&qrZ|DpuG@9_$?RK@`(&nLXpb&Dzzqz`bR4OF5jx0M^Nu91?Kc^8z| z?RF;-rvW9BK4u?2D~WO?;HZe8s=>9ASn?Ek)8)i<(c-5@VX({+CEy5?Q_amPuai~W z+ZnVgHPzRd$0QscaUwr9aw(d6Mlz<`T9#=`pvHmUFBx}jaQJ;`WxNHfnu=4^yk292 zkGW1;M_PLWz|x{FAWd!SN^NfZWy-k~S>{pB=-CfoFPe7VT3nQ#3NUK(n%}#A9It)k z51Tyo#JmNN0G0@H^=z`aBd~kz@2Puhyzl-Bd(kURKD{*<0$xrt#-MAJw46_o$QKy_ z3Bd6@LiV-goB|&poW*Ire%kM&>lV21+bTRj#?=kV^nhWx`ZDEy0iT8=mpl6eX#)Xn z4_SsdNWl-H*%+^X@b}`a5BwhUnqOTvae&imOp(Hgt{HCOKiH|vz~>*CVYA2P zP!mW{3zfeXH2^#rrmK`vz>YU3!eZkg2k25JQWu;^W6QK*;aY7|CdK7RNwOm**FY_~ zk}|fWlkM2H-y-1K+|)rL4Ts{I^_I&xUmlaghD`yo6^T?nZSVzKM1p#UVcGUd7#`sm zS$~9~xBm4BpIxJ@dgk^G=RP;|(12-mc2BTj-W4EjnXosRiIoUyP?{ee8J9wa8 zS)F#w=#DS|7U}4tv?lknM?llOGYBm0_hU%=ZJ+GY2$d*iH!<718!vz2zrfDLFMuXH zFkkZn0^nl!<8m7fl$XXty5mU+z>M(Dvo$W9W{j)QGZ5)%X#_Ov#E+<#!fTKFNY3cP z8U>M_PYi&`87QkXEj)Et0O$fq(%>8$4}q)+;FRek`1-cg$gkTmEHml(NC_lvLXVEG z5T~*>?H9?a>nr7ui8ztTMftkKv$B)Y?KwkH?>K-LyJQlnRu@MkdMT`S0a{H(^8j=N4$-hZyfu;j$SC-H7*34l%! zM`EaN2WYng5_uGY>2l4CRe**r67j2gvfgr2Tx5`F<)4rw2zPq|LQvKDqB;t+lAlwy zah^~5wK`Xr%+}|266D2^m^ETV{flFSRMJZZbdfc7b{flx{g+Z?a)wftcrX ze<3Qe4KRJIxQWnjRBB*2Xv9OqQmIWgWUa}%6C{B5BI}+UV78MWDfWlZ{zC2 zzY4E>@{eIQI1QTJH1FpHOa5Ld`q>5<#UwqBPBD5=l+i>4u7Ir}<;F9JB$W>0>Rck~jH2y6YdmyFKbJfrvIP+#spe(SxQ8kvITdh@+!}{zo#8u2?K% zSn0HZmmgc!)0JE{u>qE+YJIxrV^M|*u4BzaM91o7)f(XblN(B zKd?py008$&UfUVYIRhcru?OPvK7hfUdI$C(2V?G>1f6D?wsS;gwop!X@%B@{39o+a zKSoU@s2&@IA+#S^p1N$yiaAi+`fY$nLDs;Rs4HUZs)8XXegKXfv+T?=Z7j1FS31bPsQQ;P>E- z5By$WHZq?Hb>A0bfNL?kXJ}9*a4_p585semA$!u_BWD;V`ervXNjalS52|VKQXdG? zbyXrs;{n0FmN(Apz&Y~&Mx_M82A|MX45hjbpN+7-B*L5=j!n3kF4Od09ub)YZ1$4o zyVTdER`R9*Fuaf3k8Pz98+E?Eu~FyRL&UL8kOFI04PS`#`pCWx`(Cy~+RNhQVaGRB zX4u{$U-G#HYG(8ac;iNa=eG&rrvPmsemAZeb``knVX*rW%DtjwGV?rKJJ4p|EO!Vj0SMJzH(FqVvQ@pPqtD}@O1MvoaE zq}Ovp&}vf{8u>i$5MU)}hMX<9hiCk7h&#crhbj%O?IMQgqk%OpPlg{7PsO9>^7g34E7yS6cL`L6j+sz6(HR9W*nSaZv#%$)XXBXaw8L7aI7(U@10Z*{ zKY-Sm|DqkbNV=T$D2)>BmdfR6OOtzm7BwtnTj<|5S+tRpGPqoRDp5@LPz_Gw#_TNAg9x%@6`!VBu>fy@O6Juia8MD=o83u%vCN_Ap#jU@+nK#*nHn!4-(ZPCrcod#Z3El3k++0{ zyGT~uMnM|wrif%pj2G1qnuYEQ-LJB3b$_|#0Fr6LdIozcAW5~4X3nhA$MU2>zj+oD z&kb`}M?D4uJ<_Bv0DS#&fqDWIh0T?g?Wpy)aXd6Nk^ybNB*h?sJ~(?_YLA=bqtWYw4z zv8f#4NnHEL`!uNPgK}gRcf>KcrPvtc zB{)b~0#Q@$ILZ#?=K0Vigz3Zl8%%U0B}uJSoHsr406t$i9_h zFe$1W<&jLv7!-0*(=k%iP($EkdwJ`vep`5j-<8!X29Itt0E@GtUw5d2FgLrm{_E9*J8M8&=2^|dki%=iobNharUU+BLGeJUDgO-DUmND zctTmZ^b_@r>LDs%H%-d?B-$WJ4D?Fi+64IOl>#VLT8f_wpazN_`qy7YZ})Zc3Sf)Q z2#Q-powkPV{uHg90kDk4CI{Xkpse{X3g|griwx+TyKLTW)kWP^+FiCUtG5C5aA<`4j*EXuVUh{LWT6a|NGM5O9tL6Ky>#)^<~grKHCUI3f~IVp6` z;}Gyx<WVy9#bka2_;iIofi;7sw&gYz zkV_1JX&={J#OBXN26i$BvvIa%x%>26EAAN-6_LhE4aR_g7q1asyG}qE?}H%m{2F7s z1`1$!<#`mdn}AvZICeU%h1SV9SUUq?zjUhuWIuyq5jWSOgLl#La}U<73~C0Uob2Gz zJAX6Y_`vT2%|<|7!5+;gfxxfZ2k@%+NocegmBo;dLTadr0hEkKPS+lAnq;*CE~gM# z$)r&^0!*tog~TZwkoV-TEs*6v!_BfRP{?xQDl5R^AS?tyrTlfJ6(|M;Cb+OFAu+T)>)~cYJz`V+WyeACDQ7R29FyU& z$+xc(&XF~$Q)SjQP=fKbH%oH@V4?DgaTnCD0EU;J0r9MPUZp(8OsBQTw@%9fodIwF zbQo(z^9EqseuEUHHq|VXKf~0x{l`0a`>7wrTi@|J&B=ZYrvMCWhijR7<`ydUShYBX ztrUJBicZbIZ~#1bnlY(lO7?pVwbB&K<+^GX%xzE_!&Rm<$VKI+k|ZMRtWvMdYa<|% zH5I3M5GT^xYpcYO0YU}JGK3?uPW(ykx;{-RwMxW3K|)SZ%S0o{T2eaByi7r%amlIKeOi>Z(V4C%0DR>#fGPwDTW0t{BsQD=W;KS_o;M!=;>1gX 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 z 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 JPDHLkV1i7Q&QSmW literal 0 HcmV?d00001 diff --git a/SnipSnaps/Commands/AppCommands.swift b/SnipSnaps/Commands/AppCommands.swift new file mode 100644 index 0000000..f41c52f --- /dev/null +++ b/SnipSnaps/Commands/AppCommands.swift @@ -0,0 +1,110 @@ +#if os(macOS) +import SwiftUI +import AppKit + +// Native macOS menu-bar commands. The Help menu is retargeted at SnipSnaps' real +// support/legal URLs (the default SwiftUI Help menu is empty). The Review menu +// and Edit ▸ Undo are wired to the active review surface via focused values. +struct AppCommands: Commands { + var body: some Commands { + // Edit ▸ Undo routed to whichever review owns the focus, so ⌘Z works + // regardless of which control is focused (and on the summary screen). + CommandGroup(replacing: .undoRedo) { + FocusedReviewUndoButton() + } + + // File ▸ Add Folder… for the Files surface. + CommandGroup(after: .newItem) { + FocusedAddFolderButton() + } + + CommandMenu("Review") { + FocusedReviewActionButtons() + } + + CommandGroup(replacing: .help) { + Button("SnipSnaps Support") { Self.open("https://kyter.com/snipsnaps/support/") } + Button("GitHub Repository") { Self.open("https://github.com/Kyter-com/SnipSnaps") } + Button("Send Feedback…") { Self.open("mailto:dev@kyter.com?subject=SnipSnaps%20App%20Feedback") } + Divider() + Button("Privacy Policy") { Self.open("https://kyter.com/snipsnaps/privacy/") } + Button("Terms & Conditions") { Self.open("https://kyter.com/snipsnaps/terms/") } + } + } + + static func open(_ string: String) { + if let url = URL(string: string) { + NSWorkspace.shared.open(url) + } + } +} + +// MARK: - Focused review bridge + +// A review screen publishes this so the menu bar can drive Keep / Delete / Undo / +// Skip on the currently-active review, with items auto-disabling elsewhere. +struct ReviewActions { + var keep: (() -> Void)? + var delete: (() -> Void)? + var undo: (() -> Void)? + var skipGroup: (() -> Void)? + var canUndo: Bool = false +} + +struct ReviewActionsFocusedValueKey: FocusedValueKey { + typealias Value = ReviewActions +} + +// Files surface publishes its "add folder" hook so File ▸ Add Folder… works. +struct AddFolderFocusedValueKey: FocusedValueKey { + typealias Value = () -> Void +} + +extension FocusedValues { + var reviewActions: ReviewActions? { + get { self[ReviewActionsFocusedValueKey.self] } + set { self[ReviewActionsFocusedValueKey.self] = newValue } + } + + var addFolderAction: (() -> Void)? { + get { self[AddFolderFocusedValueKey.self] } + set { self[AddFolderFocusedValueKey.self] = newValue } + } +} + +private struct FocusedReviewUndoButton: View { + @FocusedValue(\.reviewActions) private var actions + + var body: some View { + Button("Undo") { actions?.undo?() } + .keyboardShortcut("z", modifiers: .command) + .disabled(!(actions?.canUndo ?? false)) + } +} + +private struct FocusedAddFolderButton: View { + @FocusedValue(\.addFolderAction) private var addFolder + + var body: some View { + Button("Add Folder…") { addFolder?() } + .keyboardShortcut("o", modifiers: [.command, .shift]) + .disabled(addFolder == nil) + } +} + +// Click-only menu items (discoverability + VoiceOver). The matching ←/→/Delete/s +// keys are owned by in-view buttons on the active review, so these intentionally +// carry NO keyboardShortcut to avoid a double-owned key equivalent. +private struct FocusedReviewActionButtons: View { + @FocusedValue(\.reviewActions) private var actions + + var body: some View { + Button("Keep →") { actions?.keep?() } + .disabled(actions?.keep == nil) + Button("Move to Trash ←") { actions?.delete?() } + .disabled(actions?.delete == nil) + Button("Skip Group S") { actions?.skipGroup?() } + .disabled(actions?.skipGroup == nil) + } +} +#endif diff --git a/SnipSnaps/ContentView.swift b/SnipSnaps/ContentView.swift index 4928ac5..d1a2b93 100644 --- a/SnipSnaps/ContentView.swift +++ b/SnipSnaps/ContentView.swift @@ -8,20 +8,34 @@ import SwiftUI struct ContentView: View { - @State private var selectedTab = 0 - var body: some View { #if DEBUG if let screenshotScreen = ProcessInfo.processInfo.environment["SNIPSNAPS_SCREENSHOT_SCREEN"] { ScreenshotDemoView(screen: screenshotScreen) } else { - tabView + shell } #else + shell + #endif + } + + @ViewBuilder + private var shell: some View { + #if os(macOS) + // Mac uses a native sidebar instead of the iOS bottom tab bar; Settings lives + // in the ⌘, Settings scene (see SnipSnapsApp), so it's not a sidebar row. + MacSidebarShell() + .tint(AppColor.primary) + .frame(minWidth: 720, minHeight: 480) + #else tabView #endif } + #if os(iOS) + @State private var selectedTab = 0 + private var tabView: some View { TabView(selection: $selectedTab) { HomeView() @@ -29,25 +43,79 @@ struct ContentView: View { Label("Home", systemImage: "house") } .tag(0) - #if os(macOS) - FilesView() - .tabItem { - Label("Files", systemImage: "folder") - } - .tag(2) - #endif SettingsView() .tabItem { Label("Settings", systemImage: "gearshape") } .tag(1) } - .accentColor(AppColor.primary) - .onChange(of: selectedTab) { - #if canImport(UIKit) - let generator = UIImpactFeedbackGenerator(style: .light) - generator.impactOccurred() - #endif + .tint(AppColor.primary) + .onChange(of: selectedTab) { + let generator = UIImpactFeedbackGenerator(style: .light) + generator.impactOccurred() + } + } + #endif +} + +#if os(macOS) +enum SidebarItem: String, Hashable, CaseIterable, Identifiable { + case photos + case files + + var id: String { rawValue } + + var title: String { + switch self { + case .photos: return "Photos" + case .files: return "Files" + } + } + + var systemImage: String { + switch self { + case .photos: return "photo.on.rectangle.angled" + case .files: return "folder" + } + } +} + +private struct MacSidebarShell: View { + // Persist the selection across launches; never let it resolve to nil so the + // detail pane is always populated. + @SceneStorage("sidebarSelection") private var selectionRaw: String = SidebarItem.photos.rawValue + + private var selection: SidebarItem { + SidebarItem(rawValue: selectionRaw) ?? .photos + } + + private var selectionBinding: Binding { + Binding( + get: { selection }, + set: { newValue in + if let newValue { selectionRaw = newValue.rawValue } + } + ) + } + + var body: some View { + NavigationSplitView { + List(selection: selectionBinding) { + Section("Clean Up") { + ForEach(SidebarItem.allCases) { item in + Label(item.title, systemImage: item.systemImage) + .tag(item) + } + } } + .navigationSplitViewColumnWidth(min: 188, ideal: 210, max: 280) + .navigationTitle("SnipSnaps") + } detail: { + switch selection { + case .photos: HomeView() + case .files: FilesView() + } + } } } +#endif diff --git a/SnipSnaps/Design/AppColors.swift b/SnipSnaps/Design/AppColors.swift index 2329bb9..d7f8a50 100644 --- a/SnipSnaps/Design/AppColors.swift +++ b/SnipSnaps/Design/AppColors.swift @@ -22,6 +22,14 @@ enum AppColor { static let deleteBackground = Color(.systemRed).opacity(0.16) static let keepBackground = Color(.systemGreen).opacity(0.16) + // Hairline edge for raised cards. iOS keeps the specular-white highlight; macOS + // uses an adaptive separator so the edge is visible in both Light and Dark. + #if canImport(UIKit) + static let cardEdge = Color.white.opacity(0.28) + #elseif canImport(AppKit) + static let cardEdge = Color(nsColor: .separatorColor) + #endif + #if canImport(UIKit) static let background = Color(.systemGroupedBackground) static let card = Color(.secondarySystemGroupedBackground) @@ -30,10 +38,15 @@ enum AppColor { static let fill = Color(.tertiarySystemFill) static let separator = Color(.separator) #elseif canImport(AppKit) - static let background = Color(nsColor: .windowBackgroundColor) + // macOS card hierarchy: the window/scroll surface must read as RECESSED and the + // cards as RAISED, or both collapse to the same light gray and every card + // becomes invisible in Light mode. underPageBackgroundColor is the recessed + // backdrop; controlBackgroundColor / textBackgroundColor are the raised (near + // white) card surfaces. + static let background = Color(nsColor: .underPageBackgroundColor) static let card = Color(nsColor: .controlBackgroundColor) static let chip = Color(nsColor: .unemphasizedSelectedContentBackgroundColor) - static let elevatedCard = Color(nsColor: .controlBackgroundColor) + static let elevatedCard = Color(nsColor: .textBackgroundColor) static let fill = Color(nsColor: .quaternaryLabelColor) static let separator = Color(nsColor: .separatorColor) #endif diff --git a/SnipSnaps/Design/GlassStyle.swift b/SnipSnaps/Design/GlassStyle.swift new file mode 100644 index 0000000..bee9eef --- /dev/null +++ b/SnipSnaps/Design/GlassStyle.swift @@ -0,0 +1,67 @@ +import SwiftUI + +// Liquid Glass styling helpers. On macOS (deployment target 26 / Tahoe) these use +// the real Liquid Glass APIs; on iOS they fall back to the app's existing +// bordered / material look so the shared iOS build is unchanged. +extension View { + // Primary call-to-action button. + @ViewBuilder + func prominentActionButton() -> some View { + #if os(macOS) + buttonStyle(.glassProminent) + #else + buttonStyle(.borderedProminent) + #endif + } + + // Secondary / neutral button. + @ViewBuilder + func secondaryActionButton() -> some View { + #if os(macOS) + buttonStyle(.glass) + #else + buttonStyle(.bordered) + #endif + } + + // Subtle hover lift + pointer cursor for clickable cards on macOS (no-op on iOS). + @ViewBuilder + func interactiveCardHover() -> some View { + #if os(macOS) + modifier(MacHoverHighlight()) + #else + self + #endif + } + + // Background for a small floating info chip (e.g. the review date/size pill). + @ViewBuilder + func infoChipBackground(cornerRadius: CGFloat = 14) -> some View { + #if os(macOS) + glassEffect(.regular, in: .rect(cornerRadius: cornerRadius)) + #else + background { + RoundedRectangle(cornerRadius: cornerRadius, style: .continuous) + .fill(.ultraThinMaterial) + .overlay { + RoundedRectangle(cornerRadius: cornerRadius, style: .continuous) + .fill(AppColor.card.opacity(0.72)) + } + } + #endif + } +} + +#if os(macOS) +private struct MacHoverHighlight: ViewModifier { + @State private var hovering = false + + func body(content: Content) -> some View { + content + .scaleEffect(hovering ? 1.012 : 1.0) + .animation(.easeOut(duration: 0.12), value: hovering) + .onHover { hovering = $0 } + .pointerStyle(.link) + } +} +#endif diff --git a/SnipSnaps/Files/FileFolderStore.swift b/SnipSnaps/Files/FileFolderStore.swift index 9a79bd6..8119752 100644 --- a/SnipSnaps/Files/FileFolderStore.swift +++ b/SnipSnaps/Files/FileFolderStore.swift @@ -16,18 +16,29 @@ final class FileFolderStore: ObservableObject { } @Published private(set) var folders: [Folder] = [] + // Folders that resolved but whose security scope could not be opened this launch + // (the user sees them but scans find nothing — surfaced as "couldn't access"). + @Published private(set) var inaccessiblePaths: Set = [] private let defaultsKey = "filesGrantedFolderBookmarksV1" private var accessing: [URL] = [] + // Maps a resolved folder path → the exact stored bookmark bytes, so remove() can + // drop precisely that bookmark (even if it later stops resolving) without + // disturbing other — possibly transiently-offline — grants. + private var bookmarkByPath: [String: Data] = [:] init() { restore() } - // The URL comes from NSOpenPanel and is already accessible; capture a durable - // app-scoped bookmark so the grant survives relaunch. + // The URL comes from NSOpenPanel (or a Finder drag) and is already accessible; + // capture a durable app-scoped bookmark so the grant survives relaunch. func add(_ url: URL) { - guard !folders.contains(where: { $0.url.path == url.path }) else { return } + // Already granted AND working — nothing to do. But if the path is listed yet + // inaccessible (stale bookmark), fall through to re-grant with the fresh one. + if folders.contains(where: { $0.url.path == url.path }), !inaccessiblePaths.contains(url.path) { + return + } do { let data = try url.bookmarkData( options: .withSecurityScope, @@ -35,6 +46,11 @@ final class FileFolderStore: ObservableObject { relativeTo: nil ) var stored = storedBookmarks() + // Re-granting a stale/inaccessible folder: drop its old bookmark first so + // the fresh, working one replaces it instead of being deduped away. + if let old = bookmarkByPath[url.path] { + stored.removeAll { $0 == old } + } stored.append(data) save(stored) restore() @@ -44,10 +60,15 @@ final class FileFolderStore: ObservableObject { } func remove(_ folder: Folder) { - let kept = storedBookmarks().filter { data in - resolve(data)?.url.path != folder.url.path + if let targetData = bookmarkByPath[folder.url.path] { + // Drop exactly the targeted bookmark; keep every other stored bookmark + // (including any that are transiently offline) untouched. + save(storedBookmarks().filter { $0 != targetData }) + } else { + // Fallback: no stored mapping (shouldn't happen for a listed folder) — drop + // any bookmark that currently resolves to this path. + save(storedBookmarks().filter { resolve($0)?.url.path != folder.url.path }) } - save(kept) restore() } @@ -62,16 +83,30 @@ final class FileFolderStore: ObservableObject { var resolved: [Folder] = [] var refreshed: [Data] = [] + var byPath: [String: Data] = [:] + var inaccessible: Set = [] for data in storedBookmarks() { - guard let entry = resolve(data) else { continue } + guard let entry = resolve(data) else { + // Transient failure (e.g. an external/network volume that's offline right + // now). Keep the bookmark so the grant survives relaunch; just don't list + // the folder this session. Only an explicit remove() drops it. + refreshed.append(data) + continue + } if resolved.contains(where: { $0.url.path == entry.url.path }) { continue } + let freshData = entry.refreshedData ?? data if entry.url.startAccessingSecurityScopedResource() { accessing.append(entry.url) + } else { + inaccessible.insert(entry.url.path) } resolved.append(Folder(url: entry.url)) - refreshed.append(entry.refreshedData ?? data) + refreshed.append(freshData) + byPath[entry.url.path] = freshData } folders = resolved + bookmarkByPath = byPath + inaccessiblePaths = inaccessible save(refreshed) } diff --git a/SnipSnaps/Files/FileLibrary.swift b/SnipSnaps/Files/FileLibrary.swift index a02aea6..cdcd0ea 100644 --- a/SnipSnaps/Files/FileLibrary.swift +++ b/SnipSnaps/Files/FileLibrary.swift @@ -11,27 +11,40 @@ enum FileLibrary { static let largeFileMinimumBytes: Int64 = 50 * 1024 * 1024 static let oldFileAgeDays = 180 // Cap enumeration so a huge folder tree can't stall a scan/count indefinitely. - static let maxFilesExamined = 50_000 + // When the cap is hit, callers are told (truncated) so they don't mistake a + // partial scan for an empty result. + static let maxFilesExamined = 200_000 + + // Outcome of a scan: the ranked items plus whether the file cap was reached. + struct ScanResult: Sendable { + let items: [FileItem] + let truncated: Bool + + static let empty = ScanResult(items: [], truncated: false) + } private static let resourceKeys: Set = [ - .fileSizeKey, .contentModificationDateKey, .creationDateKey, + .fileSizeKey, .totalFileAllocatedSizeKey, .contentModificationDateKey, .creationDateKey, .isRegularFileKey, .isDirectoryKey, .isSymbolicLinkKey, - .isPackageKey, .contentTypeKey + .isPackageKey, .contentTypeKey, + .isUbiquitousItemKey, .ubiquitousItemDownloadingStatusKey ] - static func scan(folders: [URL], category: FileReviewCategory, limit: Int, excluding reviewed: Set = []) -> [FileItem] { + static func scan(folders: [URL], category: FileReviewCategory, limit: Int, excluding reviewed: Set = [], sort: FileSortOption = .largest) -> ScanResult { if category == .duplicates { - return duplicateRedundantCopies(folders: folders, excluding: reviewed, limit: limit) + return duplicateRedundantCopies(folders: folders, excluding: reviewed, limit: limit, sort: sort) } let oldCutoff = Calendar.current.date(byAdding: .day, value: -oldFileAgeDays, to: Date()) ?? .distantPast var items: [FileItem] = [] var examined = 0 + var truncated = false - for folder in folders { + folderLoop: for folder in folders { guard let enumerator = enumerator(for: folder) else { continue } for case let url as URL in enumerator { - if examined >= maxFilesExamined { break } + if Task.isCancelled { return .empty } + if examined >= maxFilesExamined { truncated = true; break folderLoop } guard let item = makeItem(url) else { continue } examined += 1 if matches(item, category: category, oldCutoff: oldCutoff), !reviewed.contains(item.url.path) { @@ -40,7 +53,7 @@ enum FileLibrary { } } - return Array(sorted(items, category: category).prefix(limit)) + return ScanResult(items: Array(sortItems(items, by: sort).prefix(limit)), truncated: truncated) } // Single-pass tally for the category cards: total and not-yet-reviewed per @@ -79,21 +92,27 @@ enum FileLibrary { // Exact-content duplicates: bucket by size, hash only collision buckets, then // surface the redundant copies (every copy except the oldest "original" in // each identical group). Unique file sizes never get hashed. - static func duplicateRedundantCopies(folders: [URL], excluding reviewed: Set, limit: Int) -> [FileItem] { + static func duplicateRedundantCopies(folders: [URL], excluding reviewed: Set, limit: Int, sort: FileSortOption = .largest) -> ScanResult { var bySize: [Int64: [FileItem]] = [:] var examined = 0 - for folder in folders { + var truncated = false + folderLoop: for folder in folders { guard let enumerator = enumerator(for: folder) else { continue } for case let url as URL in enumerator { - if examined >= maxFilesExamined { break } - guard let item = makeItem(url), item.size > 0 else { continue } + if Task.isCancelled { return .empty } + if examined >= maxFilesExamined { truncated = true; break folderLoop } + // Bucket by logical byte length, not allocated size: identical files on + // volumes with different block sizes share a logical size but not an + // allocated one, and must still be compared. + guard let item = makeItem(url), item.logicalSize > 0 else { continue } examined += 1 - bySize[item.size, default: []].append(item) + bySize[item.logicalSize, default: []].append(item) } } var redundant: [FileItem] = [] for (_, sameSize) in bySize where sameSize.count > 1 { + if Task.isCancelled { return .empty } var byHash: [String: [FileItem]] = [:] for item in sameSize { guard let hash = contentHash(item.url) else { continue } @@ -106,15 +125,22 @@ enum FileLibrary { } } } - return Array(redundant.sorted { $0.size > $1.size }.prefix(limit)) + return ScanResult(items: Array(sortItems(redundant, by: sort).prefix(limit)), truncated: truncated) } private static func contentHash(_ url: URL) -> String? { guard let handle = try? FileHandle(forReadingFrom: url) else { return nil } defer { try? handle.close() } var hasher = SHA256() - while let chunk = try? handle.read(upToCount: 1 << 20), !chunk.isEmpty { - hasher.update(data: chunk) + // Read explicitly (not `try?`) so a mid-file read error returns nil rather than + // hashing partial content — a partial hash could collide falsely. + do { + while let chunk = try handle.read(upToCount: 1 << 20), !chunk.isEmpty { + if Task.isCancelled { return nil } + hasher.update(data: chunk) + } + } catch { + return nil } return hasher.finalize().map { String(format: "%02x", $0) }.joined() } @@ -162,10 +188,21 @@ enum FileLibrary { rv.isPackage != true else { return nil } + // Skip iCloud placeholders that aren't downloaded locally. Enumerating, hashing, + // or trashing them would force a (potentially multi-GB) download, and they use + // ~no local disk so they don't belong in a "free up space" review. + if rv.isUbiquitousItem == true, rv.ubiquitousItemDownloadingStatus == .notDownloaded { + return nil + } let modified = rv.contentModificationDate ?? .distantPast + // Prefer the on-disk allocated size so "Large Files" / "space freed" reflect + // disk actually reclaimed; fall back to the logical size. + let onDiskSize = rv.totalFileAllocatedSize ?? rv.fileSize ?? 0 + let logical = Int64(rv.fileSize ?? onDiskSize) return FileItem( url: url, - size: Int64(rv.fileSize ?? 0), + size: Int64(onDiskSize), + logicalSize: logical, modified: modified, created: rv.creationDate ?? modified, contentType: rv.contentType @@ -182,14 +219,18 @@ enum FileLibrary { } } - private static func sorted(_ items: [FileItem], category: FileReviewCategory) -> [FileItem] { - switch category { - case .large: + private static func sortItems(_ items: [FileItem], by option: FileSortOption) -> [FileItem] { + switch option { + case .largest: return items.sorted { $0.size > $1.size } - case .old: - return items.sorted { $0.modified < $1.modified } - case .everything, .screenshots, .duplicates: + case .smallest: + return items.sorted { $0.size < $1.size } + case .recent: return items.sorted { $0.modified > $1.modified } + case .oldest: + return items.sorted { $0.modified < $1.modified } + case .name: + return items.sorted { $0.name.localizedStandardCompare($1.name) == .orderedAscending } } } } diff --git a/SnipSnaps/Files/FileModels.swift b/SnipSnaps/Files/FileModels.swift index 7f978e7..7c72bc2 100644 --- a/SnipSnaps/Files/FileModels.swift +++ b/SnipSnaps/Files/FileModels.swift @@ -11,7 +11,8 @@ enum FileDecision { // values so it is Sendable and can be scanned off the main actor. struct FileItem: Identifiable, Hashable, Sendable { let url: URL - let size: Int64 + let size: Int64 // on-disk allocated size — drives "Large Files" + "space freed" + let logicalSize: Int64 // logical byte length — used for duplicate size-bucketing let modified: Date let created: Date let contentType: UTType? @@ -30,11 +31,29 @@ struct FileItem: Identifiable, Hashable, Sendable { // macOS screenshots land on disk as images named "Screenshot …" / "Screen Shot …". // Filenames can be localized or renamed, so this is a heuristic the user confirms. + // Matched against the common localized stems so non-English Macs aren't blank. var isScreenshot: Bool { guard isImage else { return false } let lower = name.lowercased() - return lower.contains("screenshot") || lower.contains("screen shot") + return Self.screenshotStems.contains { lower.contains($0) } } + + private static let screenshotStems: [String] = [ + "screenshot", // English (also matches "screen shot" lacks space; handled below) + "screen shot", // English (older) + "bildschirmfoto", // German + "capture d'écran", // French (straight quote) + "capture d’écran", // French (typographic quote) + "captura de pantalla", // Spanish + "captura de tela", // Portuguese + "schermata", // Italian + "schermafbeelding", // Dutch + "снимок экрана", // Russian + "スクリーンショット", // Japanese + "스크린샷", // Korean + "截屏", // Chinese (Simplified) + "螢幕快照" // Chinese (Traditional) + ] } // Total vs not-yet-reviewed tally for a category, mirroring the Photos @@ -44,6 +63,38 @@ struct FileCounts: Sendable { let notReviewed: Int } +// User-selectable ordering for a Files review session, the on-disk parallel to +// the Photos sort options. +enum FileSortOption: String, CaseIterable, Identifiable, Sendable { + case largest + case smallest + case recent + case oldest + case name + + var id: String { rawValue } + + var title: String { + switch self { + case .largest: return "Largest" + case .smallest: return "Smallest" + case .recent: return "Recent" + case .oldest: return "Oldest" + case .name: return "Name" + } + } + + var systemImage: String { + switch self { + case .largest: return "arrow.down.left.and.arrow.up.right" + case .smallest: return "arrow.up.right.and.arrow.down.left" + case .recent: return "clock.arrow.circlepath" + case .oldest: return "calendar" + case .name: return "textformat" + } + } +} + enum FileReviewCategory: String, CaseIterable, Identifiable, Sendable { case everything case large diff --git a/SnipSnaps/Files/FinderActions.swift b/SnipSnaps/Files/FinderActions.swift new file mode 100644 index 0000000..66b7865 --- /dev/null +++ b/SnipSnaps/Files/FinderActions.swift @@ -0,0 +1,27 @@ +#if os(macOS) +import AppKit + +// Thin wrappers over NSWorkspace for the desktop-native file affordances on the +// Files surface. The granted folders' security scopes are already held open by +// FileFolderStore, so these operate on URLs the app can see. +enum FinderActions { + // Reveal & select the file in a Finder window. + static func revealInFinder(_ url: URL) { + NSWorkspace.shared.activateFileViewerSelecting([url]) + } + + // Open the file in its default application (or the folder in Finder). + static func open(_ url: URL) { + NSWorkspace.shared.open(url) + } + + // Open the user's Trash in Finder so they can confirm / restore what was moved. + static func openTrash() { + if let trash = try? FileManager.default.url( + for: .trashDirectory, in: .userDomainMask, appropriateFor: nil, create: false + ) { + NSWorkspace.shared.open(trash) + } + } +} +#endif diff --git a/SnipSnaps/SnipSnapsApp.swift b/SnipSnaps/SnipSnapsApp.swift index eb12019..dd68ca4 100644 --- a/SnipSnaps/SnipSnapsApp.swift +++ b/SnipSnaps/SnipSnapsApp.swift @@ -35,5 +35,20 @@ struct SnipSnapsApp: App { } } } + #if os(macOS) + .defaultSize(width: 1000, height: 720) + .windowResizability(.contentMinSize) + .commands { + AppCommands() + } + #endif + + // Native Settings window, opened by the standard ⌘, menu item. + #if os(macOS) + Settings { + SettingsView() + .frame(width: 480, height: 560) + } + #endif } } diff --git a/SnipSnaps/Views/Files/FileReviewSessionView.swift b/SnipSnaps/Views/Files/FileReviewSessionView.swift index a95fbc7..84fde82 100644 --- a/SnipSnaps/Views/Files/FileReviewSessionView.swift +++ b/SnipSnaps/Views/Files/FileReviewSessionView.swift @@ -1,6 +1,7 @@ #if os(macOS) import SwiftUI import AppKit +import QuickLook import QuickLookThumbnailing struct FileReviewSessionView: View { @@ -8,6 +9,7 @@ struct FileReviewSessionView: View { let folders: [URL] @Environment(\.dismiss) private var dismiss + @Environment(\.accessibilityReduceMotion) private var reduceMotion @State private var isScanning = true @State private var items: [FileItem] = [] @State private var index = 0 @@ -19,12 +21,25 @@ struct FileReviewSessionView: View { @State private var resultMessage: String? @State private var deletedCount = 0 @State private var dragOffset: CGSize = .zero + @State private var quickLookURL: URL? + @State private var scanTask: Task? + @State private var didTruncate = false + @State private var trashFailures: [String] = [] + // The Remember-Reviewed window in effect when this scan started. Snapshotting it + // keeps the scan exclusion and mark/unmark consistent even if the user changes + // the setting mid-session (the .session and persistent stores are different). + @State private var sessionMemoryOption: ReviewMemoryOption = .thirtyDays // Shared with the Photos review so "Review Size" and the lifetime "Space // freed" stats behave the same across both surfaces. @AppStorage("reviewLimit") private var reviewLimit: Int = 20 @AppStorage("totalDeletedCount") private var totalDeletedCount: Int = 0 @AppStorage("totalDeletedBytes") private var totalDeletedBytes: Int = 0 @AppStorage("reviewMemoryOption") private var reviewMemoryOptionRawValue: String = ReviewMemoryOption.thirtyDays.rawValue + @AppStorage("fileSortOption") private var fileSortOptionRawValue: String = FileSortOption.largest.rawValue + + private var fileSortOption: FileSortOption { + FileSortOption(rawValue: fileSortOptionRawValue) ?? .largest + } private struct UndoStep { let item: FileItem @@ -61,10 +76,101 @@ struct FileReviewSessionView: View { } label: { Image(systemName: "xmark") } - .help("Close review") + .keyboardShortcut(.cancelAction) + .help("Close review (esc)") + } + ToolbarItem(placement: .primaryAction) { + // Re-sorting re-scans from scratch, which would discard in-progress + // decisions (and leave them marked reviewed). Lock it once the user has + // started deciding so no queued keep/trash choices are silently lost. + sortMenu + .disabled(isScanning || !kept.isEmpty || !toDelete.isEmpty) } } .onAppear(perform: load) + .onDisappear { scanTask?.cancel() } + .onChange(of: fileSortOptionRawValue) { _, _ in load() } + .focusedSceneValue(\.reviewActions, reviewActions) + .quickLookPreview($quickLookURL) + .alert("Some files couldn't be moved", isPresented: trashFailureBinding) { + Button("OK", role: .cancel) {} + } message: { + Text(trashFailureMessage) + } + } + + private var trashFailureBinding: Binding { + Binding(get: { !trashFailures.isEmpty }, set: { if !$0 { trashFailures = [] } }) + } + + private var trashFailureMessage: String { + let names = trashFailures.prefix(5).joined(separator: "\n") + let extra = trashFailures.count > 5 ? "\n…and \(trashFailures.count - 5) more" : "" + return "These items are still in place (they may be locked or in use):\n\(names)\(extra)" + } + + private var sortMenu: some View { + Menu { + Picker("Sort By", selection: $fileSortOptionRawValue) { + ForEach(FileSortOption.allCases) { option in + Label(option.title, systemImage: option.systemImage).tag(option.rawValue) + } + } + .pickerStyle(.inline) + } label: { + Label("Sort", systemImage: "arrow.up.arrow.down") + } + .help("Change the review order") + } + + // Desktop file keys (Quick Look / Reveal / Open) live on hidden buttons so they + // fire from anywhere in the review window without stealing focus. + private var fileKeyboardShortcuts: some View { + ZStack { + Button("Quick Look") { toggleQuickLook() } + .keyboardShortcut(.space, modifiers: []) + Button("Reveal in Finder") { if let current { FinderActions.revealInFinder(current.url) } } + .keyboardShortcut("r", modifiers: .command) + Button("Open") { if let current { FinderActions.open(current.url) } } + .keyboardShortcut("o", modifiers: .command) + } + .opacity(0) + .frame(width: 0, height: 0) + .accessibilityHidden(true) + } + + private func toggleQuickLook() { + if quickLookURL == nil { + quickLookURL = current?.url + } else { + quickLookURL = nil + } + } + + // Right-click menu shared by the review card and (lighter) the summary rows. + @ViewBuilder + private func fileContextMenu(for item: FileItem) -> some View { + Button("Quick Look") { quickLookURL = item.url } + Button("Open") { FinderActions.open(item.url) } + Button("Reveal in Finder") { FinderActions.revealInFinder(item.url) } + Divider() + Button("Keep") { if item.id == current?.id { applyDecision(.keep) } } + .disabled(item.id != current?.id) + Button("Move to Trash", role: .destructive) { if item.id == current?.id { applyDecision(.delete) } } + .disabled(item.id != current?.id) + } + + // Published to the menu bar (Review ▸ … and Edit ▸ Undo) while this review is + // on screen. ⌘Z routes here; Keep/Delete disable on the summary screen. + private var reviewActions: ReviewActions { + let reviewing = !isScanning && !items.isEmpty && !showSummary + return ReviewActions( + keep: reviewing ? { applyDecision(.keep) } : nil, + delete: reviewing ? { applyDecision(.delete) } : nil, + undo: { undo() }, + skipGroup: nil, + canUndo: lastUndo != nil + ) } // MARK: - States @@ -82,17 +188,33 @@ struct FileReviewSessionView: View { ContentUnavailableView { Label("Nothing to review", systemImage: category.systemImage) } description: { - Text("No \(category.title.lowercased()) found in the folders you granted.") + Text(didTruncate + ? "Scanned the first \(FileLibrary.maxFilesExamined.formatted()) files without finding any \(category.title.lowercased()). These folders are very large — try a more specific folder." + : "No \(category.title.lowercased()) found in the folders you granted.") } actions: { Button("Back") { dismiss() } } } + private var truncationBanner: some View { + Label( + "Showing matches from the first \(FileLibrary.maxFilesExamined.formatted()) files scanned.", + systemImage: "exclamationmark.triangle.fill" + ) + .font(.caption) + .foregroundStyle(.secondary) + .frame(maxWidth: .infinity, alignment: .leading) + } + private var reviewView: some View { VStack(spacing: 16) { header .padding(.horizontal, 24) .padding(.top, 12) + if didTruncate { + truncationBanner + .padding(.horizontal, 24) + } if let current { card(for: current) .padding(.horizontal, 24) @@ -101,6 +223,7 @@ struct FileReviewSessionView: View { .padding(.horizontal, 24) .padding(.bottom, 14) } + .background(fileKeyboardShortcuts) } private var header: some View { @@ -161,7 +284,18 @@ struct FileReviewSessionView: View { .onChanged { dragOffset = $0.translation } .onEnded(handleDragEnd) ) - .animation(.snappy(duration: 0.28), value: index) + .onTapGesture(count: 2) { FinderActions.open(item.url) } + .contextMenu { fileContextMenu(for: item) } + .help("Space to preview · double-click to open") + .accessibilityElement(children: .combine) + .accessibilityLabel("\(item.name), \(item.sizeText), modified \(item.modified.formatted(.relative(presentation: .named)))") + .accessibilityActions { + Button("Keep") { applyDecision(.keep) } + Button("Move to Trash") { applyDecision(.delete) } + Button("Quick Look") { quickLookURL = item.url } + Button("Reveal in Finder") { FinderActions.revealInFinder(item.url) } + } + .animation(reduceMotion ? nil : .snappy(duration: 0.28), value: index) .id(item.id) } @@ -204,7 +338,7 @@ struct FileReviewSessionView: View { Image(systemName: "arrow.uturn.backward") } .disabled(lastUndo == nil) - .keyboardShortcut("z", modifiers: .command) + .help("Undo (⌘Z)") Button { applyDecision(.keep) @@ -216,7 +350,7 @@ struct FileReviewSessionView: View { .keyboardShortcut(.rightArrow, modifiers: []) } .controlSize(.large) - .buttonStyle(.borderedProminent) + .prominentActionButton() } private var summaryView: some View { @@ -240,6 +374,18 @@ struct FileReviewSessionView: View { .background(AppColor.card, in: RoundedRectangle(cornerRadius: 14, style: .continuous)) } + if deletedCount > 0 { + Button { + FinderActions.openTrash() + } label: { + Label("Show in Trash", systemImage: "trash") + .frame(maxWidth: .infinity) + } + .secondaryActionButton() + .controlSize(.large) + .help("Open the Trash in Finder to review or restore") + } + if !toDelete.isEmpty { VStack(alignment: .leading, spacing: 8) { HStack { @@ -264,6 +410,11 @@ struct FileReviewSessionView: View { .font(.caption) .foregroundStyle(.secondary) } + .contentShape(Rectangle()) + .contextMenu { + Button("Quick Look") { quickLookURL = item.url } + Button("Reveal in Finder") { FinderActions.revealInFinder(item.url) } + } } } .padding(16) @@ -304,8 +455,9 @@ struct FileReviewSessionView: View { } label: { Text("Done").fontWeight(.semibold).frame(maxWidth: .infinity) } - .buttonStyle(.borderedProminent) + .prominentActionButton() .controlSize(.large) + .keyboardShortcut(.defaultAction) } else { Button(role: .destructive) { performDelete() @@ -321,10 +473,11 @@ struct FileReviewSessionView: View { } .frame(maxWidth: .infinity) } - .buttonStyle(.borderedProminent) + .prominentActionButton() .tint(AppColor.delete) .controlSize(.large) .disabled(deleteInProgress) + .keyboardShortcut(.defaultAction) } } .padding(16) @@ -344,17 +497,21 @@ struct FileReviewSessionView: View { // MARK: - Actions private func load() { + scanTask?.cancel() isScanning = true let folders = folders let category = category let limit = max(5, min(reviewLimit, 200)) - let reviewed = FileReviewHistory.reviewedPaths(memoryOption: reviewMemoryOption) - Task { - let scanned = await Task.detached(priority: .userInitiated) { - FileLibrary.scan(folders: folders, category: category, limit: limit, excluding: reviewed) - }.value + sessionMemoryOption = reviewMemoryOption + let memory = sessionMemoryOption + let reviewed = FileReviewHistory.reviewedPaths(memoryOption: memory) + let sort = fileSortOption + scanTask = Task.detached(priority: .userInitiated) { + let result = FileLibrary.scan(folders: folders, category: category, limit: limit, excluding: reviewed, sort: sort) + if Task.isCancelled { return } await MainActor.run { - items = scanned + items = result.items + didTruncate = result.truncated index = 0 kept = [] toDelete = [] @@ -373,7 +530,7 @@ struct FileReviewSessionView: View { case .keep: kept.append(item) case .delete: toDelete.append(item) } - FileReviewHistory.markReviewed(item.url.path, memoryOption: reviewMemoryOption) + FileReviewHistory.markReviewed(item.url.path, memoryOption: sessionMemoryOption) dragOffset = .zero advance() } @@ -391,7 +548,7 @@ struct FileReviewSessionView: View { case .keep: kept.removeAll { $0.id == step.item.id } case .delete: toDelete.removeAll { $0.id == step.item.id } } - FileReviewHistory.unmarkReviewed(step.item.url.path, memoryOption: reviewMemoryOption) + FileReviewHistory.unmarkReviewed(step.item.url.path, memoryOption: sessionMemoryOption) showSummary = false index = step.index lastUndo = nil @@ -429,6 +586,7 @@ struct FileReviewSessionView: View { totalDeletedBytes += Int(result.freedBytes) toDelete = [] lastUndo = nil + trashFailures = result.failed } } } diff --git a/SnipSnaps/Views/Files/FilesView.swift b/SnipSnaps/Views/Files/FilesView.swift index bb2bf23..13e0f25 100644 --- a/SnipSnaps/Views/Files/FilesView.swift +++ b/SnipSnaps/Views/Files/FilesView.swift @@ -7,6 +7,8 @@ struct FilesView: View { @State private var counts: [FileReviewCategory: FileCounts] = [:] @State private var isCounting = false @State private var selectedCategory: FileReviewCategory? + @State private var folderPendingRemoval: FileFolderStore.Folder? + @State private var isDropTargeted = false @AppStorage("reviewMemoryOption") private var reviewMemoryOptionRawValue: String = ReviewMemoryOption.thirtyDays.rawValue private var reviewMemoryOption: ReviewMemoryOption { @@ -45,6 +47,20 @@ struct FilesView: View { FileReviewSessionView(category: category, folders: store.folders.map(\.url)) } } + .focusedSceneValue(\.addFolderAction, { chooseFolder() }) + .confirmationDialog( + "Stop reviewing this folder?", + isPresented: Binding( + get: { folderPendingRemoval != nil }, + set: { if !$0 { folderPendingRemoval = nil } } + ), + presenting: folderPendingRemoval + ) { folder in + Button("Stop Reviewing", role: .destructive) { store.remove(folder) } + Button("Cancel", role: .cancel) {} + } message: { folder in + Text("SnipSnaps will lose access to “\(folder.name)”. No files are deleted — you can grant access again anytime.") + } .onChange(of: store.folders) { _, _ in refreshCounts() } // Re-tally when a review session closes (files may have been trashed), the // same way HomeView refreshes counts after a Photos review. @@ -84,13 +100,36 @@ struct FilesView: View { .controlSize(.large) } - Text("SnipSnaps can only see folders you pick here.") + Text("SnipSnaps can only see folders you pick here. You can also drag a folder here from Finder.") .font(.footnote) .foregroundStyle(.tertiary) } .frame(maxWidth: .infinity, alignment: .leading) .padding(20) .background(AppColor.card, in: RoundedRectangle(cornerRadius: 16, style: .continuous)) + .overlay( + RoundedRectangle(cornerRadius: 16, style: .continuous) + .strokeBorder(AppColor.primary, style: StrokeStyle(lineWidth: 2, dash: [7])) + .opacity(isDropTargeted ? 1 : 0) + ) + .dropDestination(for: URL.self) { urls, _ in + addDroppedFolders(urls) + } isTargeted: { isDropTargeted = $0 } + } + + // A folder dragged from Finder carries an implicit user-selected grant, so we + // can bookmark it immediately. Normalize first, then accept only directories. + private func addDroppedFolders(_ urls: [URL]) -> Bool { + var added = false + for url in urls { + let standardized = url.standardizedFileURL + let isDirectory = (try? standardized.resourceValues(forKeys: [.isDirectoryKey]))?.isDirectory ?? false + if isDirectory { + store.add(standardized) + added = true + } + } + return added } private func quickFolderButton(_ title: String, systemImage: String, url: URL?) -> some View { @@ -101,7 +140,7 @@ struct FilesView: View { .frame(maxWidth: .infinity, alignment: .leading) } .controlSize(.large) - .buttonStyle(.borderedProminent) + .prominentActionButton() .tint(AppColor.primary) .disabled(url == nil) } @@ -120,23 +159,46 @@ struct FilesView: View { .foregroundStyle(AppColor.primary) VStack(alignment: .leading, spacing: 2) { Text(folder.name).font(.headline) - Text(folder.url.path) - .font(.caption) - .foregroundStyle(.secondary) - .lineLimit(1) - .truncationMode(.middle) + if store.inaccessiblePaths.contains(folder.url.path) { + Label("Couldn't access — remove and re-add this folder", systemImage: "exclamationmark.triangle.fill") + .font(.caption) + .foregroundStyle(.orange) + .lineLimit(1) + } else { + Text(folder.url.path) + .font(.caption) + .foregroundStyle(.secondary) + .lineLimit(1) + .truncationMode(.middle) + } } Spacer() + Button { + FinderActions.revealInFinder(folder.url) + } label: { + Image(systemName: "arrow.up.forward.app") + } + .buttonStyle(.borderless) + .help("Reveal in Finder") Button(role: .destructive) { - store.remove(folder) + folderPendingRemoval = folder } label: { Image(systemName: "minus.circle.fill") } .buttonStyle(.borderless) + .frame(width: 28, height: 28) + .contentShape(Rectangle()) .help("Stop reviewing this folder") + .accessibilityLabel("Stop reviewing \(folder.name)") } .padding(12) .background(AppColor.card, in: RoundedRectangle(cornerRadius: 12, style: .continuous)) + .contextMenu { + Button("Reveal in Finder") { FinderActions.revealInFinder(folder.url) } + Button("Open in Finder") { FinderActions.open(folder.url) } + Divider() + Button("Stop Reviewing", role: .destructive) { folderPendingRemoval = folder } + } } } } @@ -166,6 +228,7 @@ struct FilesView: View { ) } .buttonStyle(.plain) + .interactiveCardHover() } } } diff --git a/SnipSnaps/Views/Review/ReviewSessionView.swift b/SnipSnaps/Views/Review/ReviewSessionView.swift index e1985cc..95f1ff7 100644 --- a/SnipSnaps/Views/Review/ReviewSessionView.swift +++ b/SnipSnaps/Views/Review/ReviewSessionView.swift @@ -161,6 +161,7 @@ struct ReviewSessionView: View { @Environment(\.dismiss) private var dismiss @Environment(\.displayScale) private var displayScale @Environment(\.scenePhase) private var scenePhase + @Environment(\.accessibilityReduceMotion) private var reduceMotion @State private var authStatus = PhotoLibrary.authorizationStatus() @State private var isLoading = true @State private var assets: [PHAsset] = [] @@ -319,6 +320,10 @@ struct ReviewSessionView: View { Image(systemName: "xmark") } .accessibilityLabel(showSummary ? "Close without deleting" : "Close review") + #if os(macOS) + .keyboardShortcut(.cancelAction) + .help("Close review (esc)") + #endif } } } @@ -339,8 +344,45 @@ struct ReviewSessionView: View { } message: { Text(errorMessage) } + #if os(macOS) + .focusedSceneValue(\.reviewActions, reviewActions) + #endif + } + + #if os(macOS) + // Published to the menu bar so Review ▸ … and Edit ▸ Undo drive this review + // while it's on screen. Keep/Delete are nil off the review surface so the menu + // items disable; ⌘Z routes here via the focused Undo. + private var reviewActions: ReviewActions { + let reviewing = canAccessPhotos && !isLoading && !assets.isEmpty && !showSummary + return ReviewActions( + keep: reviewing ? { applyDecision(.keep) } : nil, + delete: reviewing ? { applyDecision(.delete) } : nil, + undo: { undoLastReviewDecision() }, + skipGroup: nil, + canUndo: lastReviewUndo != nil && !isAnimatingCard + ) } + // Hidden buttons own the bare review keys (proven pattern). Present only while + // the review card is showing, so Return is free for the summary's default action. + private var reviewKeyboardShortcuts: some View { + ZStack { + Button("Delete") { applyDecision(.delete) } + .keyboardShortcut(.leftArrow, modifiers: []) + Button("Delete") { applyDecision(.delete) } + .keyboardShortcut(.delete, modifiers: []) + Button("Keep") { applyDecision(.keep) } + .keyboardShortcut(.rightArrow, modifiers: []) + Button("Details") { showMetadataSheet = true } + .keyboardShortcut(.space, modifiers: []) + } + .opacity(0) + .frame(width: 0, height: 0) + .accessibilityHidden(true) + } + #endif + private var reviewView: some View { VStack(spacing: 18) { reviewHeader @@ -357,6 +399,9 @@ struct ReviewSessionView: View { .padding(.bottom, 8) .background(.bar) } + #if os(macOS) + .background(reviewKeyboardShortcuts) + #endif } private var reviewHeader: some View { @@ -390,14 +435,7 @@ struct ReviewSessionView: View { .padding(.horizontal, 14) .padding(.vertical, 12) .frame(maxWidth: .infinity) - .background { - RoundedRectangle(cornerRadius: 14, style: .continuous) - .fill(.ultraThinMaterial) - .overlay { - RoundedRectangle(cornerRadius: 14, style: .continuous) - .fill(AppColor.card.opacity(0.72)) - } - } + .infoChipBackground() } .id(currentAsset?.localIdentifier) .transition(.opacity.combined(with: .scale(scale: 0.985))) @@ -488,6 +526,9 @@ struct ReviewSessionView: View { ) { applyDecision(.delete) } + #if os(macOS) + .help("Delete (← or Delete)") + #endif Spacer(minLength: 0) @@ -496,10 +537,13 @@ struct ReviewSessionView: View { undoLastReviewDecision() } .font(.footnote.weight(.semibold)) - .buttonStyle(.bordered) + .secondaryActionButton() .controlSize(.small) + #if os(macOS) + .help("Undo (⌘Z)") + #endif } else { - Text("Swipe or tap") + Text(macSwipeHint) .font(.footnote.weight(.medium)) .foregroundStyle(.secondary) .lineLimit(1) @@ -515,10 +559,21 @@ struct ReviewSessionView: View { ) { applyDecision(.keep) } + #if os(macOS) + .help("Keep (→ or Return)") + #endif } .frame(maxWidth: .infinity) } + private var macSwipeHint: String { + #if os(macOS) + return "← delete · → keep" + #else + return "Swipe or tap" + #endif + } + private var summaryView: some View { ScrollView { VStack(spacing: 20) { @@ -621,10 +676,13 @@ struct ReviewSessionView: View { } .frame(maxWidth: .infinity) } - .buttonStyle(.borderedProminent) + .prominentActionButton() .tint(AppColor.delete) .controlSize(.large) .disabled(deleteInProgress) + #if os(macOS) + .keyboardShortcut(.defaultAction) + #endif } else { Button { dismiss() @@ -633,8 +691,11 @@ struct ReviewSessionView: View { .fontWeight(.semibold) .frame(maxWidth: .infinity) } - .buttonStyle(.borderedProminent) + .prominentActionButton() .controlSize(.large) + #if os(macOS) + .keyboardShortcut(.defaultAction) + #endif } } .padding(.horizontal, 20) @@ -671,7 +732,7 @@ struct ReviewSessionView: View { loadAssets() } } - .buttonStyle(.borderedProminent) + .prominentActionButton() } } @@ -756,6 +817,15 @@ struct ReviewSessionView: View { deleteAssets.append(asset) } PhotoReviewHistory.markReviewed(asset, for: mode, memoryOption: reviewMemoryOption) + #if os(macOS) + if reduceMotion { + // Skip the card fling; advance with a brief cross-fade and release the lock. + cardDepartureOffset = .zero + withAnimation(.easeInOut(duration: 0.15)) { advance() } + isAnimatingCard = false + return + } + #endif let direction: CGFloat = decision == .keep ? 1 : -1 let exitDistance = max(cardSize.width, 500) * 1.35 cardDepartureOffset = startingOffset @@ -903,6 +973,7 @@ struct SimilarReviewSessionView: View { @Environment(\.dismiss) private var dismiss @Environment(\.displayScale) private var displayScale @Environment(\.scenePhase) private var scenePhase + @Environment(\.accessibilityReduceMotion) private var reduceMotion @State private var authStatus = PhotoLibrary.authorizationStatus() @State private var isScanning = true @State private var groups: [SimilarPhotoGroup] = [] @@ -1078,6 +1149,10 @@ struct SimilarReviewSessionView: View { Image(systemName: "xmark") } .accessibilityLabel(showSummary ? "Close without deleting" : "Close similar review") + #if os(macOS) + .keyboardShortcut(.cancelAction) + .help("Close review (esc)") + #endif } } } @@ -1105,12 +1180,53 @@ struct SimilarReviewSessionView: View { } message: { Text(errorMessage) } + #if os(macOS) + .focusedSceneValue(\.reviewActions, reviewActions) + #endif + } + + #if os(macOS) + private var reviewActions: ReviewActions { + let reviewing = canAccessPhotos && !isScanning && !groups.isEmpty && !showSummary + return ReviewActions( + keep: reviewing ? { applyPhotoDecision(.keep) } : nil, + delete: reviewing ? { applyPhotoDecision(.delete) } : nil, + undo: { undo() }, + skipGroup: reviewing ? { skipGroup() } : nil, + canUndo: !undoStack.isEmpty && !isAnimatingCard + ) + } + + private var similarKeyboardShortcuts: some View { + ZStack { + Button("Delete") { applyPhotoDecision(.delete) } + .keyboardShortcut(.leftArrow, modifiers: []) + Button("Delete") { applyPhotoDecision(.delete) } + .keyboardShortcut(.delete, modifiers: []) + Button("Keep") { applyPhotoDecision(.keep) } + .keyboardShortcut(.rightArrow, modifiers: []) + Button("Skip Group") { skipGroup() } + .keyboardShortcut("s", modifiers: []) + if let asset = currentPhoto { + Button("Details") { metadataTarget = MetadataTarget(asset: asset, details: details(for: asset)) } + .keyboardShortcut(.space, modifiers: []) + } + } + .opacity(0) + .frame(width: 0, height: 0) + .accessibilityHidden(true) } + #endif // MARK: - Review private var reviewView: some View { + #if os(macOS) + swipeReviewView + .background(similarKeyboardShortcuts) + #else swipeReviewView + #endif } private var groupHeader: some View { @@ -1144,14 +1260,7 @@ struct SimilarReviewSessionView: View { .padding(.horizontal, 14) .padding(.vertical, 12) .frame(maxWidth: .infinity) - .background { - RoundedRectangle(cornerRadius: 14, style: .continuous) - .fill(.ultraThinMaterial) - .overlay { - RoundedRectangle(cornerRadius: 14, style: .continuous) - .fill(AppColor.card.opacity(0.72)) - } - } + .infoChipBackground() } .id(asset.localIdentifier) .transition(.opacity.combined(with: .scale(scale: 0.985))) @@ -1380,7 +1489,7 @@ struct SimilarReviewSessionView: View { loadGroups() } } - .buttonStyle(.borderedProminent) + .prominentActionButton() } } @@ -1411,7 +1520,7 @@ struct SimilarReviewSessionView: View { Label(reviewFoundTitle, systemImage: "square.stack.3d.up") .fontWeight(.semibold) } - .buttonStyle(.borderedProminent) + .prominentActionButton() .tint(AppColor.primary) .controlSize(.large) .padding(.top, 4) @@ -1549,10 +1658,13 @@ struct SimilarReviewSessionView: View { } .frame(maxWidth: .infinity) } - .buttonStyle(.borderedProminent) + .prominentActionButton() .tint(AppColor.delete) .controlSize(.large) .disabled(deleteInProgress) + #if os(macOS) + .keyboardShortcut(.defaultAction) + #endif } else { Button { dismiss() @@ -1561,8 +1673,11 @@ struct SimilarReviewSessionView: View { .fontWeight(.semibold) .frame(maxWidth: .infinity) } - .buttonStyle(.borderedProminent) + .prominentActionButton() .controlSize(.large) + #if os(macOS) + .keyboardShortcut(.defaultAction) + #endif } } .padding(.horizontal, 20) @@ -1748,6 +1863,14 @@ struct SimilarReviewSessionView: View { case .delete: appendUnique([asset], to: &deleteAssets) } + #if os(macOS) + if reduceMotion { + cardDepartureOffset = .zero + withAnimation(.easeInOut(duration: 0.15)) { advancePhoto() } + isAnimatingCard = false + return + } + #endif let direction: CGFloat = decision == .keep ? 1 : -1 let exitDistance = max(cardSize.width, 500) * 1.35 cardDepartureOffset = startingOffset @@ -1991,6 +2114,9 @@ private struct FullScreenPhotoView: View { .padding(.top, 12) .padding(.trailing, 16) .accessibilityLabel("Close") + #if os(macOS) + .keyboardShortcut(.cancelAction) + #endif } #if os(iOS) .statusBarHidden(true) @@ -2202,7 +2328,7 @@ private struct PhotoCardView: View { .clipShape(RoundedRectangle(cornerRadius: 28, style: .continuous)) .overlay( RoundedRectangle(cornerRadius: 28, style: .continuous) - .strokeBorder(Color.white.opacity(0.28), lineWidth: 0.5) + .strokeBorder(AppColor.cardEdge, lineWidth: 0.5) ) .shadow(color: AppColor.shadow.opacity(1.35), radius: 22, x: 0, y: 12) .frame(width: bounds.width, height: bounds.height) @@ -2335,7 +2461,7 @@ private struct CardBackdropView: View { .fill(AppColor.elevatedCard) .overlay( RoundedRectangle(cornerRadius: 28, style: .continuous) - .strokeBorder(Color.white.opacity(0.24), lineWidth: 0.5) + .strokeBorder(AppColor.cardEdge, lineWidth: 0.5) ) .shadow(color: AppColor.shadow.opacity(1.2), radius: 18, x: 0, y: 10) .frame(width: bounds.width, height: bounds.height) diff --git a/SnipSnaps/Views/Tabs/HomeView.swift b/SnipSnaps/Views/Tabs/HomeView.swift index f6f64f5..28dad57 100644 --- a/SnipSnaps/Views/Tabs/HomeView.swift +++ b/SnipSnaps/Views/Tabs/HomeView.swift @@ -171,14 +171,26 @@ struct HomeView: View { .padding(.bottom, 32) } .background(AppColor.background) + #if os(macOS) + .navigationTitle("Photos") + #else .navigationTitle("SnipSnaps") - #if os(iOS) .navigationBarTitleDisplayMode(.large) #endif .toolbar { ToolbarItem(placement: .primaryAction) { if isRefreshingCounts { updatingCountsIndicator + } else { + #if os(macOS) + Button { + refreshForCurrentMemoryOption() + } label: { + Image(systemName: "arrow.clockwise") + } + .help("Refresh counts") + .disabled(!canAccessPhotos) + #endif } } } @@ -225,6 +237,7 @@ struct HomeView: View { ) } .buttonStyle(.plain) + .interactiveCardHover() .disabled(!canAccessPhotos) if mode.usesScreenshotSort { @@ -356,7 +369,7 @@ struct HomeView: View { refreshForCurrentMemoryOption() } } - .buttonStyle(.borderedProminent) + .prominentActionButton() } .frame(maxWidth: .infinity, alignment: .leading) .padding(16) @@ -403,9 +416,11 @@ struct HomeView: View { next[mode] = PhotoLibrary.fetchCounts(for: mode, reviewMemory: reviewMemoryOption) } let refreshedCounts = next - HomeCountCache.store(refreshedCounts, memoryOptionRawValue: reviewMemoryOptionRawValue) await MainActor.run { guard countRefreshID == refreshID else { return } + // Cache only a result that still reflects the current generation, so a + // superseded recount can't write stale-but-fresh-stamped counts. + HomeCountCache.store(refreshedCounts, memoryOptionRawValue: reviewMemoryOptionRawValue) counts.merge(refreshedCounts) { _, new in new } isRefreshingCounts = false } @@ -480,9 +495,9 @@ struct HomeView: View { Task.detached(priority: .userInitiated) { if !modesToRefresh.isEmpty { let refreshedCounts = Self.fetchCounts(for: modesToRefresh, reviewMemoryOption: reviewMemoryOption) - HomeCountCache.store(refreshedCounts, memoryOptionRawValue: reviewMemoryOptionRawValue) await MainActor.run { guard countRefreshID == refreshID else { return } + HomeCountCache.store(refreshedCounts, memoryOptionRawValue: reviewMemoryOptionRawValue) counts.merge(refreshedCounts) { _, new in new } isRefreshingCounts = false } @@ -491,9 +506,9 @@ struct HomeView: View { guard !deferredModes.isEmpty, !Task.isCancelled else { return } try? await Task.sleep(for: .seconds(2)) let deferredCounts = Self.fetchCounts(for: deferredModes, reviewMemoryOption: reviewMemoryOption) - HomeCountCache.store(deferredCounts, memoryOptionRawValue: reviewMemoryOptionRawValue) await MainActor.run { guard countRefreshID == refreshID else { return } + HomeCountCache.store(deferredCounts, memoryOptionRawValue: reviewMemoryOptionRawValue) counts.merge(deferredCounts) { _, new in new } } } @@ -551,20 +566,30 @@ private struct ActionCard: View { let reviewMemory: ReviewMemoryOption var reservesAccessorySpace = false + @Environment(\.dynamicTypeSize) private var dynamicTypeSize + var body: some View { ZStack { RoundedRectangle(cornerRadius: 16, style: .continuous) .fill(AppColor.card) - Text(displayCount) - .font(.system(size: 96, weight: .heavy, design: .rounded)) - .foregroundStyle(.quaternary) - .lineLimit(1) - .minimumScaleFactor(0.5) - .frame(maxWidth: .infinity, alignment: .trailing) - .padding(.trailing, 16) - .allowsHitTesting(false) - .clipped() + // Decorative oversized count; drop it at accessibility text sizes so the + // title/subtitle have room and don't collide with it. + if dynamicTypeSize < .accessibility1 { + Text(displayCount) + .font(.system(size: 96, weight: .heavy, design: .rounded)) + #if os(macOS) + .monospacedDigit() + #endif + .foregroundStyle(.quaternary) + .lineLimit(1) + .minimumScaleFactor(0.5) + .frame(maxWidth: .infinity, alignment: .trailing) + .padding(.trailing, 16) + .allowsHitTesting(false) + .clipped() + .accessibilityHidden(true) + } HStack(alignment: .center, spacing: 16) { VStack(alignment: .leading, spacing: 4) { @@ -587,8 +612,22 @@ private struct ActionCard: View { } .padding(.horizontal, 16) } - .frame(height: reservesAccessorySpace ? 112 : 96) + .frame(minHeight: reservesAccessorySpace ? 112 : 96) .opacity(isDisabled ? 0.5 : 1.0) + .accessibilityElement(children: .ignore) + .accessibilityLabel(mode.title) + .accessibilityValue(accessibilityValueText) + .accessibilityHint(mode == .similar ? "Scans for similar photos" : "Opens \(mode.title) review") + } + + private var accessibilityValueText: String { + var parts = [mode.subtitle] + if let countSummary { + parts.append(countSummary) + } else if mode == .similar { + parts.append("Tap to scan") + } + return parts.joined(separator: ", ") } private var displayCount: String { diff --git a/SnipSnaps/Views/Tabs/SettingsView.swift b/SnipSnaps/Views/Tabs/SettingsView.swift index 50fba42..0f1fd3c 100644 --- a/SnipSnaps/Views/Tabs/SettingsView.swift +++ b/SnipSnaps/Views/Tabs/SettingsView.swift @@ -22,8 +22,19 @@ struct SettingsView: View { @State private var showResetLocalSettingsAlert = false var body: some View { + #if os(macOS) + // Rendered inside the native ⌘, Settings window — no NavigationStack/title. + settingsForm + #else NavigationStack { - Form { + settingsForm + .navigationTitle("Settings") + } + #endif + } + + private var settingsForm: some View { + Form { Section { Stepper(value: $reviewLimit, in: 10...100, step: 5) { HStack { @@ -133,7 +144,6 @@ struct SettingsView: View { } } .formStyle(.grouped) - .navigationTitle("Settings") .alert("Reset Local Settings?", isPresented: $showResetLocalSettingsAlert) { Button("Reset", role: .destructive) { resetLocalSettings() @@ -142,7 +152,6 @@ struct SettingsView: View { } message: { Text("This clears your review size preference, sorting, review memory, and lifetime deleted stats on this device. Your photo library will not be changed.") } - } } private var hasLocalSettingsToReset: Bool { diff --git a/docs/macos-port-plan.md b/docs/macos-port-plan.md index f313f2c..15035be 100644 --- a/docs/macos-port-plan.md +++ b/docs/macos-port-plan.md @@ -1,9 +1,23 @@ # SnipSnaps for macOS — Implementation Plan -**Status:** in progress — Phases 0–2, 4, 4b implemented on branch `macos-port-phase-0-1` (local, **not pushed**). Phase 3 + a few follow-ups remain. -**Target:** native macOS destination on the existing SwiftUI target +**Status:** in progress — Phases 0–2, 4, 4b + a full **native UI/UX & desktop pass** implemented on branch `macos-port-phase-0-1` (local, **not pushed**). macOS build green + launches. +**Target:** native macOS destination on the existing SwiftUI target (`MACOSX_DEPLOYMENT_TARGET` now **26.0**; iOS stays 18.5) **Distribution:** Mac App Store + App Sandbox (decided) -**Author:** planning doc, 2026-06-22 · last updated 2026-06-22 (pause point) +**Author:** planning doc, 2026-06-22 · last updated 2026-06-24 (UI/UX pass) + +## Native macOS UI/UX & desktop pass (2026-06-24) + +A 70-finding audit (native shell / keyboard-menu / Liquid Glass / Finder / bugs / a11y), adversarially verified, then implemented in 6 phases and re-reviewed (3 issues caught + fixed). **Decisions:** bumped the macOS floor to 26.0 (Tahoe) so Liquid Glass APIs are used directly inside `#if os(macOS)` (no availability gating; iOS deployment target is independent and untouched); replaced the iOS bottom `TabView` with a native `NavigationSplitView` sidebar on macOS; moved Settings to a `Settings{}` scene (⌘,). Delivered: + +- **Shell:** sidebar (Photos/Files), ⌘, Settings window, default/min window size, Mac title-bar Refresh, `.accentColor`→`.tint`, `@SceneStorage` sidebar selection. +- **Keyboard + menu bar:** `Commands/AppCommands.swift` (Edit▸Undo ⌘Z, File▸Add Folder ⇧⌘O, Review menu, Help URLs) bridged via `focusedSceneValue`; ←/→/Delete/Space/Esc/Return shortcuts on all three review surfaces (rule: `.keyboardShortcut` on Buttons, not `.onKeyPress` on non-focusable containers). +- **Finder integration (Files):** Reveal in Finder, Quick Look (Space), Open (double-click/⌘O), right-click context menus, drag-a-folder-to-add, sort menu, Show-in-Trash. +- **Liquid Glass:** `Design/GlassStyle.swift` (glass buttons, glass info-chips, hover highlight + pointer cursor), adaptive `AppColor.cardEdge`, recessed Mac card-hierarchy colors (fixed near-invisible Light-mode cards), monospaced hero digits. +- **Bug fixes:** iCloud `.icloud`-placeholder skip + on-disk allocated size (E1); 50k-cap truncation now reported via `ScanResult` instead of silent-empty (E2); cancellable scans (E3); security-scoped-bookmark transient-preserve / removable-dead / re-grant-upgrade / inaccessible-folder warning (E4–E6); HomeView count-cache generation race (E7); trash/hash failure surfacing + memory-option snapshot (E8/E10); duplicate bucketing keyed on logical (not allocated) size. +- **Accessibility:** Reduce Motion, VoiceOver (decorative count hidden + merged cards + Files swipe actions), Dynamic Type growth, hit targets, `.help` tooltips, localized screenshot-name detection. +- **macOS app icon:** `mac_*.png` squircle set generated from the iOS artwork, wired into `AppIcon.appiconset/Contents.json`. + +**Still to verify on a real/populated Mac (couldn't here):** destructive Files trash flow, security-scoped-bookmark relaunch round-trips, Similar-matching accuracy, and an iOS regression build (shared-file edits are `#if os(macOS)`-gated/cross-platform-safe but unbuilt here). Deferred: AppKit video/Live-Photo playback on macOS (E11), Photos-side Quick Look + VoiceOver swipe actions, String Catalog pluralization. --- From f596961274b1e6691af242c6e9fd54621fe8a777 Mon Sep 17 00:00:00 2001 From: Nick Reisenauer Date: Sun, 28 Jun 2026 14:37:59 -0700 Subject: [PATCH 11/11] macOS: review fixes, lower deploy target to 15, a11y + UX polish Addresses the Copilot review plus an 8-dimension readiness pass on the macOS port. Correctness / data safety: - Files scan/counts/duplicates dedup by real path, so overlapping or nested folder grants can't make a unique file collide with itself and get trashed as a "duplicate"; also fixes inflated card counts and double review steps. - FileLibrary.counts() caps globally (labeled break) and the cap now counts every enumerated entry, so directory-heavy / all-iCloud trees still trip it. - FilesView.refreshCounts() supersedes the prior task so a stale tally can't overwrite a newer one. Platform reach: - Lower MACOSX_DEPLOYMENT_TARGET 26.0 -> 15.0 and gate the Liquid Glass calls behind if #available(macOS 26) with bordered/material fallback. iOS stays 18.5. App Store: - Add macOS-scoped LSApplicationCategoryType (utilities) and NSHumanReadableCopyright. Concurrency: - FileFolderStore.restore() opens/closes only changed security scopes (no blanket churn that could revoke a scope mid-scan); add deinit to balance scopes. Accessibility: - Photos review card: VoiceOver label + Details action (macOS). - FileCategoryCard consolidated into one VoiceOver element. - Reduce Motion gates the hover lift and the drag-cancel; two low-contrast lines bumped to .secondary. UX: - Files review: forward-delete key trashes; Undo styled as a secondary action. - Files review decision bar moved into the .bar footer (matches Photos + summary). - Drop the redundant close button on macOS pushed review screens (native Back chevron + Esc accelerator); keep it on iOS where it is the only way back. Both macOS and iOS targets build clean. --- SnipSnaps.xcodeproj/project.pbxproj | 8 ++- SnipSnaps/Design/GlassStyle.swift | 38 ++++++++--- SnipSnaps/Files/FileFolderStore.swift | 43 +++++++++--- SnipSnaps/Files/FileLibrary.swift | 37 +++++++++-- .../Views/Files/FileReviewSessionView.swift | 35 ++++++---- SnipSnaps/Views/Files/FilesView.swift | 19 +++++- .../Views/Review/ReviewSessionView.swift | 66 +++++++++++++++---- 7 files changed, 196 insertions(+), 50 deletions(-) diff --git a/SnipSnaps.xcodeproj/project.pbxproj b/SnipSnaps.xcodeproj/project.pbxproj index 17b86bb..7ed6e82 100644 --- a/SnipSnaps.xcodeproj/project.pbxproj +++ b/SnipSnaps.xcodeproj/project.pbxproj @@ -291,6 +291,8 @@ ENABLE_USER_SELECTED_FILES = readwrite; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = SnipSnaps/Info.plist; + "INFOPLIST_KEY_LSApplicationCategoryType[sdk=macosx*]" = "public.app-category.utilities"; + "INFOPLIST_KEY_NSHumanReadableCopyright[sdk=macosx*]" = "Copyright © 2026 Kyter, LLC. All rights reserved."; "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES; "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES; @@ -309,7 +311,7 @@ REGISTER_APP_GROUPS = YES; SDKROOT = auto; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx"; - MACOSX_DEPLOYMENT_TARGET = 26.0; + MACOSX_DEPLOYMENT_TARGET = 15.0; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 6.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -333,6 +335,8 @@ ENABLE_USER_SELECTED_FILES = readwrite; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = SnipSnaps/Info.plist; + "INFOPLIST_KEY_LSApplicationCategoryType[sdk=macosx*]" = "public.app-category.utilities"; + "INFOPLIST_KEY_NSHumanReadableCopyright[sdk=macosx*]" = "Copyright © 2026 Kyter, LLC. All rights reserved."; "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES; "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES; @@ -351,7 +355,7 @@ REGISTER_APP_GROUPS = YES; SDKROOT = auto; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx"; - MACOSX_DEPLOYMENT_TARGET = 26.0; + MACOSX_DEPLOYMENT_TARGET = 15.0; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 6.0; TARGETED_DEVICE_FAMILY = "1,2"; diff --git a/SnipSnaps/Design/GlassStyle.swift b/SnipSnaps/Design/GlassStyle.swift index bee9eef..feae37e 100644 --- a/SnipSnaps/Design/GlassStyle.swift +++ b/SnipSnaps/Design/GlassStyle.swift @@ -1,14 +1,18 @@ import SwiftUI -// Liquid Glass styling helpers. On macOS (deployment target 26 / Tahoe) these use -// the real Liquid Glass APIs; on iOS they fall back to the app's existing -// bordered / material look so the shared iOS build is unchanged. +// Liquid Glass styling helpers. On macOS 26 (Tahoe) these use the real Liquid Glass +// APIs; on macOS 15/16 and on iOS they fall back to the app's existing bordered / +// material look. The macOS floor is 15.0, so the glass calls are availability-gated. extension View { // Primary call-to-action button. @ViewBuilder func prominentActionButton() -> some View { #if os(macOS) - buttonStyle(.glassProminent) + if #available(macOS 26, *) { + buttonStyle(.glassProminent) + } else { + buttonStyle(.borderedProminent) + } #else buttonStyle(.borderedProminent) #endif @@ -18,7 +22,11 @@ extension View { @ViewBuilder func secondaryActionButton() -> some View { #if os(macOS) - buttonStyle(.glass) + if #available(macOS 26, *) { + buttonStyle(.glass) + } else { + buttonStyle(.bordered) + } #else buttonStyle(.bordered) #endif @@ -38,8 +46,19 @@ extension View { @ViewBuilder func infoChipBackground(cornerRadius: CGFloat = 14) -> some View { #if os(macOS) - glassEffect(.regular, in: .rect(cornerRadius: cornerRadius)) + if #available(macOS 26, *) { + glassEffect(.regular, in: .rect(cornerRadius: cornerRadius)) + } else { + materialChipBackground(cornerRadius: cornerRadius) + } #else + materialChipBackground(cornerRadius: cornerRadius) + #endif + } + + // Pre-Liquid-Glass (macOS 15/16) and iOS chip background: a translucent material card. + @ViewBuilder + fileprivate func materialChipBackground(cornerRadius: CGFloat) -> some View { background { RoundedRectangle(cornerRadius: cornerRadius, style: .continuous) .fill(.ultraThinMaterial) @@ -48,18 +67,19 @@ extension View { .fill(AppColor.card.opacity(0.72)) } } - #endif } } #if os(macOS) private struct MacHoverHighlight: ViewModifier { + @Environment(\.accessibilityReduceMotion) private var reduceMotion @State private var hovering = false func body(content: Content) -> some View { content - .scaleEffect(hovering ? 1.012 : 1.0) - .animation(.easeOut(duration: 0.12), value: hovering) + // Honor Reduce Motion: keep the pointer/link affordance but drop the lift. + .scaleEffect(reduceMotion ? 1.0 : (hovering ? 1.012 : 1.0)) + .animation(reduceMotion ? nil : .easeOut(duration: 0.12), value: hovering) .onHover { hovering = $0 } .pointerStyle(.link) } diff --git a/SnipSnaps/Files/FileFolderStore.swift b/SnipSnaps/Files/FileFolderStore.swift index 8119752..a82289c 100644 --- a/SnipSnaps/Files/FileFolderStore.swift +++ b/SnipSnaps/Files/FileFolderStore.swift @@ -31,6 +31,15 @@ final class FileFolderStore: ObservableObject { restore() } + // Balance the security scopes opened in restore() if the store is ever torn down + // mid-process (deinit is nonisolated; stopAccessingSecurityScopedResource is + // thread-safe and `accessing` is a plain value array). + deinit { + for url in accessing { + url.stopAccessingSecurityScopedResource() + } + } + // The URL comes from NSOpenPanel (or a Finder drag) and is already accessible; // capture a durable app-scoped bookmark so the grant survives relaunch. func add(_ url: URL) { @@ -75,11 +84,11 @@ final class FileFolderStore: ObservableObject { // MARK: - Private private func restore() { - // Balance any previously-opened scopes before re-opening the fresh set. - for url in accessing { - url.stopAccessingSecurityScopedResource() - } - accessing = [] + // Diff against the scopes already open rather than blanket stop-all/start-all: + // re-opening every folder on each add()/remove() would momentarily revoke access + // to retained folders, which a background scan/trash task may still be using. + let previouslyAccessing = accessing + var stillAccessing: [URL] = [] var resolved: [Folder] = [] var refreshed: [Data] = [] @@ -95,15 +104,31 @@ final class FileFolderStore: ObservableObject { } if resolved.contains(where: { $0.url.path == entry.url.path }) { continue } let freshData = entry.refreshedData ?? data - if entry.url.startAccessingSecurityScopedResource() { - accessing.append(entry.url) + // Reuse the already-open scope (and its URL instance) for a retained folder so + // its access is never interrupted; only newly-granted folders open a scope. + let folderURL: URL + if let open = previouslyAccessing.first(where: { $0.path == entry.url.path }) { + stillAccessing.append(open) + folderURL = open + } else if entry.url.startAccessingSecurityScopedResource() { + stillAccessing.append(entry.url) + folderURL = entry.url } else { inaccessible.insert(entry.url.path) + folderURL = entry.url } - resolved.append(Folder(url: entry.url)) + resolved.append(Folder(url: folderURL)) refreshed.append(freshData) - byPath[entry.url.path] = freshData + byPath[folderURL.path] = freshData + } + + // Release only the scopes for folders that are no longer granted. + let retainedPaths = Set(stillAccessing.map(\.path)) + for url in previouslyAccessing where !retainedPaths.contains(url.path) { + url.stopAccessingSecurityScopedResource() } + + accessing = stillAccessing folders = resolved bookmarkByPath = byPath inaccessiblePaths = inaccessible diff --git a/SnipSnaps/Files/FileLibrary.swift b/SnipSnaps/Files/FileLibrary.swift index cdcd0ea..f483a7c 100644 --- a/SnipSnaps/Files/FileLibrary.swift +++ b/SnipSnaps/Files/FileLibrary.swift @@ -37,6 +37,7 @@ enum FileLibrary { let oldCutoff = Calendar.current.date(byAdding: .day, value: -oldFileAgeDays, to: Date()) ?? .distantPast var items: [FileItem] = [] + var seen = Set() var examined = 0 var truncated = false @@ -44,9 +45,13 @@ enum FileLibrary { guard let enumerator = enumerator(for: folder) else { continue } for case let url as URL in enumerator { if Task.isCancelled { return .empty } + // Count every enumerated entry (files, directories, skipped placeholders) + // so a directory-heavy or all-iCloud tree still trips the cap instead of + // looping for a very long time without ever reaching it. if examined >= maxFilesExamined { truncated = true; break folderLoop } - guard let item = makeItem(url) else { continue } examined += 1 + guard let item = makeItem(url) else { continue } + guard seen.insert(dedupKey(item.url)).inserted else { continue } if matches(item, category: category, oldCutoff: oldCutoff), !reviewed.contains(item.url.path) { items.append(item) } @@ -62,14 +67,22 @@ enum FileLibrary { let oldCutoff = Calendar.current.date(byAdding: .day, value: -oldFileAgeDays, to: Date()) ?? .distantPast var total: [FileReviewCategory: Int] = [:] var fresh: [FileReviewCategory: Int] = [:] + var seen = Set() var examined = 0 - for folder in folders { + folderLoop: for folder in folders { guard let enumerator = enumerator(for: folder) else { continue } for case let url as URL in enumerator { - if examined >= maxFilesExamined { break } - guard let item = makeItem(url) else { continue } + if Task.isCancelled { break folderLoop } + // Cap is global across all granted folders, not per-folder, so a labeled + // break is required (a bare break would only end this folder's loop). Count + // every enumerated entry so a directory-heavy tree still trips the cap. + if examined >= maxFilesExamined { break folderLoop } examined += 1 + guard let item = makeItem(url) else { continue } + // Skip files already tallied via an overlapping grant so the cards don't + // double-count the same physical file. + guard seen.insert(dedupKey(item.url)).inserted else { continue } let notReviewed = !reviewed.contains(item.url.path) func bump(_ category: FileReviewCategory) { total[category, default: 0] += 1 @@ -94,6 +107,7 @@ enum FileLibrary { // each identical group). Unique file sizes never get hashed. static func duplicateRedundantCopies(folders: [URL], excluding reviewed: Set, limit: Int, sort: FileSortOption = .largest) -> ScanResult { var bySize: [Int64: [FileItem]] = [:] + var seen = Set() var examined = 0 var truncated = false folderLoop: for folder in folders { @@ -101,11 +115,15 @@ enum FileLibrary { for case let url as URL in enumerator { if Task.isCancelled { return .empty } if examined >= maxFilesExamined { truncated = true; break folderLoop } + examined += 1 // Bucket by logical byte length, not allocated size: identical files on // volumes with different block sizes share a logical size but not an // allocated one, and must still be compared. guard let item = makeItem(url), item.logicalSize > 0 else { continue } - examined += 1 + // Dedup by real path BEFORE bucketing: a file reachable through two + // overlapping grants would otherwise hash-match itself and be surfaced as a + // redundant copy — trashing it would delete the only copy of a unique file. + guard seen.insert(dedupKey(item.url)).inserted else { continue } bySize[item.logicalSize, default: []].append(item) } } @@ -179,6 +197,15 @@ enum FileLibrary { ) } + // Stable per-pass identity for a file. Standardizing collapses the path so a file + // reachable through overlapping grants (e.g. both ~/Downloads and + // ~/Downloads/installers are granted) resolves to one key — otherwise the same + // physical file is enumerated twice, inflating counts and, worse, colliding with + // itself in duplicate detection so its only copy gets offered for trashing. + private static func dedupKey(_ url: URL) -> String { + url.standardizedFileURL.path + } + private static func makeItem(_ url: URL) -> FileItem? { guard let rv = try? url.resourceValues(forKeys: resourceKeys) else { return nil } // Only loose regular files: skip directories, symlinks, and packages (.app etc). diff --git a/SnipSnaps/Views/Files/FileReviewSessionView.swift b/SnipSnaps/Views/Files/FileReviewSessionView.swift index 84fde82..208b10d 100644 --- a/SnipSnaps/Views/Files/FileReviewSessionView.swift +++ b/SnipSnaps/Views/Files/FileReviewSessionView.swift @@ -67,18 +67,16 @@ struct FileReviewSessionView: View { } else { reviewView } + // The pushed NavigationStack already shows a Back chevron, so no visible close + // button is needed; keep Esc as an invisible accelerator on every state. + Button("Close") { dismiss() } + .keyboardShortcut(.cancelAction) + .opacity(0) + .frame(width: 0, height: 0) + .accessibilityHidden(true) } .navigationTitle(category.title) .toolbar { - ToolbarItem(placement: .cancellationAction) { - Button { - dismiss() - } label: { - Image(systemName: "xmark") - } - .keyboardShortcut(.cancelAction) - .help("Close review (esc)") - } ToolbarItem(placement: .primaryAction) { // Re-sorting re-scans from scratch, which would discard in-progress // decisions (and leave them marked reviewed). Lock it once the user has @@ -127,6 +125,10 @@ struct FileReviewSessionView: View { // fire from anywhere in the review window without stealing focus. private var fileKeyboardShortcuts: some View { ZStack { + // Forward-delete is the second Trash key (← is bound on the visible button), + // matching the Photos review where both ← and Delete trash the current item. + Button("Move to Trash") { applyDecision(.delete) } + .keyboardShortcut(.delete, modifiers: []) Button("Quick Look") { toggleQuickLook() } .keyboardShortcut(.space, modifiers: []) Button("Reveal in Finder") { if let current { FinderActions.revealInFinder(current.url) } } @@ -219,9 +221,15 @@ struct FileReviewSessionView: View { card(for: current) .padding(.horizontal, 24) } + } + // Pin the decision bar in a .bar footer, matching the Photos review and this + // view's own summary screen so the primary actions sit in a consistent strip. + .safeAreaInset(edge: .bottom, spacing: 0) { decisionBar .padding(.horizontal, 24) - .padding(.bottom, 14) + .padding(.top, 12) + .padding(.bottom, 8) + .background(.bar) } .background(fileKeyboardShortcuts) } @@ -263,7 +271,7 @@ struct FileReviewSessionView: View { .foregroundStyle(.secondary) Text(item.parentPath) .font(.caption2) - .foregroundStyle(.tertiary) + .foregroundStyle(.secondary) .lineLimit(1) .truncationMode(.middle) } @@ -337,6 +345,9 @@ struct FileReviewSessionView: View { } label: { Image(systemName: "arrow.uturn.backward") } + // Keep Undo visually secondary (the HStack makes Keep/Trash prominent); this + // override mirrors the Photos review, where Undo is a secondary action. + .secondaryActionButton() .disabled(lastUndo == nil) .help("Undo (⌘Z)") @@ -561,7 +572,7 @@ struct FileReviewSessionView: View { } else if value.translation.width > threshold { applyDecision(.keep) } else { - withAnimation(.snappy(duration: 0.25)) { dragOffset = .zero } + withAnimation(reduceMotion ? nil : .snappy(duration: 0.25)) { dragOffset = .zero } } } diff --git a/SnipSnaps/Views/Files/FilesView.swift b/SnipSnaps/Views/Files/FilesView.swift index 13e0f25..c9e691c 100644 --- a/SnipSnaps/Views/Files/FilesView.swift +++ b/SnipSnaps/Views/Files/FilesView.swift @@ -9,6 +9,9 @@ struct FilesView: View { @State private var selectedCategory: FileReviewCategory? @State private var folderPendingRemoval: FileFolderStore.Folder? @State private var isDropTargeted = false + // Tracks the in-flight tally so a superseded count can't overwrite a newer one + // when several triggers (.onChange/.onAppear) fire close together. + @State private var countTask: Task? @AppStorage("reviewMemoryOption") private var reviewMemoryOptionRawValue: String = ReviewMemoryOption.thirtyDays.rawValue private var reviewMemoryOption: ReviewMemoryOption { @@ -69,6 +72,7 @@ struct FilesView: View { } .onChange(of: reviewMemoryOptionRawValue) { _, _ in refreshCounts() } .onAppear { refreshCounts() } + .onDisappear { countTask?.cancel() } } // MARK: - Onboarding @@ -251,17 +255,22 @@ struct FilesView: View { } private func refreshCounts() { + // Supersede any in-flight tally so its (now-stale) result is discarded rather + // than racing to overwrite this one. + countTask?.cancel() let folders = store.folders.map(\.url) guard !folders.isEmpty else { counts = [:] + isCounting = false return } isCounting = true let reviewed = FileReviewHistory.reviewedPaths(memoryOption: reviewMemoryOption) - Task { + countTask = Task { let tally = await Task.detached(priority: .utility) { FileLibrary.counts(folders: folders, reviewedPaths: reviewed) }.value + if Task.isCancelled { return } await MainActor.run { counts = tally isCounting = false @@ -302,7 +311,7 @@ private struct FileCategoryCard: View { if let summary = countSummary { Text(summary) .font(.caption.weight(.medium)) - .foregroundStyle(.tertiary) + .foregroundStyle(.secondary) .monospacedDigit() } } @@ -315,6 +324,12 @@ private struct FileCategoryCard: View { .padding(16) .frame(maxWidth: .infinity) .background(AppColor.card, in: RoundedRectangle(cornerRadius: 16, style: .continuous)) + // Consolidate into one VoiceOver element with a clean label/value/hint so the + // title, subtitle, count summary, and trailing count aren't read as fragments. + .accessibilityElement(children: .ignore) + .accessibilityLabel(category.title) + .accessibilityValue(countSummary ?? category.subtitle) + .accessibilityHint(category.showsScanAction ? "Scans this folder set for duplicates" : "Opens \(category.title) review") } private var displayCount: String { diff --git a/SnipSnaps/Views/Review/ReviewSessionView.swift b/SnipSnaps/Views/Review/ReviewSessionView.swift index 95f1ff7..d728d09 100644 --- a/SnipSnaps/Views/Review/ReviewSessionView.swift +++ b/SnipSnaps/Views/Review/ReviewSessionView.swift @@ -22,6 +22,27 @@ import AppKit typealias PlatformImage = NSImage #endif +#if os(macOS) +// A concise, fetch-free VoiceOver label for a review card (media type + capture date). +private extension PHAsset { + var reviewAccessibilityLabel: String { + var parts: [String] = [] + if mediaType == .video { + parts.append("Video") + } else if mediaSubtypes.contains(.photoScreenshot) { + parts.append("Screenshot") + } else { + parts.append("Photo") + } + if mediaSubtypes.contains(.photoLive) { parts.append("Live Photo") } + if let date = creationDate { + parts.append(date.formatted(date: .abbreviated, time: .omitted)) + } + return parts.joined(separator: ", ") + } +} +#endif + enum PhotoDecision { case keep case delete @@ -299,6 +320,15 @@ struct ReviewSessionView: View { } else { reviewView } + #if os(macOS) + // The pushed NavigationStack shows a Back chevron; keep Esc as an invisible + // accelerator on every state instead of a redundant visible close button. + Button("Close") { dismiss() } + .keyboardShortcut(.cancelAction) + .opacity(0) + .frame(width: 0, height: 0) + .accessibilityHidden(true) + #endif } .navigationTitle(mode.title) #if os(iOS) @@ -311,6 +341,9 @@ struct ReviewSessionView: View { PhotoMetadataSheet(asset: asset, details: currentPhotoDetails) } } + // iOS hides the back button, so the explicit close stays there; macOS uses the + // native Back chevron + the Esc accelerator above. + #if os(iOS) .toolbar { if !showSummary || !deleteAssets.isEmpty { ToolbarItem(placement: .cancellationAction) { @@ -320,14 +353,9 @@ struct ReviewSessionView: View { Image(systemName: "xmark") } .accessibilityLabel(showSummary ? "Close without deleting" : "Close review") - #if os(macOS) - .keyboardShortcut(.cancelAction) - .help("Close review (esc)") - #endif } } } - #if os(iOS) .toolbar(.hidden, for: .tabBar) #endif .onAppear { loadAssets() } @@ -503,6 +531,13 @@ struct ReviewSessionView: View { .onTapGesture { showMetadataSheet = true } + #if os(macOS) + // VoiceOver: label the otherwise-unlabeled photo and expose its tap (Details) + // as a rotor action. Keep/Delete stay on the labeled decision buttons. + .accessibilityElement(children: .ignore) + .accessibilityLabel(asset.reviewAccessibilityLabel) + .accessibilityAction(named: "Details") { showMetadataSheet = true } + #endif .gesture( DragGesture(minimumDistance: 4) .updating($gestureOffset) { value, state, _ in @@ -1133,12 +1168,20 @@ struct SimilarReviewSessionView: View { } else { reviewView } + #if os(macOS) + // The pushed NavigationStack shows a Back chevron; keep Esc as an invisible + // accelerator (cancelling any in-flight scan) instead of a visible close. + Button("Close") { cancelScan(); dismiss() } + .keyboardShortcut(.cancelAction) + .opacity(0) + .frame(width: 0, height: 0) + .accessibilityHidden(true) + #endif } .navigationTitle("Similar") #if os(iOS) .navigationBarTitleDisplayMode(.inline) .navigationBarBackButtonHidden(true) - #endif .toolbar { if !showSummary || !deleteAssets.isEmpty { ToolbarItem(placement: .cancellationAction) { @@ -1149,14 +1192,9 @@ struct SimilarReviewSessionView: View { Image(systemName: "xmark") } .accessibilityLabel(showSummary ? "Close without deleting" : "Close similar review") - #if os(macOS) - .keyboardShortcut(.cancelAction) - .help("Close review (esc)") - #endif } } } - #if os(iOS) .toolbar(.hidden, for: .tabBar) #endif #if os(iOS) @@ -1417,6 +1455,12 @@ struct SimilarReviewSessionView: View { .onTapGesture { metadataTarget = MetadataTarget(asset: asset, details: details(for: asset)) } + #if os(macOS) + // VoiceOver: label the photo and expose its tap (Details) as a rotor action. + .accessibilityElement(children: .ignore) + .accessibilityLabel(asset.reviewAccessibilityLabel) + .accessibilityAction(named: "Details") { metadataTarget = MetadataTarget(asset: asset, details: details(for: asset)) } + #endif .gesture( DragGesture(minimumDistance: 4) .updating($gestureOffset) { value, state, _ in