Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions res/schema.xml
Original file line number Diff line number Diff line change
Expand Up @@ -584,4 +584,12 @@ reapplying those migrations.
UPDATE library SET filetype='aiff' WHERE filetype='aif';
</sql>
</revision>
<revision version="40" min_compatible="3">
<description>
Add catalogue_number column to library table.
</description>
<sql>
ALTER TABLE library ADD COLUMN catalogue_number TEXT DEFAULT '';
</sql>
</revision>
</schema>
2 changes: 2 additions & 0 deletions src/library/basesqltablemodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -722,6 +722,8 @@ bool BaseSqlTableModel::setTrackValueForColumn(
pTrack->setAlbum(value.toString());
} else if (fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_ALBUMARTIST) == column) {
pTrack->setAlbumArtist(value.toString());
} else if (fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_CATALOGUENUMBER) == column) {
pTrack->setCatalogueNumber(value.toString());
} else if (fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_YEAR) == column) {
pTrack->setYear(value.toString());
} else if (fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_GENRE) == column) {
Expand Down
3 changes: 3 additions & 0 deletions src/library/columncache.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,9 @@ constexpr ColumnProperties kColumnPropertiesByEnum[] = {
DI(ColumnCache::COLUMN_LIBRARYTABLE_LAST_PLAYED_AT){&LIBRARYTABLE_LAST_PLAYED_AT,
QT_TRANSLATE_NOOP("BaseTrackTableModel", "Last Played"),
kDefaultColumnWidth * 3},
DI(ColumnCache::COLUMN_LIBRARYTABLE_CATALOGUENUMBER){&LIBRARYTABLE_CATALOGUENUMBER,
QT_TRANSLATE_NOOP("BaseTrackTableModel", "Catalogue #"),
kDefaultColumnWidth * 2},
DI(ColumnCache::COLUMN_TRACKLOCATIONSTABLE_LOCATION){&TRACKLOCATIONSTABLE_LOCATION,
QT_TRANSLATE_NOOP("BaseTrackTableModel", "Location"),
kDefaultColumnWidth * 6},
Expand Down
1 change: 1 addition & 0 deletions src/library/columncache.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ class ColumnCache : public QObject {
COLUMN_LIBRARYTABLE_COVERART_DIGEST,
COLUMN_LIBRARYTABLE_COVERART_HASH,
COLUMN_LIBRARYTABLE_LAST_PLAYED_AT,
COLUMN_LIBRARYTABLE_CATALOGUENUMBER,

COLUMN_TRACKLOCATIONSTABLE_LOCATION,
COLUMN_TRACKLOCATIONSTABLE_FSDELETED,
Expand Down
9 changes: 9 additions & 0 deletions src/library/dao/trackdao.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -442,6 +442,7 @@ void TrackDAO::addTracksPrepare() {
"title,"
"album,"
"album_artist,"
"catalogue_number,"
"year,"
"genre,"
"tracknumber,"
Expand Down Expand Up @@ -490,6 +491,7 @@ void TrackDAO::addTracksPrepare() {
":title,"
":album,"
":album_artist,"
":catalogue_number,"
":year,"
":genre,"
":tracknumber,"
Expand Down Expand Up @@ -595,6 +597,7 @@ void bindTrackLibraryValues(
pTrackLibraryQuery->bindValue(":title", trackInfo.getTitle());
pTrackLibraryQuery->bindValue(":album", albumInfo.getTitle());
pTrackLibraryQuery->bindValue(":album_artist", albumInfo.getArtist());
pTrackLibraryQuery->bindValue(":catalogue_number", albumInfo.getCatalogueNumber());
pTrackLibraryQuery->bindValue(":year", trackInfo.getYear());
pTrackLibraryQuery->bindValue(":genre", trackInfo.getGenre());
pTrackLibraryQuery->bindValue(":composer", trackInfo.getComposer());
Expand Down Expand Up @@ -1170,6 +1173,10 @@ void setTrackAlbumArtist(const QSqlRecord& record, const int column, Track* pTra
pTrack->setAlbumArtist(record.value(column).toString());
}

void setTrackCatalogueNumber(const QSqlRecord& record, const int column, Track* pTrack) {
pTrack->setCatalogueNumber(record.value(column).toString());
}

void setTrackYear(const QSqlRecord& record, const int column, Track* pTrack) {
pTrack->setYear(record.value(column).toString());
}
Expand Down Expand Up @@ -1388,6 +1395,7 @@ TrackPointer TrackDAO::getTrackById(TrackId trackId) const {
{"title", setTrackTitle},
{"album", setTrackAlbum},
{"album_artist", setTrackAlbumArtist},
{"catalogue_number", setTrackCatalogueNumber},
{"year", setTrackYear},
{"genre", setTrackGenre},
{"composer", setTrackComposer},
Expand Down Expand Up @@ -1697,6 +1705,7 @@ bool TrackDAO::updateTrack(const Track& track) const {
"title=:title,"
"album=:album,"
"album_artist=:album_artist,"
"catalogue_number=:catalogue_number,"
"year=:year,"
"genre=:genre,"
"composer=:composer,"
Expand Down
1 change: 1 addition & 0 deletions src/library/dao/trackschema.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ const QString LIBRARYTABLE_ARTIST = QStringLiteral("artist");
const QString LIBRARYTABLE_TITLE = QStringLiteral("title");
const QString LIBRARYTABLE_ALBUM = QStringLiteral("album");
const QString LIBRARYTABLE_ALBUMARTIST = QStringLiteral("album_artist");
const QString LIBRARYTABLE_CATALOGUENUMBER = QStringLiteral("catalogue_number");
const QString LIBRARYTABLE_YEAR = QStringLiteral("year");
const QString LIBRARYTABLE_GENRE = QStringLiteral("genre");
const QString LIBRARYTABLE_COMPOSER = QStringLiteral("composer");
Expand Down
1 change: 1 addition & 0 deletions src/library/trackmodel.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ class TrackModel {
Color = 30,
LastPlayedAt = 31,
PlaylistDateTimeAdded = 32,
CatalogueNumber = 33,

// IdMax terminates the list of columns, it must be always after the last item
IdMax,
Expand Down
2 changes: 2 additions & 0 deletions src/track/albuminfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ namespace mixxx {

bool operator==(const AlbumInfo& lhs, const AlbumInfo& rhs) {
return (lhs.getArtist() == rhs.getArtist()) &&
(lhs.getCatalogueNumber() == rhs.getCatalogueNumber()) &&
#if defined(__EXTRA_METADATA__)
(lhs.getCopyright() == rhs.getCopyright()) &&
(lhs.getLicense() == rhs.getLicense()) &&
Expand All @@ -20,6 +21,7 @@ bool operator==(const AlbumInfo& lhs, const AlbumInfo& rhs) {
QDebug operator<<(QDebug dbg, const AlbumInfo& arg) {
dbg << "AlbumInfo{";
arg.dbgArtist(dbg);
arg.dbgCatalogueNumber(dbg);
#if defined(__EXTRA_METADATA__)
arg.dbgCopyright(dbg);
arg.dbgLicense(dbg);
Expand Down
1 change: 1 addition & 0 deletions src/track/albuminfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ namespace mixxx {
class AlbumInfo final {
// Properties in alphabetical order
MIXXX_DECL_PROPERTY(QString, artist, Artist)
MIXXX_DECL_PROPERTY(QString, catalogueNumber, CatalogueNumber)
#if defined(__EXTRA_METADATA__)
MIXXX_DECL_PROPERTY(QString, copyright, Copyright)
MIXXX_DECL_PROPERTY(QString, license, License)
Expand Down
7 changes: 7 additions & 0 deletions src/track/taglib/trackmetadata_ape.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,12 @@ void importTrackMetadataFromTag(
resetMissingTagMetadata) {
pTrackMetadata->refAlbumInfo().setRecordLabel(recordLabel);
}
QString catalogueNumber;
if (readItem(tag, "CatalogNumber", &catalogueNumber) ||
readItem(tag, "CATALOGNUMBER", &catalogueNumber) ||
resetMissingTagMetadata) {
pTrackMetadata->refAlbumInfo().setCatalogueNumber(catalogueNumber);
}
QString subtitle;
if (readItem(tag, "Subtitle", &subtitle) ||
readItem(tag, "SUBTITLE", &subtitle) ||
Expand Down Expand Up @@ -344,6 +350,7 @@ bool exportTrackMetadataIntoTag(TagLib::APE::Tag* pTag, const TrackMetadata& tra
writeItem(pTag, "Copyright", toTString(trackMetadata.getAlbumInfo().getCopyright()));
writeItem(pTag, "LICENSE", toTString(trackMetadata.getAlbumInfo().getLicense()));
writeItem(pTag, "Label", toTString(trackMetadata.getAlbumInfo().getRecordLabel()));
writeItem(pTag, "CatalogNumber", toTString(trackMetadata.getAlbumInfo().getCatalogueNumber()));
writeItem(pTag, "MixArtist", toTString(trackMetadata.getTrackInfo().getRemixer()));
writeItem(pTag, "Subtitle", toTString(trackMetadata.getTrackInfo().getSubtitle()));
writeItem(pTag, "EncodedBy", toTString(trackMetadata.getTrackInfo().getEncoder()));
Expand Down
12 changes: 12 additions & 0 deletions src/track/taglib/trackmetadata_id3v2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1029,6 +1029,13 @@ void importTrackMetadataFromTag(
pTrackMetadata->refAlbumInfo().setRecordLabel(
firstNonEmptyFrameToQString(recordLabelFrames));
}
QString catalogueNumber =
readFirstUserTextIdentificationFrame(
tag,
QStringLiteral("CATALOGNUMBER"));
if (!catalogueNumber.isEmpty() || resetMissingTagMetadata) {
pTrackMetadata->refAlbumInfo().setCatalogueNumber(catalogueNumber);
}
const TagLib::ID3v2::FrameList remixerFrames(tag.frameListMap()["TPE4"]);
if (!remixerFrames.isEmpty() || resetMissingTagMetadata) {
pTrackMetadata->refTrackInfo().setRemixer(
Expand Down Expand Up @@ -1317,6 +1324,11 @@ bool exportTrackMetadataIntoTag(TagLib::ID3v2::Tag* pTag,
pTag,
"TPUB",
trackMetadata.getAlbumInfo().getRecordLabel());
writeUserTextIdentificationFrame(
pTag,
"CATALOGNUMBER",
trackMetadata.getAlbumInfo().getCatalogueNumber(),
false);
writeTextIdentificationFrame(
pTag,
"TPE4",
Expand Down
5 changes: 5 additions & 0 deletions src/track/taglib/trackmetadata_mp4.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -327,6 +327,10 @@ void importTrackMetadataFromTag(
if (readAtom(tag, "----:com.apple.iTunes:LABEL", &recordLabel) || resetMissingTagMetadata) {
pTrackMetadata->refAlbumInfo().setRecordLabel(recordLabel);
}
QString catalogueNumber;
if (readAtom(tag, "----:com.apple.iTunes:CATALOGNUMBER", &catalogueNumber) || resetMissingTagMetadata) {
pTrackMetadata->refAlbumInfo().setCatalogueNumber(catalogueNumber);
}
QString remixer;
if (readAtom(tag, "----:com.apple.iTunes:REMIXER", &remixer) || resetMissingTagMetadata) {
pTrackMetadata->refTrackInfo().setRemixer(remixer);
Expand Down Expand Up @@ -486,6 +490,7 @@ bool exportTrackMetadataIntoTag(
writeAtom(pTag, "cprt", toTString(trackMetadata.getAlbumInfo().getCopyright()));
writeAtom(pTag, "----:com.apple.iTunes:LICENSE", toTString(trackMetadata.getAlbumInfo().getLicense()));
writeAtom(pTag, "----:com.apple.iTunes:LABEL", toTString(trackMetadata.getAlbumInfo().getRecordLabel()));
writeAtom(pTag, "----:com.apple.iTunes:CATALOGNUMBER", toTString(trackMetadata.getAlbumInfo().getCatalogueNumber()));
writeAtom(pTag, "----:com.apple.iTunes:REMIXER", toTString(trackMetadata.getTrackInfo().getRemixer()));
writeAtom(pTag, "----:com.apple.iTunes:SUBTITLE", toTString(trackMetadata.getTrackInfo().getSubtitle()));
writeAtom(pTag, "\251too", toTString(trackMetadata.getTrackInfo().getEncoder()));
Expand Down
5 changes: 5 additions & 0 deletions src/track/taglib/trackmetadata_xiph.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -466,6 +466,10 @@ void importTrackMetadataFromTag(
if (readCommentField(tag, "LABEL", &recordLabel) || resetMissingTagMetadata) {
pTrackMetadata->refAlbumInfo().setRecordLabel(recordLabel);
}
QString catalogueNumber;
if (readCommentField(tag, "CATALOGNUMBER", &catalogueNumber) || resetMissingTagMetadata) {
pTrackMetadata->refAlbumInfo().setCatalogueNumber(catalogueNumber);
}
QString remixer;
if (readCommentField(tag, "REMIXER", &remixer) || resetMissingTagMetadata) {
pTrackMetadata->refTrackInfo().setRemixer(remixer);
Expand Down Expand Up @@ -610,6 +614,7 @@ bool exportTrackMetadataIntoTag(
writeCommentField(pTag, "COPYRIGHT", toTString(trackMetadata.getAlbumInfo().getCopyright()));
writeCommentField(pTag, "LICENSE", toTString(trackMetadata.getAlbumInfo().getLicense()));
writeCommentField(pTag, "LABEL", toTString(trackMetadata.getAlbumInfo().getRecordLabel()));
writeCommentField(pTag, "CATALOGNUMBER", toTString(trackMetadata.getAlbumInfo().getCatalogueNumber()));
writeCommentField(pTag, "REMIXER", toTString(trackMetadata.getTrackInfo().getRemixer()));
writeCommentField(pTag, "SUBTITLE", toTString(trackMetadata.getTrackInfo().getSubtitle()));
writeCommentField(pTag, "ENCODEDBY", toTString(trackMetadata.getTrackInfo().getEncoder()));
Expand Down
13 changes: 13 additions & 0 deletions src/track/track.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -694,6 +694,19 @@ void Track::setAlbumArtist(const QString& s) {
}
}

QString Track::getCatalogueNumber() const {
const auto locked = lockMutex(&m_qMutex);
return m_record.getMetadata().getAlbumInfo().getCatalogueNumber();
}

void Track::setCatalogueNumber(const QString& s) {
auto locked = lockMutex(&m_qMutex);
const QString value = s.trimmed();
if (compareAndSet(m_record.refMetadata().refAlbumInfo().ptrCatalogueNumber(), value)) {
markDirtyAndUnlock(&locked);
}
}

QString Track::getYear() const {
const auto locked = lockMutex(&m_qMutex);
return m_record.getMetadata().getTrackInfo().getYear();
Expand Down
2 changes: 2 additions & 0 deletions src/track/track.h
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,8 @@ class Track : public QObject {
void setAlbum(const QString&);
QString getAlbumArtist() const;
void setAlbumArtist(const QString&);
QString getCatalogueNumber() const;
void setCatalogueNumber(const QString&);

// Returns the content of the year library column.
// This was original only the four digit (gregorian) calendar year of the release date
Expand Down
Loading