1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- import Cocoa
- extension NSPasteboard.PasteboardType {
- static let localDraggedTypes = NSPasteboard.PasteboardType("com.local.draggedtypes")
- }
- class KMFilePromiseProvider: NSFilePromiseProvider {
- struct UserInfoKeys {
- static let indexPathKey = "indexPath"
- static let urlKey = "url"
- }
-
-
-
- var kmSupportTypes: [NSPasteboard.PasteboardType] = [.fileURL, .localDraggedTypes]
-
-
- override func writableTypes(for pasteboard: NSPasteboard) -> [NSPasteboard.PasteboardType] {
- var types = super.writableTypes(for: pasteboard)
- for _type in self.kmSupportTypes {
- types.append(_type)
- }
- return types
- }
-
-
- override func pasteboardPropertyList(forType type: NSPasteboard.PasteboardType) -> Any? {
- guard let userInfoDict = userInfo as? [String: Any] else { return nil }
- switch type {
- case .fileURL:
-
- if let url = userInfoDict[KMFilePromiseProvider.UserInfoKeys.urlKey] as? NSURL {
- return url.pasteboardPropertyList(forType: type)
- }
- case .localDraggedTypes:
-
- let indexPathData = userInfoDict[KMFilePromiseProvider.UserInfoKeys.indexPathKey]
- return indexPathData
- default:
- break
- }
- return super.pasteboardPropertyList(forType: type)
- }
-
-
- public override func writingOptions(forType type: NSPasteboard.PasteboardType, pasteboard: NSPasteboard)
- -> NSPasteboard.WritingOptions {
- return super.writingOptions(forType: type, pasteboard: pasteboard)
- }
- }
|