Skip to content

Commit c51bdb5

Browse files
author
Milkii Brewster
committed
add catalogue number library column and metadata support
implements support for catalogue number metadata field and library column: - adds CatalogueNumber property to AlbumInfo (always enabled, not behind __EXTRA_METADATA__) - adds database schema migration (revision 41) for catalogue_number column - implements tag reading/writing for ID3v2 (TXXX:CATALOGNUMBER), Vorbis (CATALOGNUMBER), MP4 (----:com.apple.iTunes:CATALOGNUMBER), and APEv2 (CatalogNumber) - adds Track getter/setter methods for catalogue number - updates TrackDAO for database persistence (INSERT, UPDATE, SELECT) - adds library column with sorting and display support - column is editable in library view uses existing TagLib wrapper functions and Mixxx metadata infrastructure. follows MusicBrainz Picard tag mapping conventions for catalogue number field. Fixes #12583
1 parent c78840f commit c51bdb5

16 files changed

Lines changed: 78 additions & 1 deletion

res/schema.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -593,4 +593,12 @@ reapplying those migrations.
593593
ALTER TABLE library ADD COLUMN tuning_frequency_hz FLOAT DEFAULT 0.0;
594594
</sql>
595595
</revision>
596+
<revision version="41" min_compatible="3">
597+
<description>
598+
Add catalogue_number column to library table.
599+
</description>
600+
<sql>
601+
ALTER TABLE library ADD COLUMN catalogue_number TEXT DEFAULT '';
602+
</sql>
603+
</revision>
596604
</schema>

src/database/mixxxdb.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
const QString MixxxDb::kDefaultSchemaFile(":/schema.xml");
1515

1616
//static
17-
const int MixxxDb::kRequiredSchemaVersion = 40;
17+
const int MixxxDb::kRequiredSchemaVersion = 41;
1818

1919
namespace {
2020

src/library/basesqltablemodel.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -722,6 +722,8 @@ bool BaseSqlTableModel::setTrackValueForColumn(
722722
pTrack->setAlbum(value.toString());
723723
} else if (fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_ALBUMARTIST) == column) {
724724
pTrack->setAlbumArtist(value.toString());
725+
} else if (fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_CATALOGUENUMBER) == column) {
726+
pTrack->setCatalogueNumber(value.toString());
725727
} else if (fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_YEAR) == column) {
726728
pTrack->setYear(value.toString());
727729
} else if (fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_GENRE) == column) {

src/library/columncache.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,9 @@ constexpr ColumnProperties kColumnPropertiesByEnum[] = {
164164
DI(ColumnCache::COLUMN_LIBRARYTABLE_LAST_PLAYED_AT){&LIBRARYTABLE_LAST_PLAYED_AT,
165165
QT_TRANSLATE_NOOP("BaseTrackTableModel", "Last Played"),
166166
kDefaultColumnWidth * 3},
167+
DI(ColumnCache::COLUMN_LIBRARYTABLE_CATALOGUENUMBER){&LIBRARYTABLE_CATALOGUENUMBER,
168+
QT_TRANSLATE_NOOP("BaseTrackTableModel", "Catalogue #"),
169+
kDefaultColumnWidth * 2},
167170
DI(ColumnCache::COLUMN_TRACKLOCATIONSTABLE_LOCATION){&TRACKLOCATIONSTABLE_LOCATION,
168171
QT_TRANSLATE_NOOP("BaseTrackTableModel", "Location"),
169172
kDefaultColumnWidth * 6},

src/library/columncache.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ class ColumnCache : public QObject {
5858
COLUMN_LIBRARYTABLE_COVERART_DIGEST,
5959
COLUMN_LIBRARYTABLE_COVERART_HASH,
6060
COLUMN_LIBRARYTABLE_LAST_PLAYED_AT,
61+
COLUMN_LIBRARYTABLE_CATALOGUENUMBER,
6162

6263
COLUMN_TRACKLOCATIONSTABLE_LOCATION,
6364
COLUMN_TRACKLOCATIONSTABLE_DIRECTORY,

src/library/dao/trackdao.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,7 @@ void TrackDAO::addTracksPrepare() {
442442
"title,"
443443
"album,"
444444
"album_artist,"
445+
"catalogue_number,"
445446
"year,"
446447
"genre,"
447448
"tracknumber,"
@@ -491,6 +492,7 @@ void TrackDAO::addTracksPrepare() {
491492
":title,"
492493
":album,"
493494
":album_artist,"
495+
":catalogue_number,"
494496
":year,"
495497
":genre,"
496498
":tracknumber,"
@@ -597,6 +599,7 @@ void bindTrackLibraryValues(
597599
pTrackLibraryQuery->bindValue(":title", trackInfo.getTitle());
598600
pTrackLibraryQuery->bindValue(":album", albumInfo.getTitle());
599601
pTrackLibraryQuery->bindValue(":album_artist", albumInfo.getArtist());
602+
pTrackLibraryQuery->bindValue(":catalogue_number", albumInfo.getCatalogueNumber());
600603
pTrackLibraryQuery->bindValue(":year", trackInfo.getYear());
601604
pTrackLibraryQuery->bindValue(":genre", trackInfo.getGenre());
602605
pTrackLibraryQuery->bindValue(":composer", trackInfo.getComposer());
@@ -1174,6 +1177,10 @@ void setTrackAlbumArtist(const QSqlRecord& record, const int column, Track* pTra
11741177
pTrack->setAlbumArtist(record.value(column).toString());
11751178
}
11761179

1180+
void setTrackCatalogueNumber(const QSqlRecord& record, const int column, Track* pTrack) {
1181+
pTrack->setCatalogueNumber(record.value(column).toString());
1182+
}
1183+
11771184
void setTrackYear(const QSqlRecord& record, const int column, Track* pTrack) {
11781185
pTrack->setYear(record.value(column).toString());
11791186
}
@@ -1392,6 +1399,7 @@ TrackPointer TrackDAO::getTrackById(TrackId trackId) const {
13921399
{"title", setTrackTitle},
13931400
{"album", setTrackAlbum},
13941401
{"album_artist", setTrackAlbumArtist},
1402+
{"catalogue_number", setTrackCatalogueNumber},
13951403
{"year", setTrackYear},
13961404
{"genre", setTrackGenre},
13971405
{"composer", setTrackComposer},
@@ -1700,6 +1708,7 @@ bool TrackDAO::updateTrack(const Track& track) const {
17001708
"title=:title,"
17011709
"album=:album,"
17021710
"album_artist=:album_artist,"
1711+
"catalogue_number=:catalogue_number,"
17031712
"year=:year,"
17041713
"genre=:genre,"
17051714
"composer=:composer,"

src/library/dao/trackschema.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ const QString LIBRARYTABLE_ARTIST = QStringLiteral("artist");
1515
const QString LIBRARYTABLE_TITLE = QStringLiteral("title");
1616
const QString LIBRARYTABLE_ALBUM = QStringLiteral("album");
1717
const QString LIBRARYTABLE_ALBUMARTIST = QStringLiteral("album_artist");
18+
const QString LIBRARYTABLE_CATALOGUENUMBER = QStringLiteral("catalogue_number");
1819
const QString LIBRARYTABLE_YEAR = QStringLiteral("year");
1920
const QString LIBRARYTABLE_GENRE = QStringLiteral("genre");
2021
const QString LIBRARYTABLE_COMPOSER = QStringLiteral("composer");

src/library/trackmodel.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ class TrackModel {
9797
LastPlayedAt = 31,
9898
PlaylistDateTimeAdded = 32,
9999
TuningFrequency = 33,
100+
CatalogueNumber = 34,
100101

101102
// IdMax terminates the list of columns, it must be always after the last item
102103
IdMax,

src/track/albuminfo.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ namespace mixxx {
55

66
bool operator==(const AlbumInfo& lhs, const AlbumInfo& rhs) {
77
return (lhs.getArtist() == rhs.getArtist()) &&
8+
(lhs.getCatalogueNumber() == rhs.getCatalogueNumber()) &&
89
#if defined(__EXTRA_METADATA__)
910
(lhs.getCopyright() == rhs.getCopyright()) &&
1011
(lhs.getLicense() == rhs.getLicense()) &&
@@ -20,6 +21,7 @@ bool operator==(const AlbumInfo& lhs, const AlbumInfo& rhs) {
2021
QDebug operator<<(QDebug dbg, const AlbumInfo& arg) {
2122
dbg << "AlbumInfo{";
2223
arg.dbgArtist(dbg);
24+
arg.dbgCatalogueNumber(dbg);
2325
#if defined(__EXTRA_METADATA__)
2426
arg.dbgCopyright(dbg);
2527
arg.dbgLicense(dbg);

src/track/albuminfo.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ namespace mixxx {
1313
class AlbumInfo final {
1414
// Properties in alphabetical order
1515
MIXXX_DECL_PROPERTY(QString, artist, Artist)
16+
MIXXX_DECL_PROPERTY(QString, catalogueNumber, CatalogueNumber)
1617
#if defined(__EXTRA_METADATA__)
1718
MIXXX_DECL_PROPERTY(QString, copyright, Copyright)
1819
MIXXX_DECL_PROPERTY(QString, license, License)

0 commit comments

Comments
 (0)