1 /****************************************************************************************
2  * Copyright (c) 2010 Ralf Engels <ralf-engels@gmx.de>                                  *
3  *                                                                                      *
4  * This program is free software; you can redistribute it and/or modify it under        *
5  * the terms of the GNU General Public License as published by the Free Software        *
6  * Foundation; either version 2 of the License, or (at your option) any later           *
7  * version.                                                                             *
8  *                                                                                      *
9  * This program is distributed in the hope that it will be useful, but WITHOUT ANY      *
10  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A      *
11  * PARTICULAR PURPOSE. See the GNU General Public License for more details.             *
12  *                                                                                      *
13  * You should have received a copy of the GNU General Public License along with         *
14  * this program.  If not, see <http://www.gnu.org/licenses/>.                           *
15  ****************************************************************************************/
16 
17 #include "MetaConstants.h"
18 
19 #include "core/meta/Meta.h"
20 #include "core/meta/Statistics.h"
21 #include "FileType.h"
22 
23 #include <KLocalizedString>
24 
25 #include <QSet>
26 
nameForField(qint64 field)27 QString Meta::nameForField( qint64 field )
28 {
29     switch( field )
30     {
31     case 0:                    return QStringLiteral("anything");
32     case Meta::valUrl:         return QStringLiteral("filename");
33     case Meta::valTitle:       return QStringLiteral("title");
34     case Meta::valArtist:      return QStringLiteral("artist");
35     case Meta::valAlbum:       return QStringLiteral("album");
36     case Meta::valGenre:       return QStringLiteral("genre");
37     case Meta::valComposer:    return QStringLiteral("composer");
38     case Meta::valYear:        return QStringLiteral("year");
39     case Meta::valComment:     return QStringLiteral("comment");
40     case Meta::valTrackNr:     return QStringLiteral("tracknr");
41     case Meta::valDiscNr:      return QStringLiteral("discnumber");
42     case Meta::valBpm:         return QStringLiteral("bpm");
43     case Meta::valLength:      return QStringLiteral("length");
44     case Meta::valBitrate:     return QStringLiteral("bitrate");
45     case Meta::valSamplerate:  return QStringLiteral("samplerate");
46     case Meta::valFilesize:    return QStringLiteral("filesize");
47     case Meta::valFormat:      return QStringLiteral("format");
48     case Meta::valCreateDate:  return QStringLiteral("added");
49     case Meta::valScore:       return QStringLiteral("score");
50     case Meta::valRating:      return QStringLiteral("rating");
51     case Meta::valFirstPlayed: return QStringLiteral("firstplay");
52     case Meta::valLastPlayed:  return QStringLiteral("lastplay");
53     case Meta::valPlaycount:   return QStringLiteral("playcount");
54     case Meta::valUniqueId:    return QStringLiteral("uniqueid");
55 
56     case Meta::valTrackGain:   return QStringLiteral("trackgain");
57     case Meta::valTrackGainPeak:   return QStringLiteral("trackgainpeak");
58     case Meta::valAlbumGain:   return QStringLiteral("albumgain");
59     case Meta::valAlbumGainPeak:   return QStringLiteral("albumgainpeak");
60 
61     case Meta::valAlbumArtist: return QStringLiteral("albumartist");
62     case Meta::valLabel:       return QStringLiteral("label");
63     case Meta::valModified:    return QStringLiteral("modified");
64     case Meta::valLyrics:      return QStringLiteral("lyrics");
65     default:                   return QString();
66     }
67 }
68 
fieldForName(const QString & name)69 qint64 Meta::fieldForName( const QString &name )
70 {
71     if(      name.compare( QLatin1String("anything"), Qt::CaseInsensitive ) == 0
72           || name.compare( shortI18nForField( 0 ), Qt::CaseInsensitive ) == 0 )
73             return 0;
74     else if( name.compare( QLatin1String("filename"), Qt::CaseInsensitive ) == 0
75           || name.compare( shortI18nForField( Meta::valUrl ), Qt::CaseInsensitive ) == 0 )
76             return Meta::valUrl;
77     else if( name.compare( QLatin1String("title"), Qt::CaseInsensitive ) == 0
78           || name.compare( shortI18nForField( Meta::valTitle ), Qt::CaseInsensitive ) == 0 )
79             return Meta::valTitle;
80     else if( name.compare( QLatin1String("artist"), Qt::CaseInsensitive ) == 0
81           || name.compare( shortI18nForField( Meta::valArtist ), Qt::CaseInsensitive ) == 0 )
82             return Meta::valArtist;
83     else if( name.compare( QLatin1String("album"), Qt::CaseInsensitive ) == 0
84           || name.compare( shortI18nForField( Meta::valAlbum ), Qt::CaseInsensitive ) == 0 )
85             return Meta::valAlbum;
86     else if( name.compare( QLatin1String("genre"), Qt::CaseInsensitive ) == 0
87           || name.compare( shortI18nForField( Meta::valGenre ), Qt::CaseInsensitive ) == 0 )
88             return Meta::valGenre;
89     else if( name.compare( QLatin1String("composer"), Qt::CaseInsensitive ) == 0
90           || name.compare( shortI18nForField( Meta::valComposer ), Qt::CaseInsensitive ) == 0 )
91             return Meta::valComposer;
92     else if( name.compare( QLatin1String("year"), Qt::CaseInsensitive ) == 0
93           || name.compare( shortI18nForField( Meta::valYear ), Qt::CaseInsensitive ) == 0 )
94             return Meta::valYear;
95     else if( name.compare( QLatin1String("comment"), Qt::CaseInsensitive ) == 0
96           || name.compare( shortI18nForField( Meta::valComment ), Qt::CaseInsensitive ) == 0 )
97             return Meta::valComment;
98     else if( name.compare( QLatin1String("tracknumber"), Qt::CaseInsensitive ) == 0
99           || name.compare( shortI18nForField( Meta::valTrackNr ), Qt::CaseInsensitive ) == 0 )
100             return Meta::valTrackNr;
101     else if( name.compare( QLatin1String("discnumber"), Qt::CaseInsensitive ) == 0
102           || name.compare( shortI18nForField( Meta::valDiscNr ), Qt::CaseInsensitive ) == 0 )
103             return Meta::valDiscNr;
104     else if( name.compare( QLatin1String("bpm"), Qt::CaseInsensitive ) == 0
105           || name.compare( shortI18nForField( Meta::valBpm ), Qt::CaseInsensitive ) == 0 )
106             return Meta::valBpm;
107     else if( name.compare( QLatin1String("length"), Qt::CaseInsensitive ) == 0
108           || name.compare( shortI18nForField( Meta::valLength ), Qt::CaseInsensitive ) == 0 )
109             return Meta::valLength;
110     else if( name.compare( QLatin1String("bitrate"), Qt::CaseInsensitive ) == 0
111           || name.compare( shortI18nForField( Meta::valBitrate ), Qt::CaseInsensitive ) == 0 )
112             return Meta::valBitrate;
113     else if( name.compare( QLatin1String("samplerate"), Qt::CaseInsensitive ) == 0
114           || name.compare( shortI18nForField( Meta::valSamplerate ), Qt::CaseInsensitive ) == 0 )
115             return Meta::valSamplerate;
116     else if( name.compare( QLatin1String("filesize"), Qt::CaseInsensitive ) == 0
117           || name.compare( shortI18nForField( Meta::valFilesize ), Qt::CaseInsensitive ) == 0 )
118             return Meta::valFilesize;
119     else if( name.compare( QLatin1String("format"), Qt::CaseInsensitive ) == 0
120           || name.compare( QLatin1String("codec"), Qt::CaseInsensitive ) == 0
121           || name.compare( shortI18nForField( Meta::valFormat ), Qt::CaseInsensitive ) == 0 )
122             return Meta::valFormat;
123     else if( name.compare( QLatin1String("added"), Qt::CaseInsensitive ) == 0
124           || name.compare( shortI18nForField( Meta::valCreateDate ), Qt::CaseInsensitive ) == 0 )
125             return Meta::valCreateDate;
126     else if( name.compare( QLatin1String("score"), Qt::CaseInsensitive ) == 0
127           || name.compare( shortI18nForField( Meta::valScore ), Qt::CaseInsensitive ) == 0 )
128             return Meta::valScore;
129     else if( name.compare( QLatin1String("rating"), Qt::CaseInsensitive ) == 0
130           || name.compare( shortI18nForField( Meta::valRating ), Qt::CaseInsensitive ) == 0 )
131             return Meta::valRating;
132     else if( name.compare( QLatin1String("firstplay"), Qt::CaseInsensitive ) == 0
133           || name.compare( QLatin1String("first"), Qt::CaseInsensitive ) == 0 // legacy
134           || name.compare( shortI18nForField( Meta::valFirstPlayed ), Qt::CaseInsensitive ) == 0 )
135             return Meta::valFirstPlayed;
136     else if( name.compare( QLatin1String("lastplay"), Qt::CaseInsensitive ) == 0
137           || name.compare( QLatin1String("played"), Qt::CaseInsensitive ) == 0 // legacy
138           || name.compare( shortI18nForField( Meta::valLastPlayed ), Qt::CaseInsensitive ) == 0 )
139             return Meta::valLastPlayed;
140     else if( name.compare( QLatin1String("playcount"), Qt::CaseInsensitive ) == 0
141           || name.compare( shortI18nForField( Meta::valPlaycount ), Qt::CaseInsensitive ) == 0 )
142             return Meta::valPlaycount;
143     else if( name.compare( QLatin1String("uniqueid"), Qt::CaseInsensitive ) == 0
144           || name.compare( shortI18nForField( Meta::valUniqueId ), Qt::CaseInsensitive ) == 0 )
145             return Meta::valUniqueId;
146 
147     else if( name.compare( QLatin1String("trackgain"), Qt::CaseInsensitive ) == 0
148           || name.compare( shortI18nForField( Meta::valTrackGain ), Qt::CaseInsensitive ) == 0 )
149             return Meta::valTrackGain;
150     else if( name.compare( QLatin1String("trackgainpeak"), Qt::CaseInsensitive ) == 0
151           || name.compare( shortI18nForField( Meta::valTrackGainPeak ), Qt::CaseInsensitive ) == 0 )
152             return Meta::valTrackGainPeak;
153     else if( name.compare( QLatin1String("albumgain"), Qt::CaseInsensitive ) == 0
154           || name.compare( shortI18nForField( Meta::valAlbumGain ), Qt::CaseInsensitive ) == 0 )
155             return Meta::valAlbumGain;
156     else if( name.compare( QLatin1String("albumgainpeak"), Qt::CaseInsensitive ) == 0
157           || name.compare( shortI18nForField( Meta::valAlbumGainPeak ), Qt::CaseInsensitive ) == 0 )
158             return Meta::valAlbumGainPeak;
159 
160     else if( name.compare( QLatin1String("albumartist"), Qt::CaseInsensitive ) == 0
161           || name.compare( shortI18nForField( Meta::valAlbumArtist ), Qt::CaseInsensitive ) == 0 )
162             return Meta::valAlbumArtist;
163     else if( name.compare( QLatin1String("label"), Qt::CaseInsensitive ) == 0
164           || name.compare( shortI18nForField( Meta::valLabel ), Qt::CaseInsensitive ) == 0 )
165             return Meta::valLabel;
166     else if( name.compare( QLatin1String("modified"), Qt::CaseInsensitive ) == 0
167           || name.compare( shortI18nForField( Meta::valModified ), Qt::CaseInsensitive ) == 0 )
168             return Meta::valModified;
169     else if( name.compare( QLatin1String("lyrics"), Qt::CaseInsensitive ) == 0
170           || name.compare( shortI18nForField( Meta::valLyrics ), Qt::CaseInsensitive ) == 0 )
171             return Meta::valLyrics;
172     else
173             return 0;
174 }
175 
i18nForField(qint64 field)176 QString Meta::i18nForField( qint64 field )
177 {
178     switch( field )
179     {
180     case 0:                    return i18nc("Track field name (when nothing specific is selected e.g. in the automatic playlist generator)", "anything");
181     case Meta::valUrl:         return i18nc("Track field name (the file this track is stored in)", "File Name");
182     case Meta::valTitle:       return i18nc("Track field name", "Title");
183     case Meta::valArtist:      return i18nc("Track field name", "Artist");
184     case Meta::valAlbum:       return i18nc("Track field name", "Album");
185     case Meta::valGenre:       return i18nc("Track field name", "Genre");
186     case Meta::valComposer:    return i18nc("Track field name", "Composer");
187     case Meta::valYear:        return i18nc("Track field name", "Year");
188     case Meta::valComment:     return i18nc("Track field name", "Comment");
189     case Meta::valTrackNr:     return i18nc("Track field name", "Track Number");
190     case Meta::valDiscNr:      return i18nc("Track field name", "Disc Number");
191     case Meta::valBpm:         return i18nc("Track field name", "Bpm");
192     case Meta::valLength:      return i18nc("Track field name", "Length");
193     case Meta::valBitrate:     return i18nc("Track field name", "Bit Rate");
194     case Meta::valSamplerate:  return i18nc("Track field name", "Sample Rate");
195     case Meta::valFilesize:    return i18nc("Track field name", "File Size");
196     case Meta::valFormat:      return i18nc("Track field name", "Format");
197     case Meta::valCreateDate:  return i18nc("Track field name", "Added to Collection");
198     case Meta::valScore:       return i18nc("Track field name", "Score");
199     case Meta::valRating:      return i18nc("Track field name", "Rating");
200     case Meta::valFirstPlayed: return i18nc("Track field name", "First Played");
201     case Meta::valLastPlayed:  return i18nc("Track field name", "Last Played");
202     case Meta::valPlaycount:   return i18nc("Track field name", "Playcount");
203     case Meta::valUniqueId:    return i18nc("Track field name", "Unique Id");
204 
205     case Meta::valTrackGain:   return i18nc("Track field name", "Track Gain");
206     case Meta::valTrackGainPeak:   return i18nc("Track field name", "Track Gain Peak");
207     case Meta::valAlbumGain:   return i18nc("Track field name", "Album Gain");
208     case Meta::valAlbumGainPeak:   return i18nc("Track field name", "Album Gain Peak");
209 
210     case Meta::valAlbumArtist: return i18nc("Track field name", "Album Artist");
211     case Meta::valLabel:       return i18nc("Track field name", "Label");
212     case Meta::valModified:    return i18nc("Track field name", "Last Modified");
213     case Meta::valLyrics:      return i18nc("Track field name", "Lyrics");
214     default:                   return QString();
215     }
216 }
217 
shortI18nForField(qint64 field)218 QString Meta::shortI18nForField( qint64 field )
219 {
220     // see also src/browsers/CollectionTreeItemModelBase.cpp for localized names
221 
222     switch( field )
223     {
224     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");
225     case Meta::valUrl:         return i18nc("One word translation used in the collection filter. The name of the file this track is stored in", "filename" );
226     case Meta::valTitle:       return i18nc("One word translation used in the collection filter", "title");
227     case Meta::valArtist:      return i18nc("One word translation used in the collection filter", "artist");
228     case Meta::valAlbum:       return i18nc("One word translation used in the collection filter", "album");
229     case Meta::valGenre:       return i18nc("One word translation used in the collection filter", "genre");
230     case Meta::valComposer:    return i18nc("One word translation used in the collection filter", "composer");
231     case Meta::valYear:        return i18nc("One word translation used in the collection filter", "year");
232     case Meta::valComment:     return i18nc("One word translation used in the collection filter", "comment");
233     case Meta::valTrackNr:     return i18nc("One word translation used in the collection filter", "tracknumber");
234     case Meta::valDiscNr:      return i18nc("One word translation used in the collection filter", "discnumber");
235     case Meta::valBpm:         return i18nc("One word translation used in the collection filter", "bpm");
236     case Meta::valLength:      return i18nc("One word translation used in the collection filter", "length");
237     case Meta::valBitrate:     return i18nc("One word translation used in the collection filter", "bitrate");
238     case Meta::valSamplerate:  return i18nc("One word translation used in the collection filter", "samplerate");
239     case Meta::valFilesize:    return i18nc("One word translation used in the collection filter", "filesize");
240     case Meta::valFormat:      return i18nc("One word translation used in the collection filter", "format");
241     case Meta::valCreateDate:  return i18nc("One word translation used in the collection filter", "added");
242     case Meta::valScore:       return i18nc("One word translation used in the collection filter", "score");
243     case Meta::valRating:      return i18nc("One word translation used in the collection filter", "rating");
244     case Meta::valFirstPlayed: return i18nc("One word translation used in the collection filter. First played time / access date", "firstplay");
245     case Meta::valLastPlayed:  return i18nc("One word translation used in the collection filter. Last played time / access date", "lastplay");
246     case Meta::valPlaycount:   return i18nc("One word translation used in the collection filter", "playcount");
247     case Meta::valUniqueId:    return i18nc("One word translation used in the collection filter", "uniqueid");
248 
249     case Meta::valTrackGain:   return i18nc("One word translation used in the collection filter", "trackgain");
250     case Meta::valTrackGainPeak:   return i18nc("One word translation used in the collection filter", "trackgainpeak");
251     case Meta::valAlbumGain:   return i18nc("One word translation used in the collection filter", "albumgain");
252     case Meta::valAlbumGainPeak:   return i18nc("One word translation used in the collection filter", "albumgainpeak");
253 
254     case Meta::valAlbumArtist: return i18nc("One word translation used in the collection filter", "albumartist");
255     case Meta::valLabel:       return i18nc("One word translation used in the collection filter", "label");
256     case Meta::valModified:    return i18nc("One word translation used in the collection filter", "modified");
257     case Meta::valLyrics:      return i18nc("One word translation used in the collection filter", "lyrics");
258     default:                   return QString();
259     }
260 }
261 
playlistNameForField(qint64 field)262 QString Meta::playlistNameForField( qint64 field )
263 {
264     switch( field )
265     {
266     case 0:                    return QStringLiteral("anything");
267     case Meta::valUrl:         return QStringLiteral("url");
268     case Meta::valTitle:       return QStringLiteral("title");
269     case Meta::valArtist:      return QStringLiteral("artist name");
270     case Meta::valAlbum:       return QStringLiteral("album name");
271     case Meta::valGenre:       return QStringLiteral("genre");
272     case Meta::valComposer:    return QStringLiteral("composer");
273     case Meta::valYear:        return QStringLiteral("year");
274     case Meta::valComment:     return QStringLiteral("comment");
275     case Meta::valTrackNr:     return QStringLiteral("track number");
276     case Meta::valDiscNr:      return QStringLiteral("disc number");
277     case Meta::valBpm:         return QStringLiteral("bpm");
278     case Meta::valLength:      return QStringLiteral("length");
279     case Meta::valBitrate:     return QStringLiteral("bit rate");
280     case Meta::valSamplerate:  return QStringLiteral("sample rate");
281     case Meta::valFilesize:    return QStringLiteral("file size");
282     case Meta::valFormat:      return QStringLiteral("format");
283     case Meta::valCreateDate:  return QStringLiteral("create date");
284     case Meta::valScore:       return QStringLiteral("score");
285     case Meta::valRating:      return QStringLiteral("rating");
286     case Meta::valFirstPlayed: return QStringLiteral("first played");
287     case Meta::valLastPlayed:  return QStringLiteral("last played");
288     case Meta::valPlaycount:   return QStringLiteral("play count");
289     case Meta::valUniqueId:    return QStringLiteral("unique id");
290 
291     case Meta::valTrackGain:   return QStringLiteral("track gain");
292     case Meta::valTrackGainPeak:   return QStringLiteral("track gain peak");
293     case Meta::valAlbumGain:   return QStringLiteral("album gain");
294     case Meta::valAlbumGainPeak:   return QStringLiteral("album gain peak");
295 
296     case Meta::valAlbumArtist: return QStringLiteral("album artist name");
297     case Meta::valLabel:       return QStringLiteral("label");
298     case Meta::valModified:    return QStringLiteral("modified");
299     default:                   return QLatin1String("");
300     }
301 }
302 
fieldForPlaylistName(const QString & name)303 qint64 Meta::fieldForPlaylistName( const QString &name )
304 {
305     if( name == QLatin1String("anything") ) return 0;
306     else if( name == QLatin1String("url") ) return Meta::valUrl;
307     else if( name == QLatin1String("title") ) return Meta::valTitle;
308     else if( name == QLatin1String("artist name") ) return Meta::valArtist;
309     else if( name == QLatin1String("album name") ) return Meta::valAlbum;
310     else if( name == QLatin1String("genre") ) return Meta::valGenre;
311     else if( name == QLatin1String("composer") ) return Meta::valComposer;
312     else if( name == QLatin1String("year") ) return Meta::valYear;
313     else if( name == QLatin1String("comment") ) return Meta::valComment;
314     else if( name == QLatin1String("track number") ) return Meta::valTrackNr;
315     else if( name == QLatin1String("disc number") ) return Meta::valDiscNr;
316     else if( name == QLatin1String("bpm") ) return Meta::valBpm;
317     else if( name == QLatin1String("length") ) return Meta::valLength;
318     else if( name == QLatin1String("bit rate") ) return Meta::valBitrate;
319     else if( name == QLatin1String("sample rate") ) return Meta::valSamplerate;
320     else if( name == QLatin1String("file size") ) return Meta::valFilesize;
321     else if( name == QLatin1String("format") ) return Meta::valFormat;
322     else if( name == QLatin1String("create date") ) return Meta::valCreateDate;
323     else if( name == QLatin1String("score") ) return Meta::valScore;
324     else if( name == QLatin1String("rating") ) return Meta::valRating;
325     else if( name == QLatin1String("first played") ) return Meta::valFirstPlayed;
326     else if( name == QLatin1String("last played") ) return Meta::valLastPlayed;
327     else if( name == QLatin1String("play count") ) return Meta::valPlaycount;
328     else if( name == QLatin1String("unique id") ) return Meta::valUniqueId;
329 
330     else if( name == QLatin1String("track gain") ) return Meta::valTrackGain;
331     else if( name == QLatin1String("track gain peak") ) return Meta::valTrackGainPeak;
332     else if( name == QLatin1String("album gain") ) return Meta::valAlbumGain;
333     else if( name == QLatin1String("album gain peak") ) return Meta::valAlbumGainPeak;
334 
335     else if( name == QLatin1String("album artist name") ) return Meta::valAlbumArtist;
336     else if( name == QLatin1String("label") ) return Meta::valLabel;
337     else if( name == QLatin1String("modified") ) return Meta::valModified;
338     else return 0;
339 }
340 
iconForField(qint64 field)341 QString Meta::iconForField( qint64 field )
342 {
343     // see also PlaylistDefines.h::iconNames
344     switch( field )
345     {
346     case Meta::valUrl: return QStringLiteral("filename-space-amarok");
347     case Meta::valTitle: return QStringLiteral("filename-title-amarok");
348     case Meta::valArtist: return QStringLiteral("filename-artist-amarok");
349     case Meta::valAlbumArtist: return QStringLiteral("filename-artist-amarok");
350     case Meta::valAlbum: return QStringLiteral("filename-album-amarok");
351     case Meta::valGenre: return QStringLiteral("filename-genre-amarok");
352     case Meta::valComposer: return QStringLiteral("filename-composer-amarok");
353     case Meta::valYear: return QStringLiteral("filename-year-amarok");
354     case Meta::valModified:
355     case Meta::valCreateDate: return QStringLiteral("filename-year-amarok");
356     case Meta::valComment: return QStringLiteral("amarok_comment");
357     case Meta::valPlaycount: return QStringLiteral("amarok_playcount");
358     case Meta::valTrackNr: return QStringLiteral("filename-track-amarok");
359     case Meta::valDiscNr: return QStringLiteral("filename-discnumber-amarok");
360     case Meta::valBpm: return QStringLiteral("filename-bpm-amarok");
361     case Meta::valLength: return QStringLiteral("chronometer");
362     case Meta::valBitrate: return QStringLiteral("audio-x-generic");
363     case Meta::valSamplerate: return QStringLiteral("filename-sample-rate");
364     case Meta::valFormat: return QStringLiteral("filename-filetype-amarok");
365     case Meta::valScore: return QStringLiteral("emblem-favorite");
366     case Meta::valRating: return QStringLiteral("rating");
367     case Meta::valFirstPlayed:
368     case Meta::valLastPlayed: return QStringLiteral("filename-last-played");
369     case Meta::valLabel: return QStringLiteral("label-amarok");
370     case Meta::valFilesize: return QStringLiteral("info-amarok");
371     default: return QString();
372     }
373 }
374 
valueForField(qint64 field,Meta::TrackPtr track)375 QVariant Meta::valueForField( qint64 field, Meta::TrackPtr track )
376 {
377     if( !track )
378         return QVariant();
379 
380     switch( field )
381     {
382     case 0:
383     {
384         // that is the simple search for MetaQueryWidget
385         QSet<QString> allInfos;
386         allInfos += track->playableUrl().path()
387             += track->name()
388             += track->comment();
389         if( track->artist() )
390             allInfos += track->artist()->name();
391         if( track->album() )
392             allInfos += track->album()->name();
393         if( track->genre() )
394             allInfos += track->genre()->name();
395 
396         return QVariant( allInfos.toList() );
397     }
398     case Meta::valUrl:         return track->playableUrl().path();
399     case Meta::valTitle:       return track->name();
400     case Meta::valArtist:      return track->artist() ?
401                                QVariant(track->artist()->name()) : QVariant();
402     case Meta::valAlbum:       return track->album() ?
403                                QVariant(track->album()->name()) : QVariant();
404     case Meta::valGenre:       return track->genre() ?
405                                QVariant(track->genre()->name()) : QVariant();
406     case Meta::valComposer:    return track->composer() ?
407                                QVariant(track->composer()->name()) : QVariant();
408     case Meta::valYear:        return track->year() ?
409                                QVariant(track->year()->name().toInt()) : QVariant();
410     case Meta::valComment:     return track->comment();
411     case Meta::valTrackNr:     return track->trackNumber();
412     case Meta::valDiscNr:      return track->discNumber();
413     case Meta::valBpm:         return track->bpm();
414     case Meta::valLength:      return track->length();
415     case Meta::valBitrate:     return track->bitrate();
416     case Meta::valSamplerate:  return track->sampleRate();
417     case Meta::valFilesize:    return track->filesize();
418     case Meta::valFormat:      return int(Amarok::FileTypeSupport::fileType(track->type()));
419 
420     case Meta::valCreateDate:  return track->createDate();
421     case Meta::valScore:       return track->statistics()->score();
422     case Meta::valRating:      return track->statistics()->rating();
423     case Meta::valFirstPlayed: return track->statistics()->firstPlayed();
424     case Meta::valLastPlayed:  return track->statistics()->lastPlayed();
425     case Meta::valPlaycount:   return track->statistics()->playCount();
426     case Meta::valUniqueId:    return track->uidUrl();
427 
428     // todo
429     case Meta::valTrackGain:   return "track gain";
430     case Meta::valTrackGainPeak:   return "track gain peak";
431     case Meta::valAlbumGain:   return "album gain";
432     case Meta::valAlbumGainPeak:   return "album gain peak";
433 
434     case Meta::valAlbumArtist: return (track->album() && track->album()->albumArtist()) ?
435                                QVariant(track->album()->albumArtist()->name()) : QVariant();
436     case Meta::valLabel:
437       {
438           Meta::LabelList labels = track->labels();
439           QStringList strLabels;
440           foreach( Meta::LabelPtr label, labels )
441               strLabels.append( label->name() );
442           return QVariant( strLabels );
443       }
444     case Meta::valModified:  return track->modifyDate();
445     default: return QVariant();
446     }
447 }
448 
449 
450