Somewhat working file tray

This commit is contained in:
Hariharan Mudaliar 2025-12-08 13:29:25 +05:30
commit 30422c3d95
29 changed files with 4032 additions and 65 deletions

View file

@ -0,0 +1,59 @@
//
// ShelfActionService.swift
// boringNotch
//
// Created by Alexander on 2025-10-07.
//
import AppKit
import Foundation
/// A service providing common actions for `ShelfItem`s, such as opening, revealing, or copying paths.
@MainActor
enum ShelfActionService {
static func open(_ item: ShelfItem) {
switch item.kind {
case .file(let bookmark):
handleBookmarkedFile(bookmark) { url in
NSWorkspace.shared.open(url)
}
case .link(let url):
NSWorkspace.shared.open(url)
case .text(let string):
NSPasteboard.general.clearContents()
NSPasteboard.general.setString(string, forType: .string)
}
}
static func reveal(_ item: ShelfItem) {
guard case .file(let bookmark) = item.kind else { return }
handleBookmarkedFile(bookmark) { url in
NSWorkspace.shared.activateFileViewerSelecting([url])
}
}
static func copyPath(_ item: ShelfItem) {
guard case .file(let bookmark) = item.kind else { return }
handleBookmarkedFile(bookmark) { url in
NSPasteboard.general.clearContents()
NSPasteboard.general.setString(url.path, forType: .string)
}
}
static func remove(_ item: ShelfItem) {
ShelfStateViewModel.shared.remove(item)
}
private static func handleBookmarkedFile(_ bookmarkData: Data, action: @escaping @Sendable (URL) -> Void) {
Task {
let bookmark = Bookmark(data: bookmarkData)
if let url = bookmark.resolveURL() {
url.accessSecurityScopedResource { accessibleURL in
action(accessibleURL)
}
}
}
}
}