8 #include "propertyinfo.h"
10 #include <KLocalizedString>
12 #include "formatstrings_p.h"
16 using namespace KFileMetaData;
18 class KFileMetaData::PropertyInfoPrivate
29 PropertyInfo::PropertyInfo()
30 : d(new PropertyInfoPrivate)
32 d->prop = Property::Empty;
33 d->name = QStringLiteral(
"empty");
35 d->shouldBeIndexed =
false;
36 d->formatAsString = &FormatStrings::toStringFunction;
40 : d(new PropertyInfoPrivate)
43 d->shouldBeIndexed =
true;
44 d->formatAsString = &FormatStrings::toStringFunction;
48 d->name = QStringLiteral(
"album");
49 d->displayName =
i18nc(
"@label music album",
"Album");
53 case Property::AlbumArtist:
54 d->name = QStringLiteral(
"albumArtist");
55 d->displayName =
i18nc(
"@label",
"Album Artist");
59 case Property::Artist:
60 d->name = QStringLiteral(
"artist");
61 d->displayName =
i18nc(
"@label",
"Artist");
65 case Property::AspectRatio:
66 d->name = QStringLiteral(
"aspectRatio");
67 d->displayName =
i18nc(
"@label",
"Aspect Ratio");
69 d->formatAsString = &FormatStrings::formatAspectRatio;
72 case Property::Author:
73 d->name = QStringLiteral(
"author");
74 d->displayName =
i18nc(
"@label",
"Author");
78 case Property::BitRate:
79 d->name = QStringLiteral(
"bitRate");
80 d->displayName =
i18nc(
"@label",
"Bitrate");
82 d->formatAsString = &FormatStrings::formatBitRate;
85 case Property::Channels:
86 d->name = QStringLiteral(
"channels");
87 d->displayName =
i18nc(
"@label",
"Channels");
91 case Property::Comment:
92 d->name = QStringLiteral(
"comment");
93 d->displayName =
i18nc(
"@label",
"Comment");
95 d->shouldBeIndexed =
false;
98 case Property::Description:
99 d->name = QStringLiteral(
"description");
100 d->displayName =
i18nc(
"@label",
"Description");
102 d->shouldBeIndexed =
false;
105 case Property::Composer:
106 d->name = QStringLiteral(
"composer");
107 d->displayName =
i18nc(
"@label",
"Composer");
111 case Property::Copyright:
112 d->name = QStringLiteral(
"copyright");
113 d->displayName =
i18nc(
"@label",
"Copyright");
115 d->shouldBeIndexed =
false;
118 case Property::CreationDate:
119 d->name = QStringLiteral(
"creationDate");
120 d->displayName =
i18nc(
"@label",
"Creation Date");
122 d->formatAsString = &FormatStrings::formatDate;
125 case Property::Duration:
126 d->name = QStringLiteral(
"duration");
127 d->displayName =
i18nc(
"@label",
"Duration");
129 d->formatAsString = &FormatStrings::formatDuration;
132 case Property::Empty:
133 d->name = QStringLiteral(
"empty");
137 case Property::FrameRate:
138 d->name = QStringLiteral(
"frameRate");
139 d->displayName =
i18nc(
"@label",
"Frame Rate");
141 d->formatAsString = &FormatStrings::formatAsFrameRate;
144 case Property::Generator:
145 d->name = QStringLiteral(
"generator");
146 d->displayName =
i18nc(
"@label",
"Document Generated By");
148 d->shouldBeIndexed =
false;
151 case Property::Genre:
152 d->name = QStringLiteral(
"genre");
153 d->displayName =
i18nc(
"@label music genre",
"Genre");
157 case Property::Height:
158 d->name = QStringLiteral(
"height");
159 d->displayName =
i18nc(
"@label",
"Height");
163 case Property::ImageDateTime:
164 d->name = QStringLiteral(
"imageDateTime");
165 d->displayName =
i18nc(
"@label EXIF",
"Image Date Time");
167 d->formatAsString = &FormatStrings::formatDate;
170 case Property::Manufacturer:
171 d->name = QStringLiteral(
"manufacturer");
172 d->displayName =
i18nc(
"@label EXIF",
"Manufacturer");
174 d->shouldBeIndexed =
false;
177 case Property::Model:
178 d->name = QStringLiteral(
"model");
179 d->displayName =
i18nc(
"@label EXIF",
"Model");
181 d->shouldBeIndexed =
false;
184 case Property::ImageOrientation:
185 d->name = QStringLiteral(
"imageOrientation");
186 d->displayName =
i18nc(
"@label EXIF",
"Image Orientation");
188 d->formatAsString = &FormatStrings::formatOrientationValue;
191 case Property::Keywords:
192 d->name = QStringLiteral(
"keywords");
193 d->displayName =
i18nc(
"@label",
"Keywords");
195 d->shouldBeIndexed =
false;
198 case Property::Language:
199 d->name = QStringLiteral(
"language");
200 d->displayName =
i18nc(
"@label",
"Language");
202 d->shouldBeIndexed =
false;
205 case Property::LineCount:
206 d->name = QStringLiteral(
"lineCount");
207 d->displayName =
i18nc(
"@label number of lines",
"Line Count");
211 case Property::Lyricist:
212 d->name = QStringLiteral(
"lyricist");
213 d->displayName =
i18nc(
"@label",
"Lyricist");
217 case Property::PageCount:
218 d->name = QStringLiteral(
"pageCount");
219 d->displayName =
i18nc(
"@label",
"Page Count");
223 case Property::PhotoApertureValue:
224 d->name = QStringLiteral(
"photoApertureValue");
225 d->displayName =
i18nc(
"@label EXIF",
"Aperture Value");
227 d->formatAsString = &FormatStrings::formatAsFNumber;
230 case Property::PhotoDateTimeOriginal:
231 d->name = QStringLiteral(
"photoDateTimeOriginal");
232 d->displayName =
i18nc(
"@label EXIF",
"Original Date Time");
234 d->formatAsString = &FormatStrings::formatDate;
237 case Property::PhotoExposureBiasValue:
238 d->name = QStringLiteral(
"photoExposureBiasValue");
239 d->displayName =
i18nc(
"@label EXIF",
"Exposure Bias");
241 d->formatAsString = &FormatStrings::formatPhotoExposureBias;
244 case Property::PhotoExposureTime:
245 d->name = QStringLiteral(
"photoExposureTime");
246 d->displayName =
i18nc(
"@label EXIF",
"Exposure Time");
248 d->formatAsString = &FormatStrings::formatPhotoTime;
251 case Property::PhotoFlash:
252 d->name = QStringLiteral(
"photoFlash");
253 d->displayName =
i18nc(
"@label EXIF",
"Flash");
255 d->formatAsString = &FormatStrings::formatPhotoFlashValue;
258 case Property::PhotoFNumber:
259 d->name = QStringLiteral(
"photoFNumber");
260 d->displayName =
i18nc(
"@label EXIF",
"F Number");
262 d->formatAsString = &FormatStrings::formatAsFNumber;
265 case Property::PhotoFocalLength:
266 d->name = QStringLiteral(
"photoFocalLength");
267 d->displayName =
i18nc(
"@label EXIF",
"Focal Length");
269 d->formatAsString = &FormatStrings::formatAsMilliMeter;
272 case Property::PhotoFocalLengthIn35mmFilm:
273 d->name = QStringLiteral(
"photoFocalLengthIn35mmFilm");
274 d->displayName =
i18nc(
"@label EXIF",
"Focal Length 35mm");
276 d->formatAsString = &FormatStrings::formatAsMilliMeter;
279 case Property::PhotoGpsLatitude:
280 d->name = QStringLiteral(
"photoGpsLatitude");
281 d->displayName =
i18nc(
"@label EXIF",
"GPS Latitude");
283 d->formatAsString = &FormatStrings::formatAsDegree;
286 case Property::PhotoGpsLongitude:
287 d->name = QStringLiteral(
"photoGpsLongitude");
288 d->displayName =
i18nc(
"@label EXIF",
"GPS Longitude");
290 d->formatAsString = &FormatStrings::formatAsDegree;
293 case Property::PhotoGpsAltitude:
294 d->name = QStringLiteral(
"photoGpsAltitude");
295 d->displayName =
i18nc(
"@label EXIF",
"GPS Altitude");
297 d->formatAsString = &FormatStrings::formatAsMeter;
300 case Property::PhotoISOSpeedRatings:
301 d->name = QStringLiteral(
"photoISOSpeedRatings");
302 d->displayName =
i18nc(
"@label EXIF",
"ISO Speed Rating");
306 case Property::PhotoMeteringMode:
307 d->name = QStringLiteral(
"photoMeteringMode");
308 d->displayName =
i18nc(
"@label EXIF",
"Metering Mode");
312 case Property::PhotoPixelXDimension:
313 d->name = QStringLiteral(
"photoPixelXDimension");
314 d->displayName =
i18nc(
"@label EXIF",
"X Dimension");
318 case Property::PhotoPixelYDimension:
319 d->name = QStringLiteral(
"photoPixelYDimension");
320 d->displayName =
i18nc(
"@label EXIF",
"Y Dimension");
324 case Property::PhotoSaturation:
325 d->name = QStringLiteral(
"photoSaturation");
326 d->displayName =
i18nc(
"@label EXIF",
"Saturation");
330 case Property::PhotoSharpness:
331 d->name = QStringLiteral(
"photoSharpness");
332 d->displayName =
i18nc(
"@label EXIF",
"Sharpness");
336 case Property::PhotoWhiteBalance:
337 d->name = QStringLiteral(
"photoWhiteBalance");
338 d->displayName =
i18nc(
"@label EXIF",
"White Balance");
342 case Property::Publisher:
343 d->name = QStringLiteral(
"publisher");
344 d->displayName =
i18nc(
"@label",
"Publisher");
348 case Property::Label:
349 d->name = QStringLiteral(
"label");
350 d->displayName =
i18nc(
"@label",
"Label");
354 case Property::ReleaseYear:
355 d->name = QStringLiteral(
"releaseYear");
356 d->displayName =
i18nc(
"@label",
"Release Year");
360 case Property::SampleRate:
361 d->name = QStringLiteral(
"sampleRate");
362 d->displayName =
i18nc(
"@label",
"Sample Rate");
364 d->formatAsString = &FormatStrings::formatSampleRate;
367 case Property::Subject:
368 d->name = QStringLiteral(
"subject");
369 d->displayName =
i18nc(
"@label",
"Subject");
371 d->shouldBeIndexed =
false;
374 case Property::Title:
375 d->name = QStringLiteral(
"title");
376 d->displayName =
i18nc(
"@label",
"Title");
380 case Property::TrackNumber:
381 d->name = QStringLiteral(
"trackNumber");
382 d->displayName =
i18nc(
"@label music track number",
"Track Number");
386 case Property::DiscNumber:
387 d->name = QStringLiteral(
"discNumber");
388 d->displayName =
i18nc(
"@label music disc number",
"Disc Number");
392 case Property::Location:
393 d->name = QStringLiteral(
"location");
394 d->displayName =
i18nc(
"@label",
"Location");
398 case Property::Performer:
399 d->name = QStringLiteral(
"performer");
400 d->displayName =
i18nc(
"@label",
"Performer");
404 case Property::Ensemble:
405 d->name = QStringLiteral(
"ensemble");
406 d->displayName =
i18nc(
"@label",
"Ensemble");
410 case Property::Arranger:
411 d->name = QStringLiteral(
"arranger");
412 d->displayName =
i18nc(
"@label",
"Arranger");
416 case Property::Conductor:
417 d->name = QStringLiteral(
"conductor");
418 d->displayName =
i18nc(
"@label",
"Conductor");
422 case Property::Compilation:
423 d->name = QStringLiteral(
"compilation");
424 d->displayName =
i18nc(
"@label",
"Compilation");
428 case Property::License:
429 d->name = QStringLiteral(
"license");
430 d->displayName =
i18nc(
"@label",
"License");
434 case Property::Lyrics:
435 d->name = QStringLiteral(
"lyrics");
436 d->displayName =
i18nc(
"@label",
"Lyrics");
441 d->name = QStringLiteral(
"opus");
442 d->displayName =
i18nc(
"@label",
"Opus");
446 case Property::Rating:
447 d->name = QStringLiteral(
"embeddedRating");
448 d->displayName =
i18nc(
"@label",
"Rating");
452 case Property::ReplayGainAlbumPeak:
453 d->name = QStringLiteral(
"replayGainAlbumPeak");
454 d->displayName =
i18nc(
"@label",
"Replay Gain Album Peak");
456 d->formatAsString = &FormatStrings::formatDouble;
459 case Property::ReplayGainAlbumGain:
460 d->name = QStringLiteral(
"replayGainAlbumGain");
461 d->displayName =
i18nc(
"@label",
"Replay Gain Album Gain");
463 d->formatAsString = &FormatStrings::formatDouble;
466 case Property::ReplayGainTrackPeak:
467 d->name = QStringLiteral(
"replayGainTrackPeak");
468 d->displayName =
i18nc(
"@label",
"Replay Gain Track Peak");
470 d->formatAsString = &FormatStrings::formatDouble;
473 case Property::ReplayGainTrackGain:
474 d->name = QStringLiteral(
"replayGainTrackGain");
475 d->displayName =
i18nc(
"@label",
"Replay Gain Track Gain");
477 d->formatAsString = &FormatStrings::formatDouble;
480 case Property::Width:
481 d->name = QStringLiteral(
"width");
482 d->displayName =
i18nc(
"@label",
"Width");
486 case Property::WordCount:
487 d->name = QStringLiteral(
"wordCount");
488 d->displayName =
i18nc(
"@label number of words",
"Word Count");
492 case Property::TranslationUnitsTotal:
493 d->name = QStringLiteral(
"translationUnitsTotal");
494 d->displayName =
i18nc(
"@label number of translatable strings",
495 "Translatable Units");
497 d->shouldBeIndexed =
false;
500 case Property::TranslationUnitsWithTranslation:
501 d->name = QStringLiteral(
"translationUnitsWithTranslation");
502 d->displayName =
i18nc(
"@label number of translated strings",
"Translations");
504 d->shouldBeIndexed =
false;
507 case Property::TranslationUnitsWithDraftTranslation:
508 d->name = QStringLiteral(
"translationUnitsWithDraftTranslation");
509 d->displayName =
i18nc(
"@label number of fuzzy translated strings",
510 "Draft Translations");
512 d->shouldBeIndexed =
false;
515 case Property::TranslationLastAuthor:
516 d->name = QStringLiteral(
"translationLastAuthor");
517 d->displayName =
i18nc(
"@label translation author",
"Author");
519 d->shouldBeIndexed =
false;
522 case Property::TranslationLastUpDate:
523 d->name = QStringLiteral(
"translationLastUpDate");
524 d->displayName =
i18nc(
"@label translations last update",
"Last Update");
526 d->shouldBeIndexed =
false;
527 d->formatAsString = &FormatStrings::formatDate;
530 case Property::TranslationTemplateDate:
531 d->name = QStringLiteral(
"translationTemplateDate");
532 d->displayName =
i18nc(
"@label date of template creation8",
"Template Creation");
534 d->shouldBeIndexed =
false;
535 d->formatAsString = &FormatStrings::formatDate;
538 case Property::OriginUrl:
539 d->name = QStringLiteral(
"originUrl");
540 d->displayName =
i18nc(
"@label the URL a file was originally downloaded from",
"Downloaded From");
542 d->shouldBeIndexed =
false;
545 case Property::OriginEmailSubject:
546 d->name = QStringLiteral(
"originEmailSubject");
547 d->displayName =
i18nc(
"@label the subject of an email this file was attached to",
"E-Mail Attachment Subject");
549 d->shouldBeIndexed =
false;
552 case Property::OriginEmailSender:
553 d->name = QStringLiteral(
"originEmailSender");
554 d->displayName =
i18nc(
"@label the sender of an email this file was attached to",
"E-Mail Attachment Sender");
556 d->shouldBeIndexed =
false;
559 case Property::OriginEmailMessageId:
560 d->name = QStringLiteral(
"originEmailMessageId");
561 d->displayName =
i18nc(
"@label the message ID of an email this file was attached to",
"E-Mail Attachment Message ID");
563 d->shouldBeIndexed =
false;
566 case Property::PropertyCount:
575 d->shouldBeIndexed =
false;
580 : d(new PropertyInfoPrivate(*pi.d))
584 PropertyInfo::~PropertyInfo() =
default;
592 bool PropertyInfo::operator==(
const PropertyInfo& rhs)
const
594 return d->name == rhs.d->name && d->displayName == rhs.d->displayName &&
595 d->prop == rhs.d->prop && d->shouldBeIndexed == rhs.d->shouldBeIndexed;
600 return d->displayName;
620 return d->shouldBeIndexed;
630 const auto valueList = value.
toList();
631 for (
const auto& entry : valueList) {
632 displayList << d->formatAsString(entry);
637 return d->formatAsString(value);
644 { QStringLiteral(
"bitrate"), Property::BitRate },
645 { QStringLiteral(
"channels"), Property::Channels },
646 { QStringLiteral(
"duration"), Property::Duration },
647 { QStringLiteral(
"genre"), Property::Genre },
648 { QStringLiteral(
"samplerate"), Property::SampleRate },
649 { QStringLiteral(
"tracknumber"), Property::TrackNumber },
650 { QStringLiteral(
"discnumber"), Property::DiscNumber },
651 { QStringLiteral(
"releaseyear"), Property::ReleaseYear },
652 { QStringLiteral(
"comment"), Property::Comment },
653 { QStringLiteral(
"description"), Property::Description },
654 { QStringLiteral(
"artist"), Property::Artist },
655 { QStringLiteral(
"album"), Property::Album },
656 { QStringLiteral(
"albumartist"), Property::AlbumArtist },
657 { QStringLiteral(
"composer"), Property::Composer },
658 { QStringLiteral(
"lyricist"), Property::Lyricist },
659 { QStringLiteral(
"location"), Property::Location },
660 { QStringLiteral(
"performer"), Property::Performer },
661 { QStringLiteral(
"ensemble"), Property::Ensemble },
662 { QStringLiteral(
"arranger"), Property::Arranger },
663 { QStringLiteral(
"conductor"), Property::Conductor },
664 { QStringLiteral(
"opus"), Property::Opus },
665 { QStringLiteral(
"embeddedrating"), Property::Rating },
666 { QStringLiteral(
"author"), Property::Author },
667 { QStringLiteral(
"title"), Property::Title },
668 { QStringLiteral(
"subject"), Property::Subject },
669 { QStringLiteral(
"generator"), Property::Generator },
670 { QStringLiteral(
"pagecount"), Property::PageCount },
671 { QStringLiteral(
"wordcount"), Property::WordCount },
672 { QStringLiteral(
"linecount"), Property::LineCount },
673 { QStringLiteral(
"language"), Property::Language },
674 { QStringLiteral(
"copyright"), Property::Copyright },
675 { QStringLiteral(
"publisher"), Property::Publisher },
676 { QStringLiteral(
"label"), Property::Label },
677 { QStringLiteral(
"compilation"), Property::Compilation },
678 { QStringLiteral(
"license"), Property::License },
679 { QStringLiteral(
"lyrics"), Property::Lyrics },
680 { QStringLiteral(
"replaygainalbumpeak"), Property::ReplayGainAlbumPeak },
681 { QStringLiteral(
"replaygainalbumgain"), Property::ReplayGainAlbumGain },
682 { QStringLiteral(
"replaygaintrackpeak"), Property::ReplayGainTrackPeak },
683 { QStringLiteral(
"replaygaintrackgain"), Property::ReplayGainTrackGain },
684 { QStringLiteral(
"creationdate"), Property::CreationDate },
685 { QStringLiteral(
"keywords"), Property::Keywords },
686 { QStringLiteral(
"width"), Property::Width },
687 { QStringLiteral(
"height"), Property::Height },
688 { QStringLiteral(
"aspectratio"), Property::AspectRatio },
689 { QStringLiteral(
"framerate"), Property::FrameRate },
690 { QStringLiteral(
"manufacturer"), Property::Manufacturer },
691 { QStringLiteral(
"model"), Property::Model },
692 { QStringLiteral(
"imagedatetime"), Property::ImageDateTime },
693 { QStringLiteral(
"imageorientation"), Property::ImageOrientation },
694 { QStringLiteral(
"photoflash"), Property::PhotoFlash },
695 { QStringLiteral(
"photopixelxdimension"), Property::PhotoPixelXDimension },
696 { QStringLiteral(
"photopixelydimension"), Property::PhotoPixelYDimension },
697 { QStringLiteral(
"photodatetimeoriginal"), Property::PhotoDateTimeOriginal },
698 { QStringLiteral(
"photofocallength"), Property::PhotoFocalLength },
699 { QStringLiteral(
"photofocallengthin35mmfilm"), Property::PhotoFocalLengthIn35mmFilm },
700 { QStringLiteral(
"photoexposuretime"), Property::PhotoExposureTime },
701 { QStringLiteral(
"photofnumber"), Property::PhotoFNumber },
702 { QStringLiteral(
"photoaperturevalue"), Property::PhotoApertureValue },
703 { QStringLiteral(
"photoexposurebiasvalue"), Property::PhotoExposureBiasValue },
704 { QStringLiteral(
"photowhitebalance"), Property::PhotoWhiteBalance },
705 { QStringLiteral(
"photometeringmode"), Property::PhotoMeteringMode },
706 { QStringLiteral(
"photoisospeedratings"), Property::PhotoISOSpeedRatings },
707 { QStringLiteral(
"photosaturation"), Property::PhotoSaturation },
708 { QStringLiteral(
"photosharpness"), Property::PhotoSharpness },
709 { QStringLiteral(
"photogpslatitude"), Property::PhotoGpsLatitude },
710 { QStringLiteral(
"photogpslongitude"), Property::PhotoGpsLongitude },
711 { QStringLiteral(
"photogpsaltitude"), Property::PhotoGpsAltitude },
712 { QStringLiteral(
"translationunitstotal"), Property::TranslationUnitsTotal },
713 { QStringLiteral(
"translationunitswithtranslation"), Property::TranslationUnitsWithTranslation },
714 { QStringLiteral(
"translationunitswithdrafttranslation"), Property::TranslationUnitsWithDraftTranslation },
715 { QStringLiteral(
"translationlastauthor"), Property::TranslationLastAuthor },
716 { QStringLiteral(
"translationlastupdate"), Property::TranslationLastUpDate },
717 { QStringLiteral(
"translationtemplatedate"), Property::TranslationTemplateDate },
718 { QStringLiteral(
"originurl"), Property::OriginUrl },
719 { QStringLiteral(
"originemailsubject"), Property::OriginEmailSubject },
720 { QStringLiteral(
"originemailsender"), Property::OriginEmailSender },
721 { QStringLiteral(
"originemailmessageid"), Property::OriginEmailMessageId }