mirror of
https://github.com/FBukovina/Atoll.git
synced 2026-10-28 23:54:32 +00:00
Somewhat working file tray
This commit is contained in:
parent
4c7e79b954
commit
30422c3d95
29 changed files with 4032 additions and 65 deletions
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue