File indexing completed on 2024-05-19 04:49:28

0001 /****************************************************************************************
0002  * Copyright (c) 2010 Ralf Engels <ralf-engels@gmx.de>                                  *
0003  *                                                                                      *
0004  * This program is free software; you can redistribute it and/or modify it under        *
0005  * the terms of the GNU General Public License as published by the Free Software        *
0006  * Foundation; either version 2 of the License, or (at your option) any later           *
0007  * version.                                                                             *
0008  *                                                                                      *
0009  * This program is distributed in the hope that it will be useful, but WITHOUT ANY      *
0010  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A      *
0011  * PARTICULAR PURPOSE. See the GNU General Public License for more details.             *
0012  *                                                                                      *
0013  * You should have received a copy of the GNU General Public License along with         *
0014  * this program.  If not, see <http://www.gnu.org/licenses/>.                           *
0015  ****************************************************************************************/
0016 
0017 #include "MetaConstants.h"
0018 
0019 #include "core/meta/Meta.h"
0020 #include "core/meta/Statistics.h"
0021 #include "FileType.h"
0022 
0023 #include <KLocalizedString>
0024 
0025 #include <QSet>
0026 
0027 QString Meta::nameForField( qint64 field )
0028 {
0029     switch( field )
0030     {
0031     case 0:                    return QStringLiteral("anything");
0032     case Meta::valUrl:         return QStringLiteral("filename");
0033     case Meta::valTitle:       return QStringLiteral("title");
0034     case Meta::valArtist:      return QStringLiteral("artist");
0035     case Meta::valAlbum:       return QStringLiteral("album");
0036     case Meta::valGenre:       return QStringLiteral("genre");
0037     case Meta::valComposer:    return QStringLiteral("composer");
0038     case Meta::valYear:        return QStringLiteral("year");
0039     case Meta::valComment:     return QStringLiteral("comment");
0040     case Meta::valTrackNr:     return QStringLiteral("tracknr");
0041     case Meta::valDiscNr:      return QStringLiteral("discnumber");
0042     case Meta::valBpm:         return QStringLiteral("bpm");
0043     case Meta::valLength:      return QStringLiteral("length");
0044     case Meta::valBitrate:     return QStringLiteral("bitrate");
0045     case Meta::valSamplerate:  return QStringLiteral("samplerate");
0046     case Meta::valFilesize:    return QStringLiteral("filesize");
0047     case Meta::valFormat:      return QStringLiteral("format");
0048     case Meta::valCreateDate:  return QStringLiteral("added");
0049     case Meta::valScore:       return QStringLiteral("score");
0050     case Meta::valRating:      return QStringLiteral("rating");
0051     case Meta::valFirstPlayed: return QStringLiteral("firstplay");
0052     case Meta::valLastPlayed:  return QStringLiteral("lastplay");
0053     case Meta::valPlaycount:   return QStringLiteral("playcount");
0054     case Meta::valUniqueId:    return QStringLiteral("uniqueid");
0055 
0056     case Meta::valTrackGain:   return QStringLiteral("trackgain");
0057     case Meta::valTrackGainPeak:   return QStringLiteral("trackgainpeak");
0058     case Meta::valAlbumGain:   return QStringLiteral("albumgain");
0059     case Meta::valAlbumGainPeak:   return QStringLiteral("albumgainpeak");
0060 
0061     case Meta::valAlbumArtist: return QStringLiteral("albumartist");
0062     case Meta::valLabel:       return QStringLiteral("label");
0063     case Meta::valModified:    return QStringLiteral("modified");
0064     case Meta::valLyrics:      return QStringLiteral("lyrics");
0065     default:                   return QString();
0066     }
0067 }
0068 
0069 qint64 Meta::fieldForName( const QString &name )
0070 {
0071     if(      name.compare( QLatin1String("anything"), Qt::CaseInsensitive ) == 0
0072           || name.compare( shortI18nForField( 0 ), Qt::CaseInsensitive ) == 0 )
0073             return 0;
0074     else if( name.compare( QLatin1String("filename"), Qt::CaseInsensitive ) == 0
0075           || name.compare( shortI18nForField( Meta::valUrl ), Qt::CaseInsensitive ) == 0 )
0076             return Meta::valUrl;
0077     else if( name.compare( QLatin1String("title"), Qt::CaseInsensitive ) == 0
0078           || name.compare( shortI18nForField( Meta::valTitle ), Qt::CaseInsensitive ) == 0 )
0079             return Meta::valTitle;
0080     else if( name.compare( QLatin1String("artist"), Qt::CaseInsensitive ) == 0
0081           || name.compare( shortI18nForField( Meta::valArtist ), Qt::CaseInsensitive ) == 0 )
0082             return Meta::valArtist;
0083     else if( name.compare( QLatin1String("album"), Qt::CaseInsensitive ) == 0
0084           || name.compare( shortI18nForField( Meta::valAlbum ), Qt::CaseInsensitive ) == 0 )
0085             return Meta::valAlbum;
0086     else if( name.compare( QLatin1String("genre"), Qt::CaseInsensitive ) == 0
0087           || name.compare( shortI18nForField( Meta::valGenre ), Qt::CaseInsensitive ) == 0 )
0088             return Meta::valGenre;
0089     else if( name.compare( QLatin1String("composer"), Qt::CaseInsensitive ) == 0
0090           || name.compare( shortI18nForField( Meta::valComposer ), Qt::CaseInsensitive ) == 0 )
0091             return Meta::valComposer;
0092     else if( name.compare( QLatin1String("year"), Qt::CaseInsensitive ) == 0
0093           || name.compare( shortI18nForField( Meta::valYear ), Qt::CaseInsensitive ) == 0 )
0094             return Meta::valYear;
0095     else if( name.compare( QLatin1String("comment"), Qt::CaseInsensitive ) == 0
0096           || name.compare( shortI18nForField( Meta::valComment ), Qt::CaseInsensitive ) == 0 )
0097             return Meta::valComment;
0098     else if( name.compare( QLatin1String("tracknumber"), Qt::CaseInsensitive ) == 0
0099           || name.compare( shortI18nForField( Meta::valTrackNr ), Qt::CaseInsensitive ) == 0 )
0100             return Meta::valTrackNr;
0101     else if( name.compare( QLatin1String("discnumber"), Qt::CaseInsensitive ) == 0
0102           || name.compare( shortI18nForField( Meta::valDiscNr ), Qt::CaseInsensitive ) == 0 )
0103             return Meta::valDiscNr;
0104     else if( name.compare( QLatin1String("bpm"), Qt::CaseInsensitive ) == 0
0105           || name.compare( shortI18nForField( Meta::valBpm ), Qt::CaseInsensitive ) == 0 )
0106             return Meta::valBpm;
0107     else if( name.compare( QLatin1String("length"), Qt::CaseInsensitive ) == 0
0108           || name.compare( shortI18nForField( Meta::valLength ), Qt::CaseInsensitive ) == 0 )
0109             return Meta::valLength;
0110     else if( name.compare( QLatin1String("bitrate"), Qt::CaseInsensitive ) == 0
0111           || name.compare( shortI18nForField( Meta::valBitrate ), Qt::CaseInsensitive ) == 0 )
0112             return Meta::valBitrate;
0113     else if( name.compare( QLatin1String("samplerate"), Qt::CaseInsensitive ) == 0
0114           || name.compare( shortI18nForField( Meta::valSamplerate ), Qt::CaseInsensitive ) == 0 )
0115             return Meta::valSamplerate;
0116     else if( name.compare( QLatin1String("filesize"), Qt::CaseInsensitive ) == 0
0117           || name.compare( shortI18nForField( Meta::valFilesize ), Qt::CaseInsensitive ) == 0 )
0118             return Meta::valFilesize;
0119     else if( name.compare( QLatin1String("format"), Qt::CaseInsensitive ) == 0
0120           || name.compare( QLatin1String("codec"), Qt::CaseInsensitive ) == 0
0121           || name.compare( shortI18nForField( Meta::valFormat ), Qt::CaseInsensitive ) == 0 )
0122             return Meta::valFormat;
0123     else if( name.compare( QLatin1String("added"), Qt::CaseInsensitive ) == 0
0124           || name.compare( shortI18nForField( Meta::valCreateDate ), Qt::CaseInsensitive ) == 0 )
0125             return Meta::valCreateDate;
0126     else if( name.compare( QLatin1String("score"), Qt::CaseInsensitive ) == 0
0127           || name.compare( shortI18nForField( Meta::valScore ), Qt::CaseInsensitive ) == 0 )
0128             return Meta::valScore;
0129     else if( name.compare( QLatin1String("rating"), Qt::CaseInsensitive ) == 0
0130           || name.compare( shortI18nForField( Meta::valRating ), Qt::CaseInsensitive ) == 0 )
0131             return Meta::valRating;
0132     else if( name.compare( QLatin1String("firstplay"), Qt::CaseInsensitive ) == 0
0133           || name.compare( QLatin1String("first"), Qt::CaseInsensitive ) == 0 // legacy
0134           || name.compare( shortI18nForField( Meta::valFirstPlayed ), Qt::CaseInsensitive ) == 0 )
0135             return Meta::valFirstPlayed;
0136     else if( name.compare( QLatin1String("lastplay"), Qt::CaseInsensitive ) == 0
0137           || name.compare( QLatin1String("played"), Qt::CaseInsensitive ) == 0 // legacy
0138           || name.compare( shortI18nForField( Meta::valLastPlayed ), Qt::CaseInsensitive ) == 0 )
0139             return Meta::valLastPlayed;
0140     else if( name.compare( QLatin1String("playcount"), Qt::CaseInsensitive ) == 0
0141           || name.compare( shortI18nForField( Meta::valPlaycount ), Qt::CaseInsensitive ) == 0 )
0142             return Meta::valPlaycount;
0143     else if( name.compare( QLatin1String("uniqueid"), Qt::CaseInsensitive ) == 0
0144           || name.compare( shortI18nForField( Meta::valUniqueId ), Qt::CaseInsensitive ) == 0 )
0145             return Meta::valUniqueId;
0146 
0147     else if( name.compare( QLatin1String("trackgain"), Qt::CaseInsensitive ) == 0
0148           || name.compare( shortI18nForField( Meta::valTrackGain ), Qt::CaseInsensitive ) == 0 )
0149             return Meta::valTrackGain;
0150     else if( name.compare( QLatin1String("trackgainpeak"), Qt::CaseInsensitive ) == 0
0151           || name.compare( shortI18nForField( Meta::valTrackGainPeak ), Qt::CaseInsensitive ) == 0 )
0152             return Meta::valTrackGainPeak;
0153     else if( name.compare( QLatin1String("albumgain"), Qt::CaseInsensitive ) == 0
0154           || name.compare( shortI18nForField( Meta::valAlbumGain ), Qt::CaseInsensitive ) == 0 )
0155             return Meta::valAlbumGain;
0156     else if( name.compare( QLatin1String("albumgainpeak"), Qt::CaseInsensitive ) == 0
0157           || name.compare( shortI18nForField( Meta::valAlbumGainPeak ), Qt::CaseInsensitive ) == 0 )
0158             return Meta::valAlbumGainPeak;
0159 
0160     else if( name.compare( QLatin1String("albumartist"), Qt::CaseInsensitive ) == 0
0161           || name.compare( shortI18nForField( Meta::valAlbumArtist ), Qt::CaseInsensitive ) == 0 )
0162             return Meta::valAlbumArtist;
0163     else if( name.compare( QLatin1String("label"), Qt::CaseInsensitive ) == 0
0164           || name.compare( shortI18nForField( Meta::valLabel ), Qt::CaseInsensitive ) == 0 )
0165             return Meta::valLabel;
0166     else if( name.compare( QLatin1String("modified"), Qt::CaseInsensitive ) == 0
0167           || name.compare( shortI18nForField( Meta::valModified ), Qt::CaseInsensitive ) == 0 )
0168             return Meta::valModified;
0169     else if( name.compare( QLatin1String("lyrics"), Qt::CaseInsensitive ) == 0
0170           || name.compare( shortI18nForField( Meta::valLyrics ), Qt::CaseInsensitive ) == 0 )
0171             return Meta::valLyrics;
0172     else
0173             return 0;
0174 }
0175 
0176 QString Meta::i18nForField( qint64 field )
0177 {
0178     switch( field )
0179     {
0180     case 0:                    return i18nc("Track field name (when nothing specific is selected e.g. in the automatic playlist generator)", "anything");
0181     case Meta::valUrl:         return i18nc("Track field name (the file this track is stored in)", "File Name");
0182     case Meta::valTitle:       return i18nc("Track field name", "Title");
0183     case Meta::valArtist:      return i18nc("Track field name", "Artist");
0184     case Meta::valAlbum:       return i18nc("Track field name", "Album");
0185     case Meta::valGenre:       return i18nc("Track field name", "Genre");
0186     case Meta::valComposer:    return i18nc("Track field name", "Composer");
0187     case Meta::valYear:        return i18nc("Track field name", "Year");
0188     case Meta::valComment:     return i18nc("Track field name", "Comment");
0189     case Meta::valTrackNr:     return i18nc("Track field name", "Track Number");
0190     case Meta::valDiscNr:      return i18nc("Track field name", "Disc Number");
0191     case Meta::valBpm:         return i18nc("Track field name", "Bpm");
0192     case Meta::valLength:      return i18nc("Track field name", "Length");
0193     case Meta::valBitrate:     return i18nc("Track field name", "Bit Rate");
0194     case Meta::valSamplerate:  return i18nc("Track field name", "Sample Rate");
0195     case Meta::valFilesize:    return i18nc("Track field name", "File Size");
0196     case Meta::valFormat:      return i18nc("Track field name", "Format");
0197     case Meta::valCreateDate:  return i18nc("Track field name", "Added to Collection");
0198     case Meta::valScore:       return i18nc("Track field name", "Score");
0199     case Meta::valRating:      return i18nc("Track field name", "Rating");
0200     case Meta::valFirstPlayed: return i18nc("Track field name", "First Played");
0201     case Meta::valLastPlayed:  return i18nc("Track field name", "Last Played");
0202     case Meta::valPlaycount:   return i18nc("Track field name", "Playcount");
0203     case Meta::valUniqueId:    return i18nc("Track field name", "Unique Id");
0204 
0205     case Meta::valTrackGain:   return i18nc("Track field name", "Track Gain");
0206     case Meta::valTrackGainPeak:   return i18nc("Track field name", "Track Gain Peak");
0207     case Meta::valAlbumGain:   return i18nc("Track field name", "Album Gain");
0208     case Meta::valAlbumGainPeak:   return i18nc("Track field name", "Album Gain Peak");
0209 
0210     case Meta::valAlbumArtist: return i18nc("Track field name", "Album Artist");
0211     case Meta::valLabel:       return i18nc("Track field name", "Label");
0212     case Meta::valModified:    return i18nc("Track field name", "Last Modified");
0213     case Meta::valLyrics:      return i18nc("Track field name", "Lyrics");
0214     default:                   return QString();
0215     }
0216 }
0217 
0218 QString Meta::shortI18nForField( qint64 field )
0219 {
0220     // see also src/browsers/CollectionTreeItemModelBase.cpp for localized names
0221 
0222     switch( field )
0223     {
0224     case 0:                    return i18nc("The field name in case nothing specific is selected e.g. in the automatic playlist generator. Use a one word translation.", "anything");
0225     case Meta::valUrl:         return i18nc("One word translation used in the collection filter. The name of the file this track is stored in", "filename" );
0226     case Meta::valTitle:       return i18nc("One word translation used in the collection filter", "title");
0227     case Meta::valArtist:      return i18nc("One word translation used in the collection filter", "artist");
0228     case Meta::valAlbum:       return i18nc("One word translation used in the collection filter", "album");
0229     case Meta::valGenre:       return i18nc("One word translation used in the collection filter", "genre");
0230     case Meta::valComposer:    return i18nc("One word translation used in the collection filter", "composer");
0231     case Meta::valYear:        return i18nc("One word translation used in the collection filter", "year");
0232     case Meta::valComment:     return i18nc("One word translation used in the collection filter", "comment");
0233     case Meta::valTrackNr:     return i18nc("One word translation used in the collection filter", "tracknumber");
0234     case Meta::valDiscNr:      return i18nc("One word translation used in the collection filter", "discnumber");
0235     case Meta::valBpm:         return i18nc("One word translation used in the collection filter", "bpm");
0236     case Meta::valLength:      return i18nc("One word translation used in the collection filter", "length");
0237     case Meta::valBitrate:     return i18nc("One word translation used in the collection filter", "bitrate");
0238     case Meta::valSamplerate:  return i18nc("One word translation used in the collection filter", "samplerate");
0239     case Meta::valFilesize:    return i18nc("One word translation used in the collection filter", "filesize");
0240     case Meta::valFormat:      return i18nc("One word translation used in the collection filter", "format");
0241     case Meta::valCreateDate:  return i18nc("One word translation used in the collection filter", "added");
0242     case Meta::valScore:       return i18nc("One word translation used in the collection filter", "score");
0243     case Meta::valRating:      return i18nc("One word translation used in the collection filter", "rating");
0244     case Meta::valFirstPlayed: return i18nc("One word translation used in the collection filter. First played time / access date", "firstplay");
0245     case Meta::valLastPlayed:  return i18nc("One word translation used in the collection filter. Last played time / access date", "lastplay");
0246     case Meta::valPlaycount:   return i18nc("One word translation used in the collection filter", "playcount");
0247     case Meta::valUniqueId:    return i18nc("One word translation used in the collection filter", "uniqueid");
0248 
0249     case Meta::valTrackGain:   return i18nc("One word translation used in the collection filter", "trackgain");
0250     case Meta::valTrackGainPeak:   return i18nc("One word translation used in the collection filter", "trackgainpeak");
0251     case Meta::valAlbumGain:   return i18nc("One word translation used in the collection filter", "albumgain");
0252     case Meta::valAlbumGainPeak:   return i18nc("One word translation used in the collection filter", "albumgainpeak");
0253 
0254     case Meta::valAlbumArtist: return i18nc("One word translation used in the collection filter", "albumartist");
0255     case Meta::valLabel:       return i18nc("One word translation used in the collection filter", "label");
0256     case Meta::valModified:    return i18nc("One word translation used in the collection filter", "modified");
0257     case Meta::valLyrics:      return i18nc("One word translation used in the collection filter", "lyrics");
0258     default:                   return QString();
0259     }
0260 }
0261 
0262 QString Meta::playlistNameForField( qint64 field )
0263 {
0264     switch( field )
0265     {
0266     case 0:                    return QStringLiteral("anything");
0267     case Meta::valUrl:         return QStringLiteral("url");
0268     case Meta::valTitle:       return QStringLiteral("title");
0269     case Meta::valArtist:      return QStringLiteral("artist name");
0270     case Meta::valAlbum:       return QStringLiteral("album name");
0271     case Meta::valGenre:       return QStringLiteral("genre");
0272     case Meta::valComposer:    return QStringLiteral("composer");
0273     case Meta::valYear:        return QStringLiteral("year");
0274     case Meta::valComment:     return QStringLiteral("comment");
0275     case Meta::valTrackNr:     return QStringLiteral("track number");
0276     case Meta::valDiscNr:      return QStringLiteral("disc number");
0277     case Meta::valBpm:         return QStringLiteral("bpm");
0278     case Meta::valLength:      return QStringLiteral("length");
0279     case Meta::valBitrate:     return QStringLiteral("bit rate");
0280     case Meta::valSamplerate:  return QStringLiteral("sample rate");
0281     case Meta::valFilesize:    return QStringLiteral("file size");
0282     case Meta::valFormat:      return QStringLiteral("format");
0283     case Meta::valCreateDate:  return QStringLiteral("create date");
0284     case Meta::valScore:       return QStringLiteral("score");
0285     case Meta::valRating:      return QStringLiteral("rating");
0286     case Meta::valFirstPlayed: return QStringLiteral("first played");
0287     case Meta::valLastPlayed:  return QStringLiteral("last played");
0288     case Meta::valPlaycount:   return QStringLiteral("play count");
0289     case Meta::valUniqueId:    return QStringLiteral("unique id");
0290 
0291     case Meta::valTrackGain:   return QStringLiteral("track gain");
0292     case Meta::valTrackGainPeak:   return QStringLiteral("track gain peak");
0293     case Meta::valAlbumGain:   return QStringLiteral("album gain");
0294     case Meta::valAlbumGainPeak:   return QStringLiteral("album gain peak");
0295 
0296     case Meta::valAlbumArtist: return QStringLiteral("album artist name");
0297     case Meta::valLabel:       return QStringLiteral("label");
0298     case Meta::valModified:    return QStringLiteral("modified");
0299     default:                   return QLatin1String("");
0300     }
0301 }
0302 
0303 qint64 Meta::fieldForPlaylistName( const QString &name )
0304 {
0305     if( name == QLatin1String("anything") ) return 0;
0306     else if( name == QLatin1String("url") ) return Meta::valUrl;
0307     else if( name == QLatin1String("title") ) return Meta::valTitle;
0308     else if( name == QLatin1String("artist name") ) return Meta::valArtist;
0309     else if( name == QLatin1String("album name") ) return Meta::valAlbum;
0310     else if( name == QLatin1String("genre") ) return Meta::valGenre;
0311     else if( name == QLatin1String("composer") ) return Meta::valComposer;
0312     else if( name == QLatin1String("year") ) return Meta::valYear;
0313     else if( name == QLatin1String("comment") ) return Meta::valComment;
0314     else if( name == QLatin1String("track number") ) return Meta::valTrackNr;
0315     else if( name == QLatin1String("disc number") ) return Meta::valDiscNr;
0316     else if( name == QLatin1String("bpm") ) return Meta::valBpm;
0317     else if( name == QLatin1String("length") ) return Meta::valLength;
0318     else if( name == QLatin1String("bit rate") ) return Meta::valBitrate;
0319     else if( name == QLatin1String("sample rate") ) return Meta::valSamplerate;
0320     else if( name == QLatin1String("file size") ) return Meta::valFilesize;
0321     else if( name == QLatin1String("format") ) return Meta::valFormat;
0322     else if( name == QLatin1String("create date") ) return Meta::valCreateDate;
0323     else if( name == QLatin1String("score") ) return Meta::valScore;
0324     else if( name == QLatin1String("rating") ) return Meta::valRating;
0325     else if( name == QLatin1String("first played") ) return Meta::valFirstPlayed;
0326     else if( name == QLatin1String("last played") ) return Meta::valLastPlayed;
0327     else if( name == QLatin1String("play count") ) return Meta::valPlaycount;
0328     else if( name == QLatin1String("unique id") ) return Meta::valUniqueId;
0329 
0330     else if( name == QLatin1String("track gain") ) return Meta::valTrackGain;
0331     else if( name == QLatin1String("track gain peak") ) return Meta::valTrackGainPeak;
0332     else if( name == QLatin1String("album gain") ) return Meta::valAlbumGain;
0333     else if( name == QLatin1String("album gain peak") ) return Meta::valAlbumGainPeak;
0334 
0335     else if( name == QLatin1String("album artist name") ) return Meta::valAlbumArtist;
0336     else if( name == QLatin1String("label") ) return Meta::valLabel;
0337     else if( name == QLatin1String("modified") ) return Meta::valModified;
0338     else return 0;
0339 }
0340 
0341 QString Meta::iconForField( qint64 field )
0342 {
0343     // see also PlaylistDefines.h::iconNames
0344     switch( field )
0345     {
0346     case Meta::valUrl: return QStringLiteral("filename-space-amarok");
0347     case Meta::valTitle: return QStringLiteral("filename-title-amarok");
0348     case Meta::valArtist: return QStringLiteral("filename-artist-amarok");
0349     case Meta::valAlbumArtist: return QStringLiteral("filename-artist-amarok");
0350     case Meta::valAlbum: return QStringLiteral("filename-album-amarok");
0351     case Meta::valGenre: return QStringLiteral("filename-genre-amarok");
0352     case Meta::valComposer: return QStringLiteral("filename-composer-amarok");
0353     case Meta::valYear: return QStringLiteral("filename-year-amarok");
0354     case Meta::valModified:
0355     case Meta::valCreateDate: return QStringLiteral("filename-year-amarok");
0356     case Meta::valComment: return QStringLiteral("amarok_comment");
0357     case Meta::valPlaycount: return QStringLiteral("amarok_playcount");
0358     case Meta::valTrackNr: return QStringLiteral("filename-track-amarok");
0359     case Meta::valDiscNr: return QStringLiteral("filename-discnumber-amarok");
0360     case Meta::valBpm: return QStringLiteral("filename-bpm-amarok");
0361     case Meta::valLength: return QStringLiteral("chronometer");
0362     case Meta::valBitrate: return QStringLiteral("audio-x-generic");
0363     case Meta::valSamplerate: return QStringLiteral("filename-sample-rate");
0364     case Meta::valFormat: return QStringLiteral("filename-filetype-amarok");
0365     case Meta::valScore: return QStringLiteral("emblem-favorite");
0366     case Meta::valRating: return QStringLiteral("rating");
0367     case Meta::valFirstPlayed:
0368     case Meta::valLastPlayed: return QStringLiteral("filename-last-played");
0369     case Meta::valLabel: return QStringLiteral("label-amarok");
0370     case Meta::valFilesize: return QStringLiteral("info-amarok");
0371     default: return QString();
0372     }
0373 }
0374 
0375 QVariant Meta::valueForField( qint64 field, Meta::TrackPtr track )
0376 {
0377     if( !track )
0378         return QVariant();
0379 
0380     switch( field )
0381     {
0382     case 0:
0383     {
0384         // that is the simple search for MetaQueryWidget
0385         QSet<QString> allInfos;
0386         allInfos += track->playableUrl().path()
0387             += track->name()
0388             += track->comment();
0389         if( track->artist() )
0390             allInfos += track->artist()->name();
0391         if( track->album() )
0392             allInfos += track->album()->name();
0393         if( track->genre() )
0394             allInfos += track->genre()->name();
0395 
0396         return QVariant( allInfos.values() );
0397     }
0398     case Meta::valUrl:         return track->playableUrl().path();
0399     case Meta::valTitle:       return track->name();
0400     case Meta::valArtist:      return track->artist() ?
0401                                QVariant(track->artist()->name()) : QVariant();
0402     case Meta::valAlbum:       return track->album() ?
0403                                QVariant(track->album()->name()) : QVariant();
0404     case Meta::valGenre:       return track->genre() ?
0405                                QVariant(track->genre()->name()) : QVariant();
0406     case Meta::valComposer:    return track->composer() ?
0407                                QVariant(track->composer()->name()) : QVariant();
0408     case Meta::valYear:        return track->year() ?
0409                                QVariant(track->year()->name().toInt()) : QVariant();
0410     case Meta::valComment:     return track->comment();
0411     case Meta::valTrackNr:     return track->trackNumber();
0412     case Meta::valDiscNr:      return track->discNumber();
0413     case Meta::valBpm:         return track->bpm();
0414     case Meta::valLength:      return track->length();
0415     case Meta::valBitrate:     return track->bitrate();
0416     case Meta::valSamplerate:  return track->sampleRate();
0417     case Meta::valFilesize:    return track->filesize();
0418     case Meta::valFormat:      return int(Amarok::FileTypeSupport::fileType(track->type()));
0419 
0420     case Meta::valCreateDate:  return track->createDate();
0421     case Meta::valScore:       return track->statistics()->score();
0422     case Meta::valRating:      return track->statistics()->rating();
0423     case Meta::valFirstPlayed: return track->statistics()->firstPlayed();
0424     case Meta::valLastPlayed:  return track->statistics()->lastPlayed();
0425     case Meta::valPlaycount:   return track->statistics()->playCount();
0426     case Meta::valUniqueId:    return track->uidUrl();
0427 
0428     // todo
0429     case Meta::valTrackGain:   return "track gain";
0430     case Meta::valTrackGainPeak:   return "track gain peak";
0431     case Meta::valAlbumGain:   return "album gain";
0432     case Meta::valAlbumGainPeak:   return "album gain peak";
0433 
0434     case Meta::valAlbumArtist: return (track->album() && track->album()->albumArtist()) ?
0435                                QVariant(track->album()->albumArtist()->name()) : QVariant();
0436     case Meta::valLabel:
0437       {
0438           Meta::LabelList labels = track->labels();
0439           QStringList strLabels;
0440           foreach( Meta::LabelPtr label, labels )
0441               strLabels.append( label->name() );
0442           return QVariant( strLabels );
0443       }
0444     case Meta::valModified:  return track->modifyDate();
0445     default: return QVariant();
0446     }
0447 }
0448 
0449