64 lines
1.1 KiB
Swift
64 lines
1.1 KiB
Swift
//
|
|
// NSPasteboard+RSCore.swift
|
|
// RSCore
|
|
//
|
|
// Created by Brent Simmons on 2/11/18.
|
|
// Copyright © 2018 Ranchero Software, LLC. All rights reserved.
|
|
//
|
|
#if os(macOS)
|
|
import AppKit
|
|
|
|
public extension NSPasteboard {
|
|
|
|
@MainActor func copyObjects(_ objects: [Any]) {
|
|
|
|
guard let writers = writersFor(objects) else {
|
|
return
|
|
}
|
|
|
|
clearContents()
|
|
writeObjects(writers)
|
|
}
|
|
|
|
func canCopyAtLeastOneObject(_ objects: [Any]) -> Bool {
|
|
|
|
for object in objects {
|
|
if object is PasteboardWriterOwner {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
}
|
|
|
|
public extension NSPasteboard {
|
|
|
|
static func urlString(from pasteboard: NSPasteboard) -> String? {
|
|
return pasteboard.urlString
|
|
}
|
|
|
|
private var urlString: String? {
|
|
guard let type = self.availableType(from: [.string]) else {
|
|
return nil
|
|
}
|
|
|
|
guard let str = self.string(forType: type), !str.isEmpty else {
|
|
return nil
|
|
}
|
|
|
|
return str.mayBeURL ? str : nil
|
|
}
|
|
|
|
}
|
|
|
|
private extension NSPasteboard {
|
|
|
|
@MainActor func writersFor(_ objects: [Any]) -> [NSPasteboardWriting]? {
|
|
|
|
let writers = objects.compactMap { ($0 as? PasteboardWriterOwner)?.pasteboardWriter }
|
|
return writers.isEmpty ? nil : writers
|
|
}
|
|
}
|
|
#endif
|