Support for album art metadata.

CQTexperiment
vspader 2009-03-08 13:04:09 -07:00
parent bd523075a4
commit 7491fd3bf0
10 changed files with 249 additions and 75 deletions

View File

@ -40,6 +40,8 @@
1766C8990B912FB4004A7AE4 /* shuffle_on.png in Resources */ = {isa = PBXBuildFile; fileRef = 1766C8910B912FB4004A7AE4 /* shuffle_on.png */; };
1770429C0B8BC53600B86321 /* AppController.m in Sources */ = {isa = PBXBuildFile; fileRef = 177042980B8BC53600B86321 /* AppController.m */; };
1770429E0B8BC53600B86321 /* PlaybackController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1770429A0B8BC53600B86321 /* PlaybackController.m */; };
1778D3B00F645A190037E7A0 /* missingArt.png in Resources */ = {isa = PBXBuildFile; fileRef = 1778D3AF0F645A190037E7A0 /* missingArt.png */; };
1778D3CA0F645BF00037E7A0 /* MissingAlbumArtTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 1778D3C90F645BF00037E7A0 /* MissingAlbumArtTransformer.m */; };
177EBFA20B8BC2A70000BC8C /* AppleRemote.m in Sources */ = {isa = PBXBuildFile; fileRef = 177EBF7F0B8BC2A70000BC8C /* AppleRemote.m */; };
177EBFA70B8BC2A70000BC8C /* ImageTextCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 177EBF870B8BC2A70000BC8C /* ImageTextCell.m */; };
177EBFAB0B8BC2A70000BC8C /* NDHotKeyControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 177EBF8D0B8BC2A70000BC8C /* NDHotKeyControl.m */; };
@ -576,6 +578,9 @@
177042980B8BC53600B86321 /* AppController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = AppController.m; sourceTree = "<group>"; };
177042990B8BC53600B86321 /* PlaybackController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PlaybackController.h; sourceTree = "<group>"; };
1770429A0B8BC53600B86321 /* PlaybackController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = PlaybackController.m; sourceTree = "<group>"; };
1778D3AF0F645A190037E7A0 /* missingArt.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = missingArt.png; path = Images/missingArt.png; sourceTree = "<group>"; };
1778D3C80F645BF00037E7A0 /* MissingAlbumArtTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MissingAlbumArtTransformer.h; path = InfoInspector/MissingAlbumArtTransformer.h; sourceTree = "<group>"; };
1778D3C90F645BF00037E7A0 /* MissingAlbumArtTransformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MissingAlbumArtTransformer.m; path = InfoInspector/MissingAlbumArtTransformer.m; sourceTree = "<group>"; };
177EBF7F0B8BC2A70000BC8C /* AppleRemote.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = AppleRemote.m; sourceTree = "<group>"; };
177EBF860B8BC2A70000BC8C /* ImageTextCell.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ImageTextCell.h; sourceTree = "<group>"; };
177EBF870B8BC2A70000BC8C /* ImageTextCell.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = ImageTextCell.m; sourceTree = "<group>"; };
@ -937,6 +942,7 @@
177EC02D0B8BC2E60000BC8C /* Images */ = {
isa = PBXGroup;
children = (
1778D3AF0F645A190037E7A0 /* missingArt.png */,
17B7CF590F5A05EE00A47027 /* pauseBadge.png */,
17B7CF5A0F5A05EE00A47027 /* playBadge.png */,
17B7CF5B0F5A05EE00A47027 /* stopBadge.png */,
@ -1134,6 +1140,8 @@
children = (
17D1B0FF0F63255200694C57 /* InfoWindowController.h */,
17D1B1000F63255200694C57 /* InfoWindowController.m */,
1778D3C80F645BF00037E7A0 /* MissingAlbumArtTransformer.h */,
1778D3C90F645BF00037E7A0 /* MissingAlbumArtTransformer.m */,
);
name = InfoInspector;
sourceTree = "<group>";
@ -1831,6 +1839,7 @@
178456C30F6320B5007E8021 /* SpotlightPanel.xib in Resources */,
17D1B0D20F6320EA00694C57 /* InfoInspector.xib in Resources */,
17D1B1DC0F6330D400694C57 /* Feedback.xib in Resources */,
1778D3B00F645A190037E7A0 /* missingArt.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -1916,6 +1925,7 @@
17D1B16A0F632ABB00694C57 /* SecondsFormatter.m in Sources */,
17D1B25D0F633A4F00694C57 /* PreferencePluginController.m in Sources */,
171CB3DC0F63670D0047EF0A /* PreferencesWindow.m in Sources */,
1778D3CA0F645BF00037E7A0 /* MissingAlbumArtTransformer.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};

View File

@ -38,13 +38,13 @@
<object class="NSWindowTemplate" id="424734135">
<int key="NSWindowStyleMask">8215</int>
<int key="NSWindowBacking">2</int>
<string key="NSWindowRect">{{246, 262}, {351, 296}}</string>
<string key="NSWindowRect">{{246, 60}, {351, 498}}</string>
<int key="NSWTFlags">-1543502848</int>
<string key="NSWindowTitle">Info Inspector</string>
<string key="NSWindowClass">NSPanel</string>
<nil key="NSViewClass"/>
<string key="NSWindowContentMaxSize">{351, 296}</string>
<string key="NSWindowContentMinSize">{351, 296}</string>
<string key="NSWindowContentMaxSize">{351, 498}</string>
<string key="NSWindowContentMinSize">{351, 498}</string>
<object class="NSView" key="NSWindowView" id="585628045">
<reference key="NSNextResponder"/>
<int key="NSvFlags">256</int>
@ -53,7 +53,7 @@
<object class="NSTextField" id="495761946">
<reference key="NSNextResponder" ref="585628045"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{69, 262}, {37, 14}}</string>
<string key="NSFrame">{{69, 464}, {37, 14}}</string>
<reference key="NSSuperview" ref="585628045"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="461653135">
@ -84,7 +84,7 @@
<object class="NSTextField" id="117768815">
<reference key="NSNextResponder" ref="585628045"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{63, 240}, {43, 14}}</string>
<string key="NSFrame">{{63, 442}, {43, 14}}</string>
<reference key="NSSuperview" ref="585628045"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="184420081">
@ -100,7 +100,7 @@
<object class="NSTextField" id="1053564994">
<reference key="NSNextResponder" ref="585628045"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{68, 196}, {38, 14}}</string>
<string key="NSFrame">{{68, 398}, {38, 14}}</string>
<reference key="NSSuperview" ref="585628045"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="311301850">
@ -116,7 +116,7 @@
<object class="NSTextField" id="414942335">
<reference key="NSNextResponder" ref="585628045"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{61, 174}, {45, 14}}</string>
<string key="NSFrame">{{61, 376}, {45, 14}}</string>
<reference key="NSSuperview" ref="585628045"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="1047280180">
@ -132,7 +132,7 @@
<object class="NSTextField" id="305531021">
<reference key="NSNextResponder" ref="585628045"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{74, 152}, {32, 14}}</string>
<string key="NSFrame">{{74, 354}, {32, 14}}</string>
<reference key="NSSuperview" ref="585628045"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="680181027">
@ -148,7 +148,7 @@
<object class="NSTextField" id="932361833">
<reference key="NSNextResponder" ref="585628045"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{66, 130}, {40, 14}}</string>
<string key="NSFrame">{{66, 332}, {40, 14}}</string>
<reference key="NSSuperview" ref="585628045"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="457357318">
@ -164,7 +164,7 @@
<object class="NSTextField" id="113710782">
<reference key="NSNextResponder" ref="585628045"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{33, 86}, {73, 14}}</string>
<string key="NSFrame">{{33, 288}, {73, 14}}</string>
<reference key="NSSuperview" ref="585628045"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="91305173">
@ -180,7 +180,7 @@
<object class="NSTextField" id="788744622">
<reference key="NSNextResponder" ref="585628045"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{49, 64}, {57, 14}}</string>
<string key="NSFrame">{{49, 266}, {57, 14}}</string>
<reference key="NSSuperview" ref="585628045"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="164828182">
@ -196,7 +196,7 @@
<object class="NSTextField" id="510311055">
<reference key="NSNextResponder" ref="585628045"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{64, 42}, {42, 14}}</string>
<string key="NSFrame">{{64, 244}, {42, 14}}</string>
<reference key="NSSuperview" ref="585628045"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="71126344">
@ -212,7 +212,7 @@
<object class="NSTextField" id="596622226">
<reference key="NSNextResponder" ref="585628045"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{17, 20}, {89, 14}}</string>
<string key="NSFrame">{{17, 222}, {89, 14}}</string>
<reference key="NSSuperview" ref="585628045"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="553188198">
@ -228,7 +228,7 @@
<object class="NSTextField" id="244367766">
<reference key="NSNextResponder" ref="585628045"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{74, 218}, {32, 14}}</string>
<string key="NSFrame">{{74, 420}, {32, 14}}</string>
<reference key="NSSuperview" ref="585628045"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="138246863">
@ -244,7 +244,7 @@
<object class="NSTextField" id="506726868">
<reference key="NSNextResponder" ref="585628045"/>
<int key="NSvFlags">266</int>
<string key="NSFrame">{{113, 262}, {221, 14}}</string>
<string key="NSFrame">{{113, 464}, {221, 14}}</string>
<reference key="NSSuperview" ref="585628045"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="470358203">
@ -260,7 +260,7 @@
<object class="NSTextField" id="1007870810">
<reference key="NSNextResponder" ref="585628045"/>
<int key="NSvFlags">266</int>
<string key="NSFrame">{{113, 240}, {221, 14}}</string>
<string key="NSFrame">{{113, 442}, {221, 14}}</string>
<reference key="NSSuperview" ref="585628045"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="1003487178">
@ -276,7 +276,7 @@
<object class="NSTextField" id="797234154">
<reference key="NSNextResponder" ref="585628045"/>
<int key="NSvFlags">266</int>
<string key="NSFrame">{{113, 218}, {221, 14}}</string>
<string key="NSFrame">{{113, 420}, {221, 14}}</string>
<reference key="NSSuperview" ref="585628045"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="666897980">
@ -292,7 +292,7 @@
<object class="NSTextField" id="188694493">
<reference key="NSNextResponder" ref="585628045"/>
<int key="NSvFlags">266</int>
<string key="NSFrame">{{113, 196}, {221, 14}}</string>
<string key="NSFrame">{{113, 398}, {221, 14}}</string>
<reference key="NSSuperview" ref="585628045"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="185361001">
@ -308,7 +308,7 @@
<object class="NSTextField" id="713956939">
<reference key="NSNextResponder" ref="585628045"/>
<int key="NSvFlags">266</int>
<string key="NSFrame">{{113, 174}, {221, 14}}</string>
<string key="NSFrame">{{113, 376}, {221, 14}}</string>
<reference key="NSSuperview" ref="585628045"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="440054410">
@ -324,7 +324,7 @@
<object class="NSTextField" id="484678971">
<reference key="NSNextResponder" ref="585628045"/>
<int key="NSvFlags">266</int>
<string key="NSFrame">{{113, 152}, {221, 14}}</string>
<string key="NSFrame">{{113, 354}, {221, 14}}</string>
<reference key="NSSuperview" ref="585628045"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="189776383">
@ -340,7 +340,7 @@
<object class="NSTextField" id="57997097">
<reference key="NSNextResponder" ref="585628045"/>
<int key="NSvFlags">266</int>
<string key="NSFrame">{{113, 130}, {221, 14}}</string>
<string key="NSFrame">{{113, 332}, {221, 14}}</string>
<reference key="NSSuperview" ref="585628045"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="429725769">
@ -356,7 +356,7 @@
<object class="NSTextField" id="742011215">
<reference key="NSNextResponder" ref="585628045"/>
<int key="NSvFlags">266</int>
<string key="NSFrame">{{113, 86}, {221, 14}}</string>
<string key="NSFrame">{{113, 288}, {221, 14}}</string>
<reference key="NSSuperview" ref="585628045"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="946780278">
@ -372,7 +372,7 @@
<object class="NSTextField" id="696884505">
<reference key="NSNextResponder" ref="585628045"/>
<int key="NSvFlags">266</int>
<string key="NSFrame">{{113, 64}, {221, 14}}</string>
<string key="NSFrame">{{113, 266}, {221, 14}}</string>
<reference key="NSSuperview" ref="585628045"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="123903370">
@ -388,7 +388,7 @@
<object class="NSTextField" id="350019704">
<reference key="NSNextResponder" ref="585628045"/>
<int key="NSvFlags">266</int>
<string key="NSFrame">{{113, 42}, {221, 14}}</string>
<string key="NSFrame">{{113, 244}, {221, 14}}</string>
<reference key="NSSuperview" ref="585628045"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="153216101">
@ -404,7 +404,7 @@
<object class="NSTextField" id="1044989116">
<reference key="NSNextResponder" ref="585628045"/>
<int key="NSvFlags">266</int>
<string key="NSFrame">{{113, 20}, {221, 14}}</string>
<string key="NSFrame">{{113, 222}, {221, 14}}</string>
<reference key="NSSuperview" ref="585628045"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="61730948">
@ -420,7 +420,7 @@
<object class="NSTextField" id="528471960">
<reference key="NSNextResponder" ref="585628045"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{50, 108}, {56, 14}}</string>
<string key="NSFrame">{{50, 310}, {56, 14}}</string>
<reference key="NSSuperview" ref="585628045"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="987359928">
@ -436,7 +436,7 @@
<object class="NSTextField" id="8570052">
<reference key="NSNextResponder" ref="585628045"/>
<int key="NSvFlags">266</int>
<string key="NSFrame">{{113, 108}, {221, 14}}</string>
<string key="NSFrame">{{113, 310}, {221, 14}}</string>
<reference key="NSSuperview" ref="585628045"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="156952401">
@ -449,13 +449,42 @@
<reference key="NSTextColor" ref="781214686"/>
</object>
</object>
<object class="NSImageView" id="844725820">
<reference key="NSNextResponder" ref="585628045"/>
<int key="NSvFlags">274</int>
<object class="NSMutableSet" key="NSDragTypes">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMutableArray" key="set.sortedObjects">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>Apple PDF pasteboard type</string>
<string>Apple PICT pasteboard type</string>
<string>Apple PNG pasteboard type</string>
<string>NSFilenamesPboardType</string>
<string>NeXT Encapsulated PostScript v1.2 pasteboard type</string>
<string>NeXT TIFF v4.0 pasteboard type</string>
</object>
</object>
<string key="NSFrame">{{17, 17}, {317, 186}}</string>
<reference key="NSSuperview" ref="585628045"/>
<bool key="NSEnabled">YES</bool>
<object class="NSImageCell" key="NSCell" id="23346814">
<int key="NSCellFlags">67239424</int>
<int key="NSCellFlags2">33685504</int>
<reference key="NSSupport" ref="26"/>
<int key="NSAlign">0</int>
<int key="NSScale">0</int>
<int key="NSStyle">0</int>
<bool key="NSAnimates">NO</bool>
</object>
<bool key="NSEditable">YES</bool>
</object>
</object>
<string key="NSFrameSize">{351, 296}</string>
<string key="NSFrameSize">{351, 498}</string>
<reference key="NSSuperview"/>
</object>
<string key="NSScreenRect">{{0, 0}, {1680, 1028}}</string>
<string key="NSMinSize">{351, 315}</string>
<string key="NSMaxSize">{351, 315}</string>
<string key="NSMinSize">{351, 517}</string>
<string key="NSMaxSize">{351, 517}</string>
<string key="NSFrameAutosaveName">InfoInspector</string>
</object>
<object class="NSUserDefaultsController" id="837857312">
@ -687,6 +716,37 @@
</object>
<int key="connectionID">89</int>
</object>
<object class="IBConnectionRecord">
<object class="IBBindingConnection" key="connection">
<string key="label">value: playlistSelectionController.selection.albumArt</string>
<reference key="source" ref="844725820"/>
<reference key="destination" ref="1001"/>
<object class="NSNibBindingConnector" key="connector">
<reference key="NSSource" ref="844725820"/>
<reference key="NSDestination" ref="1001"/>
<string key="NSLabel">value: playlistSelectionController.selection.albumArt</string>
<string key="NSBinding">value</string>
<string key="NSKeyPath">playlistSelectionController.selection.albumArt</string>
<object class="NSDictionary" key="NSOptions">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMutableArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>NSAllowsEditingMultipleValuesSelection</string>
<string>NSConditionallySetsEnabled</string>
<string>NSValueTransformerName</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<boolean value="NO" id="6"/>
<reference ref="6"/>
<string>MissingAlbumArtTransformer</string>
</object>
</object>
<int key="NSNibBindingConnectorVersion">2</int>
</object>
</object>
<int key="connectionID">106</int>
</object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects">
@ -755,6 +815,7 @@
<reference ref="797234154"/>
<reference ref="1007870810"/>
<reference ref="506726868"/>
<reference ref="844725820"/>
</object>
<reference key="parent" ref="424734135"/>
</object>
@ -1109,6 +1170,20 @@
<reference key="object" ref="666897980"/>
<reference key="parent" ref="797234154"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">95</int>
<reference key="object" ref="844725820"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="23346814"/>
</object>
<reference key="parent" ref="585628045"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">96</int>
<reference key="object" ref="23346814"/>
<reference key="parent" ref="844725820"/>
</object>
</object>
</object>
<object class="NSMutableDictionary" key="flattenedProperties">
@ -1177,20 +1252,24 @@
<string>86.IBPluginDependency</string>
<string>87.IBPluginDependency</string>
<string>9.IBPluginDependency</string>
<string>95.IBPluginDependency</string>
<string>96.IBPluginDependency</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilderKit</string>
<string>com.apple.InterfaceBuilderKit</string>
<string>{{246, 262}, {351, 296}}</string>
<string>{{395, 420}, {351, 498}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>{{246, 262}, {351, 296}}</string>
<boolean value="NO"/>
<string>{{395, 420}, {351, 498}}</string>
<reference ref="6"/>
<boolean value="YES" id="5"/>
<reference ref="5"/>
<string>{351, 296}</string>
<string>{351, 296}</string>
<string>{351, 498}</string>
<string>{351, 498}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@ -1264,7 +1343,7 @@
</object>
</object>
<nil key="sourceID"/>
<int key="maxID">94</int>
<int key="maxID">106</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">

View File

@ -26,13 +26,13 @@
174C79C90F4FD40B00E18B0F /* mpcfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 174C79470F4FD40B00E18B0F /* mpcfile.cpp */; };
174C79CA0F4FD40B00E18B0F /* mpcfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 174C79480F4FD40B00E18B0F /* mpcfile.h */; };
174C79CB0F4FD40B00E18B0F /* mpcproperties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 174C79490F4FD40B00E18B0F /* mpcproperties.cpp */; };
174C79CC0F4FD40B00E18B0F /* mpcproperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 174C794A0F4FD40B00E18B0F /* mpcproperties.h */; };
174C79CC0F4FD40B00E18B0F /* mpcproperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 174C794A0F4FD40B00E18B0F /* mpcproperties.h */; settings = {ATTRIBUTES = (); }; };
174C79CD0F4FD40B00E18B0F /* id3v1genres.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 174C794D0F4FD40B00E18B0F /* id3v1genres.cpp */; };
174C79CE0F4FD40B00E18B0F /* id3v1genres.h in Headers */ = {isa = PBXBuildFile; fileRef = 174C794E0F4FD40B00E18B0F /* id3v1genres.h */; };
174C79CF0F4FD40B00E18B0F /* id3v1tag.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 174C794F0F4FD40B00E18B0F /* id3v1tag.cpp */; };
174C79D00F4FD40B00E18B0F /* id3v1tag.h in Headers */ = {isa = PBXBuildFile; fileRef = 174C79500F4FD40B00E18B0F /* id3v1tag.h */; };
174C79D10F4FD40B00E18B0F /* attachedpictureframe.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 174C79530F4FD40B00E18B0F /* attachedpictureframe.cpp */; };
174C79D20F4FD40B00E18B0F /* attachedpictureframe.h in Headers */ = {isa = PBXBuildFile; fileRef = 174C79540F4FD40B00E18B0F /* attachedpictureframe.h */; };
174C79D20F4FD40B00E18B0F /* attachedpictureframe.h in Headers */ = {isa = PBXBuildFile; fileRef = 174C79540F4FD40B00E18B0F /* attachedpictureframe.h */; settings = {ATTRIBUTES = (Public, ); }; };
174C79D30F4FD40B00E18B0F /* commentsframe.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 174C79550F4FD40B00E18B0F /* commentsframe.cpp */; };
174C79D40F4FD40B00E18B0F /* commentsframe.h in Headers */ = {isa = PBXBuildFile; fileRef = 174C79560F4FD40B00E18B0F /* commentsframe.h */; };
174C79D50F4FD40B00E18B0F /* generalencapsulatedobjectframe.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 174C79570F4FD40B00E18B0F /* generalencapsulatedobjectframe.cpp */; };
@ -58,21 +58,21 @@
174C79E90F4FD40B00E18B0F /* id3v2footer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 174C796B0F4FD40B00E18B0F /* id3v2footer.cpp */; };
174C79EA0F4FD40B00E18B0F /* id3v2footer.h in Headers */ = {isa = PBXBuildFile; fileRef = 174C796C0F4FD40B00E18B0F /* id3v2footer.h */; };
174C79EB0F4FD40B00E18B0F /* id3v2frame.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 174C796D0F4FD40B00E18B0F /* id3v2frame.cpp */; };
174C79EC0F4FD40B00E18B0F /* id3v2frame.h in Headers */ = {isa = PBXBuildFile; fileRef = 174C796E0F4FD40B00E18B0F /* id3v2frame.h */; };
174C79EC0F4FD40B00E18B0F /* id3v2frame.h in Headers */ = {isa = PBXBuildFile; fileRef = 174C796E0F4FD40B00E18B0F /* id3v2frame.h */; settings = {ATTRIBUTES = (Public, ); }; };
174C79ED0F4FD40B00E18B0F /* id3v2framefactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 174C796F0F4FD40B00E18B0F /* id3v2framefactory.cpp */; };
174C79EE0F4FD40B00E18B0F /* id3v2framefactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 174C79700F4FD40B00E18B0F /* id3v2framefactory.h */; };
174C79EE0F4FD40B00E18B0F /* id3v2framefactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 174C79700F4FD40B00E18B0F /* id3v2framefactory.h */; settings = {ATTRIBUTES = (Public, ); }; };
174C79EF0F4FD40B00E18B0F /* id3v2header.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 174C79710F4FD40B00E18B0F /* id3v2header.cpp */; };
174C79F00F4FD40B00E18B0F /* id3v2header.h in Headers */ = {isa = PBXBuildFile; fileRef = 174C79720F4FD40B00E18B0F /* id3v2header.h */; };
174C79F00F4FD40B00E18B0F /* id3v2header.h in Headers */ = {isa = PBXBuildFile; fileRef = 174C79720F4FD40B00E18B0F /* id3v2header.h */; settings = {ATTRIBUTES = (Public, ); }; };
174C79F10F4FD40B00E18B0F /* id3v2synchdata.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 174C79730F4FD40B00E18B0F /* id3v2synchdata.cpp */; };
174C79F20F4FD40B00E18B0F /* id3v2synchdata.h in Headers */ = {isa = PBXBuildFile; fileRef = 174C79740F4FD40B00E18B0F /* id3v2synchdata.h */; };
174C79F30F4FD40B00E18B0F /* id3v2tag.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 174C79750F4FD40B00E18B0F /* id3v2tag.cpp */; };
174C79F40F4FD40B00E18B0F /* id3v2tag.h in Headers */ = {isa = PBXBuildFile; fileRef = 174C79760F4FD40B00E18B0F /* id3v2tag.h */; };
174C79F40F4FD40B00E18B0F /* id3v2tag.h in Headers */ = {isa = PBXBuildFile; fileRef = 174C79760F4FD40B00E18B0F /* id3v2tag.h */; settings = {ATTRIBUTES = (Public, ); }; };
174C79F50F4FD40B00E18B0F /* mpegfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 174C79770F4FD40B00E18B0F /* mpegfile.cpp */; };
174C79F60F4FD40B00E18B0F /* mpegfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 174C79780F4FD40B00E18B0F /* mpegfile.h */; };
174C79F60F4FD40B00E18B0F /* mpegfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 174C79780F4FD40B00E18B0F /* mpegfile.h */; settings = {ATTRIBUTES = (Public, ); }; };
174C79F70F4FD40B00E18B0F /* mpegheader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 174C79790F4FD40B00E18B0F /* mpegheader.cpp */; };
174C79F80F4FD40B00E18B0F /* mpegheader.h in Headers */ = {isa = PBXBuildFile; fileRef = 174C797A0F4FD40B00E18B0F /* mpegheader.h */; };
174C79F80F4FD40B00E18B0F /* mpegheader.h in Headers */ = {isa = PBXBuildFile; fileRef = 174C797A0F4FD40B00E18B0F /* mpegheader.h */; settings = {ATTRIBUTES = (Public, ); }; };
174C79F90F4FD40B00E18B0F /* mpegproperties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 174C797B0F4FD40B00E18B0F /* mpegproperties.cpp */; };
174C79FA0F4FD40B00E18B0F /* mpegproperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 174C797C0F4FD40B00E18B0F /* mpegproperties.h */; };
174C79FA0F4FD40B00E18B0F /* mpegproperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 174C797C0F4FD40B00E18B0F /* mpegproperties.h */; settings = {ATTRIBUTES = (Public, ); }; };
174C79FB0F4FD40B00E18B0F /* xingheader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 174C797D0F4FD40B00E18B0F /* xingheader.cpp */; };
174C79FC0F4FD40B00E18B0F /* xingheader.h in Headers */ = {isa = PBXBuildFile; fileRef = 174C797E0F4FD40B00E18B0F /* xingheader.h */; };
174C79FD0F4FD40B00E18B0F /* oggflacfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 174C79810F4FD40B00E18B0F /* oggflacfile.cpp */; };
@ -109,7 +109,7 @@
174C7A1C0F4FD40B00E18B0F /* tfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 174C79A30F4FD40B00E18B0F /* tfile.cpp */; };
174C7A1D0F4FD40B00E18B0F /* tfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 174C79A40F4FD40B00E18B0F /* tfile.h */; settings = {ATTRIBUTES = (Public, ); }; };
174C7A1E0F4FD40B00E18B0F /* tlist.h in Headers */ = {isa = PBXBuildFile; fileRef = 174C79A50F4FD40B00E18B0F /* tlist.h */; settings = {ATTRIBUTES = (Public, ); }; };
174C7A200F4FD40B00E18B0F /* tmap.h in Headers */ = {isa = PBXBuildFile; fileRef = 174C79A70F4FD40B00E18B0F /* tmap.h */; };
174C7A200F4FD40B00E18B0F /* tmap.h in Headers */ = {isa = PBXBuildFile; fileRef = 174C79A70F4FD40B00E18B0F /* tmap.h */; settings = {ATTRIBUTES = (Public, ); }; };
174C7A220F4FD40B00E18B0F /* tstring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 174C79A90F4FD40B00E18B0F /* tstring.cpp */; };
174C7A230F4FD40B00E18B0F /* tstring.h in Headers */ = {isa = PBXBuildFile; fileRef = 174C79AA0F4FD40B00E18B0F /* tstring.h */; settings = {ATTRIBUTES = (Public, ); }; };
174C7A240F4FD40B00E18B0F /* tstringlist.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 174C79AB0F4FD40B00E18B0F /* tstringlist.cpp */; };

BIN
Images/missingArt.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

View File

@ -7,12 +7,19 @@
//
#import "InfoWindowController.h"
#import "MissingAlbumArtTransformer.h"
@implementation InfoWindowController
@synthesize playlistSelectionController;
+ (void)initialize
{
NSValueTransformer *missingAlbumArtTransformer = [[[MissingAlbumArtTransformer alloc] init] autorelease];
[NSValueTransformer setValueTransformer:missingAlbumArtTransformer
forName:@"MissingAlbumArtTransformer"];
}
- (id)init
{
return [super initWithWindowNibName:@"InfoInspector"];

View File

@ -0,0 +1,16 @@
//
// MissingAlbumArtTransformer.h
// Cog
//
// Created by Vincent Spader on 3/8/09.
// Copyright 2009 __MyCompanyName__. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@interface MissingAlbumArtTransformer : NSObject {
}
@end

View File

@ -0,0 +1,26 @@
//
// MissingAlbumArtTransformer.m
// Cog
//
// Created by Vincent Spader on 3/8/09.
// Copyright 2009 __MyCompanyName__. All rights reserved.
//
#import "MissingAlbumArtTransformer.h"
@implementation MissingAlbumArtTransformer
+ (Class)transformedValueClass { return [NSImage class]; }
+ (BOOL)allowsReverseTransformation { return NO; }
// Convert from NSImage to NSImage
- (id)transformedValue:(id)value {
if (value == nil) {
return [NSImage imageNamed:@"missingArt"];
}
return value;
}
@end

View File

@ -31,6 +31,7 @@
NSString *genre;
NSNumber *year;
NSNumber *track;
NSImage *albumArt;
long long totalFrames;
int bitrate;
@ -82,6 +83,7 @@
@property(retain) NSString *genre;
@property(retain) NSNumber *year;
@property(retain) NSNumber *track;
@property(retain) NSImage *albumArt;
@property long long totalFrames;
@property int bitrate;

View File

@ -31,6 +31,7 @@
@synthesize genre;
@synthesize year;
@synthesize track;
@synthesize albumArt;
@synthesize totalFrames;
@synthesize bitrate;
@ -93,6 +94,7 @@
self.genre = nil;
self.year = nil;
self.track = nil;
self.albumArt = nil;
self.endian = nil;

View File

@ -9,15 +9,19 @@
#import "TagLibMetadataReader.h"
#import <TagLib/fileref.h>
#import <TagLib/tag.h>
#import <Taglib/mpegfile.h>
#import <Taglib/id3v2tag.h>
#import <Taglib/attachedpictureframe.h>
@implementation TagLibMetadataReader
+ (NSDictionary *)metadataForURL:(NSURL *)url
{
if (![url isFileURL]) {
return [NSDictionary dictionary];
}
NSString *lArtist = @"", *lTitle = @"", *lAlbum = @"", *lGenre = @"";
int lYear = 0, lTrack = 0;
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
TagLib::FileRef f((const char *)[[url path] UTF8String], false);
if (!f.isNull())
@ -26,39 +30,67 @@
if (tag)
{
TagLib::String pArtist, pTitle, pAlbum, pGenre, pComment;
TagLib::String artist, title, album, genre, comment;
int year, track;
pArtist = tag->artist();
pTitle = tag->title();;
pAlbum = tag->album();
pGenre = tag->genre();
pComment = tag->comment();
artist = tag->artist();
title = tag->title();;
album = tag->album();
genre = tag->genre();
comment = tag->comment();
lYear = tag->year();
lTrack = tag->track();
year = tag->year();
[dict setObject:[NSNumber numberWithInt:year] forKey:@"year"];
if (!pArtist.isNull())
lArtist = [NSString stringWithUTF8String:pArtist.toCString(true)];
track = tag->track();
[dict setObject:[NSNumber numberWithInt:track] forKey:@"track"];
if (!artist.isNull())
[dict setObject:[NSString stringWithUTF8String:artist.toCString(true)] forKey:@"artist"];
if (!pAlbum.isNull())
lAlbum = [NSString stringWithUTF8String:pAlbum.toCString(true)];
if (!album.isNull())
[dict setObject:[NSString stringWithUTF8String:album.toCString(true)] forKey:@"album"];
if (!pTitle.isNull())
lTitle = [NSString stringWithUTF8String:pTitle.toCString(true)];
if (!title.isNull())
[dict setObject:[NSString stringWithUTF8String:title.toCString(true)] forKey:@"title"];
if (!pGenre.isNull())
lGenre = [NSString stringWithUTF8String:pGenre.toCString(true)];
if (!genre.isNull())
[dict setObject:[NSString stringWithUTF8String:genre.toCString(true)] forKey:@"genre"];
}
NSString *imageCacheTag = [NSString stringWithFormat:@"%@-%@-%@-%@", [dict objectForKey:@"album"], [dict objectForKey:@"artist"], [dict objectForKey:@"genre"], [dict objectForKey:@"year"]];
NSImage *image = [NSImage imageNamed:imageCacheTag];
if (nil == image) {
// Try to load the image.
// WARNING: HACK
TagLib::MPEG::File *mf = dynamic_cast<TagLib::MPEG::File *>(f.file());
if (mf) {
TagLib::ID3v2::Tag *tag = mf->ID3v2Tag();
if (tag) {
TagLib::ID3v2::FrameList pictures = mf->ID3v2Tag()->frameListMap()["APIC"];
if (!pictures.isEmpty()) {
TagLib::ID3v2::AttachedPictureFrame *pic = static_cast<TagLib::ID3v2::AttachedPictureFrame *>(pictures.front());
NSData *data = [[NSData alloc] initWithBytes:pic->picture().data() length:pic->picture().size()];
image = [[[NSImage alloc] initWithData:data] autorelease];
[data release];
}
}
}
if (nil != image) {
[image setName:imageCacheTag];
}
}
if (nil != image) {
[dict setObject:image forKey:@"albumArt"];
}
}
return [NSDictionary dictionaryWithObjectsAndKeys:
lArtist, @"artist",
lTitle, @"title",
lAlbum, @"album",
lGenre, @"genre",
[NSNumber numberWithInt: lYear], @"year",
[NSNumber numberWithInt: lTrack], @"track",
nil];
return [dict autorelease];
}
+ (NSArray *)fileTypes