File indexing completed on 2024-04-28 04:45:51
0001 /**************************************************************************************** 0002 * Copyright (C) 2003-2005 Max Howell <max.howell@methylblue.com> * 0003 * (C) 2003-2010 Mark Kretschmann <kretschmann@kde.org> * 0004 * (C) 2005-2007 Alexandre Oliveira <aleprj@gmail.com> * 0005 * (C) 2008 Dan Meltzer <parallelgrapefruit@gmail.com> * 0006 * (C) 2008-2009 Jeff Mitchell <mitchell@kde.org> * 0007 * (C) 2010 Ralf Engels <ralf-engels@gmx.de> * 0008 * (c) 2010 Sergey Ivanov <123kash@gmail.com> * 0009 * * 0010 * This program is free software; you can redistribute it and/or modify it under * 0011 * the terms of the GNU General Public License as published by the Free Software * 0012 * Foundation; either version 2 of the License, or (at your option) any later * 0013 * version. * 0014 * * 0015 * This program is distributed in the hope that it will be useful, but WITHOUT ANY * 0016 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A * 0017 * PARTICULAR PURPOSE. See the GNU General Public License for more details. * 0018 * * 0019 * You should have received a copy of the GNU General Public License along with * 0020 * this program. If not, see <http://www.gnu.org/licenses/>. * 0021 ****************************************************************************************/ 0022 0023 #include "APETagHelper.h" 0024 0025 #include "StringHelper.h" 0026 0027 using namespace Meta::Tag; 0028 0029 APETagHelper::APETagHelper( TagLib::Tag *tag, TagLib::APE::Tag *apeTag, Amarok::FileType fileType ) 0030 : TagHelper( tag, fileType ) 0031 , m_tag( apeTag ) 0032 { 0033 m_fieldMap.insert( Meta::valAlbumArtist, TagLib::String( "ALBUM ARTIST" ) ); 0034 m_fieldMap.insert( Meta::valBpm, TagLib::String( "BPM" ) ); 0035 m_fieldMap.insert( Meta::valCompilation, TagLib::String( "COMPILATION" ) ); 0036 m_fieldMap.insert( Meta::valComposer, TagLib::String( "Composer" ) ); 0037 m_fieldMap.insert( Meta::valDiscNr, TagLib::String( "DISC" ) ); 0038 m_fieldMap.insert( Meta::valPlaycount, TagLib::String( "FMPS_PLAYCOUNT" ) ); 0039 m_fieldMap.insert( Meta::valRating, TagLib::String( "FMPS_RATING" ) ); 0040 m_fieldMap.insert( Meta::valScore, TagLib::String( "FMPS_RATING_AMAROK_SCORE" ) ); 0041 m_fieldMap.insert( Meta::valLyrics, TagLib::String( "UNSYNCED LYRICS" ) ); 0042 0043 m_uidFieldMap.insert( UIDAFT, TagLib::String( "Amarok 2 AFTv1 - amarok.kde.org" ) ); 0044 } 0045 0046 Meta::FieldHash 0047 APETagHelper::tags() const 0048 { 0049 Meta::FieldHash data = TagHelper::tags(); 0050 0051 TagLib::APE::ItemListMap map = m_tag->itemListMap(); 0052 for( TagLib::APE::ItemListMap::ConstIterator it = map.begin(); it != map.end(); ++it ) 0053 { 0054 qint64 field; 0055 QString value = TStringToQString( it->second.toString() ); 0056 if( ( field = fieldName( it->first ) ) ) 0057 { 0058 if( field == Meta::valRating ) 0059 data.insert( field, qRound( value.toFloat() * 10.0 ) ); 0060 else if( field == Meta::valScore ) 0061 data.insert( field, value.toFloat() * 100.0 ); 0062 else if( field == Meta::valDiscNr ) { 0063 int disc; 0064 disc = splitDiscNr( value ).first; 0065 data.insert( field, disc ); 0066 } 0067 else 0068 data.insert( field, value ); 0069 } 0070 else if( it->first == uidFieldName( UIDAFT ) && isValidUID( value, UIDAFT ) ) 0071 data.insert( Meta::valUniqueId, value ); 0072 } 0073 0074 return data; 0075 } 0076 0077 bool 0078 APETagHelper::setTags( const Meta::FieldHash &changes ) 0079 { 0080 bool modified = TagHelper::setTags( changes ); 0081 0082 foreach( const qint64 key, changes.keys() ) 0083 { 0084 QVariant value = changes.value( key ); 0085 TagLib::String field = fieldName( key ); 0086 0087 if( !field.isNull() && !field.isEmpty() ) 0088 { 0089 if( key == Meta::valRating ) 0090 m_tag->addValue( field, Qt4QStringToTString( QString::number( value.toFloat() / 10.0 ) ) ); 0091 else if( key == Meta::valScore ) 0092 m_tag->addValue( field, Qt4QStringToTString( QString::number( value.toFloat() / 100.0 ) ) ); 0093 else 0094 m_tag->addValue( field, Qt4QStringToTString( value.toString() ) ); 0095 0096 modified = true; 0097 } 0098 else if( key == Meta::valUniqueId ) 0099 { 0100 QPair < UIDType, QString > uidPair = splitUID( value.toString() ); 0101 if( uidPair.first == UIDInvalid ) 0102 continue; 0103 0104 m_tag->addValue( uidFieldName( uidPair.first ), Qt4QStringToTString( uidPair.second ) ); 0105 modified = true; 0106 } 0107 } 0108 0109 return modified; 0110 } 0111 0112 TagLib::ByteVector 0113 APETagHelper::render() const 0114 { 0115 return m_tag->render(); 0116 }