Version 1.0 of TagTunes.
This commit is contained in:
106
TagTunes/Artwork.swift
Normal file
106
TagTunes/Artwork.swift
Normal file
@@ -0,0 +1,106 @@
|
||||
//
|
||||
// Artwork.swift
|
||||
// Tag for iTunes
|
||||
//
|
||||
// Created by Kim Wittenburg on 30.05.15.
|
||||
// Copyright (c) 2015 Kim Wittenburg. All rights reserved.
|
||||
//
|
||||
|
||||
import Cocoa
|
||||
|
||||
/// Represents an Artwork from the
|
||||
/// [Search API](https://www.apple.com/itunes/affiliates/resources/documentation/itunes-store-web-service-search-api.html).
|
||||
public class Artwork: iTunesType {
|
||||
|
||||
// MARK: Properties
|
||||
|
||||
/// The URL for the artwork, sized to 60x60 pixels.
|
||||
public let url60: NSURL
|
||||
|
||||
/// The URL for the artwork, sized to 100x100 pixels.
|
||||
public let url100: NSURL
|
||||
|
||||
/// The URL for the artwork with full resolution.
|
||||
///
|
||||
/// - note: This URL is aquired by using an unofficial hack. If Apple changes
|
||||
/// the way the full resolution artworks are stored this URL may be
|
||||
/// `nil`.
|
||||
public let hiResURL: NSURL!
|
||||
|
||||
// MARK: Initializers
|
||||
|
||||
public required init(data: [iTunesAPI.Field: AnyObject]) {
|
||||
url60 = NSURL(string: data[.ArtworkUrl60] as! String)!
|
||||
url100 = NSURL(string: data[.ArtworkUrl100] as! String)!
|
||||
var hiResURLString = (data[.ArtworkUrl100] as! String)
|
||||
let hotSpotRange = hiResURLString.rangeOfString("100x100", options: .BackwardsSearch, range: nil, locale: nil)!
|
||||
hiResURLString.replaceRange(hotSpotRange, with: "1500x1500")
|
||||
hiResURL = NSURL(string: hiResURLString)
|
||||
}
|
||||
|
||||
public static var requiredFields: [iTunesAPI.Field] {
|
||||
return [.ArtworkUrl60, .ArtworkUrl100]
|
||||
}
|
||||
|
||||
// MARK: Methods
|
||||
|
||||
/// Saves the high resolution artwork to the specified URL. If there is
|
||||
/// alread a file at the specified URL it will be overwritten.
|
||||
///
|
||||
/// - parameters:
|
||||
/// - url: The URL of the directory the artwork is going to be saved to.
|
||||
/// This must be a valid file URL.
|
||||
/// - filename: The filename to be used (without the file extension).
|
||||
public func saveToURL(url: NSURL, filename: String) throws {
|
||||
let directory = url.filePathURL!.path!
|
||||
let filePath = directory.stringByAppendingString("/\(filename).tiff")
|
||||
|
||||
try NSFileManager.defaultManager().createDirectoryAtPath(directory, withIntermediateDirectories: true, attributes: nil)
|
||||
let _ = NSFileManager.defaultManager().createFileAtPath(filePath, contents: hiResImage?.TIFFRepresentation, attributes: nil)
|
||||
}
|
||||
|
||||
// MARK: Calculated Properties
|
||||
|
||||
private var cachedImage60: NSImage?
|
||||
|
||||
/// Returns an `NSImage` instance of the image located at `url60`.
|
||||
///
|
||||
/// - attention: The first time this method is called the current thread will
|
||||
/// be blocked until the image is loaded.
|
||||
public var image60: NSImage? {
|
||||
if cachedImage60 == nil {
|
||||
cachedImage60 = NSImage(byReferencingURL: url60)
|
||||
}
|
||||
return cachedImage60
|
||||
}
|
||||
|
||||
private var cachedImage100: NSImage?
|
||||
|
||||
/// Returns an `NSImage` instance of the image located at `url100`.
|
||||
///
|
||||
/// - attention: The first time this method is called the current thread will
|
||||
/// be blocked until the image is loaded.
|
||||
public var image100: NSImage? {
|
||||
if cachedImage100 == nil {
|
||||
cachedImage100 = NSImage(byReferencingURL: url100)
|
||||
}
|
||||
return cachedImage100
|
||||
}
|
||||
|
||||
private var cachedHiResImage: NSImage?
|
||||
|
||||
/// Returns an `NSImage` instance of the image located at `hiResURL`.
|
||||
///
|
||||
/// - attention: The first time this method is called the current thread will
|
||||
/// be blocked until the image is loaded.
|
||||
public var hiResImage: NSImage? {
|
||||
if hiResURL == nil {
|
||||
return nil
|
||||
}
|
||||
if cachedHiResImage == nil {
|
||||
cachedHiResImage = NSImage(byReferencingURL: hiResURL)
|
||||
}
|
||||
return cachedHiResImage
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user