[prev in list] [next in list] [prev in thread] [next in thread]
List: amarok-bugs-dist
Subject: [Bug 134202] Support ID3v2 TPE2 tag as Album Artist field
From: Martin Aumueller <aumuell () reserv ! at>
Date: 2006-11-30 17:33:10
Message-ID: 20061130173310.32652.qmail () ktown ! kde ! org
[Download RAW message or body]
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
http://bugs.kde.org/show_bug.cgi?id=134202
------- Additional Comments From aumuell reserv at 2006-11-30 18:33 -------
SVN commit 609411 by aumuell:
commit parts of the album artist patch - i omitted the tag editor part for two \
reasons, though:
- the patch didn't apply any longer
- don't make the album artists user visible until it serves a purpose
- thanks to Ilya Konstantinov <kde-bugzilla future shiny co il> for the patch (and \
please continue your work, making it actually useful)!
CCBUG: 134202
M +21 -2 metabundle.cpp
M +12 -7 metabundle.h
M +2 -0 xmlloader.cpp
--- trunk/extragear/multimedia/amarok/src/metabundle.cpp #609410:609411
@ -110,7 +110,7 @
{
// construct static qstrings to avoid constructing them all the time
static QString columns[] = {
- "Filename", "Title", "Artist", "Composer", "Year", "Album", "DiscNumber", \
"Track", "BPM", "Genre", "Comment", + "Filename", "Title", "Artist", \
"AlbumArtist", "Composer", "Year", "Album", "DiscNumber", "Track", "BPM", "Genre", \
"Comment",
"Directory", "Type", "Length", "Bitrate", "SampleRate", "Score", "Rating", \
"PlayCount", "LastPlayed", "Mood", "Filesize" };
static QString error( "ERROR" );
@ -128,6 +128,7 @
case Filename: return i18n( "Filename" );
case Title: return i18n( "Title" );
case Artist: return i18n( "Artist" );
+ case AlbumArtist:return i18n( "Album Artist");
case Composer: return i18n( "Composer" );
case Year: return i18n( "Year" );
case Album: return i18n( "Album" );
@ -312,6 +313,7 @
m_url = bundle.m_url;
m_title = bundle.m_title;
m_artist = bundle.m_artist;
+ m_albumArtist = bundle.m_albumArtist;
m_composer = bundle.m_composer;
m_album = bundle.m_album;
m_comment = bundle.m_comment;
@ -387,6 +389,7 @
{
return uniqueId() == bundle.uniqueId() && //first, since if using IDs will \
return faster artist() == bundle.artist() &&
+ albumArtist() == bundle.albumArtist() &&
title() == bundle.title() &&
composer() == bundle.composer() &&
album() == bundle.album() &&
@ -539,9 +542,12 @
if ( !file->ID3v2Tag()->frameListMap()["TCOM"].isEmpty() )
setComposer( TStringToQString( \
file->ID3v2Tag()->frameListMap()["TCOM"].front()->toString() ).stripWhiteSpace() );
+ if ( !file->ID3v2Tag()->frameListMap()["TPE2"].isEmpty() ) // \
non-standard: Apple, Microsoft + setAlbumArtist( TStringToQString( \
file->ID3v2Tag()->frameListMap()["TPE2"].front()->toString() ).stripWhiteSpace() ); + \
if ( !file->ID3v2Tag()->frameListMap()["TCMP"].isEmpty() )
compilation = TStringToQString( \
file->ID3v2Tag()->frameListMap()["TCMP"].front()->toString() \
).stripWhiteSpace();
-
+
if(images) {
loadImagesFromTag( *file->ID3v2Tag(), *images );
}
@ -679,6 +685,7 @
{
setTitle( bundle.title() );
setArtist( bundle.artist() );
+ setAlbumArtist( bundle.albumArtist() );
setComposer( bundle.composer() );
setAlbum( bundle.album() );
setYear( bundle.year() );
@ -733,6 +740,7 @
{
case Title: setTitle( newText ); break;
case Artist: setArtist( newText ); break;
+ case AlbumArtist: setAlbumArtist( newText ); break;
case Composer: setComposer( newText ); break;
case Year: setYear( newText.toInt() ); break;
case Album: setAlbum( newText ); break;
@ -761,6 +769,7 @
case Filename: return filename();
case Title: return title();
case Artist: return artist();
+ case AlbumArtist: return albumArtist();
case Composer: return composer();
case Year: return QString::number( year() );
case Album: return album();
@ -794,6 +803,7 @
case Filename: text = isFile() ? MetaBundle::prettyTitle(filename()) : \
url().prettyURL(); break;
case Title: text = title().isEmpty() ? MetaBundle::prettyTitle( \
filename() ) : title(); break;
case Artist: text = artist(); \
break; + case AlbumArtist: text = albumArtist(); \
break;
case Composer: text = composer(); \
break;
case Year: text = year() ? QString::number( year() ) : QString::null; \
break;
case Album: text = album(); \
break; @ -1271,7 +1281,9 @
case ( discNumberTag ): id = "TPOS"; break;
case ( bpmTag ): id = "TBPM"; break;
case ( compilationTag ): id = "TCMP"; break;
+ case ( albumArtistTag ): id = "TPE2"; break; // non-standard: Apple, \
Microsoft }
+ fprintf(stderr, "Setting extended tag %s to %s\n", id, value.utf8().data());
TagLib::MPEG::File *mpegFile = dynamic_cast<TagLib::MPEG::File *>( file );
if ( mpegFile && mpegFile->ID3v2Tag() )
{
@ -1298,6 +1310,7 @
case ( discNumberTag ): id = "DISCNUMBER"; break;
case ( bpmTag ): id = "BPM"; break;
case ( compilationTag ): id = "COMPILATION"; break;
+ case ( albumArtistTag ): id = "ALBUMARTIST"; break; // non-standard: \
Amarok }
TagLib::Ogg::Vorbis::File *oggFile = dynamic_cast<TagLib::Ogg::Vorbis::File \
*>( file ); if ( oggFile && oggFile->tag() )
@ -1315,6 +1328,7 @
case ( discNumberTag ): id = "DISCNUMBER"; break;
case ( bpmTag ): id = "BPM"; break;
case ( compilationTag ): id = "COMPILATION"; break;
+ case ( albumArtistTag ): id = "ALBUMARTIST"; break; // non-standard: \
Amarok }
TagLib::FLAC::File *flacFile = dynamic_cast<TagLib::FLAC::File *>( file );
if ( flacFile && flacFile->xiphComment() )
@ -1447,6 +1461,7 @
if ( hasExtendedMetaInformation() )
{
+ setExtendedTag( f->file(), albumArtistTag, albumArtist() );
setExtendedTag( f->file(), composerTag, \
composer().string().stripWhiteSpace() );
setExtendedTag( f->file(), discNumberTag, discNumber() ? \
QString::number( discNumber() ) : QString() );
setExtendedTag( f->file(), bpmTag, bpm() ? QString::number( bpm() ) \
: QString() ); @ -1740,6 +1755,9 @
void MetaBundle::setComposer( const AtomicString &composer )
{ aboutToChange( Composer ); m_composer = composer; reactToChange( Composer ); }
+void MetaBundle::setAlbumArtist( const AtomicString &albumArtist )
+{ aboutToChange( AlbumArtist ); m_albumArtist = albumArtist; reactToChange( \
AlbumArtist ); } +
void MetaBundle::setPlayCount( int playcount )
{ aboutToChange( PlayCount ); m_playCount = playcount; reactToChange( PlayCount ); }
@ -1765,6 +1783,7 @
m_title = QDeepCopy<QString>(m_title);
m_artist = m_artist.deepCopy();
+ m_albumArtist = m_albumArtist.deepCopy();
m_album = m_album.deepCopy();
m_comment = m_comment.deepCopy();
m_composer = m_composer.deepCopy();
--- trunk/extragear/multimedia/amarok/src/metabundle.h #609410:609411
@ -61,6 +61,7 @
Filename = 0,
Title,
Artist,
+ AlbumArtist,
Composer,
Year,
Album,
@ -244,6 +245,7 @
const KURL &url() const;
QString title() const;
AtomicString artist() const;
+ AtomicString albumArtist() const;
AtomicString composer() const;
AtomicString album() const;
AtomicString genre() const;
@ -295,6 +297,7 @
void setPath( const QString &path );
void setTitle( const QString &title );
void setArtist( const AtomicString &artist );
+ void setAlbumArtist( const AtomicString &albumArtist );
void setComposer( const AtomicString &composer );
void setAlbum( const AtomicString &album );
void setGenre( const AtomicString &genre );
@ -343,7 +346,7 @
static QStringList genreList();
protected:
- enum ExtendedTags { composerTag, discNumberTag, bpmTag, compilationTag };
+ enum ExtendedTags { composerTag, albumArtistTag, discNumberTag, bpmTag, \
compilationTag };
/** Called before the tags in \p columns are changed. */
virtual void aboutToChange( const QValueList<int> &columns );
@ -360,6 +363,7 @
KURL m_url;
QString m_title;
AtomicString m_artist;
+ AtomicString m_albumArtist;
AtomicString m_composer;
AtomicString m_album;
AtomicString m_comment;
@ -483,11 +487,13 @
{
return url().isLocalFile() ? url().directory() : url().upURL().prettyURL();
}
-inline QString MetaBundle::title() const { return m_title; }
-inline AtomicString MetaBundle::artist() const { return m_artist; }
-inline AtomicString MetaBundle::album() const { return m_album; }
-inline AtomicString MetaBundle::comment() const { return m_comment; }
-inline AtomicString MetaBundle::genre() const { return m_genre; }
+inline QString MetaBundle::title() const { return m_title; }
+inline AtomicString MetaBundle::artist() const { return m_artist; }
+inline AtomicString MetaBundle::album() const { return m_album; }
+inline AtomicString MetaBundle::comment() const { return m_comment; }
+inline AtomicString MetaBundle::genre() const { return m_genre; }
+inline AtomicString MetaBundle::composer() const { return m_composer; }
+inline AtomicString MetaBundle::albumArtist() const { return m_albumArtist; }
inline QString MetaBundle::streamName() const { return m_streamName; }
inline QString MetaBundle::streamUrl() const { return m_streamUrl; }
inline QString MetaBundle::uniqueId() const { return m_uniqueId; }
@ -504,7 +510,6 @
return CompilationUnknown;
}
-inline AtomicString MetaBundle::composer() const { return m_composer; }
inline QString MetaBundle::type() const
{
--- trunk/extragear/multimedia/amarok/src/xmlloader.cpp #609410:609411
@ -80,6 +80,7 @
{
case Artist:
case Composer:
+ case AlbumArtist:
case Year:
case Album:
case DiscNumber:
@ -109,6 +110,7 @
{
case Artist:
case Composer:
+ case AlbumArtist:
case Year:
case Album:
case DiscNumber:
_______________________________________________
Amarok-bugs-dist mailing list
Amarok-bugs-dist@kde.org
https://mail.kde.org/mailman/listinfo/amarok-bugs-dist
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic