Archived
1

Added option to overwrite existing files when saving artwork

This commit is contained in:
Kim Wittenburg
2015-09-15 14:29:57 +02:00
committed by Kim Wittenburg
parent 4548f43797
commit e287a935b1
3 changed files with 66 additions and 37 deletions

View File

@@ -54,6 +54,10 @@ public class Artwork: iTunesType {
public func saveToURL(url: NSURL, filename: String) throws {
let directory = url.filePathURL!.path!
let filePath = directory.stringByAppendingString("/\(filename).tiff")
if !Preferences.sharedPreferences.overwriteExistingFiles && NSFileManager.defaultManager().fileExistsAtPath(filePath) {
return
}
try NSFileManager.defaultManager().createDirectoryAtPath(directory, withIntermediateDirectories: true, attributes: nil)
let _ = NSFileManager.defaultManager().createFileAtPath(filePath, contents: saveImage?.TIFFRepresentation, attributes: nil)

View File

@@ -760,11 +760,11 @@ CA
<objects>
<viewController title="General" id="tzd-4a-CRb" customClass="GeneralPreferencesViewController" customModule="TagTunes" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" id="pOc-Vr-IET" customClass="PreferenceView" customModule="AppKitPlus">
<rect key="frame" x="0.0" y="0.0" width="450" height="200"/>
<rect key="frame" x="0.0" y="0.0" width="450" height="222"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<button translatesAutoresizingMaskIntoConstraints="NO" id="kl3-n8-T9b">
<rect key="frame" x="18" y="164" width="188" height="18"/>
<rect key="frame" x="18" y="186" width="188" height="18"/>
<animations/>
<buttonCell key="cell" type="check" title="Automatically Save Artwork" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="q2l-4t-mL0">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
@@ -776,9 +776,9 @@ CA
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1fj-p7-sMs">
<rect key="frame" x="335" y="130" width="101" height="32"/>
<rect key="frame" x="335" y="152" width="101" height="32"/>
<constraints>
<constraint firstAttribute="width" constant="89" id="WSP-Sc-NcB"/>
<constraint firstAttribute="width" constant="89" id="EKB-5X-IoR"/>
</constraints>
<animations/>
<buttonCell key="cell" type="push" title="Choose…" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="A5S-ps-EYW">
@@ -789,6 +789,32 @@ CA
<action selector="chooseArtworkPath:" target="tzd-4a-CRb" id="v67-Ay-ckG"/>
</connections>
</button>
<pathControl verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" allowsExpansionToolTips="YES" translatesAutoresizingMaskIntoConstraints="NO" id="pT8-NA-x3W">
<rect key="frame" x="20" y="158" width="313" height="22"/>
<animations/>
<pathCell key="cell" selectable="YES" alignment="left" id="Sgq-Mk-WnH">
<font key="font" metaFont="system"/>
<url key="url" string="file:///Applications/"/>
</pathCell>
<connections>
<binding destination="aSx-iH-PLA" name="value" keyPath="sharedPreferences.artworkTarget" id="eFO-dQ-CMc">
<dictionary key="options">
<string key="NSNullPlaceholder">Choose an artwork directory…</string>
</dictionary>
</binding>
</connections>
</pathControl>
<button translatesAutoresizingMaskIntoConstraints="NO" id="iE4-HP-hS8">
<rect key="frame" x="18" y="134" width="160" height="18"/>
<animations/>
<buttonCell key="cell" type="check" title="Overwrite existing files" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="WQN-Bj-me1">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<binding destination="aSx-iH-PLA" name="value" keyPath="sharedPreferences.overwriteExistingFiles" id="X5P-ch-dPk"/>
</connections>
</button>
<button translatesAutoresizingMaskIntoConstraints="NO" id="MSr-08-ucR">
<rect key="frame" x="18" y="112" width="147" height="18"/>
<animations/>
@@ -809,21 +835,6 @@ CA
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<pathControl verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" allowsExpansionToolTips="YES" translatesAutoresizingMaskIntoConstraints="NO" id="pT8-NA-x3W">
<rect key="frame" x="20" y="136" width="313" height="22"/>
<animations/>
<pathCell key="cell" selectable="YES" alignment="left" id="Sgq-Mk-WnH">
<font key="font" metaFont="system"/>
<url key="url" string="file:///Applications/"/>
</pathCell>
<connections>
<binding destination="aSx-iH-PLA" name="value" keyPath="sharedPreferences.artworkTarget" id="eFO-dQ-CMc">
<dictionary key="options">
<string key="NSNullPlaceholder">Choose an artwork directory…</string>
</dictionary>
</binding>
</connections>
</pathControl>
<button translatesAutoresizingMaskIntoConstraints="NO" id="HT2-V6-Vrs">
<rect key="frame" x="18" y="68" width="184" height="18"/>
<animations/>
@@ -847,23 +858,24 @@ CA
</textField>
</subviews>
<constraints>
<constraint firstItem="ODz-LZ-Acs" firstAttribute="leading" secondItem="HT2-V6-Vrs" secondAttribute="leading" constant="12" id="25f-2r-FaA"/>
<constraint firstItem="QNf-Uy-bMT" firstAttribute="top" secondItem="MSr-08-ucR" secondAttribute="bottom" constant="8" symbolic="YES" id="3Vk-P7-72n"/>
<constraint firstItem="kl3-n8-T9b" firstAttribute="leading" secondItem="pOc-Vr-IET" secondAttribute="leading" constant="20" symbolic="YES" id="5VS-q6-Nyw"/>
<constraint firstItem="ODz-LZ-Acs" firstAttribute="trailing" secondItem="QNf-Uy-bMT" secondAttribute="trailing" id="DdL-th-MQ2"/>
<constraint firstAttribute="trailing" secondItem="1fj-p7-sMs" secondAttribute="trailing" constant="20" symbolic="YES" id="Np8-sr-aF0"/>
<constraint firstItem="ODz-LZ-Acs" firstAttribute="top" secondItem="HT2-V6-Vrs" secondAttribute="bottom" constant="8" symbolic="YES" id="SAY-2i-rH1"/>
<constraint firstItem="1fj-p7-sMs" firstAttribute="baseline" secondItem="pT8-NA-x3W" secondAttribute="baseline" id="c2l-d6-00D"/>
<constraint firstItem="MSr-08-ucR" firstAttribute="leading" secondItem="pT8-NA-x3W" secondAttribute="leading" id="dAH-m2-853"/>
<constraint firstItem="pT8-NA-x3W" firstAttribute="leading" secondItem="kl3-n8-T9b" secondAttribute="leading" id="dCN-mx-bY1"/>
<constraint firstItem="1fj-p7-sMs" firstAttribute="leading" secondItem="pT8-NA-x3W" secondAttribute="trailing" constant="8" symbolic="YES" id="ejc-iL-QON"/>
<constraint firstItem="HT2-V6-Vrs" firstAttribute="top" secondItem="QNf-Uy-bMT" secondAttribute="bottom" constant="8" symbolic="YES" id="fJM-Ah-gU1"/>
<constraint firstItem="kl3-n8-T9b" firstAttribute="top" secondItem="pOc-Vr-IET" secondAttribute="top" constant="20" symbolic="YES" id="h13-nP-neh"/>
<constraint firstItem="pT8-NA-x3W" firstAttribute="top" secondItem="kl3-n8-T9b" secondAttribute="bottom" constant="8" symbolic="YES" id="qdu-oL-zyh"/>
<constraint firstItem="MSr-08-ucR" firstAttribute="top" secondItem="pT8-NA-x3W" secondAttribute="bottom" constant="8" symbolic="YES" id="sSO-jr-zo1"/>
<constraint firstItem="HT2-V6-Vrs" firstAttribute="leading" secondItem="MSr-08-ucR" secondAttribute="leading" id="thF-OZ-pko"/>
<constraint firstItem="QNf-Uy-bMT" firstAttribute="trailing" secondItem="1fj-p7-sMs" secondAttribute="trailing" id="tri-hX-smF"/>
<constraint firstItem="QNf-Uy-bMT" firstAttribute="leading" secondItem="MSr-08-ucR" secondAttribute="leading" constant="12" id="tyS-Y5-FOc"/>
<constraint firstItem="kl3-n8-T9b" firstAttribute="leading" secondItem="pT8-NA-x3W" secondAttribute="leading" id="14U-Qy-cIb"/>
<constraint firstItem="1fj-p7-sMs" firstAttribute="trailing" secondItem="QNf-Uy-bMT" secondAttribute="trailing" id="1dO-X0-RCl"/>
<constraint firstAttribute="bottom" secondItem="ODz-LZ-Acs" secondAttribute="bottom" constant="20" symbolic="YES" id="3xM-bh-eY2"/>
<constraint firstItem="ODz-LZ-Acs" firstAttribute="top" secondItem="HT2-V6-Vrs" secondAttribute="bottom" constant="8" symbolic="YES" id="DkF-kz-drm"/>
<constraint firstItem="HT2-V6-Vrs" firstAttribute="top" secondItem="QNf-Uy-bMT" secondAttribute="bottom" constant="8" symbolic="YES" id="HMN-Go-Bye"/>
<constraint firstItem="QNf-Uy-bMT" firstAttribute="leading" secondItem="ODz-LZ-Acs" secondAttribute="leading" id="JqT-1C-LFg"/>
<constraint firstItem="pT8-NA-x3W" firstAttribute="baseline" secondItem="1fj-p7-sMs" secondAttribute="baseline" id="LqN-ud-IWM"/>
<constraint firstItem="kl3-n8-T9b" firstAttribute="leading" secondItem="pOc-Vr-IET" secondAttribute="leading" constant="20" symbolic="YES" id="NSX-jk-ITr"/>
<constraint firstItem="MSr-08-ucR" firstAttribute="leading" secondItem="iE4-HP-hS8" secondAttribute="leading" id="Ott-bf-Jd3"/>
<constraint firstAttribute="trailing" secondItem="1fj-p7-sMs" secondAttribute="trailing" constant="20" symbolic="YES" id="Ucr-v6-obP"/>
<constraint firstItem="iE4-HP-hS8" firstAttribute="leading" secondItem="pT8-NA-x3W" secondAttribute="leading" id="cZq-iz-phO"/>
<constraint firstItem="iE4-HP-hS8" firstAttribute="top" secondItem="pT8-NA-x3W" secondAttribute="bottom" constant="8" symbolic="YES" id="g9V-s8-6a8"/>
<constraint firstItem="QNf-Uy-bMT" firstAttribute="top" secondItem="MSr-08-ucR" secondAttribute="bottom" constant="8" symbolic="YES" id="l11-R3-ejh"/>
<constraint firstItem="QNf-Uy-bMT" firstAttribute="leading" secondItem="pOc-Vr-IET" secondAttribute="leading" constant="32" id="mZA-pG-v6r"/>
<constraint firstItem="kl3-n8-T9b" firstAttribute="top" secondItem="pOc-Vr-IET" secondAttribute="top" constant="20" symbolic="YES" id="pRK-sJ-oMw"/>
<constraint firstItem="1fj-p7-sMs" firstAttribute="leading" secondItem="pT8-NA-x3W" secondAttribute="trailing" constant="8" symbolic="YES" id="qbN-IH-9co"/>
<constraint firstItem="pT8-NA-x3W" firstAttribute="top" secondItem="kl3-n8-T9b" secondAttribute="bottom" constant="8" symbolic="YES" id="xAH-yb-aOW"/>
<constraint firstItem="MSr-08-ucR" firstAttribute="leading" secondItem="HT2-V6-Vrs" secondAttribute="leading" id="xmI-IP-qsj"/>
</constraints>
<animations/>
<userDefinedRuntimeAttributes>
@@ -883,7 +895,7 @@ CA
<customObject id="RtZ-4O-Pgk" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
<customObject id="aSx-iH-PLA" userLabel="Preferences" customClass="PreferencesSingleton" customModule="TagTunes" customModuleProvider="target"/>
</objects>
<point key="canvasLocation" x="-1031" y="1087"/>
<point key="canvasLocation" x="-1031" y="1098"/>
</scene>
<!--Tags-->
<scene sceneID="oNy-iK-NsG">

View File

@@ -32,6 +32,8 @@ import Cocoa
static let artworkTargetKey = "Artwork Target"
static let overwriteExistingFilesKey = "Overwrite Existing Files"
static let keepSearchResultsKey = "Keep Search Results"
static let removeSavedAlbumsKey = "Remove Saved Albums"
@@ -72,6 +74,7 @@ import Cocoa
public func initializeDefaultValues() {
NSUserDefaults.standardUserDefaults().registerDefaults([
UserDefaultsConstants.saveArtworkKey: false,
UserDefaultsConstants.overwriteExistingFilesKey: false,
UserDefaultsConstants.keepSearchResultsKey: false,
UserDefaultsConstants.removeSavedAlbumsKey: false,
UserDefaultsConstants.useLowResolutionArtworkKey: false,
@@ -113,6 +116,16 @@ import Cocoa
}
}
/// If `true` any existing files will be overwritten when artworks are saved.
public dynamic var overwriteExistingFiles: Bool {
set {
NSUserDefaults.standardUserDefaults().setBool(newValue, forKey: UserDefaultsConstants.overwriteExistingFilesKey)
}
get {
return NSUserDefaults.standardUserDefaults().boolForKey(UserDefaultsConstants.overwriteExistingFilesKey)
}
}
/// If `true` the search results are not removed from the main outline view
/// when the user selects a result.
public dynamic var keepSearchResults: Bool {