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 genre]) [dict setObject:[pe genre] forKey:TrackGenre];
|
||||
if ([pe track])
|
||||
[dict setObject:[NSString stringWithFormat:@"%@", [pe track]] forKey:TrackNumber];
|
||||
[dict setObject:[pe trackText] forKey:TrackNumber];
|
||||
if ([pe length])
|
||||
[dict setObject:[NSNumber numberWithInteger:(NSInteger)([[pe length] doubleValue] * 1000.0)]
|
||||
forKey:TrackLength];
|
||||
|
|
|
@ -167,8 +167,7 @@
|
|||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="valueToDisplay.track" id="111"/>
|
||||
<outlet property="formatter" destination="79" id="82"/>
|
||||
<binding destination="-2" name="value" keyPath="valueToDisplay.trackText" id="ZO2-Cd-dfh"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="41" customClass="ToolTipTextField">
|
||||
|
@ -180,8 +179,7 @@
|
|||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="valueToDisplay.length" id="112"/>
|
||||
<outlet property="formatter" destination="80" id="81"/>
|
||||
<binding destination="-2" name="value" keyPath="valueToDisplay.lengthText" id="ji7-tL-8rb"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="43" customClass="ToolTipTextField">
|
||||
|
@ -191,12 +189,9 @@
|
|||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
<connections>
|
||||
<outlet property="formatter" destination="79" id="107"/>
|
||||
</connections>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="valueToDisplay.year" id="113"/>
|
||||
<binding destination="-2" name="value" keyPath="valueToDisplay.yearText" id="miZ-gp-CqU"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="45" customClass="ToolTipTextField">
|
||||
|
|
|
@ -860,8 +860,8 @@
|
|||
</binding>
|
||||
<outlet property="delegate" destination="226" id="481"/>
|
||||
<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="playlistView" destination="206" id="mah-wo-1nd"/>
|
||||
</connections>
|
||||
<point key="canvasLocation" x="130" y="131"/>
|
||||
</window>
|
||||
|
@ -1052,8 +1052,8 @@
|
|||
<string key="NSNullPlaceholder">Cog</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
<outlet property="playbackController" destination="705" id="vo7-mK-yQe"/>
|
||||
<outlet property="miniToolbar" destination="2222" id="Up2-7z-HqA"/>
|
||||
<outlet property="playbackController" destination="705" id="vo7-mK-yQe"/>
|
||||
</connections>
|
||||
<point key="canvasLocation" x="45" y="444"/>
|
||||
</window>
|
||||
|
|
|
@ -66,9 +66,6 @@
|
|||
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, ); }; };
|
||||
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 */; };
|
||||
17D1B27D0CF8B2830028F5B5 /* cue.icns in Resources */ = {isa = PBXBuildFile; fileRef = 17D1B2760CF8B2830028F5B5 /* cue.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, ); }; };
|
||||
835A8FD327957310005B3C39 /* json.c in Sources */ = {isa = PBXBuildFile; fileRef = 835A8FC627957310005B3C39 /* json.c */; };
|
||||
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, ); }; };
|
||||
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, ); }; };
|
||||
|
@ -852,12 +850,6 @@
|
|||
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>"; };
|
||||
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>"; };
|
||||
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>"; };
|
||||
|
@ -936,6 +928,8 @@
|
|||
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>"; };
|
||||
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>"; };
|
||||
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>"; };
|
||||
|
@ -1071,7 +1065,7 @@
|
|||
080E96DDFE201D6D7F000001 /* Classes */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
17D1B1230F632A8B00694C57 /* Formatters */,
|
||||
835F00B3279BD1CD00055FCF /* Formatters */,
|
||||
177042960B8BC53600B86321 /* Application */,
|
||||
17E0D5D20F520E75005B6FED /* Window */,
|
||||
8E75752A09F31D5A0080F1EE /* Playlist */,
|
||||
|
@ -1328,19 +1322,6 @@
|
|||
name = InfoInspector;
|
||||
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 */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
|
@ -1672,6 +1653,15 @@
|
|||
path = json;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
835F00B3279BD1CD00055FCF /* Formatters */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
835F00B4279BD1CD00055FCF /* SecondsFormatter.h */,
|
||||
835F00B8279BD1CD00055FCF /* SecondsFormatter.m */,
|
||||
);
|
||||
path = Formatters;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
8360EF0117F92B23005208A4 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
|
@ -2496,13 +2486,11 @@
|
|||
171EFE8C0F59FEAE000ADC42 /* DockIconController.m in Sources */,
|
||||
17F6C8070F603701000D9DA9 /* PlaybackEventController.m in Sources */,
|
||||
83BC5AB220E4C87100631CD4 /* DualWindow.m in Sources */,
|
||||
835F00BB279BD1CD00055FCF /* SecondsFormatter.m in Sources */,
|
||||
1784560F0F631E24007E8021 /* FileTreeViewController.m in Sources */,
|
||||
178456120F631E31007E8021 /* SideViewController.m in Sources */,
|
||||
17D1B1010F63255200694C57 /* InfoWindowController.m 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 */,
|
||||
171CB3DC0F63670D0047EF0A /* PreferencesWindow.m in Sources */,
|
||||
1778D3CA0F645BF00037E7A0 /* MissingAlbumArtTransformer.m in Sources */,
|
||||
|
|
|
@ -174,6 +174,13 @@ unsigned int APE::Tag::track() const
|
|||
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
|
||||
{
|
||||
if(d->itemListMap["CUESHEET"].isEmpty())
|
||||
|
@ -255,6 +262,14 @@ void APE::Tag::setTrack(unsigned int i)
|
|||
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 &)
|
||||
{
|
||||
}
|
||||
|
|
|
@ -95,6 +95,7 @@ namespace TagLib {
|
|||
virtual String genre() const;
|
||||
virtual unsigned int year() const;
|
||||
virtual unsigned int track() const;
|
||||
virtual unsigned int disc() const;
|
||||
virtual String cuesheet() const;
|
||||
virtual float rgAlbumGain() const;
|
||||
virtual float rgAlbumPeak() const;
|
||||
|
@ -109,6 +110,7 @@ namespace TagLib {
|
|||
virtual void setGenre(const String &s);
|
||||
virtual void setYear(unsigned int i);
|
||||
virtual void setTrack(unsigned int i);
|
||||
virtual void setDisc(unsigned int i);
|
||||
virtual void setCuesheet(const String &s);
|
||||
virtual void setRGAlbumGain(float f);
|
||||
virtual void setRGAlbumPeak(float f);
|
||||
|
|
|
@ -108,6 +108,20 @@ unsigned int ASF::Tag::track() const
|
|||
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
|
||||
{
|
||||
if(d->attributeListMap.contains("WM/Genre"))
|
||||
|
@ -189,6 +203,11 @@ void ASF::Tag::setTrack(unsigned int 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 &)
|
||||
{
|
||||
}
|
||||
|
|
|
@ -102,6 +102,7 @@ namespace TagLib {
|
|||
* return 0.
|
||||
*/
|
||||
virtual unsigned int track() const;
|
||||
virtual unsigned int disc() 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.
|
||||
*/
|
||||
virtual void setTrack(unsigned int i);
|
||||
virtual void setDisc(unsigned int i);
|
||||
|
||||
virtual void setCuesheet(const String &s);
|
||||
|
||||
|
|
|
@ -94,6 +94,11 @@ unsigned int Mod::Tag::track() const
|
|||
return 0;
|
||||
}
|
||||
|
||||
unsigned int Mod::Tag::disc() const
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
String Mod::Tag::cuesheet() const
|
||||
{
|
||||
return String();
|
||||
|
@ -158,6 +163,10 @@ void Mod::Tag::setTrack(unsigned int)
|
|||
{
|
||||
}
|
||||
|
||||
void Mod::Tag::setDisc(unsigned int)
|
||||
{
|
||||
}
|
||||
|
||||
void Mod::Tag::setCuesheet(const String &)
|
||||
{
|
||||
}
|
||||
|
|
|
@ -94,6 +94,11 @@ namespace TagLib {
|
|||
*/
|
||||
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.
|
||||
*/
|
||||
|
@ -187,6 +192,11 @@ namespace TagLib {
|
|||
*/
|
||||
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.
|
||||
*/
|
||||
|
|
|
@ -780,6 +780,14 @@ MP4::Tag::track() const
|
|||
return 0;
|
||||
}
|
||||
|
||||
unsigned int
|
||||
MP4::Tag::disc() const
|
||||
{
|
||||
if(d->items.contains("disk"))
|
||||
return d->items["disk"].toIntPair().first;
|
||||
return 0;
|
||||
}
|
||||
|
||||
String
|
||||
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
|
||||
MP4::Tag::setCuesheet(const String &)
|
||||
{
|
||||
|
|
|
@ -61,6 +61,7 @@ namespace TagLib {
|
|||
virtual String genre() const;
|
||||
virtual unsigned int year() const;
|
||||
virtual unsigned int track() const;
|
||||
virtual unsigned int disc() const;
|
||||
virtual String cuesheet() const;
|
||||
virtual float rgAlbumGain() const;
|
||||
virtual float rgAlbumPeak() const;
|
||||
|
@ -75,6 +76,7 @@ namespace TagLib {
|
|||
virtual void setGenre(const String &value);
|
||||
virtual void setYear(unsigned int value);
|
||||
virtual void setTrack(unsigned int value);
|
||||
virtual void setDisc(unsigned int value);
|
||||
virtual void setCuesheet(const String &value);
|
||||
virtual void setRGAlbumGain(float);
|
||||
virtual void setRGAlbumPeak(float);
|
||||
|
|
|
@ -167,6 +167,11 @@ unsigned int ID3v1::Tag::track() const
|
|||
return d->track;
|
||||
}
|
||||
|
||||
unsigned int ID3v1::Tag::disc() const
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
String ID3v1::Tag::cuesheet() const
|
||||
{
|
||||
return String();
|
||||
|
@ -231,6 +236,10 @@ void ID3v1::Tag::setTrack(unsigned int i)
|
|||
d->track = i < 256 ? i : 0;
|
||||
}
|
||||
|
||||
void ID3v1::Tag::setDisc(unsigned int i)
|
||||
{
|
||||
}
|
||||
|
||||
void ID3v1::Tag::setCuesheet(const String &)
|
||||
{
|
||||
}
|
||||
|
|
|
@ -143,6 +143,7 @@ namespace TagLib {
|
|||
virtual String genre() const;
|
||||
virtual unsigned int year() const;
|
||||
virtual unsigned int track() const;
|
||||
virtual unsigned int disc() const;
|
||||
virtual String cuesheet() const;
|
||||
virtual float rgAlbumGain() const;
|
||||
virtual float rgAlbumPeak() const;
|
||||
|
@ -157,6 +158,7 @@ namespace TagLib {
|
|||
virtual void setGenre(const String &s);
|
||||
virtual void setYear(unsigned int i);
|
||||
virtual void setTrack(unsigned int i);
|
||||
virtual void setDisc(unsigned int i);
|
||||
virtual void setCuesheet(const String &s);
|
||||
virtual void setRGAlbumGain(float f);
|
||||
virtual void setRGAlbumPeak(float f);
|
||||
|
|
|
@ -245,6 +245,13 @@ unsigned int ID3v2::Tag::track() const
|
|||
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
|
||||
{
|
||||
const FrameList &list = d->frameListMap["TXXX"];
|
||||
|
@ -396,6 +403,15 @@ void ID3v2::Tag::setTrack(unsigned int 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)
|
||||
{
|
||||
bool createdFrame = false;
|
||||
|
|
|
@ -164,6 +164,7 @@ namespace TagLib {
|
|||
virtual String genre() const;
|
||||
virtual unsigned int year() const;
|
||||
virtual unsigned int track() const;
|
||||
virtual unsigned int disc() const;
|
||||
|
||||
virtual String cuesheet() const;
|
||||
|
||||
|
@ -181,6 +182,7 @@ namespace TagLib {
|
|||
virtual void setGenre(const String &s);
|
||||
virtual void setYear(unsigned int i);
|
||||
virtual void setTrack(unsigned int i);
|
||||
virtual void setDisc(unsigned int i);
|
||||
|
||||
virtual void setCuesheet(const String &s);
|
||||
|
||||
|
|
|
@ -145,6 +145,19 @@ unsigned int Ogg::XiphComment::track() const
|
|||
return d->fieldListMap["TRACKNUMBER"].front().toInt();
|
||||
if(!d->fieldListMap["TRACKNUM"].isEmpty())
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -231,6 +244,7 @@ void Ogg::XiphComment::setYear(unsigned int i)
|
|||
|
||||
void Ogg::XiphComment::setTrack(unsigned int i)
|
||||
{
|
||||
removeFields("TRACK");
|
||||
removeFields("TRACKNUM");
|
||||
if(i == 0)
|
||||
removeFields("TRACKNUMBER");
|
||||
|
@ -238,6 +252,16 @@ void Ogg::XiphComment::setTrack(unsigned int 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)
|
||||
{
|
||||
if (s.isEmpty())
|
||||
|
|
|
@ -88,6 +88,7 @@ namespace TagLib {
|
|||
virtual String genre() const;
|
||||
virtual unsigned int year() const;
|
||||
virtual unsigned int track() const;
|
||||
virtual unsigned int disc() const;
|
||||
virtual String cuesheet() const;
|
||||
virtual float rgAlbumGain() const;
|
||||
virtual float rgAlbumPeak() const;
|
||||
|
@ -102,6 +103,7 @@ namespace TagLib {
|
|||
virtual void setGenre(const String &s);
|
||||
virtual void setYear(unsigned int i);
|
||||
virtual void setTrack(unsigned int i);
|
||||
virtual void setDisc(unsigned int i);
|
||||
virtual void setCuesheet(const String &s);
|
||||
virtual void setRGAlbumGain(float f);
|
||||
virtual void setRGAlbumPeak(float f);
|
||||
|
|
|
@ -128,6 +128,11 @@ unsigned int RIFF::Info::Tag::track() const
|
|||
return fieldText("IPRT").toInt();
|
||||
}
|
||||
|
||||
unsigned int RIFF::Info::Tag::disc() const
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
String RIFF::Info::Tag::cuesheet() const
|
||||
{
|
||||
return String();
|
||||
|
@ -198,6 +203,10 @@ void RIFF::Info::Tag::setTrack(unsigned int i)
|
|||
d->fieldListMap.erase("IPRT");
|
||||
}
|
||||
|
||||
void RIFF::Info::Tag::setDisc(unsigned int)
|
||||
{
|
||||
}
|
||||
|
||||
void RIFF::Info::Tag::setCuesheet(const String &)
|
||||
{
|
||||
}
|
||||
|
|
|
@ -110,6 +110,7 @@ namespace TagLib {
|
|||
virtual String genre() const;
|
||||
virtual unsigned int year() const;
|
||||
virtual unsigned int track() const;
|
||||
virtual unsigned int disc() const;
|
||||
virtual String cuesheet() const;
|
||||
virtual float rgAlbumGain() const;
|
||||
virtual float rgAlbumPeak() const;
|
||||
|
@ -124,6 +125,7 @@ namespace TagLib {
|
|||
virtual void setGenre(const String &s);
|
||||
virtual void setYear(unsigned int i);
|
||||
virtual void setTrack(unsigned int i);
|
||||
virtual void setDisc(unsigned int);
|
||||
virtual void setCuesheet(const String &s);
|
||||
virtual void setRGAlbumGain(float f);
|
||||
virtual void setRGAlbumPeak(float f);
|
||||
|
|
|
@ -53,7 +53,8 @@ bool Tag::isEmpty() const
|
|||
comment().isEmpty() &&
|
||||
genre().isEmpty() &&
|
||||
year() == 0 &&
|
||||
track() == 0);
|
||||
track() == 0 &&
|
||||
disc() == 0);
|
||||
}
|
||||
|
||||
PropertyMap Tag::properties() const
|
||||
|
@ -75,6 +76,8 @@ PropertyMap Tag::properties() const
|
|||
map["DATE"].append(String::number(year()));
|
||||
if(!(track() == 0))
|
||||
map["TRACKNUMBER"].append(String::number(track()));
|
||||
if (!(disc() == 0))
|
||||
map["DISCNUMBER"].append(String::number(disc()));
|
||||
return map;
|
||||
}
|
||||
|
||||
|
@ -152,6 +155,18 @@ PropertyMap Tag::setProperties(const PropertyMap &origProps)
|
|||
else
|
||||
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
|
||||
// value list. The others will be returned as unsupported by this format.
|
||||
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->setYear(source->year());
|
||||
target->setTrack(source->track());
|
||||
target->setDisc(source->disc());
|
||||
}
|
||||
else {
|
||||
if(target->title().isEmpty())
|
||||
|
@ -192,5 +208,7 @@ void Tag::duplicate(const Tag *source, Tag *target, bool overwrite) // static
|
|||
target->setYear(source->year());
|
||||
if(target->track() <= 0)
|
||||
target->setTrack(source->track());
|
||||
if(target->disc() <= 0)
|
||||
target->setDisc(source->disc());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -125,6 +125,12 @@ namespace TagLib {
|
|||
*/
|
||||
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
|
||||
* will return an empty string.
|
||||
|
@ -204,6 +210,11 @@ namespace TagLib {
|
|||
*/
|
||||
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
|
||||
* value will be cleared.
|
||||
|
|
|
@ -213,6 +213,11 @@ unsigned int TagUnion::track() const
|
|||
numberUnion(track);
|
||||
}
|
||||
|
||||
unsigned int TagUnion::disc() const
|
||||
{
|
||||
numberUnion(disc);
|
||||
}
|
||||
|
||||
String TagUnion::cuesheet() const
|
||||
{
|
||||
stringUnion(cuesheet);
|
||||
|
@ -278,6 +283,11 @@ void TagUnion::setTrack(unsigned int i)
|
|||
setUnion(Track, i);
|
||||
}
|
||||
|
||||
void TagUnion::setDisc(unsigned int i)
|
||||
{
|
||||
setUnion(Disc, i);
|
||||
}
|
||||
|
||||
void TagUnion::setCuesheet(const String &s)
|
||||
{
|
||||
setUnion(Cuesheet, s);
|
||||
|
|
|
@ -67,6 +67,7 @@ namespace TagLib {
|
|||
virtual String genre() const;
|
||||
virtual unsigned int year() const;
|
||||
virtual unsigned int track() const;
|
||||
virtual unsigned int disc() const;
|
||||
virtual String cuesheet() const;
|
||||
virtual float rgAlbumGain() const;
|
||||
virtual float rgAlbumPeak() const;
|
||||
|
@ -81,6 +82,7 @@ namespace TagLib {
|
|||
virtual void setGenre(const String &s);
|
||||
virtual void setYear(unsigned int i);
|
||||
virtual void setTrack(unsigned int i);
|
||||
virtual void setDisc(unsigned int i);
|
||||
virtual void setCuesheet(const String &s);
|
||||
virtual void setRGAlbumGain(float f);
|
||||
virtual void setRGAlbumPeak(float f);
|
||||
|
|
|
@ -277,7 +277,7 @@ static inline void dispatch_sync_reentrant(dispatch_queue_t queue, dispatch_bloc
|
|||
break;
|
||||
|
||||
case 7:
|
||||
if ([pe year]) cellText = [NSString stringWithFormat:@"%@", [pe year]];
|
||||
if ([pe year]) cellText = [pe yearText];
|
||||
cellTextAlignment = NSTextAlignmentRight;
|
||||
break;
|
||||
|
||||
|
@ -286,7 +286,7 @@ static inline void dispatch_sync_reentrant(dispatch_queue_t queue, dispatch_bloc
|
|||
break;
|
||||
|
||||
case 9:
|
||||
if ([pe track]) cellText = [NSString stringWithFormat:@"%@", [pe track]];
|
||||
if ([pe track]) cellText = [pe trackText];
|
||||
cellTextAlignment = NSTextAlignmentRight;
|
||||
break;
|
||||
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
NSString *genre;
|
||||
NSNumber *year;
|
||||
NSNumber *track;
|
||||
NSNumber *disc;
|
||||
|
||||
NSString *cuesheet;
|
||||
|
||||
|
@ -72,6 +73,9 @@
|
|||
+ (NSSet *)keyPathsForValuesAffectingStatusMessage;
|
||||
+ (NSSet *)keyPathsForValuesAffectingSpam;
|
||||
+ (NSSet *)keyPathsForValuesAffectingAlbumArt;
|
||||
+ (NSSet *)keyPathsForValuesAffectingTrackText;
|
||||
+ (NSSet *)keyPathsForValuesAffectingLengthText;
|
||||
+ (NSSet *)keyPathsForValuesAffectingYearText;
|
||||
|
||||
@property(readonly) NSString *display;
|
||||
@property(retain, readonly) NSNumber *length;
|
||||
|
@ -84,8 +88,12 @@
|
|||
|
||||
@property(readonly) NSString *lengthText;
|
||||
|
||||
@property(readonly) NSString *yearText;
|
||||
|
||||
@property(readonly) NSString *rawTitle;
|
||||
|
||||
@property(readonly) NSString *trackText;
|
||||
|
||||
@property NSInteger index;
|
||||
@property NSInteger shuffleIndex;
|
||||
@property NSInteger dbIndex;
|
||||
|
@ -114,6 +122,7 @@
|
|||
@property(retain) NSString *genre;
|
||||
@property(retain) NSNumber *year;
|
||||
@property(retain) NSNumber *track;
|
||||
@property(retain) NSNumber *disc;
|
||||
|
||||
@property(retain) NSString *cuesheet;
|
||||
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
@synthesize genre;
|
||||
@synthesize year;
|
||||
@synthesize track;
|
||||
@synthesize disc;
|
||||
|
||||
@synthesize cuesheet;
|
||||
|
||||
|
@ -96,7 +97,12 @@
|
|||
|
||||
+ (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
|
||||
|
@ -144,7 +150,10 @@
|
|||
self.genre = nil;
|
||||
self.year = nil;
|
||||
self.track = nil;
|
||||
self.disc = nil;
|
||||
self.albumArtInternal = nil;
|
||||
|
||||
self.cuesheet = nil;
|
||||
|
||||
self.endian = nil;
|
||||
self.codec = nil;
|
||||
|
@ -238,7 +247,7 @@
|
|||
[elements addObject:self.album];
|
||||
if (hasTrack) {
|
||||
[elements addObject:@" #"];
|
||||
[elements addObject:[NSString stringWithFormat:@"%@", self.track]];
|
||||
[elements addObject:self.trackText];
|
||||
}
|
||||
[elements addObject:@"] "];
|
||||
}
|
||||
|
@ -273,6 +282,39 @@
|
|||
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;
|
||||
- (NSString *)positionText
|
||||
{
|
||||
|
@ -424,6 +466,7 @@
|
|||
pe->genre = [genre copyWithZone:zone];
|
||||
pe->year = [year copyWithZone:zone];
|
||||
pe->track = [track copyWithZone:zone];
|
||||
pe->disc = [disc copyWithZone:zone];
|
||||
|
||||
pe->cuesheet = [cuesheet copyWithZone:zone];
|
||||
|
||||
|
|
|
@ -10,10 +10,7 @@
|
|||
|
||||
#import <Carbon/Carbon.h>
|
||||
|
||||
#import "BlankZeroFormatter.h"
|
||||
#import "IndexFormatter.h"
|
||||
#import "PlaylistEntry.h"
|
||||
#import "SecondsFormatter.h"
|
||||
|
||||
#import "CogAudio/Status.h"
|
||||
|
||||
|
@ -47,18 +44,6 @@
|
|||
[[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];
|
||||
|
||||
// Set up header context menu
|
||||
|
|
|
@ -265,6 +265,14 @@ static int psf_info_meta(void * context, const char * name, const char * value)
|
|||
{
|
||||
taglc = @"albumartist";
|
||||
}
|
||||
else if ([taglc isEqualToString:@"tracknumber"])
|
||||
{
|
||||
taglc = @"track";
|
||||
}
|
||||
else if ([taglc isEqualToString:@"discnumber"])
|
||||
{
|
||||
taglc = @"disc";
|
||||
}
|
||||
|
||||
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:@"year"] ||
|
||||
[taglc isEqualToString:@"genre"] ||
|
||||
[taglc isEqualToString:@"track"])
|
||||
[taglc isEqualToString:@"track"] ||
|
||||
[taglc isEqualToString:@"disc"])
|
||||
{
|
||||
[state->info setObject:svalue forKey:taglc];
|
||||
}
|
||||
|
|
|
@ -72,7 +72,7 @@
|
|||
if (tag)
|
||||
{
|
||||
TagLib::String artist, albumartist, title, album, genre, comment;
|
||||
int year, track;
|
||||
int year, track, disc;
|
||||
float rgAlbumGain, rgAlbumPeak, rgTrackGain, rgTrackPeak;
|
||||
TagLib::String cuesheet;
|
||||
|
||||
|
@ -89,6 +89,9 @@
|
|||
|
||||
track = tag->track();
|
||||
[dict setObject:[NSNumber numberWithInt:track] forKey:@"track"];
|
||||
|
||||
disc = tag->disc();
|
||||
[dict setObject:[NSNumber numberWithInt:disc] forKey:@"disc"];
|
||||
|
||||
rgAlbumGain = tag->rgAlbumGain();
|
||||
rgAlbumPeak = tag->rgAlbumPeak();
|
||||
|
|
|
@ -59,6 +59,7 @@
|
|||
|
||||
lYear = tag->year();
|
||||
lTrack = tag->track();
|
||||
lDisc = tag->disc();
|
||||
|
||||
if (!pArtist.isNull())
|
||||
lArtist = [NSString stringWithUTF8String:pArtist.toCString(true)];
|
||||
|
|
|
@ -95,6 +95,7 @@ static NSString* get_description_tag(const char* description, const char *tag, c
|
|||
NSString *artist = @"";
|
||||
NSNumber *year = [NSNumber numberWithInt:0];
|
||||
NSNumber *track = [NSNumber numberWithInt:0];
|
||||
NSNumber *disc = [NSNumber numberWithInt:0];
|
||||
NSString *title = @"";
|
||||
|
||||
NSString *codec;
|
||||
|
@ -146,6 +147,10 @@ static NSString* get_description_tag(const char* description, const char *tag, c
|
|||
!strcasecmp(tag_key, "TRACKNUMBER")) {
|
||||
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")) {
|
||||
title = value;
|
||||
}
|
||||
|
@ -186,6 +191,7 @@ static NSString* get_description_tag(const char* description, const char *tag, c
|
|||
[NSMutableDictionary dictionaryWithObjectsAndKeys:
|
||||
title, @"title",
|
||||
track, @"track",
|
||||
disc, @"disc",
|
||||
nil];
|
||||
|
||||
if ( ![album isEqualToString:@""] )
|
||||
|
|
|
@ -1031,7 +1031,7 @@ static SQLiteStore *g_sharedStore = NULL;
|
|||
int64_t titleId = [self addString:[track rawTitle]];
|
||||
int64_t genreId = [self addString:[track genre]];
|
||||
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 unsignedFmt = [track Unsigned];
|
||||
int64_t bitrate = [track bitrate];
|
||||
|
@ -1223,7 +1223,7 @@ static SQLiteStore *g_sharedStore = NULL;
|
|||
int64_t titleId = [self addString:[track rawTitle]];
|
||||
int64_t genreId = [self addString:[track genre]];
|
||||
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 unsignedFmt = [track Unsigned];
|
||||
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 replaygaintrackgain = sqlite3_column_double(st, select_track_data_out_replaygaintrackgain);
|
||||
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])];
|
||||
|
||||
|
@ -1358,6 +1361,7 @@ static SQLiteStore *g_sharedStore = NULL;
|
|||
[entry setGenre:[self getString:genreId]];
|
||||
[entry setCodec:[self getString:codecId]];
|
||||
[entry setTrack:[NSNumber numberWithInteger:trackNr]];
|
||||
[entry setDisc:[NSNumber numberWithInteger:discNr]];
|
||||
[entry setYear:[NSNumber numberWithInteger:year]];
|
||||
[entry setUnsigned:!!unsignedFmt];
|
||||
[entry setBitrate:(int)bitrate];
|
||||
|
|
Loading…
Reference in New Issue