Metadata: Now supports disc number field where possible
parent
bde3f552d9
commit
2165d37144
|
@ -118,7 +118,7 @@ typedef NS_ENUM(NSInteger, TrackStatus) { TrackPlaying, TrackPaused, TrackStoppe
|
||||||
if ([pe album]) [dict setObject:[pe album] forKey:TrackAlbum];
|
if ([pe album]) [dict setObject:[pe album] forKey:TrackAlbum];
|
||||||
if ([pe genre]) [dict setObject:[pe genre] forKey:TrackGenre];
|
if ([pe genre]) [dict setObject:[pe genre] forKey:TrackGenre];
|
||||||
if ([pe track])
|
if ([pe track])
|
||||||
[dict setObject:[NSString stringWithFormat:@"%@", [pe track]] forKey:TrackNumber];
|
[dict setObject:[pe trackText] forKey:TrackNumber];
|
||||||
if ([pe length])
|
if ([pe length])
|
||||||
[dict setObject:[NSNumber numberWithInteger:(NSInteger)([[pe length] doubleValue] * 1000.0)]
|
[dict setObject:[NSNumber numberWithInteger:(NSInteger)([[pe length] doubleValue] * 1000.0)]
|
||||||
forKey:TrackLength];
|
forKey:TrackLength];
|
||||||
|
|
|
@ -167,8 +167,7 @@
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
<connections>
|
<connections>
|
||||||
<binding destination="-2" name="value" keyPath="valueToDisplay.track" id="111"/>
|
<binding destination="-2" name="value" keyPath="valueToDisplay.trackText" id="ZO2-Cd-dfh"/>
|
||||||
<outlet property="formatter" destination="79" id="82"/>
|
|
||||||
</connections>
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="41" customClass="ToolTipTextField">
|
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="41" customClass="ToolTipTextField">
|
||||||
|
@ -180,8 +179,7 @@
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
<connections>
|
<connections>
|
||||||
<binding destination="-2" name="value" keyPath="valueToDisplay.length" id="112"/>
|
<binding destination="-2" name="value" keyPath="valueToDisplay.lengthText" id="ji7-tL-8rb"/>
|
||||||
<outlet property="formatter" destination="80" id="81"/>
|
|
||||||
</connections>
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="43" customClass="ToolTipTextField">
|
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="43" customClass="ToolTipTextField">
|
||||||
|
@ -191,12 +189,9 @@
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
<connections>
|
|
||||||
<outlet property="formatter" destination="79" id="107"/>
|
|
||||||
</connections>
|
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
<connections>
|
<connections>
|
||||||
<binding destination="-2" name="value" keyPath="valueToDisplay.year" id="113"/>
|
<binding destination="-2" name="value" keyPath="valueToDisplay.yearText" id="miZ-gp-CqU"/>
|
||||||
</connections>
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="45" customClass="ToolTipTextField">
|
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="45" customClass="ToolTipTextField">
|
||||||
|
|
|
@ -860,8 +860,8 @@
|
||||||
</binding>
|
</binding>
|
||||||
<outlet property="delegate" destination="226" id="481"/>
|
<outlet property="delegate" destination="226" id="481"/>
|
||||||
<outlet property="initialFirstResponder" destination="207" id="720"/>
|
<outlet property="initialFirstResponder" destination="207" id="720"/>
|
||||||
<outlet property="playlistView" destination="206" id="mah-wo-1nd"/>
|
|
||||||
<outlet property="mainToolbar" destination="1523" id="J2X-YK-xV0"/>
|
<outlet property="mainToolbar" destination="1523" id="J2X-YK-xV0"/>
|
||||||
|
<outlet property="playlistView" destination="206" id="mah-wo-1nd"/>
|
||||||
</connections>
|
</connections>
|
||||||
<point key="canvasLocation" x="130" y="131"/>
|
<point key="canvasLocation" x="130" y="131"/>
|
||||||
</window>
|
</window>
|
||||||
|
@ -1052,8 +1052,8 @@
|
||||||
<string key="NSNullPlaceholder">Cog</string>
|
<string key="NSNullPlaceholder">Cog</string>
|
||||||
</dictionary>
|
</dictionary>
|
||||||
</binding>
|
</binding>
|
||||||
<outlet property="playbackController" destination="705" id="vo7-mK-yQe"/>
|
|
||||||
<outlet property="miniToolbar" destination="2222" id="Up2-7z-HqA"/>
|
<outlet property="miniToolbar" destination="2222" id="Up2-7z-HqA"/>
|
||||||
|
<outlet property="playbackController" destination="705" id="vo7-mK-yQe"/>
|
||||||
</connections>
|
</connections>
|
||||||
<point key="canvasLocation" x="45" y="444"/>
|
<point key="canvasLocation" x="45" y="444"/>
|
||||||
</window>
|
</window>
|
||||||
|
|
|
@ -66,9 +66,6 @@
|
||||||
17C809E60C3BD487005707C4 /* CoreAudio.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 17C809E30C3BD46D005707C4 /* CoreAudio.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
17C809E60C3BD487005707C4 /* CoreAudio.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 17C809E30C3BD46D005707C4 /* CoreAudio.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
||||||
17C8F3CF0CBED66C008D969D /* GME.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 17C8F3CD0CBED663008D969D /* GME.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
17C8F3CF0CBED66C008D969D /* GME.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 17C8F3CD0CBED663008D969D /* GME.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
||||||
17D1B1010F63255200694C57 /* InfoWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 17D1B1000F63255200694C57 /* InfoWindowController.m */; };
|
17D1B1010F63255200694C57 /* InfoWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 17D1B1000F63255200694C57 /* InfoWindowController.m */; };
|
||||||
17D1B1680F632ABB00694C57 /* BlankZeroFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 17D1B1630F632ABB00694C57 /* BlankZeroFormatter.m */; };
|
|
||||||
17D1B1690F632ABB00694C57 /* IndexFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 17D1B1650F632ABB00694C57 /* IndexFormatter.m */; };
|
|
||||||
17D1B16A0F632ABB00694C57 /* SecondsFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 17D1B1670F632ABB00694C57 /* SecondsFormatter.m */; };
|
|
||||||
17D1B25D0F633A4F00694C57 /* PreferencePluginController.m in Sources */ = {isa = PBXBuildFile; fileRef = 17D1B25C0F633A4F00694C57 /* PreferencePluginController.m */; };
|
17D1B25D0F633A4F00694C57 /* PreferencePluginController.m in Sources */ = {isa = PBXBuildFile; fileRef = 17D1B25C0F633A4F00694C57 /* PreferencePluginController.m */; };
|
||||||
17D1B27D0CF8B2830028F5B5 /* cue.icns in Resources */ = {isa = PBXBuildFile; fileRef = 17D1B2760CF8B2830028F5B5 /* cue.icns */; };
|
17D1B27D0CF8B2830028F5B5 /* cue.icns in Resources */ = {isa = PBXBuildFile; fileRef = 17D1B2760CF8B2830028F5B5 /* cue.icns */; };
|
||||||
17D1B27E0CF8B2830028F5B5 /* it.icns in Resources */ = {isa = PBXBuildFile; fileRef = 17D1B2770CF8B2830028F5B5 /* it.icns */; };
|
17D1B27E0CF8B2830028F5B5 /* it.icns in Resources */ = {isa = PBXBuildFile; fileRef = 17D1B2770CF8B2830028F5B5 /* it.icns */; };
|
||||||
|
@ -120,6 +117,7 @@
|
||||||
8359009D17FF06570060F3ED /* ArchiveSource.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8359FF3117FEF35D0060F3ED /* ArchiveSource.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
8359009D17FF06570060F3ED /* ArchiveSource.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8359FF3117FEF35D0060F3ED /* ArchiveSource.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
||||||
835A8FD327957310005B3C39 /* json.c in Sources */ = {isa = PBXBuildFile; fileRef = 835A8FC627957310005B3C39 /* json.c */; };
|
835A8FD327957310005B3C39 /* json.c in Sources */ = {isa = PBXBuildFile; fileRef = 835A8FC627957310005B3C39 /* json.c */; };
|
||||||
835A8FD6279575B1005B3C39 /* Winamp.q1.json in Resources */ = {isa = PBXBuildFile; fileRef = 835A8FD5279575B1005B3C39 /* Winamp.q1.json */; };
|
835A8FD6279575B1005B3C39 /* Winamp.q1.json in Resources */ = {isa = PBXBuildFile; fileRef = 835A8FD5279575B1005B3C39 /* Winamp.q1.json */; };
|
||||||
|
835F00BB279BD1CD00055FCF /* SecondsFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 835F00B8279BD1CD00055FCF /* SecondsFormatter.m */; };
|
||||||
8360EF6D17F92E56005208A4 /* HighlyComplete.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8360EF0517F92B24005208A4 /* HighlyComplete.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
8360EF6D17F92E56005208A4 /* HighlyComplete.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8360EF0517F92B24005208A4 /* HighlyComplete.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
||||||
836D28A818086386005B7299 /* MiniModeMenuTitleTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 836D28A718086386005B7299 /* MiniModeMenuTitleTransformer.m */; };
|
836D28A818086386005B7299 /* MiniModeMenuTitleTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 836D28A718086386005B7299 /* MiniModeMenuTitleTransformer.m */; };
|
||||||
836F5BF91A357A01002730CC /* sidplay.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8314D6411A354DFF00EEE8E6 /* sidplay.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
836F5BF91A357A01002730CC /* sidplay.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8314D6411A354DFF00EEE8E6 /* sidplay.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||||
|
@ -852,12 +850,6 @@
|
||||||
17C8F3C80CBED663008D969D /* GME.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = GME.xcodeproj; path = Plugins/GME/GME.xcodeproj; sourceTree = "<group>"; };
|
17C8F3C80CBED663008D969D /* GME.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = GME.xcodeproj; path = Plugins/GME/GME.xcodeproj; sourceTree = "<group>"; };
|
||||||
17D1B0FF0F63255200694C57 /* InfoWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = InfoWindowController.h; path = InfoInspector/InfoWindowController.h; sourceTree = "<group>"; };
|
17D1B0FF0F63255200694C57 /* InfoWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = InfoWindowController.h; path = InfoInspector/InfoWindowController.h; sourceTree = "<group>"; };
|
||||||
17D1B1000F63255200694C57 /* InfoWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = InfoWindowController.m; path = InfoInspector/InfoWindowController.m; sourceTree = "<group>"; };
|
17D1B1000F63255200694C57 /* InfoWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = InfoWindowController.m; path = InfoInspector/InfoWindowController.m; sourceTree = "<group>"; };
|
||||||
17D1B1620F632ABB00694C57 /* BlankZeroFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BlankZeroFormatter.h; path = Formatters/BlankZeroFormatter.h; sourceTree = "<group>"; };
|
|
||||||
17D1B1630F632ABB00694C57 /* BlankZeroFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BlankZeroFormatter.m; path = Formatters/BlankZeroFormatter.m; sourceTree = "<group>"; };
|
|
||||||
17D1B1640F632ABB00694C57 /* IndexFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IndexFormatter.h; path = Formatters/IndexFormatter.h; sourceTree = "<group>"; };
|
|
||||||
17D1B1650F632ABB00694C57 /* IndexFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IndexFormatter.m; path = Formatters/IndexFormatter.m; sourceTree = "<group>"; };
|
|
||||||
17D1B1660F632ABB00694C57 /* SecondsFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SecondsFormatter.h; path = Formatters/SecondsFormatter.h; sourceTree = "<group>"; };
|
|
||||||
17D1B1670F632ABB00694C57 /* SecondsFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SecondsFormatter.m; path = Formatters/SecondsFormatter.m; sourceTree = "<group>"; };
|
|
||||||
17D1B25B0F633A4F00694C57 /* PreferencePluginController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PreferencePluginController.h; path = Preferences/PreferencePluginController.h; sourceTree = "<group>"; };
|
17D1B25B0F633A4F00694C57 /* PreferencePluginController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PreferencePluginController.h; path = Preferences/PreferencePluginController.h; sourceTree = "<group>"; };
|
||||||
17D1B25C0F633A4F00694C57 /* PreferencePluginController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PreferencePluginController.m; path = Preferences/PreferencePluginController.m; sourceTree = "<group>"; };
|
17D1B25C0F633A4F00694C57 /* PreferencePluginController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PreferencePluginController.m; path = Preferences/PreferencePluginController.m; sourceTree = "<group>"; };
|
||||||
17D1B2610F633D2C00694C57 /* PreferencePanePlugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PreferencePanePlugin.h; path = Preferences/PreferencePanePlugin.h; sourceTree = "<group>"; };
|
17D1B2610F633D2C00694C57 /* PreferencePanePlugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PreferencePanePlugin.h; path = Preferences/PreferencePanePlugin.h; sourceTree = "<group>"; };
|
||||||
|
@ -936,6 +928,8 @@
|
||||||
835C888B22CC1881001B4B3F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = en; path = en.lproj/Credits.html; sourceTree = "<group>"; };
|
835C888B22CC1881001B4B3F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = en; path = en.lproj/Credits.html; sourceTree = "<group>"; };
|
||||||
835C888C22CC1882001B4B3F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
835C888C22CC1882001B4B3F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
835C888D22CC1882001B4B3F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
|
835C888D22CC1882001B4B3F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||||
|
835F00B4279BD1CD00055FCF /* SecondsFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SecondsFormatter.h; sourceTree = "<group>"; };
|
||||||
|
835F00B8279BD1CD00055FCF /* SecondsFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SecondsFormatter.m; sourceTree = "<group>"; };
|
||||||
8360EF0017F92B23005208A4 /* HighlyComplete.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = HighlyComplete.xcodeproj; path = Plugins/HighlyComplete/HighlyComplete.xcodeproj; sourceTree = "<group>"; };
|
8360EF0017F92B23005208A4 /* HighlyComplete.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = HighlyComplete.xcodeproj; path = Plugins/HighlyComplete/HighlyComplete.xcodeproj; sourceTree = "<group>"; };
|
||||||
836D28A618086386005B7299 /* MiniModeMenuTitleTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MiniModeMenuTitleTransformer.h; path = Window/MiniModeMenuTitleTransformer.h; sourceTree = "<group>"; };
|
836D28A618086386005B7299 /* MiniModeMenuTitleTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MiniModeMenuTitleTransformer.h; path = Window/MiniModeMenuTitleTransformer.h; sourceTree = "<group>"; };
|
||||||
836D28A718086386005B7299 /* MiniModeMenuTitleTransformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MiniModeMenuTitleTransformer.m; path = Window/MiniModeMenuTitleTransformer.m; sourceTree = "<group>"; };
|
836D28A718086386005B7299 /* MiniModeMenuTitleTransformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MiniModeMenuTitleTransformer.m; path = Window/MiniModeMenuTitleTransformer.m; sourceTree = "<group>"; };
|
||||||
|
@ -1071,7 +1065,7 @@
|
||||||
080E96DDFE201D6D7F000001 /* Classes */ = {
|
080E96DDFE201D6D7F000001 /* Classes */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
17D1B1230F632A8B00694C57 /* Formatters */,
|
835F00B3279BD1CD00055FCF /* Formatters */,
|
||||||
177042960B8BC53600B86321 /* Application */,
|
177042960B8BC53600B86321 /* Application */,
|
||||||
17E0D5D20F520E75005B6FED /* Window */,
|
17E0D5D20F520E75005B6FED /* Window */,
|
||||||
8E75752A09F31D5A0080F1EE /* Playlist */,
|
8E75752A09F31D5A0080F1EE /* Playlist */,
|
||||||
|
@ -1328,19 +1322,6 @@
|
||||||
name = InfoInspector;
|
name = InfoInspector;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
17D1B1230F632A8B00694C57 /* Formatters */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
17D1B1620F632ABB00694C57 /* BlankZeroFormatter.h */,
|
|
||||||
17D1B1630F632ABB00694C57 /* BlankZeroFormatter.m */,
|
|
||||||
17D1B1640F632ABB00694C57 /* IndexFormatter.h */,
|
|
||||||
17D1B1650F632ABB00694C57 /* IndexFormatter.m */,
|
|
||||||
17D1B1660F632ABB00694C57 /* SecondsFormatter.h */,
|
|
||||||
17D1B1670F632ABB00694C57 /* SecondsFormatter.m */,
|
|
||||||
);
|
|
||||||
name = Formatters;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
17DDF6400E0CB6F100A2E4AD /* FileTree */ = {
|
17DDF6400E0CB6F100A2E4AD /* FileTree */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
@ -1672,6 +1653,15 @@
|
||||||
path = json;
|
path = json;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
835F00B3279BD1CD00055FCF /* Formatters */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
835F00B4279BD1CD00055FCF /* SecondsFormatter.h */,
|
||||||
|
835F00B8279BD1CD00055FCF /* SecondsFormatter.m */,
|
||||||
|
);
|
||||||
|
path = Formatters;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
8360EF0117F92B23005208A4 /* Products */ = {
|
8360EF0117F92B23005208A4 /* Products */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
@ -2496,13 +2486,11 @@
|
||||||
171EFE8C0F59FEAE000ADC42 /* DockIconController.m in Sources */,
|
171EFE8C0F59FEAE000ADC42 /* DockIconController.m in Sources */,
|
||||||
17F6C8070F603701000D9DA9 /* PlaybackEventController.m in Sources */,
|
17F6C8070F603701000D9DA9 /* PlaybackEventController.m in Sources */,
|
||||||
83BC5AB220E4C87100631CD4 /* DualWindow.m in Sources */,
|
83BC5AB220E4C87100631CD4 /* DualWindow.m in Sources */,
|
||||||
|
835F00BB279BD1CD00055FCF /* SecondsFormatter.m in Sources */,
|
||||||
1784560F0F631E24007E8021 /* FileTreeViewController.m in Sources */,
|
1784560F0F631E24007E8021 /* FileTreeViewController.m in Sources */,
|
||||||
178456120F631E31007E8021 /* SideViewController.m in Sources */,
|
178456120F631E31007E8021 /* SideViewController.m in Sources */,
|
||||||
17D1B1010F63255200694C57 /* InfoWindowController.m in Sources */,
|
17D1B1010F63255200694C57 /* InfoWindowController.m in Sources */,
|
||||||
835A8FD327957310005B3C39 /* json.c in Sources */,
|
835A8FD327957310005B3C39 /* json.c in Sources */,
|
||||||
17D1B1680F632ABB00694C57 /* BlankZeroFormatter.m in Sources */,
|
|
||||||
17D1B1690F632ABB00694C57 /* IndexFormatter.m in Sources */,
|
|
||||||
17D1B16A0F632ABB00694C57 /* SecondsFormatter.m in Sources */,
|
|
||||||
17D1B25D0F633A4F00694C57 /* PreferencePluginController.m in Sources */,
|
17D1B25D0F633A4F00694C57 /* PreferencePluginController.m in Sources */,
|
||||||
171CB3DC0F63670D0047EF0A /* PreferencesWindow.m in Sources */,
|
171CB3DC0F63670D0047EF0A /* PreferencesWindow.m in Sources */,
|
||||||
1778D3CA0F645BF00037E7A0 /* MissingAlbumArtTransformer.m in Sources */,
|
1778D3CA0F645BF00037E7A0 /* MissingAlbumArtTransformer.m in Sources */,
|
||||||
|
|
|
@ -174,6 +174,13 @@ unsigned int APE::Tag::track() const
|
||||||
return d->itemListMap["TRACK"].toString().toInt();
|
return d->itemListMap["TRACK"].toString().toInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned int APE::Tag::disc() const
|
||||||
|
{
|
||||||
|
if(d->itemListMap["DISC"].isEmpty())
|
||||||
|
return 0;
|
||||||
|
return d->itemListMap["DISC"].toString().toInt();
|
||||||
|
}
|
||||||
|
|
||||||
String APE::Tag::cuesheet() const
|
String APE::Tag::cuesheet() const
|
||||||
{
|
{
|
||||||
if(d->itemListMap["CUESHEET"].isEmpty())
|
if(d->itemListMap["CUESHEET"].isEmpty())
|
||||||
|
@ -255,6 +262,14 @@ void APE::Tag::setTrack(unsigned int i)
|
||||||
addValue("TRACK", String::number(i), true);
|
addValue("TRACK", String::number(i), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void APE::Tag::setDisc(unsigned int i)
|
||||||
|
{
|
||||||
|
if(i == 0)
|
||||||
|
removeItem("DISC");
|
||||||
|
else
|
||||||
|
addValue("DISC", String::number(i), true);
|
||||||
|
}
|
||||||
|
|
||||||
void APE::Tag::setCuesheet(const String &)
|
void APE::Tag::setCuesheet(const String &)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,6 +95,7 @@ namespace TagLib {
|
||||||
virtual String genre() const;
|
virtual String genre() const;
|
||||||
virtual unsigned int year() const;
|
virtual unsigned int year() const;
|
||||||
virtual unsigned int track() const;
|
virtual unsigned int track() const;
|
||||||
|
virtual unsigned int disc() const;
|
||||||
virtual String cuesheet() const;
|
virtual String cuesheet() const;
|
||||||
virtual float rgAlbumGain() const;
|
virtual float rgAlbumGain() const;
|
||||||
virtual float rgAlbumPeak() const;
|
virtual float rgAlbumPeak() const;
|
||||||
|
@ -109,6 +110,7 @@ namespace TagLib {
|
||||||
virtual void setGenre(const String &s);
|
virtual void setGenre(const String &s);
|
||||||
virtual void setYear(unsigned int i);
|
virtual void setYear(unsigned int i);
|
||||||
virtual void setTrack(unsigned int i);
|
virtual void setTrack(unsigned int i);
|
||||||
|
virtual void setDisc(unsigned int i);
|
||||||
virtual void setCuesheet(const String &s);
|
virtual void setCuesheet(const String &s);
|
||||||
virtual void setRGAlbumGain(float f);
|
virtual void setRGAlbumGain(float f);
|
||||||
virtual void setRGAlbumPeak(float f);
|
virtual void setRGAlbumPeak(float f);
|
||||||
|
|
|
@ -108,6 +108,20 @@ unsigned int ASF::Tag::track() const
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned int ASF::Tag::disc() const
|
||||||
|
{
|
||||||
|
if(d->attributeListMap.contains("WM/DiscNumber")) {
|
||||||
|
const ASF::Attribute attr = d->attributeListMap["WM/DiscNumber"][0];
|
||||||
|
if(attr.type() == ASF::Attribute::DWordType)
|
||||||
|
return attr.toUInt();
|
||||||
|
else
|
||||||
|
return attr.toString().toInt();
|
||||||
|
}
|
||||||
|
if(d->attributeListMap.contains("WM/Disc"))
|
||||||
|
return d->attributeListMap["WM/Disc"][0].toUInt();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
String ASF::Tag::genre() const
|
String ASF::Tag::genre() const
|
||||||
{
|
{
|
||||||
if(d->attributeListMap.contains("WM/Genre"))
|
if(d->attributeListMap.contains("WM/Genre"))
|
||||||
|
@ -189,6 +203,11 @@ void ASF::Tag::setTrack(unsigned int value)
|
||||||
setAttribute("WM/TrackNumber", String::number(value));
|
setAttribute("WM/TrackNumber", String::number(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ASF::Tag::setDisc(unsigned int value)
|
||||||
|
{
|
||||||
|
setAttribute("WM/DiscNumber", String::number(value));
|
||||||
|
}
|
||||||
|
|
||||||
void ASF::Tag::setCuesheet(const String &)
|
void ASF::Tag::setCuesheet(const String &)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -102,6 +102,7 @@ namespace TagLib {
|
||||||
* return 0.
|
* return 0.
|
||||||
*/
|
*/
|
||||||
virtual unsigned int track() const;
|
virtual unsigned int track() const;
|
||||||
|
virtual unsigned int disc() const;
|
||||||
|
|
||||||
virtual String cuesheet() const;
|
virtual String cuesheet() const;
|
||||||
|
|
||||||
|
@ -160,6 +161,7 @@ namespace TagLib {
|
||||||
* Sets the track to \a i. If \a s is 0 then this value will be cleared.
|
* Sets the track to \a i. If \a s is 0 then this value will be cleared.
|
||||||
*/
|
*/
|
||||||
virtual void setTrack(unsigned int i);
|
virtual void setTrack(unsigned int i);
|
||||||
|
virtual void setDisc(unsigned int i);
|
||||||
|
|
||||||
virtual void setCuesheet(const String &s);
|
virtual void setCuesheet(const String &s);
|
||||||
|
|
||||||
|
|
|
@ -94,6 +94,11 @@ unsigned int Mod::Tag::track() const
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned int Mod::Tag::disc() const
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
String Mod::Tag::cuesheet() const
|
String Mod::Tag::cuesheet() const
|
||||||
{
|
{
|
||||||
return String();
|
return String();
|
||||||
|
@ -158,6 +163,10 @@ void Mod::Tag::setTrack(unsigned int)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Mod::Tag::setDisc(unsigned int)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
void Mod::Tag::setCuesheet(const String &)
|
void Mod::Tag::setCuesheet(const String &)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,6 +94,11 @@ namespace TagLib {
|
||||||
*/
|
*/
|
||||||
virtual unsigned int track() const;
|
virtual unsigned int track() const;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Not supported by module files. Therefore always returns 0.
|
||||||
|
*/
|
||||||
|
virtual unsigned int disc() const;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Not supported by module files. Therefore always returns empty.
|
* Not supported by module files. Therefore always returns empty.
|
||||||
*/
|
*/
|
||||||
|
@ -187,6 +192,11 @@ namespace TagLib {
|
||||||
*/
|
*/
|
||||||
virtual void setTrack(unsigned int track);
|
virtual void setTrack(unsigned int track);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Not supported by module files and therefore ignored.
|
||||||
|
*/
|
||||||
|
virtual void setDisc(unsigned int track);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Not supported by module files and therefore ignored.
|
* Not supported by module files and therefore ignored.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -780,6 +780,14 @@ MP4::Tag::track() const
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned int
|
||||||
|
MP4::Tag::disc() const
|
||||||
|
{
|
||||||
|
if(d->items.contains("disk"))
|
||||||
|
return d->items["disk"].toIntPair().first;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
String
|
String
|
||||||
MP4::Tag::cuesheet() const
|
MP4::Tag::cuesheet() const
|
||||||
{
|
{
|
||||||
|
@ -878,6 +886,17 @@ MP4::Tag::setTrack(unsigned int value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
MP4::Tag::setDisc(unsigned int value)
|
||||||
|
{
|
||||||
|
if (value == 0) {
|
||||||
|
d->items.erase("disk");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
d->items["disk"] = MP4::Item(value, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
MP4::Tag::setCuesheet(const String &)
|
MP4::Tag::setCuesheet(const String &)
|
||||||
{
|
{
|
||||||
|
|
|
@ -61,6 +61,7 @@ namespace TagLib {
|
||||||
virtual String genre() const;
|
virtual String genre() const;
|
||||||
virtual unsigned int year() const;
|
virtual unsigned int year() const;
|
||||||
virtual unsigned int track() const;
|
virtual unsigned int track() const;
|
||||||
|
virtual unsigned int disc() const;
|
||||||
virtual String cuesheet() const;
|
virtual String cuesheet() const;
|
||||||
virtual float rgAlbumGain() const;
|
virtual float rgAlbumGain() const;
|
||||||
virtual float rgAlbumPeak() const;
|
virtual float rgAlbumPeak() const;
|
||||||
|
@ -75,6 +76,7 @@ namespace TagLib {
|
||||||
virtual void setGenre(const String &value);
|
virtual void setGenre(const String &value);
|
||||||
virtual void setYear(unsigned int value);
|
virtual void setYear(unsigned int value);
|
||||||
virtual void setTrack(unsigned int value);
|
virtual void setTrack(unsigned int value);
|
||||||
|
virtual void setDisc(unsigned int value);
|
||||||
virtual void setCuesheet(const String &value);
|
virtual void setCuesheet(const String &value);
|
||||||
virtual void setRGAlbumGain(float);
|
virtual void setRGAlbumGain(float);
|
||||||
virtual void setRGAlbumPeak(float);
|
virtual void setRGAlbumPeak(float);
|
||||||
|
|
|
@ -167,6 +167,11 @@ unsigned int ID3v1::Tag::track() const
|
||||||
return d->track;
|
return d->track;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned int ID3v1::Tag::disc() const
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
String ID3v1::Tag::cuesheet() const
|
String ID3v1::Tag::cuesheet() const
|
||||||
{
|
{
|
||||||
return String();
|
return String();
|
||||||
|
@ -231,6 +236,10 @@ void ID3v1::Tag::setTrack(unsigned int i)
|
||||||
d->track = i < 256 ? i : 0;
|
d->track = i < 256 ? i : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ID3v1::Tag::setDisc(unsigned int i)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
void ID3v1::Tag::setCuesheet(const String &)
|
void ID3v1::Tag::setCuesheet(const String &)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -143,6 +143,7 @@ namespace TagLib {
|
||||||
virtual String genre() const;
|
virtual String genre() const;
|
||||||
virtual unsigned int year() const;
|
virtual unsigned int year() const;
|
||||||
virtual unsigned int track() const;
|
virtual unsigned int track() const;
|
||||||
|
virtual unsigned int disc() const;
|
||||||
virtual String cuesheet() const;
|
virtual String cuesheet() const;
|
||||||
virtual float rgAlbumGain() const;
|
virtual float rgAlbumGain() const;
|
||||||
virtual float rgAlbumPeak() const;
|
virtual float rgAlbumPeak() const;
|
||||||
|
@ -157,6 +158,7 @@ namespace TagLib {
|
||||||
virtual void setGenre(const String &s);
|
virtual void setGenre(const String &s);
|
||||||
virtual void setYear(unsigned int i);
|
virtual void setYear(unsigned int i);
|
||||||
virtual void setTrack(unsigned int i);
|
virtual void setTrack(unsigned int i);
|
||||||
|
virtual void setDisc(unsigned int i);
|
||||||
virtual void setCuesheet(const String &s);
|
virtual void setCuesheet(const String &s);
|
||||||
virtual void setRGAlbumGain(float f);
|
virtual void setRGAlbumGain(float f);
|
||||||
virtual void setRGAlbumPeak(float f);
|
virtual void setRGAlbumPeak(float f);
|
||||||
|
|
|
@ -245,6 +245,13 @@ unsigned int ID3v2::Tag::track() const
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned int ID3v2::Tag::disc() const
|
||||||
|
{
|
||||||
|
if(!d->frameListMap["TPOS"].isEmpty())
|
||||||
|
return d->frameListMap["TPOS"].front()->toString().toInt();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
String ID3v2::Tag::cuesheet() const
|
String ID3v2::Tag::cuesheet() const
|
||||||
{
|
{
|
||||||
const FrameList &list = d->frameListMap["TXXX"];
|
const FrameList &list = d->frameListMap["TXXX"];
|
||||||
|
@ -396,6 +403,15 @@ void ID3v2::Tag::setTrack(unsigned int i)
|
||||||
setTextFrame("TRCK", String::number(i));
|
setTextFrame("TRCK", String::number(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ID3v2::Tag::setDisc(unsigned int i)
|
||||||
|
{
|
||||||
|
if (i == 0) {
|
||||||
|
removeFrames("TPOS");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
setTextFrame("TPOS", String::number(i));
|
||||||
|
}
|
||||||
|
|
||||||
void ID3v2::Tag::setCuesheet(const String &s)
|
void ID3v2::Tag::setCuesheet(const String &s)
|
||||||
{
|
{
|
||||||
bool createdFrame = false;
|
bool createdFrame = false;
|
||||||
|
|
|
@ -164,6 +164,7 @@ namespace TagLib {
|
||||||
virtual String genre() const;
|
virtual String genre() const;
|
||||||
virtual unsigned int year() const;
|
virtual unsigned int year() const;
|
||||||
virtual unsigned int track() const;
|
virtual unsigned int track() const;
|
||||||
|
virtual unsigned int disc() const;
|
||||||
|
|
||||||
virtual String cuesheet() const;
|
virtual String cuesheet() const;
|
||||||
|
|
||||||
|
@ -181,6 +182,7 @@ namespace TagLib {
|
||||||
virtual void setGenre(const String &s);
|
virtual void setGenre(const String &s);
|
||||||
virtual void setYear(unsigned int i);
|
virtual void setYear(unsigned int i);
|
||||||
virtual void setTrack(unsigned int i);
|
virtual void setTrack(unsigned int i);
|
||||||
|
virtual void setDisc(unsigned int i);
|
||||||
|
|
||||||
virtual void setCuesheet(const String &s);
|
virtual void setCuesheet(const String &s);
|
||||||
|
|
||||||
|
|
|
@ -145,6 +145,19 @@ unsigned int Ogg::XiphComment::track() const
|
||||||
return d->fieldListMap["TRACKNUMBER"].front().toInt();
|
return d->fieldListMap["TRACKNUMBER"].front().toInt();
|
||||||
if(!d->fieldListMap["TRACKNUM"].isEmpty())
|
if(!d->fieldListMap["TRACKNUM"].isEmpty())
|
||||||
return d->fieldListMap["TRACKNUM"].front().toInt();
|
return d->fieldListMap["TRACKNUM"].front().toInt();
|
||||||
|
if(!d->fieldListMap["TRACK"].isEmpty())
|
||||||
|
return d->fieldListMap["TRACK"].front().toInt();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int Ogg::XiphComment::disc() const
|
||||||
|
{
|
||||||
|
if(!d->fieldListMap["DISCNUMBER"].isEmpty())
|
||||||
|
return d->fieldListMap["DISCNUMBER"].front().toInt();
|
||||||
|
if(!d->fieldListMap["DISCNUM"].isEmpty())
|
||||||
|
return d->fieldListMap["DISCNUM"].front().toInt();
|
||||||
|
if(!d->fieldListMap["DISC"].isEmpty())
|
||||||
|
return d->fieldListMap["DISC"].front().toInt();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -231,6 +244,7 @@ void Ogg::XiphComment::setYear(unsigned int i)
|
||||||
|
|
||||||
void Ogg::XiphComment::setTrack(unsigned int i)
|
void Ogg::XiphComment::setTrack(unsigned int i)
|
||||||
{
|
{
|
||||||
|
removeFields("TRACK");
|
||||||
removeFields("TRACKNUM");
|
removeFields("TRACKNUM");
|
||||||
if(i == 0)
|
if(i == 0)
|
||||||
removeFields("TRACKNUMBER");
|
removeFields("TRACKNUMBER");
|
||||||
|
@ -238,6 +252,16 @@ void Ogg::XiphComment::setTrack(unsigned int i)
|
||||||
addField("TRACKNUMBER", String::number(i));
|
addField("TRACKNUMBER", String::number(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Ogg::XiphComment::setDisc(unsigned int i)
|
||||||
|
{
|
||||||
|
removeFields("DISC");
|
||||||
|
removeFields("DISCNUM");
|
||||||
|
if(i == 0)
|
||||||
|
removeFields("DISCNUMBER");
|
||||||
|
else
|
||||||
|
addField("DISCNUMBER", String::number(i));
|
||||||
|
}
|
||||||
|
|
||||||
void Ogg::XiphComment::setCuesheet(const String &s)
|
void Ogg::XiphComment::setCuesheet(const String &s)
|
||||||
{
|
{
|
||||||
if (s.isEmpty())
|
if (s.isEmpty())
|
||||||
|
|
|
@ -88,6 +88,7 @@ namespace TagLib {
|
||||||
virtual String genre() const;
|
virtual String genre() const;
|
||||||
virtual unsigned int year() const;
|
virtual unsigned int year() const;
|
||||||
virtual unsigned int track() const;
|
virtual unsigned int track() const;
|
||||||
|
virtual unsigned int disc() const;
|
||||||
virtual String cuesheet() const;
|
virtual String cuesheet() const;
|
||||||
virtual float rgAlbumGain() const;
|
virtual float rgAlbumGain() const;
|
||||||
virtual float rgAlbumPeak() const;
|
virtual float rgAlbumPeak() const;
|
||||||
|
@ -102,6 +103,7 @@ namespace TagLib {
|
||||||
virtual void setGenre(const String &s);
|
virtual void setGenre(const String &s);
|
||||||
virtual void setYear(unsigned int i);
|
virtual void setYear(unsigned int i);
|
||||||
virtual void setTrack(unsigned int i);
|
virtual void setTrack(unsigned int i);
|
||||||
|
virtual void setDisc(unsigned int i);
|
||||||
virtual void setCuesheet(const String &s);
|
virtual void setCuesheet(const String &s);
|
||||||
virtual void setRGAlbumGain(float f);
|
virtual void setRGAlbumGain(float f);
|
||||||
virtual void setRGAlbumPeak(float f);
|
virtual void setRGAlbumPeak(float f);
|
||||||
|
|
|
@ -128,6 +128,11 @@ unsigned int RIFF::Info::Tag::track() const
|
||||||
return fieldText("IPRT").toInt();
|
return fieldText("IPRT").toInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned int RIFF::Info::Tag::disc() const
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
String RIFF::Info::Tag::cuesheet() const
|
String RIFF::Info::Tag::cuesheet() const
|
||||||
{
|
{
|
||||||
return String();
|
return String();
|
||||||
|
@ -198,6 +203,10 @@ void RIFF::Info::Tag::setTrack(unsigned int i)
|
||||||
d->fieldListMap.erase("IPRT");
|
d->fieldListMap.erase("IPRT");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RIFF::Info::Tag::setDisc(unsigned int)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
void RIFF::Info::Tag::setCuesheet(const String &)
|
void RIFF::Info::Tag::setCuesheet(const String &)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -110,6 +110,7 @@ namespace TagLib {
|
||||||
virtual String genre() const;
|
virtual String genre() const;
|
||||||
virtual unsigned int year() const;
|
virtual unsigned int year() const;
|
||||||
virtual unsigned int track() const;
|
virtual unsigned int track() const;
|
||||||
|
virtual unsigned int disc() const;
|
||||||
virtual String cuesheet() const;
|
virtual String cuesheet() const;
|
||||||
virtual float rgAlbumGain() const;
|
virtual float rgAlbumGain() const;
|
||||||
virtual float rgAlbumPeak() const;
|
virtual float rgAlbumPeak() const;
|
||||||
|
@ -124,6 +125,7 @@ namespace TagLib {
|
||||||
virtual void setGenre(const String &s);
|
virtual void setGenre(const String &s);
|
||||||
virtual void setYear(unsigned int i);
|
virtual void setYear(unsigned int i);
|
||||||
virtual void setTrack(unsigned int i);
|
virtual void setTrack(unsigned int i);
|
||||||
|
virtual void setDisc(unsigned int);
|
||||||
virtual void setCuesheet(const String &s);
|
virtual void setCuesheet(const String &s);
|
||||||
virtual void setRGAlbumGain(float f);
|
virtual void setRGAlbumGain(float f);
|
||||||
virtual void setRGAlbumPeak(float f);
|
virtual void setRGAlbumPeak(float f);
|
||||||
|
|
|
@ -53,7 +53,8 @@ bool Tag::isEmpty() const
|
||||||
comment().isEmpty() &&
|
comment().isEmpty() &&
|
||||||
genre().isEmpty() &&
|
genre().isEmpty() &&
|
||||||
year() == 0 &&
|
year() == 0 &&
|
||||||
track() == 0);
|
track() == 0 &&
|
||||||
|
disc() == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
PropertyMap Tag::properties() const
|
PropertyMap Tag::properties() const
|
||||||
|
@ -75,6 +76,8 @@ PropertyMap Tag::properties() const
|
||||||
map["DATE"].append(String::number(year()));
|
map["DATE"].append(String::number(year()));
|
||||||
if(!(track() == 0))
|
if(!(track() == 0))
|
||||||
map["TRACKNUMBER"].append(String::number(track()));
|
map["TRACKNUMBER"].append(String::number(track()));
|
||||||
|
if (!(disc() == 0))
|
||||||
|
map["DISCNUMBER"].append(String::number(disc()));
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -152,6 +155,18 @@ PropertyMap Tag::setProperties(const PropertyMap &origProps)
|
||||||
else
|
else
|
||||||
setTrack(0);
|
setTrack(0);
|
||||||
|
|
||||||
|
if(properties.contains("DISCNUMBER")) {
|
||||||
|
bool ok;
|
||||||
|
int disc = properties["DISCNUMBER"].front().toInt(&ok);
|
||||||
|
if(ok) {
|
||||||
|
setDisc(disc);
|
||||||
|
oneValueSet.append("DISCNUMBER");
|
||||||
|
} else
|
||||||
|
setDisc(0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
setDisc(0);
|
||||||
|
|
||||||
// for each tag that has been set above, remove the first entry in the corresponding
|
// for each tag that has been set above, remove the first entry in the corresponding
|
||||||
// value list. The others will be returned as unsupported by this format.
|
// value list. The others will be returned as unsupported by this format.
|
||||||
for(StringList::ConstIterator it = oneValueSet.begin(); it != oneValueSet.end(); ++it) {
|
for(StringList::ConstIterator it = oneValueSet.begin(); it != oneValueSet.end(); ++it) {
|
||||||
|
@ -174,6 +189,7 @@ void Tag::duplicate(const Tag *source, Tag *target, bool overwrite) // static
|
||||||
target->setGenre(source->genre());
|
target->setGenre(source->genre());
|
||||||
target->setYear(source->year());
|
target->setYear(source->year());
|
||||||
target->setTrack(source->track());
|
target->setTrack(source->track());
|
||||||
|
target->setDisc(source->disc());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if(target->title().isEmpty())
|
if(target->title().isEmpty())
|
||||||
|
@ -192,5 +208,7 @@ void Tag::duplicate(const Tag *source, Tag *target, bool overwrite) // static
|
||||||
target->setYear(source->year());
|
target->setYear(source->year());
|
||||||
if(target->track() <= 0)
|
if(target->track() <= 0)
|
||||||
target->setTrack(source->track());
|
target->setTrack(source->track());
|
||||||
|
if(target->disc() <= 0)
|
||||||
|
target->setDisc(source->disc());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -125,6 +125,12 @@ namespace TagLib {
|
||||||
*/
|
*/
|
||||||
virtual unsigned int track() const = 0;
|
virtual unsigned int track() const = 0;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Returns the disc number; if there is no track number set, this will
|
||||||
|
* return 0.
|
||||||
|
*/
|
||||||
|
virtual unsigned int disc() const = 0;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Returns the embedded cuesheet; if there is no cuesheet set, this
|
* Returns the embedded cuesheet; if there is no cuesheet set, this
|
||||||
* will return an empty string.
|
* will return an empty string.
|
||||||
|
@ -204,6 +210,11 @@ namespace TagLib {
|
||||||
*/
|
*/
|
||||||
virtual void setTrack(unsigned int i) = 0;
|
virtual void setTrack(unsigned int i) = 0;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Sets the disc to \a i. If \a s is 0 then this value will be cleared.
|
||||||
|
*/
|
||||||
|
virtual void setDisc(unsigned int i) = 0;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Sets the embedded cuesheet to \a s. If \a s is empty then this
|
* Sets the embedded cuesheet to \a s. If \a s is empty then this
|
||||||
* value will be cleared.
|
* value will be cleared.
|
||||||
|
|
|
@ -213,6 +213,11 @@ unsigned int TagUnion::track() const
|
||||||
numberUnion(track);
|
numberUnion(track);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned int TagUnion::disc() const
|
||||||
|
{
|
||||||
|
numberUnion(disc);
|
||||||
|
}
|
||||||
|
|
||||||
String TagUnion::cuesheet() const
|
String TagUnion::cuesheet() const
|
||||||
{
|
{
|
||||||
stringUnion(cuesheet);
|
stringUnion(cuesheet);
|
||||||
|
@ -278,6 +283,11 @@ void TagUnion::setTrack(unsigned int i)
|
||||||
setUnion(Track, i);
|
setUnion(Track, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TagUnion::setDisc(unsigned int i)
|
||||||
|
{
|
||||||
|
setUnion(Disc, i);
|
||||||
|
}
|
||||||
|
|
||||||
void TagUnion::setCuesheet(const String &s)
|
void TagUnion::setCuesheet(const String &s)
|
||||||
{
|
{
|
||||||
setUnion(Cuesheet, s);
|
setUnion(Cuesheet, s);
|
||||||
|
|
|
@ -67,6 +67,7 @@ namespace TagLib {
|
||||||
virtual String genre() const;
|
virtual String genre() const;
|
||||||
virtual unsigned int year() const;
|
virtual unsigned int year() const;
|
||||||
virtual unsigned int track() const;
|
virtual unsigned int track() const;
|
||||||
|
virtual unsigned int disc() const;
|
||||||
virtual String cuesheet() const;
|
virtual String cuesheet() const;
|
||||||
virtual float rgAlbumGain() const;
|
virtual float rgAlbumGain() const;
|
||||||
virtual float rgAlbumPeak() const;
|
virtual float rgAlbumPeak() const;
|
||||||
|
@ -81,6 +82,7 @@ namespace TagLib {
|
||||||
virtual void setGenre(const String &s);
|
virtual void setGenre(const String &s);
|
||||||
virtual void setYear(unsigned int i);
|
virtual void setYear(unsigned int i);
|
||||||
virtual void setTrack(unsigned int i);
|
virtual void setTrack(unsigned int i);
|
||||||
|
virtual void setDisc(unsigned int i);
|
||||||
virtual void setCuesheet(const String &s);
|
virtual void setCuesheet(const String &s);
|
||||||
virtual void setRGAlbumGain(float f);
|
virtual void setRGAlbumGain(float f);
|
||||||
virtual void setRGAlbumPeak(float f);
|
virtual void setRGAlbumPeak(float f);
|
||||||
|
|
|
@ -277,7 +277,7 @@ static inline void dispatch_sync_reentrant(dispatch_queue_t queue, dispatch_bloc
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 7:
|
case 7:
|
||||||
if ([pe year]) cellText = [NSString stringWithFormat:@"%@", [pe year]];
|
if ([pe year]) cellText = [pe yearText];
|
||||||
cellTextAlignment = NSTextAlignmentRight;
|
cellTextAlignment = NSTextAlignmentRight;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -286,7 +286,7 @@ static inline void dispatch_sync_reentrant(dispatch_queue_t queue, dispatch_bloc
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 9:
|
case 9:
|
||||||
if ([pe track]) cellText = [NSString stringWithFormat:@"%@", [pe track]];
|
if ([pe track]) cellText = [pe trackText];
|
||||||
cellTextAlignment = NSTextAlignmentRight;
|
cellTextAlignment = NSTextAlignmentRight;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
NSString *genre;
|
NSString *genre;
|
||||||
NSNumber *year;
|
NSNumber *year;
|
||||||
NSNumber *track;
|
NSNumber *track;
|
||||||
|
NSNumber *disc;
|
||||||
|
|
||||||
NSString *cuesheet;
|
NSString *cuesheet;
|
||||||
|
|
||||||
|
@ -72,6 +73,9 @@
|
||||||
+ (NSSet *)keyPathsForValuesAffectingStatusMessage;
|
+ (NSSet *)keyPathsForValuesAffectingStatusMessage;
|
||||||
+ (NSSet *)keyPathsForValuesAffectingSpam;
|
+ (NSSet *)keyPathsForValuesAffectingSpam;
|
||||||
+ (NSSet *)keyPathsForValuesAffectingAlbumArt;
|
+ (NSSet *)keyPathsForValuesAffectingAlbumArt;
|
||||||
|
+ (NSSet *)keyPathsForValuesAffectingTrackText;
|
||||||
|
+ (NSSet *)keyPathsForValuesAffectingLengthText;
|
||||||
|
+ (NSSet *)keyPathsForValuesAffectingYearText;
|
||||||
|
|
||||||
@property(readonly) NSString *display;
|
@property(readonly) NSString *display;
|
||||||
@property(retain, readonly) NSNumber *length;
|
@property(retain, readonly) NSNumber *length;
|
||||||
|
@ -84,8 +88,12 @@
|
||||||
|
|
||||||
@property(readonly) NSString *lengthText;
|
@property(readonly) NSString *lengthText;
|
||||||
|
|
||||||
|
@property(readonly) NSString *yearText;
|
||||||
|
|
||||||
@property(readonly) NSString *rawTitle;
|
@property(readonly) NSString *rawTitle;
|
||||||
|
|
||||||
|
@property(readonly) NSString *trackText;
|
||||||
|
|
||||||
@property NSInteger index;
|
@property NSInteger index;
|
||||||
@property NSInteger shuffleIndex;
|
@property NSInteger shuffleIndex;
|
||||||
@property NSInteger dbIndex;
|
@property NSInteger dbIndex;
|
||||||
|
@ -114,6 +122,7 @@
|
||||||
@property(retain) NSString *genre;
|
@property(retain) NSString *genre;
|
||||||
@property(retain) NSNumber *year;
|
@property(retain) NSNumber *year;
|
||||||
@property(retain) NSNumber *track;
|
@property(retain) NSNumber *track;
|
||||||
|
@property(retain) NSNumber *disc;
|
||||||
|
|
||||||
@property(retain) NSString *cuesheet;
|
@property(retain) NSString *cuesheet;
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
@synthesize genre;
|
@synthesize genre;
|
||||||
@synthesize year;
|
@synthesize year;
|
||||||
@synthesize track;
|
@synthesize track;
|
||||||
|
@synthesize disc;
|
||||||
|
|
||||||
@synthesize cuesheet;
|
@synthesize cuesheet;
|
||||||
|
|
||||||
|
@ -96,7 +97,12 @@
|
||||||
|
|
||||||
+ (NSSet *)keyPathsForValuesAffectingSpam
|
+ (NSSet *)keyPathsForValuesAffectingSpam
|
||||||
{
|
{
|
||||||
return [NSSet setWithObjects:@"albumartist", @"artist", @"title", @"album", @"track", @"totalFrames", @"currentPosition", @"bitrate", nil];
|
return [NSSet setWithObjects:@"albumartist", @"artist", @"title", @"album", @"track", @"disc", @"totalFrames", @"currentPosition", @"bitrate", nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NSSet *)keyPathsForValuesAffectingTrackText
|
||||||
|
{
|
||||||
|
return [NSSet setWithObjects:@"track", @"disc", nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (NSSet *)keyPathsForValuesAffectingPositionText
|
+ (NSSet *)keyPathsForValuesAffectingPositionText
|
||||||
|
@ -144,7 +150,10 @@
|
||||||
self.genre = nil;
|
self.genre = nil;
|
||||||
self.year = nil;
|
self.year = nil;
|
||||||
self.track = nil;
|
self.track = nil;
|
||||||
|
self.disc = nil;
|
||||||
self.albumArtInternal = nil;
|
self.albumArtInternal = nil;
|
||||||
|
|
||||||
|
self.cuesheet = nil;
|
||||||
|
|
||||||
self.endian = nil;
|
self.endian = nil;
|
||||||
self.codec = nil;
|
self.codec = nil;
|
||||||
|
@ -238,7 +247,7 @@
|
||||||
[elements addObject:self.album];
|
[elements addObject:self.album];
|
||||||
if (hasTrack) {
|
if (hasTrack) {
|
||||||
[elements addObject:@" #"];
|
[elements addObject:@" #"];
|
||||||
[elements addObject:[NSString stringWithFormat:@"%@", self.track]];
|
[elements addObject:self.trackText];
|
||||||
}
|
}
|
||||||
[elements addObject:@"] "];
|
[elements addObject:@"] "];
|
||||||
}
|
}
|
||||||
|
@ -273,6 +282,39 @@
|
||||||
return [elements componentsJoinedByString:@""];
|
return [elements componentsJoinedByString:@""];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@dynamic trackText;
|
||||||
|
-(NSString *)trackText
|
||||||
|
{
|
||||||
|
if ([self.track intValue])
|
||||||
|
{
|
||||||
|
if ([self.disc intValue])
|
||||||
|
{
|
||||||
|
return [NSString stringWithFormat:@"%@.%02u", self.disc, [self.track intValue]];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return [NSString stringWithFormat:@"%02u", [self.track intValue]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return @"";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@dynamic yearText;
|
||||||
|
-(NSString *)yearText
|
||||||
|
{
|
||||||
|
if ([self.year intValue])
|
||||||
|
{
|
||||||
|
return [NSString stringWithFormat:@"%@", self.year];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return @"";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@dynamic positionText;
|
@dynamic positionText;
|
||||||
- (NSString *)positionText
|
- (NSString *)positionText
|
||||||
{
|
{
|
||||||
|
@ -424,6 +466,7 @@
|
||||||
pe->genre = [genre copyWithZone:zone];
|
pe->genre = [genre copyWithZone:zone];
|
||||||
pe->year = [year copyWithZone:zone];
|
pe->year = [year copyWithZone:zone];
|
||||||
pe->track = [track copyWithZone:zone];
|
pe->track = [track copyWithZone:zone];
|
||||||
|
pe->disc = [disc copyWithZone:zone];
|
||||||
|
|
||||||
pe->cuesheet = [cuesheet copyWithZone:zone];
|
pe->cuesheet = [cuesheet copyWithZone:zone];
|
||||||
|
|
||||||
|
|
|
@ -10,10 +10,7 @@
|
||||||
|
|
||||||
#import <Carbon/Carbon.h>
|
#import <Carbon/Carbon.h>
|
||||||
|
|
||||||
#import "BlankZeroFormatter.h"
|
|
||||||
#import "IndexFormatter.h"
|
|
||||||
#import "PlaylistEntry.h"
|
#import "PlaylistEntry.h"
|
||||||
#import "SecondsFormatter.h"
|
|
||||||
|
|
||||||
#import "CogAudio/Status.h"
|
#import "CogAudio/Status.h"
|
||||||
|
|
||||||
|
@ -47,18 +44,6 @@
|
||||||
[[col dataCell] setFont:f];
|
[[col dataCell] setFont:f];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set up formatters
|
|
||||||
NSFormatter *secondsFormatter = [[SecondsFormatter alloc] init];
|
|
||||||
[[[self tableColumnWithIdentifier:@"length"] dataCell] setFormatter:secondsFormatter];
|
|
||||||
|
|
||||||
NSFormatter *indexFormatter = [[IndexFormatter alloc] init];
|
|
||||||
[[[self tableColumnWithIdentifier:@"index"] dataCell] setFormatter:indexFormatter];
|
|
||||||
|
|
||||||
NSFormatter *blankZeroFormatter = [[BlankZeroFormatter alloc] init];
|
|
||||||
[[[self tableColumnWithIdentifier:@"track"] dataCell] setFormatter:blankZeroFormatter];
|
|
||||||
[[[self tableColumnWithIdentifier:@"year"] dataCell] setFormatter:blankZeroFormatter];
|
|
||||||
// end setting up formatters
|
|
||||||
|
|
||||||
[self setVerticalMotionCanBeginDrag:YES];
|
[self setVerticalMotionCanBeginDrag:YES];
|
||||||
|
|
||||||
// Set up header context menu
|
// Set up header context menu
|
||||||
|
|
|
@ -265,6 +265,14 @@ static int psf_info_meta(void * context, const char * name, const char * value)
|
||||||
{
|
{
|
||||||
taglc = @"albumartist";
|
taglc = @"albumartist";
|
||||||
}
|
}
|
||||||
|
else if ([taglc isEqualToString:@"tracknumber"])
|
||||||
|
{
|
||||||
|
taglc = @"track";
|
||||||
|
}
|
||||||
|
else if ([taglc isEqualToString:@"discnumber"])
|
||||||
|
{
|
||||||
|
taglc = @"disc";
|
||||||
|
}
|
||||||
|
|
||||||
if ([taglc hasPrefix:@"replaygain_"])
|
if ([taglc hasPrefix:@"replaygain_"])
|
||||||
{
|
{
|
||||||
|
@ -305,7 +313,8 @@ static int psf_info_meta(void * context, const char * name, const char * value)
|
||||||
[taglc isEqualToString:@"album"] ||
|
[taglc isEqualToString:@"album"] ||
|
||||||
[taglc isEqualToString:@"year"] ||
|
[taglc isEqualToString:@"year"] ||
|
||||||
[taglc isEqualToString:@"genre"] ||
|
[taglc isEqualToString:@"genre"] ||
|
||||||
[taglc isEqualToString:@"track"])
|
[taglc isEqualToString:@"track"] ||
|
||||||
|
[taglc isEqualToString:@"disc"])
|
||||||
{
|
{
|
||||||
[state->info setObject:svalue forKey:taglc];
|
[state->info setObject:svalue forKey:taglc];
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,7 +72,7 @@
|
||||||
if (tag)
|
if (tag)
|
||||||
{
|
{
|
||||||
TagLib::String artist, albumartist, title, album, genre, comment;
|
TagLib::String artist, albumartist, title, album, genre, comment;
|
||||||
int year, track;
|
int year, track, disc;
|
||||||
float rgAlbumGain, rgAlbumPeak, rgTrackGain, rgTrackPeak;
|
float rgAlbumGain, rgAlbumPeak, rgTrackGain, rgTrackPeak;
|
||||||
TagLib::String cuesheet;
|
TagLib::String cuesheet;
|
||||||
|
|
||||||
|
@ -89,6 +89,9 @@
|
||||||
|
|
||||||
track = tag->track();
|
track = tag->track();
|
||||||
[dict setObject:[NSNumber numberWithInt:track] forKey:@"track"];
|
[dict setObject:[NSNumber numberWithInt:track] forKey:@"track"];
|
||||||
|
|
||||||
|
disc = tag->disc();
|
||||||
|
[dict setObject:[NSNumber numberWithInt:disc] forKey:@"disc"];
|
||||||
|
|
||||||
rgAlbumGain = tag->rgAlbumGain();
|
rgAlbumGain = tag->rgAlbumGain();
|
||||||
rgAlbumPeak = tag->rgAlbumPeak();
|
rgAlbumPeak = tag->rgAlbumPeak();
|
||||||
|
|
|
@ -59,6 +59,7 @@
|
||||||
|
|
||||||
lYear = tag->year();
|
lYear = tag->year();
|
||||||
lTrack = tag->track();
|
lTrack = tag->track();
|
||||||
|
lDisc = tag->disc();
|
||||||
|
|
||||||
if (!pArtist.isNull())
|
if (!pArtist.isNull())
|
||||||
lArtist = [NSString stringWithUTF8String:pArtist.toCString(true)];
|
lArtist = [NSString stringWithUTF8String:pArtist.toCString(true)];
|
||||||
|
|
|
@ -95,6 +95,7 @@ static NSString* get_description_tag(const char* description, const char *tag, c
|
||||||
NSString *artist = @"";
|
NSString *artist = @"";
|
||||||
NSNumber *year = [NSNumber numberWithInt:0];
|
NSNumber *year = [NSNumber numberWithInt:0];
|
||||||
NSNumber *track = [NSNumber numberWithInt:0];
|
NSNumber *track = [NSNumber numberWithInt:0];
|
||||||
|
NSNumber *disc = [NSNumber numberWithInt:0];
|
||||||
NSString *title = @"";
|
NSString *title = @"";
|
||||||
|
|
||||||
NSString *codec;
|
NSString *codec;
|
||||||
|
@ -146,6 +147,10 @@ static NSString* get_description_tag(const char* description, const char *tag, c
|
||||||
!strcasecmp(tag_key, "TRACKNUMBER")) {
|
!strcasecmp(tag_key, "TRACKNUMBER")) {
|
||||||
track = [NSNumber numberWithInt:[value intValue]];
|
track = [NSNumber numberWithInt:[value intValue]];
|
||||||
}
|
}
|
||||||
|
else if (!strcasecmp(tag_key, "DISC") ||
|
||||||
|
!strcasecmp(tag_key, "DISCNUMBER")) {
|
||||||
|
disc = [NSNumber numberWithInt:[value intValue]];
|
||||||
|
}
|
||||||
else if (!strcasecmp(tag_key, "TITLE")) {
|
else if (!strcasecmp(tag_key, "TITLE")) {
|
||||||
title = value;
|
title = value;
|
||||||
}
|
}
|
||||||
|
@ -186,6 +191,7 @@ static NSString* get_description_tag(const char* description, const char *tag, c
|
||||||
[NSMutableDictionary dictionaryWithObjectsAndKeys:
|
[NSMutableDictionary dictionaryWithObjectsAndKeys:
|
||||||
title, @"title",
|
title, @"title",
|
||||||
track, @"track",
|
track, @"track",
|
||||||
|
disc, @"disc",
|
||||||
nil];
|
nil];
|
||||||
|
|
||||||
if ( ![album isEqualToString:@""] )
|
if ( ![album isEqualToString:@""] )
|
||||||
|
|
|
@ -1031,7 +1031,7 @@ static SQLiteStore *g_sharedStore = NULL;
|
||||||
int64_t titleId = [self addString:[track rawTitle]];
|
int64_t titleId = [self addString:[track rawTitle]];
|
||||||
int64_t genreId = [self addString:[track genre]];
|
int64_t genreId = [self addString:[track genre]];
|
||||||
int64_t codecId = [self addString:[track codec]];
|
int64_t codecId = [self addString:[track codec]];
|
||||||
int64_t trackNr = [[track track] intValue];
|
int64_t trackNr = [[track track] intValue] | (((uint64_t)[[track disc] intValue]) << 32);
|
||||||
int64_t year = [[track year] intValue];
|
int64_t year = [[track year] intValue];
|
||||||
int64_t unsignedFmt = [track Unsigned];
|
int64_t unsignedFmt = [track Unsigned];
|
||||||
int64_t bitrate = [track bitrate];
|
int64_t bitrate = [track bitrate];
|
||||||
|
@ -1223,7 +1223,7 @@ static SQLiteStore *g_sharedStore = NULL;
|
||||||
int64_t titleId = [self addString:[track rawTitle]];
|
int64_t titleId = [self addString:[track rawTitle]];
|
||||||
int64_t genreId = [self addString:[track genre]];
|
int64_t genreId = [self addString:[track genre]];
|
||||||
int64_t codecId = [self addString:[track codec]];
|
int64_t codecId = [self addString:[track codec]];
|
||||||
int64_t trackNr = [[track track] intValue];
|
int64_t trackNr = [[track track] intValue] | (((uint64_t)[[track disc] intValue]) << 32);
|
||||||
int64_t year = [[track year] intValue];
|
int64_t year = [[track year] intValue];
|
||||||
int64_t unsignedFmt = [track Unsigned];
|
int64_t unsignedFmt = [track Unsigned];
|
||||||
int64_t bitrate = [track bitrate];
|
int64_t bitrate = [track bitrate];
|
||||||
|
@ -1348,6 +1348,9 @@ static SQLiteStore *g_sharedStore = NULL;
|
||||||
double replaygainalbumpeak = sqlite3_column_double(st, select_track_data_out_replaygainalbumpeak);
|
double replaygainalbumpeak = sqlite3_column_double(st, select_track_data_out_replaygainalbumpeak);
|
||||||
double replaygaintrackgain = sqlite3_column_double(st, select_track_data_out_replaygaintrackgain);
|
double replaygaintrackgain = sqlite3_column_double(st, select_track_data_out_replaygaintrackgain);
|
||||||
double replaygaintrackpeak = sqlite3_column_double(st, select_track_data_out_replaygaintrackpeak);
|
double replaygaintrackpeak = sqlite3_column_double(st, select_track_data_out_replaygaintrackpeak);
|
||||||
|
|
||||||
|
uint64_t discNr = ((uint64_t)trackNr) >> 32;
|
||||||
|
trackNr &= (1UL << 32) - 1;
|
||||||
|
|
||||||
[entry setURL:urlForPath([self getString:urlId])];
|
[entry setURL:urlForPath([self getString:urlId])];
|
||||||
|
|
||||||
|
@ -1358,6 +1361,7 @@ static SQLiteStore *g_sharedStore = NULL;
|
||||||
[entry setGenre:[self getString:genreId]];
|
[entry setGenre:[self getString:genreId]];
|
||||||
[entry setCodec:[self getString:codecId]];
|
[entry setCodec:[self getString:codecId]];
|
||||||
[entry setTrack:[NSNumber numberWithInteger:trackNr]];
|
[entry setTrack:[NSNumber numberWithInteger:trackNr]];
|
||||||
|
[entry setDisc:[NSNumber numberWithInteger:discNr]];
|
||||||
[entry setYear:[NSNumber numberWithInteger:year]];
|
[entry setYear:[NSNumber numberWithInteger:year]];
|
||||||
[entry setUnsigned:!!unsignedFmt];
|
[entry setUnsigned:!!unsignedFmt];
|
||||||
[entry setBitrate:(int)bitrate];
|
[entry setBitrate:(int)bitrate];
|
||||||
|
|
Loading…
Reference in New Issue