mirror of
https://github.com/danbee/persephone
synced 2025-03-04 08:39:11 +00:00
Add convenience initializer to NSPasteboardItem
This commit is contained in:
parent
1af2c939a2
commit
dc60049243
@ -40,6 +40,7 @@
|
|||||||
E435E3E2221CD4E200184CFC /* NSFont.swift in Sources */ = {isa = PBXBuildFile; fileRef = E435E3E1221CD4E200184CFC /* NSFont.swift */; };
|
E435E3E2221CD4E200184CFC /* NSFont.swift in Sources */ = {isa = PBXBuildFile; fileRef = E435E3E1221CD4E200184CFC /* NSFont.swift */; };
|
||||||
E435E3E4221CD75D00184CFC /* NSImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = E435E3E3221CD75D00184CFC /* NSImage.swift */; };
|
E435E3E4221CD75D00184CFC /* NSImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = E435E3E3221CD75D00184CFC /* NSImage.swift */; };
|
||||||
E439109822640213002982E9 /* SongNotifierService.swift in Sources */ = {isa = PBXBuildFile; fileRef = E439109722640213002982E9 /* SongNotifierService.swift */; };
|
E439109822640213002982E9 /* SongNotifierService.swift in Sources */ = {isa = PBXBuildFile; fileRef = E439109722640213002982E9 /* SongNotifierService.swift */; };
|
||||||
|
E43AC1F122C68E6A001E483C /* NSPasteboardItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = E43AC1F022C68E6A001E483C /* NSPasteboardItem.swift */; };
|
||||||
E43B67AA22909793007DCF55 /* AlbumDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E43B67A822909793007DCF55 /* AlbumDetailView.swift */; };
|
E43B67AA22909793007DCF55 /* AlbumDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E43B67A822909793007DCF55 /* AlbumDetailView.swift */; };
|
||||||
E43B67AB22909793007DCF55 /* AlbumDetailView.xib in Resources */ = {isa = PBXBuildFile; fileRef = E43B67A922909793007DCF55 /* AlbumDetailView.xib */; };
|
E43B67AB22909793007DCF55 /* AlbumDetailView.xib in Resources */ = {isa = PBXBuildFile; fileRef = E43B67A922909793007DCF55 /* AlbumDetailView.xib */; };
|
||||||
E43B67AD229194CD007DCF55 /* AlbumTracksDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = E43B67AC229194CD007DCF55 /* AlbumTracksDataSource.swift */; };
|
E43B67AD229194CD007DCF55 /* AlbumTracksDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = E43B67AC229194CD007DCF55 /* AlbumTracksDataSource.swift */; };
|
||||||
@ -260,6 +261,7 @@
|
|||||||
E435E3E1221CD4E200184CFC /* NSFont.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSFont.swift; sourceTree = "<group>"; };
|
E435E3E1221CD4E200184CFC /* NSFont.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSFont.swift; sourceTree = "<group>"; };
|
||||||
E435E3E3221CD75D00184CFC /* NSImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSImage.swift; sourceTree = "<group>"; };
|
E435E3E3221CD75D00184CFC /* NSImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSImage.swift; sourceTree = "<group>"; };
|
||||||
E439109722640213002982E9 /* SongNotifierService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongNotifierService.swift; sourceTree = "<group>"; };
|
E439109722640213002982E9 /* SongNotifierService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongNotifierService.swift; sourceTree = "<group>"; };
|
||||||
|
E43AC1F022C68E6A001E483C /* NSPasteboardItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSPasteboardItem.swift; sourceTree = "<group>"; };
|
||||||
E43B67A822909793007DCF55 /* AlbumDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlbumDetailView.swift; sourceTree = "<group>"; };
|
E43B67A822909793007DCF55 /* AlbumDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlbumDetailView.swift; sourceTree = "<group>"; };
|
||||||
E43B67A922909793007DCF55 /* AlbumDetailView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AlbumDetailView.xib; sourceTree = "<group>"; };
|
E43B67A922909793007DCF55 /* AlbumDetailView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AlbumDetailView.xib; sourceTree = "<group>"; };
|
||||||
E43B67AC229194CD007DCF55 /* AlbumTracksDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlbumTracksDataSource.swift; sourceTree = "<group>"; };
|
E43B67AC229194CD007DCF55 /* AlbumTracksDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlbumTracksDataSource.swift; sourceTree = "<group>"; };
|
||||||
@ -460,6 +462,7 @@
|
|||||||
E408D3B8220DE98F0006D9BE /* NSUserInterfaceItemIdentifier.swift */,
|
E408D3B8220DE98F0006D9BE /* NSUserInterfaceItemIdentifier.swift */,
|
||||||
E489E39822B85D0400CA8CBD /* NSPasteboard.swift */,
|
E489E39822B85D0400CA8CBD /* NSPasteboard.swift */,
|
||||||
E489E39C22B9CF0000CA8CBD /* NSView.swift */,
|
E489E39C22B9CF0000CA8CBD /* NSView.swift */,
|
||||||
|
E43AC1F022C68E6A001E483C /* NSPasteboardItem.swift */,
|
||||||
);
|
);
|
||||||
path = Extensions;
|
path = Extensions;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -979,6 +982,7 @@
|
|||||||
E4B11B61226A4C000075461B /* PlayerReducer.swift in Sources */,
|
E4B11B61226A4C000075461B /* PlayerReducer.swift in Sources */,
|
||||||
E4FF71922276029000D4C412 /* PreferencesActions.swift in Sources */,
|
E4FF71922276029000D4C412 /* PreferencesActions.swift in Sources */,
|
||||||
E489E39922B85D0400CA8CBD /* NSPasteboard.swift in Sources */,
|
E489E39922B85D0400CA8CBD /* NSPasteboard.swift in Sources */,
|
||||||
|
E43AC1F122C68E6A001E483C /* NSPasteboardItem.swift in Sources */,
|
||||||
E465049A21E94DF500A70F4C /* WindowController.swift in Sources */,
|
E465049A21E94DF500A70F4C /* WindowController.swift in Sources */,
|
||||||
E41B22C621FB932700D544F6 /* MPDClient.swift in Sources */,
|
E41B22C621FB932700D544F6 /* MPDClient.swift in Sources */,
|
||||||
E47E2FDD2220A6D100F747E6 /* Time.swift in Sources */,
|
E47E2FDD2220A6D100F747E6 /* Time.swift in Sources */,
|
||||||
|
|||||||
@ -45,20 +45,14 @@ class AlbumTracksDataSource: NSObject, NSTableViewDataSource {
|
|||||||
guard let song = albumSongItem.song
|
guard let song = albumSongItem.song
|
||||||
else { return nil }
|
else { return nil }
|
||||||
|
|
||||||
let pasteboardItem = NSPasteboardItem()
|
return NSPasteboardItem(
|
||||||
|
draggedSong: DraggedSong(
|
||||||
let draggedSong = DraggedSong(
|
type: .albumSongItem(song.mpdSong.uriString),
|
||||||
type: .albumSongItem(song.mpdSong.uriString),
|
title: song.title,
|
||||||
title: song.title,
|
artist: song.artist
|
||||||
artist: song.artist
|
),
|
||||||
|
ofType: .songPasteboardType
|
||||||
)
|
)
|
||||||
|
|
||||||
let encoder = PropertyListEncoder()
|
|
||||||
let data = try! encoder.encode(draggedSong)
|
|
||||||
|
|
||||||
pasteboardItem.setData(data, forType: .songPasteboardType)
|
|
||||||
|
|
||||||
return pasteboardItem
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func numberOfRows(in tableView: NSTableView) -> Int {
|
func numberOfRows(in tableView: NSTableView) -> Int {
|
||||||
@ -73,8 +67,7 @@ class AlbumTracksDataSource: NSObject, NSTableViewDataSource {
|
|||||||
searchOptions: [:]
|
searchOptions: [:]
|
||||||
) { draggingItem, index, stop in
|
) { draggingItem, index, stop in
|
||||||
guard let item = draggingItem.item as? NSPasteboardItem,
|
guard let item = draggingItem.item as? NSPasteboardItem,
|
||||||
let data = item.data(forType: .songPasteboardType),
|
let draggedSong = item.draggedSong(forType: .songPasteboardType),
|
||||||
let draggedSong = try? PropertyListDecoder().decode(DraggedSong.self, from: data),
|
|
||||||
case let (title?, artist?) = (draggedSong.title, draggedSong.artist)
|
case let (title?, artist?) = (draggedSong.title, draggedSong.artist)
|
||||||
else { return }
|
else { return }
|
||||||
|
|
||||||
|
|||||||
@ -43,19 +43,14 @@ class QueueDataSource: NSObject, NSOutlineViewDataSource {
|
|||||||
guard let queueItem = item as? QueueItem
|
guard let queueItem = item as? QueueItem
|
||||||
else { return nil }
|
else { return nil }
|
||||||
|
|
||||||
let pasteboardItem = NSPasteboardItem()
|
return NSPasteboardItem(
|
||||||
|
draggedSong: DraggedSong(
|
||||||
let draggedSong = DraggedSong(
|
type: .queueItem(queueItem.queuePos),
|
||||||
type: .queueItem(queueItem.queuePos),
|
title: queueItem.song.title,
|
||||||
title: queueItem.song.title,
|
artist: queueItem.song.artist
|
||||||
artist: queueItem.song.artist
|
),
|
||||||
|
ofType: .songPasteboardType
|
||||||
)
|
)
|
||||||
|
|
||||||
let data = try! PropertyListEncoder().encode(draggedSong)
|
|
||||||
|
|
||||||
pasteboardItem.setData(data, forType: .songPasteboardType)
|
|
||||||
|
|
||||||
return pasteboardItem
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func outlineView(_ outlineView: NSOutlineView, validateDrop info: NSDraggingInfo, proposedItem item: Any?, proposedChildIndex index: Int) -> NSDragOperation {
|
func outlineView(_ outlineView: NSOutlineView, validateDrop info: NSDraggingInfo, proposedItem item: Any?, proposedChildIndex index: Int) -> NSDragOperation {
|
||||||
@ -64,8 +59,8 @@ class QueueDataSource: NSObject, NSOutlineViewDataSource {
|
|||||||
guard newQueuePos >= 0,
|
guard newQueuePos >= 0,
|
||||||
let draggingTypes = info.draggingPasteboard.types,
|
let draggingTypes = info.draggingPasteboard.types,
|
||||||
draggingTypes.contains(.songPasteboardType),
|
draggingTypes.contains(.songPasteboardType),
|
||||||
let data = info.draggingPasteboard.data(forType: .songPasteboardType),
|
let pasteboardItem = info.draggingPasteboard.pasteboardItems?.first,
|
||||||
let draggedSong = try? PropertyListDecoder().decode(DraggedSong.self, from: data)
|
let draggedSong = pasteboardItem.draggedSong(forType: .songPasteboardType)
|
||||||
else { return [] }
|
else { return [] }
|
||||||
|
|
||||||
switch draggedSong.type {
|
switch draggedSong.type {
|
||||||
|
|||||||
29
Persephone/Extensions/NSPasteboardItem.swift
Normal file
29
Persephone/Extensions/NSPasteboardItem.swift
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
//
|
||||||
|
// NSPasteboardItem.swift
|
||||||
|
// Persephone
|
||||||
|
//
|
||||||
|
// Created by Daniel Barber on 2019/6/28.
|
||||||
|
// Copyright © 2019 Dan Barber. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import AppKit
|
||||||
|
|
||||||
|
extension NSPasteboardItem {
|
||||||
|
convenience init(draggedSong: DraggedSong, ofType type: NSPasteboard.PasteboardType) {
|
||||||
|
self.init()
|
||||||
|
self.setDraggedSong(draggedSong, forType: type)
|
||||||
|
}
|
||||||
|
|
||||||
|
func setDraggedSong(_ draggedSong: DraggedSong, forType type: NSPasteboard.PasteboardType) {
|
||||||
|
let data = try! PropertyListEncoder().encode(draggedSong)
|
||||||
|
|
||||||
|
setData(data, forType: type)
|
||||||
|
}
|
||||||
|
|
||||||
|
func draggedSong(forType type: NSPasteboard.PasteboardType) -> DraggedSong? {
|
||||||
|
guard let itemData = data(forType: type)
|
||||||
|
else { return nil }
|
||||||
|
|
||||||
|
return try? PropertyListDecoder().decode(DraggedSong.self, from: itemData)
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user