1
1
mirror of https://github.com/danbee/persephone synced 2025-03-04 08:39:11 +00:00
persephone/Persephone/Services/Extensions/AlbumArtService+Filesystem.swift

70 lines
1.7 KiB
Swift

//
// AlbumArtService+Filesystem.swift
// Persephone
//
// Created by Daniel Barber on 2019/3/17.
// Copyright © 2019 Dan Barber. All rights reserved.
//
import Cocoa
extension AlbumArtService {
func getArtworkFromFilesystem(
for album: AlbumItem,
callback: @escaping (_ image: NSImage) -> Void
) {
var tryImage: NSImage?
let coverArtFilenames = [
"folder.jpg",
"cover.jpg",
"\(album.artist) - \(album.title).jpg"
]
let callback = { (_ albumURI: String?) in
guard let albumURI = albumURI
else { return }
let musicDir = self.preferences.expandedMpdLibraryDir
let fullAlbumURI = "\(musicDir)/\(albumURI)"
for coverArtFilename in coverArtFilenames {
let coverArtURI = "\(fullAlbumURI)/\(coverArtFilename)"
tryImage = self.tryImage(coverArtURI)
if let image = tryImage {
self.cacheArtwork(
for: album,
data: image.jpegData(compressionQuality: self.cachedArtworkQuality)
)
callback(image)
break
}
}
if tryImage == nil && self.preferences.fetchMissingArtworkFromInternet {
self.getRemoteArtwork(for: album, callback: callback)
}
}
AppDelegate.mpdClient.getAlbumURI(
for: album.album,
callback: callback
)
}
func tryImage(_ filePath: String) -> NSImage? {
guard FileManager.default.fileExists(atPath: filePath),
let data = FileManager.default.contents(atPath: filePath),
let image = NSImage(data: data)
else { return nil }
let imageThumb = image.toFitBox(
size: NSSize(width: self.cachedArtworkSize, height: self.cachedArtworkSize)
)
return imageThumb
}
}