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