mirror of
https://github.com/FBukovina/Atoll.git
synced 2026-10-27 15:14:33 +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,69 @@
|
|||
//
|
||||
// ShelfDropService.swift
|
||||
// boringNotch
|
||||
//
|
||||
// Created by Alexander on 2025-09-26.
|
||||
//
|
||||
|
||||
import AppKit
|
||||
import Foundation
|
||||
import UniformTypeIdentifiers
|
||||
|
||||
struct ShelfDropService {
|
||||
static func items(from providers: [NSItemProvider]) async -> [ShelfItem] {
|
||||
var results: [ShelfItem] = []
|
||||
|
||||
for provider in providers {
|
||||
if let item = await processProvider(provider) {
|
||||
results.append(item)
|
||||
}
|
||||
}
|
||||
|
||||
return results
|
||||
}
|
||||
|
||||
private static func processProvider(_ provider: NSItemProvider) async -> ShelfItem? {
|
||||
if let actualFileURL = await provider.extractFileURL() {
|
||||
if let bookmark = createBookmark(for: actualFileURL) {
|
||||
return await ShelfItem(kind: .file(bookmark: bookmark), isTemporary: false)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
if let url = await provider.extractURL() {
|
||||
if url.isFileURL {
|
||||
if let bookmark = createBookmark(for: url) {
|
||||
return await ShelfItem(kind: .file(bookmark: bookmark), isTemporary: false)
|
||||
}
|
||||
} else {
|
||||
return await ShelfItem(kind: .link(url: url), isTemporary: false)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
if let text = await provider.extractText() {
|
||||
return await ShelfItem(kind: .text(string: text), isTemporary: false)
|
||||
}
|
||||
|
||||
if let data = await provider.loadData() {
|
||||
if let tempDataURL = await TemporaryFileStorageService.shared.createTempFile(for: .data(data, suggestedName: provider.suggestedName)),
|
||||
let bookmark = createBookmark(for: tempDataURL) {
|
||||
return await ShelfItem(kind: .file(bookmark: bookmark), isTemporary: true)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
if let fileURL = await provider.extractItem() {
|
||||
if let bookmark = createBookmark(for: fileURL) {
|
||||
return await ShelfItem(kind: .file(bookmark: bookmark), isTemporary: false)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
private static func createBookmark(for url: URL) -> Data? {
|
||||
return (try? Bookmark(url: url))?.data
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue