1 #include "track/trackinfo.h"
2
3
4 namespace mixxx {
5
6 namespace {
7
8 const QString kArtistTitleSeparatorWithSpaces = QStringLiteral(" - ");
9 const QString kArtistTitleSeparator = QStringLiteral("_-_");
10
11 const QChar kFileExtensionSeparator = '.';
12
13 } // anonymous namespace
14
parseArtistTitleFromFileName(QString fileName,bool splitArtistTitle)15 bool TrackInfo::parseArtistTitleFromFileName(
16 QString fileName,
17 bool splitArtistTitle) {
18 bool modified = false;
19 fileName = fileName.trimmed();
20 auto titleWithFileType = fileName;
21 if (splitArtistTitle) {
22 fileName.replace(kArtistTitleSeparatorWithSpaces, kArtistTitleSeparator);
23 if (fileName.count(kArtistTitleSeparator) == 1) {
24 auto artist = fileName.section(kArtistTitleSeparator, 0, 0).trimmed();
25 if (!artist.isEmpty()) {
26 setArtist(artist);
27 modified = true;
28 }
29 titleWithFileType = fileName.section(kArtistTitleSeparator, 1).trimmed();
30 }
31 }
32 auto title = titleWithFileType;
33 if (titleWithFileType.contains(kFileExtensionSeparator)) {
34 // Strip file extension starting at the right-most '.'
35 title = titleWithFileType.section(kFileExtensionSeparator, 0, -2);
36 }
37 title = title.trimmed();
38 if (!title.isEmpty()) {
39 setTitle(title);
40 modified = true;
41 }
42 return modified;
43 }
44
compareEq(const TrackInfo & trackInfo,Bpm::Comparison cmpBpm) const45 bool TrackInfo::compareEq(
46 const TrackInfo& trackInfo,
47 Bpm::Comparison cmpBpm) const {
48 return (getArtist() == trackInfo.getArtist()) &&
49 getBpm().compareEq(trackInfo.getBpm(), cmpBpm) &&
50 (getComment() == trackInfo.getComment()) &&
51 (getComposer() == trackInfo.getComposer()) &&
52 #if defined(__EXTRA_METADATA__)
53 (getConductor() == trackInfo.getConductor()) &&
54 (getDiscNumber() == trackInfo.getDiscNumber()) &&
55 (getDiscTotal() == trackInfo.getDiscTotal()) &&
56 (getEncoder() == trackInfo.getEncoder()) &&
57 (getEncoderSettings() == trackInfo.getEncoderSettings()) &&
58 #endif // __EXTRA_METADATA__
59 (getGenre() == trackInfo.getGenre()) &&
60 (getGrouping() == trackInfo.getGrouping()) &&
61 #if defined(__EXTRA_METADATA__)
62 (getISRC() == trackInfo.getISRC()) &&
63 #endif // __EXTRA_METADATA__
64 (getKey() == trackInfo.getKey()) &&
65 #if defined(__EXTRA_METADATA__)
66 (getLanguage() == trackInfo.getLanguage()) &&
67 (getLyricist() == trackInfo.getLyricist()) &&
68 (getMood() == trackInfo.getMood()) &&
69 (getMovement() == trackInfo.getMovement()) &&
70 (getMusicBrainzArtistId() == trackInfo.getMusicBrainzArtistId()) &&
71 (getMusicBrainzRecordingId() == trackInfo.getMusicBrainzRecordingId()) &&
72 (getMusicBrainzReleaseId() == trackInfo.getMusicBrainzReleaseId()) &&
73 (getMusicBrainzWorkId() == trackInfo.getMusicBrainzWorkId()) &&
74 (getRemixer() == trackInfo.getRemixer()) &&
75 #endif // __EXTRA_METADATA__
76 (getReplayGain() == trackInfo.getReplayGain()) &&
77 (getSeratoTags() == trackInfo.getSeratoTags()) &&
78 #if defined(__EXTRA_METADATA__)
79 (getSubtitle() == trackInfo.getSubtitle()) &&
80 #endif // __EXTRA_METADATA__
81 (getTitle() == trackInfo.getTitle()) &&
82 (getTrackNumber() == trackInfo.getTrackNumber()) &&
83 (getTrackTotal() == trackInfo.getTrackTotal()) &&
84 #if defined(__EXTRA_METADATA__)
85 (getWork() == trackInfo.getWork()) &&
86 #endif // __EXTRA_METADATA__
87 (getYear() == trackInfo.getYear());
88 }
89
operator <<(QDebug dbg,const TrackInfo & arg)90 QDebug operator<<(QDebug dbg, const TrackInfo& arg) {
91 dbg << "TrackInfo{";
92 arg.dbgArtist(dbg);
93 arg.dbgBpm(dbg);
94 arg.dbgComment(dbg);
95 arg.dbgComposer(dbg);
96 #if defined(__EXTRA_METADATA__)
97 arg.dbgConductor(dbg);
98 arg.dbgDiscNumber(dbg);
99 arg.dbgDiscTotal(dbg);
100 arg.dbgEncoder(dbg);
101 arg.dbgEncoderSettings(dbg);
102 #endif // __EXTRA_METADATA__
103 arg.dbgGenre(dbg);
104 arg.dbgGrouping(dbg);
105 #if defined(__EXTRA_METADATA__)
106 arg.dbgISRC(dbg);
107 #endif // __EXTRA_METADATA__
108 arg.dbgKey(dbg);
109 #if defined(__EXTRA_METADATA__)
110 arg.dbgLanguage(dbg);
111 arg.dbgLyricist(dbg);
112 arg.dbgMood(dbg);
113 arg.dbgMovement(dbg);
114 arg.dbgMusicBrainzArtistId(dbg);
115 arg.dbgMusicBrainzRecordingId(dbg);
116 arg.dbgMusicBrainzReleaseId(dbg);
117 arg.dbgMusicBrainzWorkId(dbg);
118 arg.dbgRemixer(dbg);
119 #endif // __EXTRA_METADATA__
120 arg.dbgReplayGain(dbg);
121 arg.dbgSeratoTags(dbg);
122 #if defined(__EXTRA_METADATA__)
123 arg.dbgSubtitle(dbg);
124 #endif // __EXTRA_METADATA__
125 arg.dbgTitle(dbg);
126 arg.dbgTrackNumber(dbg);
127 arg.dbgTrackTotal(dbg);
128 #if defined(__EXTRA_METADATA__)
129 arg.dbgWork(dbg);
130 #endif // __EXTRA_METADATA__
131 arg.dbgYear(dbg);
132 dbg << '}';
133 return dbg;
134 }
135
136 } // namespace mixxx
137