diff --git a/Changelog.txt b/Changelog.txt index 5483856..e7212cc 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -9,7 +9,9 @@ Added: + Options for tags not to be saved + Option to use censored names + Option for case (in)sensitivity ++ Toolbar button to just save the artwork of the selected items Fixed: * Added support for OS X 10.11 El Capitan -* Error descriptions are now more understandable \ No newline at end of file +* Error descriptions are now more understandable +* Cancelling the saving process of tracks does not crash the application on slow network connections anymore \ No newline at end of file diff --git a/Credits.rtf b/Credits.rtf new file mode 100644 index 0000000..239eebc --- /dev/null +++ b/Credits.rtf @@ -0,0 +1,14 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1404 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\paperw12240\paperh15840\margl1440\margr1440\vieww9000\viewh8400\viewkind0 +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 + +\f0\b\fs24 \cf0 Design an Development +\b0 \ +Kim Wittenburg\ +\ + +\b Icon Attributions +\b0 \ +The Save Artwork icon was made by {\field{\*\fldinst{HYPERLINK "http://www.freepik.com"}}{\fldrslt Freepik}} from {\field{\*\fldinst{HYPERLINK "http://www.flaticon.com"}}{\fldrslt Flaticon}}. It is licensed under {\field{\*\fldinst{HYPERLINK "http://creativecommons.org/licenses/by/3.0/"}}{\fldrslt CC BY 3.0}}.} \ No newline at end of file diff --git a/TagTunes.xcodeproj/project.pbxproj b/TagTunes.xcodeproj/project.pbxproj index df7e402..648c8d4 100644 --- a/TagTunes.xcodeproj/project.pbxproj +++ b/TagTunes.xcodeproj/project.pbxproj @@ -16,14 +16,15 @@ 3B489DC71B90B38C002B7EB3 /* iTunes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B489DC61B90B38C002B7EB3 /* iTunes.swift */; }; 3B489DCB1B90B3E3002B7EB3 /* iTunes.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B489DCA1B90B3E3002B7EB3 /* iTunes.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; 3B489DD61B90E0D8002B7EB3 /* AlbumTableCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B489DD51B90E0D8002B7EB3 /* AlbumTableCellView.swift */; }; + 3B66275F1BA767C500483219 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 3B66275E1BA767C500483219 /* Credits.rtf */; settings = {ASSET_TAGS = (); }; }; 3B76C7731B909B280025D550 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B76C7721B909B280025D550 /* AppDelegate.swift */; }; 3B76C7751B909B280025D550 /* MainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B76C7741B909B280025D550 /* MainViewController.swift */; }; - 3B76C7771B909B280025D550 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3B76C7761B909B280025D550 /* Assets.xcassets */; }; 3B76C77A1B909B280025D550 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3B76C7781B909B280025D550 /* Main.storyboard */; }; 3B76C7851B909B280025D550 /* TagTunesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B76C7841B909B280025D550 /* TagTunesTests.swift */; }; 3B76C7901B909B280025D550 /* TagTunesUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B76C78F1B909B280025D550 /* TagTunesUITests.swift */; }; 3B96BD661B9CA24100CC4101 /* DescriptiveError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B96BD651B9CA24100CC4101 /* DescriptiveError.swift */; }; 3BAD17CD1B9F0F6800FEF908 /* AlbumCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BAD17CC1B9F0F6800FEF908 /* AlbumCollection.swift */; }; + 3BB1C97D1BA76F5F0083301F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3BB1C97C1BA76F5F0083301F /* Assets.xcassets */; settings = {ASSET_TAGS = (); }; }; 3BB8C5431BA2EEE800031021 /* Changelog.txt in Resources */ = {isa = PBXBuildFile; fileRef = 3BB8C5421BA2EEE800031021 /* Changelog.txt */; }; 3BBF6FA01B946B7000BB1EDB /* SearchResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BBF6F9F1B946B7000BB1EDB /* SearchResult.swift */; }; 3BBF710B1B95E00F00BB1EDB /* AppKitPlus.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3BBF710A1B95E00F00BB1EDB /* AppKitPlus.framework */; }; @@ -58,10 +59,10 @@ 3B489DC91B90B3E3002B7EB3 /* iTunes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iTunes.h; sourceTree = ""; }; 3B489DCA1B90B3E3002B7EB3 /* iTunes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iTunes.m; sourceTree = ""; }; 3B489DD51B90E0D8002B7EB3 /* AlbumTableCellView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = AlbumTableCellView.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; + 3B66275E1BA767C500483219 /* Credits.rtf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.rtf; path = Credits.rtf; sourceTree = ""; }; 3B76C76F1B909B280025D550 /* TagTunes.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TagTunes.app; sourceTree = BUILT_PRODUCTS_DIR; }; 3B76C7721B909B280025D550 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 3B76C7741B909B280025D550 /* MainViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainViewController.swift; sourceTree = ""; }; - 3B76C7761B909B280025D550 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 3B76C7791B909B280025D550 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 3B76C77B1B909B280025D550 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 3B76C7801B909B280025D550 /* TagTunesTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TagTunesTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -72,6 +73,7 @@ 3B76C7911B909B280025D550 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 3B96BD651B9CA24100CC4101 /* DescriptiveError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DescriptiveError.swift; sourceTree = ""; }; 3BAD17CC1B9F0F6800FEF908 /* AlbumCollection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AlbumCollection.swift; sourceTree = ""; }; + 3BB1C97C1BA76F5F0083301F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 3BB8C5421BA2EEE800031021 /* Changelog.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Changelog.txt; sourceTree = ""; }; 3BBF6F9F1B946B7000BB1EDB /* SearchResult.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchResult.swift; sourceTree = ""; }; 3BBF710A1B95E00F00BB1EDB /* AppKitPlus.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKitPlus.framework; path = "../../../../Library/Developer/Xcode/DerivedData/TagTunes-ahlftzbggvvcneeglkkowfbohpzh/Build/Products/Debug/AppKitPlus.framework"; sourceTree = ""; }; @@ -116,6 +118,7 @@ 3B76C7661B909B280025D550 = { isa = PBXGroup; children = ( + 3B66275E1BA767C500483219 /* Credits.rtf */, 3BB8C5421BA2EEE800031021 /* Changelog.txt */, 3BBF71161B98FB4200BB1EDB /* README.md */, 3B76C7711B909B280025D550 /* TagTunes */, @@ -196,7 +199,7 @@ isa = PBXGroup; children = ( 3B76C7781B909B280025D550 /* Main.storyboard */, - 3B76C7761B909B280025D550 /* Assets.xcassets */, + 3BB1C97C1BA76F5F0083301F /* Assets.xcassets */, 3B489DD51B90E0D8002B7EB3 /* AlbumTableCellView.swift */, 3B489DBD1B90B055002B7EB3 /* TrackTableCellView.swift */, ); @@ -315,9 +318,10 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 3B76C7771B909B280025D550 /* Assets.xcassets in Resources */, 3B76C77A1B909B280025D550 /* Main.storyboard in Resources */, 3BB8C5431BA2EEE800031021 /* Changelog.txt in Resources */, + 3BB1C97D1BA76F5F0083301F /* Assets.xcassets in Resources */, + 3B66275F1BA767C500483219 /* Credits.rtf in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -489,6 +493,10 @@ CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/TagTunes", + ); INFOPLIST_FILE = TagTunes/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = wittenburg.kim.TagTunes; @@ -506,6 +514,10 @@ CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/TagTunes", + ); INFOPLIST_FILE = TagTunes/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = wittenburg.kim.TagTunes; diff --git a/TagTunes/Album.swift b/TagTunes/Album.swift index 54dd640..ef8bdf5 100644 --- a/TagTunes/Album.swift +++ b/TagTunes/Album.swift @@ -109,8 +109,9 @@ public class Album: iTunesType { /// Saves the album's artwork to the directory specified in the user's /// preferences (See `Preferences` for details). public func saveArtwork() throws { - let url = Preferences.sharedPreferences.artworkTarget - try artwork.saveToURL(url, filename: name) + if let url = Preferences.sharedPreferences.artworkTarget { + try artwork.saveToURL(url, filename: name) + } } /// Returns `true` if all tracks of the album are saved. diff --git a/TagTunes/Base.lproj/Main.storyboard b/TagTunes/Base.lproj/Main.storyboard index b28911d..d576470 100644 --- a/TagTunes/Base.lproj/Main.storyboard +++ b/TagTunes/Base.lproj/Main.storyboard @@ -675,19 +675,26 @@ CA - + - + - - + + + + + + + - + - + + + @@ -757,9 +764,9 @@ CA