diff --git a/Frameworks/TagLib/taglib/taglib/ape/apetag.cpp b/Frameworks/TagLib/taglib/taglib/ape/apetag.cpp index f1d1c2eb5..ab6ce800c 100644 --- a/Frameworks/TagLib/taglib/taglib/ape/apetag.cpp +++ b/Frameworks/TagLib/taglib/taglib/ape/apetag.cpp @@ -139,6 +139,13 @@ String APE::Tag::artist() const return d->itemListMap["ARTIST"].values().toString(); } +String APE::Tag::composer() const +{ + if(!d->itemListMap["COMPOSER"].isEmpty()) + return d->itemListMap["COMPOSER"].values().toString(); + return String(); +} + String APE::Tag::album() const { if(d->itemListMap["ALBUM"].isEmpty()) @@ -247,6 +254,11 @@ void APE::Tag::setArtist(const String &s) addValue("ARTIST", s, true); } +void APE::Tag::setComposer(const String &s) +{ + addValue("COMPOSER", s, true); +} + void APE::Tag::setAlbum(const String &s) { addValue("ALBUM", s, true); diff --git a/Frameworks/TagLib/taglib/taglib/ape/apetag.h b/Frameworks/TagLib/taglib/taglib/ape/apetag.h index 6459e6488..cc80a9aea 100644 --- a/Frameworks/TagLib/taglib/taglib/ape/apetag.h +++ b/Frameworks/TagLib/taglib/taglib/ape/apetag.h @@ -90,6 +90,7 @@ namespace TagLib { virtual String title() const; virtual String albumartist() const; virtual String artist() const; + virtual String composer() const; virtual String album() const; virtual String unsyncedlyrics() const; virtual String comment() const; @@ -107,6 +108,7 @@ namespace TagLib { virtual void setTitle(const String &s); virtual void setAlbumArtist(const String &s); virtual void setArtist(const String &s); + virtual void setComposer(const String &s); virtual void setAlbum(const String &s); virtual void setUnsyncedlyrics(const String &s); virtual void setComment(const String &s); diff --git a/Frameworks/TagLib/taglib/taglib/asf/asftag.cpp b/Frameworks/TagLib/taglib/taglib/asf/asftag.cpp index 3dd7c38d3..21d82aa3e 100644 --- a/Frameworks/TagLib/taglib/taglib/asf/asftag.cpp +++ b/Frameworks/TagLib/taglib/taglib/asf/asftag.cpp @@ -67,6 +67,13 @@ String ASF::Tag::artist() const return d->artist; } +String ASF::Tag::composer() const +{ + if(d->attributeListMap.contains("WM/Composer")) + return d->attributeListMap["WM/Composer"][0].toString(); + return String(); +} + String ASF::Tag::album() const { if(d->attributeListMap.contains("WM/AlbumTitle")) @@ -183,6 +190,11 @@ void ASF::Tag::setArtist(const String &value) d->artist = value; } +void ASF::Tag::setComposer(const String &value) +{ + setAttribute("WM/Composer", value); +} + void ASF::Tag::setCopyright(const String &value) { d->copyright = value; diff --git a/Frameworks/TagLib/taglib/taglib/asf/asftag.h b/Frameworks/TagLib/taglib/taglib/asf/asftag.h index 2791beb80..260f4f5f8 100644 --- a/Frameworks/TagLib/taglib/taglib/asf/asftag.h +++ b/Frameworks/TagLib/taglib/taglib/asf/asftag.h @@ -64,6 +64,11 @@ namespace TagLib { */ virtual String artist() const; + /*! + * Returns the composer name. + */ + virtual String composer() const; + /*! * Returns the album name; if no album name is present in the tag * String::null will be returned. @@ -133,6 +138,11 @@ namespace TagLib { */ virtual void setArtist(const String &s); + /*! + * Sets the composer to \a s. + */ + virtual void setComposer(const String &s); + /*! * Sets the album to \a s. If \a s is String::null then this value will be * cleared. diff --git a/Frameworks/TagLib/taglib/taglib/mod/modtag.cpp b/Frameworks/TagLib/taglib/taglib/mod/modtag.cpp index 0bbd02c98..735b84126 100644 --- a/Frameworks/TagLib/taglib/taglib/mod/modtag.cpp +++ b/Frameworks/TagLib/taglib/taglib/mod/modtag.cpp @@ -69,6 +69,11 @@ String Mod::Tag::artist() const return String(); } +String Mod::Tag::composer() const +{ + return String(); +} + String Mod::Tag::album() const { return String(); @@ -152,6 +157,10 @@ void Mod::Tag::setArtist(const String &) { } +void Mod::Tag::setComposer(const String &) +{ +} + void Mod::Tag::setAlbum(const String &) { } diff --git a/Frameworks/TagLib/taglib/taglib/mod/modtag.h b/Frameworks/TagLib/taglib/taglib/mod/modtag.h index ba9d11e75..29e4d6548 100644 --- a/Frameworks/TagLib/taglib/taglib/mod/modtag.h +++ b/Frameworks/TagLib/taglib/taglib/mod/modtag.h @@ -67,6 +67,11 @@ namespace TagLib { */ virtual String artist() const; + /*! + * Not supported by module files. Therefore always returns String::null. + */ + virtual String composer() const; + /*! * Not supported by module files. Therefore always returns String::null. */ @@ -163,6 +168,11 @@ namespace TagLib { */ virtual void setArtist(const String &artist); + /*! + * Not supported by module files and therefore ignored. + */ + virtual void setComposer(const String &composer); + /*! * Not supported by module files and therefore ignored. */ diff --git a/Frameworks/TagLib/taglib/taglib/mpeg/id3v1/id3v1tag.cpp b/Frameworks/TagLib/taglib/taglib/mpeg/id3v1/id3v1tag.cpp index 3b12e87c1..03d9536aa 100644 --- a/Frameworks/TagLib/taglib/taglib/mpeg/id3v1/id3v1tag.cpp +++ b/Frameworks/TagLib/taglib/taglib/mpeg/id3v1/id3v1tag.cpp @@ -142,6 +142,11 @@ String ID3v1::Tag::artist() const return d->artist; } +String ID3v1::Tag::composer() const +{ + return String(); +} + String ID3v1::Tag::album() const { return d->album; @@ -221,6 +226,10 @@ void ID3v1::Tag::setArtist(const String &s) d->artist = s; } +void ID3v1::Tag::setComposer(const String &s) +{ +} + void ID3v1::Tag::setAlbum(const String &s) { d->album = s; diff --git a/Frameworks/TagLib/taglib/taglib/mpeg/id3v1/id3v1tag.h b/Frameworks/TagLib/taglib/taglib/mpeg/id3v1/id3v1tag.h index 24ed105ef..ccd46b295 100644 --- a/Frameworks/TagLib/taglib/taglib/mpeg/id3v1/id3v1tag.h +++ b/Frameworks/TagLib/taglib/taglib/mpeg/id3v1/id3v1tag.h @@ -138,6 +138,7 @@ namespace TagLib { virtual String title() const; virtual String albumartist() const; virtual String artist() const; + virtual String composer() const; virtual String album() const; virtual String comment() const; virtual String unsyncedlyrics() const; @@ -155,6 +156,7 @@ namespace TagLib { virtual void setTitle(const String &s); virtual void setAlbumArtist(const String &s); virtual void setArtist(const String &s); + virtual void setComposer(const String &s); virtual void setAlbum(const String &s); virtual void setComment(const String &s); virtual void setUnsyncedlyrics(const String &s); diff --git a/Frameworks/TagLib/taglib/taglib/mpeg/id3v2/id3v2tag.cpp b/Frameworks/TagLib/taglib/taglib/mpeg/id3v2/id3v2tag.cpp index 4d0269eb3..c7b4d428a 100644 --- a/Frameworks/TagLib/taglib/taglib/mpeg/id3v2/id3v2tag.cpp +++ b/Frameworks/TagLib/taglib/taglib/mpeg/id3v2/id3v2tag.cpp @@ -163,6 +163,13 @@ String ID3v2::Tag::albumartist() const return String(); } +String ID3v2::Tag::composer() const +{ + if(!d->frameListMap["TCOM"].isEmpty()) + return d->frameListMap["TCOM"].front()->toString(); + return String(); +} + String ID3v2::Tag::album() const { if(!d->frameListMap["TALB"].isEmpty()) @@ -352,6 +359,11 @@ void ID3v2::Tag::setAlbumArtist(const String &s) setTextFrame("TPE2", s); } +void ID3v2::Tag::setComposer(const String &s) +{ + setTextFrame("TCOM", s); +} + void ID3v2::Tag::setAlbum(const String &s) { setTextFrame("TALB", s); diff --git a/Frameworks/TagLib/taglib/taglib/mpeg/id3v2/id3v2tag.h b/Frameworks/TagLib/taglib/taglib/mpeg/id3v2/id3v2tag.h index 156427069..5933d7564 100644 --- a/Frameworks/TagLib/taglib/taglib/mpeg/id3v2/id3v2tag.h +++ b/Frameworks/TagLib/taglib/taglib/mpeg/id3v2/id3v2tag.h @@ -159,6 +159,7 @@ namespace TagLib { virtual String title() const; virtual String albumartist() const; virtual String artist() const; + virtual String composer() const; virtual String album() const; virtual String comment() const; virtual String unsyncedlyrics() const; @@ -179,6 +180,7 @@ namespace TagLib { virtual void setTitle(const String &s); virtual void setAlbumArtist(const String &s); virtual void setArtist(const String &s); + virtual void setComposer(const String &s); virtual void setAlbum(const String &s); virtual void setComment(const String &s); virtual void setUnsyncedlyrics(const String &s); diff --git a/Frameworks/TagLib/taglib/taglib/riff/wav/infotag.cpp b/Frameworks/TagLib/taglib/taglib/riff/wav/infotag.cpp index 17519e6df..616be0cb1 100644 --- a/Frameworks/TagLib/taglib/taglib/riff/wav/infotag.cpp +++ b/Frameworks/TagLib/taglib/taglib/riff/wav/infotag.cpp @@ -103,6 +103,11 @@ String RIFF::Info::Tag::artist() const return fieldText("IART"); } +String RIFF::Info::Tag::composer() const +{ + return fieldText("IMUS"); +} + String RIFF::Info::Tag::album() const { return fieldText("IPRD"); @@ -182,6 +187,11 @@ void RIFF::Info::Tag::setArtist(const String &s) setFieldText("IART", s); } +void RIFF::Info::Tag::setComposer(const String &s) +{ + setFieldText("IMUS", s); +} + void RIFF::Info::Tag::setAlbum(const String &s) { setFieldText("IPRD", s); diff --git a/Frameworks/TagLib/taglib/taglib/riff/wav/infotag.h b/Frameworks/TagLib/taglib/taglib/riff/wav/infotag.h index 4eaa31e3c..637947e56 100644 --- a/Frameworks/TagLib/taglib/taglib/riff/wav/infotag.h +++ b/Frameworks/TagLib/taglib/taglib/riff/wav/infotag.h @@ -105,6 +105,7 @@ namespace TagLib { virtual String title() const; virtual String albumartist() const; virtual String artist() const; + virtual String composer() const; virtual String album() const; virtual String unsyncedlyrics() const; virtual String comment() const; @@ -122,6 +123,7 @@ namespace TagLib { virtual void setTitle(const String &s); virtual void setAlbumArtist(const String &s); virtual void setArtist(const String &s); + virtual void setComposer(const String &s); virtual void setAlbum(const String &s); virtual void setUnsyncedlyrics(const String &s); virtual void setComment(const String &s); diff --git a/Frameworks/TagLib/taglib/taglib/tag.cpp b/Frameworks/TagLib/taglib/taglib/tag.cpp index 79c40abe4..19262b8e6 100644 --- a/Frameworks/TagLib/taglib/taglib/tag.cpp +++ b/Frameworks/TagLib/taglib/taglib/tag.cpp @@ -49,6 +49,7 @@ bool Tag::isEmpty() const return (title().isEmpty() && albumartist().isEmpty() && artist().isEmpty() && + composer().isEmpty() && album().isEmpty() && unsyncedlyrics().isEmpty() && comment().isEmpty() && @@ -67,6 +68,8 @@ PropertyMap Tag::properties() const map["ALBUMARTIST"].append(albumartist()); if(!(artist().isEmpty())) map["ARTIST"].append(artist()); + if(!(composer().isEmpty())) + map["COMPOSER"].append(composer()); if(!(album().isEmpty())) map["ALBUM"].append(album()); if(!(unsyncedlyrics().isEmpty())) @@ -116,6 +119,12 @@ PropertyMap Tag::setProperties(const PropertyMap &origProps) } else setArtist(String()); + if(properties.contains("COMPOSER")) { + setComposer(properties["COMPOSER"].front()); + oneValueSet.append("COMPOSER"); + } else + setComposer(String()); + if(properties.contains("ALBUM")) { setAlbum(properties["ALBUM"].front()); oneValueSet.append("ALBUM"); @@ -199,6 +208,7 @@ void Tag::duplicate(const Tag *source, Tag *target, bool overwrite) // static target->setTitle(source->title()); target->setAlbumArtist(source->albumartist()); target->setArtist(source->artist()); + target->setComposer(source->composer()); target->setAlbum(source->album()); target->setUnsyncedlyrics(source->unsyncedlyrics()); target->setComment(source->comment()); @@ -214,6 +224,8 @@ void Tag::duplicate(const Tag *source, Tag *target, bool overwrite) // static target->setAlbumArtist(source->albumartist()); if(target->artist().isEmpty()) target->setArtist(source->artist()); + if(target->composer().isEmpty()) + target->setComposer(source->composer()); if(target->album().isEmpty()) target->setAlbum(source->album()); if(target->unsyncedlyrics().isEmpty()) diff --git a/Frameworks/TagLib/taglib/taglib/tag.h b/Frameworks/TagLib/taglib/taglib/tag.h index 5b2d36230..ed2838915 100644 --- a/Frameworks/TagLib/taglib/taglib/tag.h +++ b/Frameworks/TagLib/taglib/taglib/tag.h @@ -96,6 +96,12 @@ namespace TagLib { */ virtual String artist() const = 0; + /*! + * Returns the composer name; if no composer name is present in the tag + * String::null will be returned. + */ + virtual String composer() const = 0; + /*! * Returns the album name; if no album name is present in the tag * String::null will be returned. @@ -191,6 +197,12 @@ namespace TagLib { */ virtual void setArtist(const String &s) = 0; + /*! + * Sets the composer to \a s. If \a s is String::null then this value will be + * cleared. + */ + virtual void setComposer(const String &s) = 0; + /*! * Sets the album to \a s. If \a s is String::null then this value will be * cleared. diff --git a/Frameworks/TagLib/taglib/taglib/tagunion.cpp b/Frameworks/TagLib/taglib/taglib/tagunion.cpp index 856247632..3faa15f81 100644 --- a/Frameworks/TagLib/taglib/taglib/tagunion.cpp +++ b/Frameworks/TagLib/taglib/taglib/tagunion.cpp @@ -181,6 +181,11 @@ String TagUnion::artist() const stringUnion(artist); } +String TagUnion::composer() const +{ + stringUnion(composer); +} + String TagUnion::album() const { stringUnion(album); @@ -261,6 +266,11 @@ void TagUnion::setArtist(const String &s) setUnion(Artist, s); } +void TagUnion::setComposer(const String &s) +{ + setUnion(Composer, s); +} + void TagUnion::setAlbum(const String &s) { setUnion(Album, s); diff --git a/Frameworks/TagLib/taglib/taglib/tagunion.h b/Frameworks/TagLib/taglib/taglib/tagunion.h index f8d93c898..207d81812 100644 --- a/Frameworks/TagLib/taglib/taglib/tagunion.h +++ b/Frameworks/TagLib/taglib/taglib/tagunion.h @@ -62,6 +62,7 @@ namespace TagLib { virtual String title() const; virtual String albumartist() const; virtual String artist() const; + virtual String composer() const; virtual String album() const; virtual String unsyncedlyrics() const; virtual String comment() const; @@ -79,6 +80,7 @@ namespace TagLib { virtual void setTitle(const String &s); virtual void setAlbumArtist(const String &s); virtual void setArtist(const String &s); + virtual void setComposer(const String &s); virtual void setAlbum(const String &s); virtual void setUnsyncedlyrics(const String &s); virtual void setComment(const String &s);