Skip to content

Commit 4ab1375

Browse files
committed
fixup! chore: update rekordbox kaitai definitions
1 parent 9854cac commit 4ab1375

1 file changed

Lines changed: 62 additions & 99 deletions

File tree

src/library/rekordbox/rekordboxfeature.cpp

Lines changed: 62 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include <QMap>
66
#include <QMessageBox>
77
#include <QSettings>
8+
#include <QString>
89
#include <QTextCodec>
910
#include <QtDebug>
1011

@@ -274,9 +275,9 @@ QString getText(rekordbox_pdb_t::device_sql_string_t* deviceString) {
274275
rekordbox_pdb_t::device_sql_long_ascii_t* longAsciiString =
275276
static_cast<rekordbox_pdb_t::device_sql_long_ascii_t*>(deviceString->body());
276277
text = QString::fromStdString(longAsciiString->text());
277-
} else if (instanceof <rekordbox_pdb_t::device_sql_long_utf16be_t>(deviceString->body())) {
278-
rekordbox_pdb_t::device_sql_long_utf16be_t* longUtf16beString =
279-
static_cast<rekordbox_pdb_t::device_sql_long_utf16be_t*>(deviceString->body());
278+
} else if (instanceof <rekordbox_pdb_t::device_sql_long_utf16le_t>(deviceString->body())) {
279+
rekordbox_pdb_t::device_sql_long_utf16le_t* longUtf16beString =
280+
static_cast<rekordbox_pdb_t::device_sql_long_utf16le_t*>(deviceString->body());
280281
text = toUnicode(longUtf16beString->text());
281282
}
282283

@@ -490,7 +491,7 @@ QString parseDeviceDB(mixxx::DbConnectionPoolPtr dbConnectionPool, TreeItem* dev
490491
std::ifstream ifs(dbPath.toStdString(), std::ifstream::binary);
491492
kaitai::kstream ks(&ifs);
492493

493-
rekordbox_pdb_t reckordboxDB = rekordbox_pdb_t(&ks);
494+
rekordbox_pdb_t rekordboxDB = rekordbox_pdb_t(&ks);
494495

495496
// There are other types of tables (eg. COLOR), these are the only ones we are
496497
// interested at the moment. Perhaps when/if
@@ -523,82 +524,57 @@ QString parseDeviceDB(mixxx::DbConnectionPoolPtr dbConnectionPool, TreeItem* dev
523524
bool folderOrPlaylistFound = false;
524525

525526
for (int tableOrderIndex = 0; tableOrderIndex < totalTables; tableOrderIndex++) {
526-
for (std::vector<rekordbox_pdb_t::table_t*>::iterator table =
527-
reckordboxDB.tables()->begin();
528-
table != reckordboxDB.tables()->end();
529-
++table) {
530-
if ((*table)->type() == tableOrder[tableOrderIndex]) {
531-
uint16_t lastIndex = (*table)->last_page()->index();
532-
rekordbox_pdb_t::page_ref_t* currentRef = (*table)->first_page();
527+
for (const auto& table : *rekordboxDB.tables()) {
528+
if (table->type() == tableOrder[tableOrderIndex]) {
529+
uint16_t lastIndex = table->last_page()->index();
530+
rekordbox_pdb_t::page_ref_t* currentRef = table->first_page();
533531

534532
while (true) {
535533
rekordbox_pdb_t::page_t* page = currentRef->body();
536534

537535
if (page->is_data_page()) {
538-
for (std::vector<rekordbox_pdb_t::row_group_t*>::
539-
iterator rowGroup =
540-
page->row_groups()->begin();
541-
rowGroup != page->row_groups()->end();
542-
++rowGroup) {
543-
for (std::vector<rekordbox_pdb_t::row_ref_t*>::
544-
iterator rowRef = (*rowGroup)
545-
->rows()
546-
->begin();
547-
rowRef != (*rowGroup)->rows()->end();
548-
++rowRef) {
549-
if ((*rowRef)->present()) {
536+
for (const auto& rowgroup : *page->row_groups()) {
537+
for (const auto& rowRef : *rowgroup->rows()) {
538+
if (rowRef->present()) {
550539
switch (tableOrder[tableOrderIndex]) {
551540
case rekordbox_pdb_t::PAGE_TYPE_KEYS: {
552-
// Key found, update map
553-
rekordbox_pdb_t::key_row_t* key =
554-
static_cast<rekordbox_pdb_t::
555-
key_row_t*>(
556-
(*rowRef)->body());
541+
auto* key =
542+
static_cast<rekordbox_pdb_t::key_row_t*>(
543+
rowRef->body());
557544
keysMap[key->id()] = getText(key->name());
558545
} break;
559546
case rekordbox_pdb_t::PAGE_TYPE_GENRES: {
560-
// Genre found, update map
561-
rekordbox_pdb_t::genre_row_t* genre =
562-
static_cast<rekordbox_pdb_t::
563-
genre_row_t*>(
564-
(*rowRef)->body());
547+
auto* genre =
548+
static_cast<rekordbox_pdb_t::genre_row_t*>(
549+
rowRef->body());
565550
genresMap[genre->id()] = getText(genre->name());
566551
} break;
567552
case rekordbox_pdb_t::PAGE_TYPE_ARTISTS: {
568-
// Artist found, update map
569-
rekordbox_pdb_t::artist_row_t* artist =
570-
static_cast<rekordbox_pdb_t::
571-
artist_row_t*>(
572-
(*rowRef)->body());
553+
auto* artist =
554+
static_cast<rekordbox_pdb_t::artist_row_t*>(
555+
rowRef->body());
573556
artistsMap[artist->id()] = getText(artist->name());
574557
} break;
575558
case rekordbox_pdb_t::PAGE_TYPE_ALBUMS: {
576-
// Album found, update map
577-
rekordbox_pdb_t::album_row_t* album =
578-
static_cast<rekordbox_pdb_t::
579-
album_row_t*>(
580-
(*rowRef)->body());
559+
auto* album =
560+
static_cast<rekordbox_pdb_t::album_row_t*>(
561+
rowRef->body());
581562
albumsMap[album->id()] = getText(album->name());
582563
} break;
583564
case rekordbox_pdb_t::PAGE_TYPE_PLAYLIST_ENTRIES: {
584-
// Playlist to track mapping found, update map
585-
rekordbox_pdb_t::playlist_entry_row_t*
586-
playlistEntry = static_cast<
587-
rekordbox_pdb_t::
588-
playlist_entry_row_t*>(
589-
(*rowRef)->body());
565+
auto* playlistEntry =
566+
static_cast<rekordbox_pdb_t::playlist_entry_row_t*>(
567+
rowRef->body());
590568
playlistTrackMap
591569
[playlistEntry->playlist_id()]
592570
[playlistEntry->entry_index()] =
593571
playlistEntry
594572
->track_id();
595573
} break;
596574
case rekordbox_pdb_t::PAGE_TYPE_TRACKS: {
597-
// Track found, insert into database
598575
insertTrack(database,
599-
static_cast<rekordbox_pdb_t::
600-
track_row_t*>(
601-
(*rowRef)->body()),
576+
static_cast<rekordbox_pdb_t::track_row_t*>(
577+
rowRef->body()),
602578
query,
603579
queryInsertIntoDevicePlaylistTracks,
604580
artistsMap,
@@ -612,12 +588,9 @@ QString parseDeviceDB(mixxx::DbConnectionPoolPtr dbConnectionPool, TreeItem* dev
612588
audioFilesCount++;
613589
} break;
614590
case rekordbox_pdb_t::PAGE_TYPE_PLAYLIST_TREE: {
615-
// Playlist tree node found, update map
616-
rekordbox_pdb_t::playlist_tree_row_t*
617-
playlistTree = static_cast<
618-
rekordbox_pdb_t::
619-
playlist_tree_row_t*>(
620-
(*rowRef)->body());
591+
auto* playlistTree =
592+
static_cast<rekordbox_pdb_t::playlist_tree_row_t*>(
593+
rowRef->body());
621594

622595
playlistNameMap[playlistTree->id()] =
623596
getText(playlistTree->name());
@@ -632,6 +605,8 @@ QString parseDeviceDB(mixxx::DbConnectionPoolPtr dbConnectionPool, TreeItem* dev
632605
folderOrPlaylistFound = true;
633606
} break;
634607
default:
608+
// we currently don't handle any other
609+
// data, even though there is more.
635610
break;
636611
}
637612
}
@@ -909,27 +884,21 @@ void readAnalyze(TrackPointer track,
909884
QList<memory_cue_loop_t> memoryCuesAndLoops;
910885
int lastHotCueIndex = 0;
911886

912-
for (std::vector<rekordbox_anlz_t::tagged_section_t*>::iterator section =
913-
anlz.sections()->begin();
914-
section != anlz.sections()->end();
915-
++section) {
916-
switch ((*section)->fourcc()) {
887+
for (const auto& section : *anlz.sections()) {
888+
switch (section->fourcc()) {
917889
case rekordbox_anlz_t::SECTION_TAGS_BEAT_GRID: {
918890
if (!ignoreCues) {
919891
break;
920892
}
921893

922-
rekordbox_anlz_t::beat_grid_tag_t* beatGridTag =
894+
auto* beatGridTag =
923895
static_cast<rekordbox_anlz_t::beat_grid_tag_t*>(
924-
(*section)->body());
896+
section->body());
925897

926898
QVector<mixxx::audio::FramePos> beats;
927899

928-
for (std::vector<rekordbox_anlz_t::beat_grid_beat_t*>::iterator
929-
beat = beatGridTag->beats()->begin();
930-
beat != beatGridTag->beats()->end();
931-
++beat) {
932-
int time = static_cast<int>((*beat)->time()) - timingOffset;
900+
for (const auto& beat : *beatGridTag->beats()) {
901+
int time = static_cast<int>(beat->time()) - timingOffset;
933902
// Ensure no offset times are less than 1
934903
if (time < 1) {
935904
time = 1;
@@ -948,15 +917,12 @@ void readAnalyze(TrackPointer track,
948917
break;
949918
}
950919

951-
rekordbox_anlz_t::cue_tag_t* cuesTag =
920+
auto* cuesTag =
952921
static_cast<rekordbox_anlz_t::cue_tag_t*>(
953-
(*section)->body());
922+
section->body());
954923

955-
for (std::vector<rekordbox_anlz_t::cue_entry_t*>::iterator
956-
cueEntry = cuesTag->cues()->begin();
957-
cueEntry != cuesTag->cues()->end();
958-
++cueEntry) {
959-
int time = static_cast<int>((*cueEntry)->time()) - timingOffset;
924+
for (const auto& cueEntry : *cuesTag->cues()) {
925+
int time = static_cast<int>(cueEntry->time()) - timingOffset;
960926
// Ensure no offset times are less than 1
961927
if (time < 1) {
962928
time = 1;
@@ -966,7 +932,7 @@ void readAnalyze(TrackPointer track,
966932

967933
switch (cuesTag->type()) {
968934
case rekordbox_anlz_t::CUE_LIST_TYPE_MEMORY_CUES: {
969-
switch ((*cueEntry)->type()) {
935+
switch (cueEntry->type()) {
970936
case rekordbox_anlz_t::CUE_ENTRY_TYPE_MEMORY_CUE: {
971937
memory_cue_loop_t memoryCue;
972938
memoryCue.startPosition = position;
@@ -975,7 +941,7 @@ void readAnalyze(TrackPointer track,
975941
memoryCuesAndLoops << memoryCue;
976942
} break;
977943
case rekordbox_anlz_t::CUE_ENTRY_TYPE_LOOP: {
978-
int endTime = static_cast<int>((*cueEntry)->loop_time()) - timingOffset;
944+
int endTime = static_cast<int>(cueEntry->loop_time()) - timingOffset;
979945
// Ensure no offset times are less than 1
980946
if (endTime < 1) {
981947
endTime = 1;
@@ -991,7 +957,7 @@ void readAnalyze(TrackPointer track,
991957
}
992958
} break;
993959
case rekordbox_anlz_t::CUE_LIST_TYPE_HOT_CUES: {
994-
int hotCueIndex = static_cast<int>((*cueEntry)->hot_cue() - 1);
960+
int hotCueIndex = static_cast<int>(cueEntry->hot_cue() - 1);
995961
if (hotCueIndex > lastHotCueIndex) {
996962
lastHotCueIndex = hotCueIndex;
997963
}
@@ -1011,15 +977,12 @@ void readAnalyze(TrackPointer track,
1011977
break;
1012978
}
1013979

1014-
rekordbox_anlz_t::cue_extended_tag_t* cuesExtendedTag =
980+
auto* cuesExtendedTag =
1015981
static_cast<rekordbox_anlz_t::cue_extended_tag_t*>(
1016-
(*section)->body());
982+
section->body());
1017983

1018-
for (std::vector<rekordbox_anlz_t::cue_extended_entry_t*>::iterator
1019-
cueExtendedEntry = cuesExtendedTag->cues()->begin();
1020-
cueExtendedEntry != cuesExtendedTag->cues()->end();
1021-
++cueExtendedEntry) {
1022-
int time = static_cast<int>((*cueExtendedEntry)->time()) - timingOffset;
984+
for (const auto& cueExtendedEntry : *cuesExtendedTag->cues()) {
985+
int time = static_cast<int>(cueExtendedEntry->time()) - timingOffset;
1023986
// Ensure no offset times are less than 1
1024987
if (time < 1) {
1025988
time = 1;
@@ -1029,20 +992,20 @@ void readAnalyze(TrackPointer track,
1029992

1030993
switch (cuesExtendedTag->type()) {
1031994
case rekordbox_anlz_t::CUE_LIST_TYPE_MEMORY_CUES: {
1032-
switch ((*cueExtendedEntry)->type()) {
995+
switch (cueExtendedEntry->type()) {
1033996
case rekordbox_anlz_t::CUE_ENTRY_TYPE_MEMORY_CUE: {
1034997
memory_cue_loop_t memoryCue;
1035998
memoryCue.startPosition = position;
1036999
memoryCue.endPosition = mixxx::audio::kInvalidFramePos;
1037-
memoryCue.comment = toUnicode((*cueExtendedEntry)->comment());
1000+
memoryCue.comment = toUnicode(cueExtendedEntry->comment());
10381001
memoryCue.color = colorFromID(static_cast<int>(
1039-
(*cueExtendedEntry)->color_id()));
1002+
cueExtendedEntry->color_id()));
10401003
memoryCuesAndLoops << memoryCue;
10411004
} break;
10421005
case rekordbox_anlz_t::CUE_ENTRY_TYPE_LOOP: {
10431006
int endTime =
10441007
static_cast<int>(
1045-
(*cueExtendedEntry)->loop_time()) -
1008+
cueExtendedEntry->loop_time()) -
10461009
timingOffset;
10471010
// Ensure no offset times are less than 1
10481011
if (endTime < 1) {
@@ -1053,28 +1016,28 @@ void readAnalyze(TrackPointer track,
10531016
loop.startPosition = position;
10541017
loop.endPosition = mixxx::audio::FramePos(
10551018
sampleRateKhz * static_cast<double>(endTime));
1056-
loop.comment = toUnicode((*cueExtendedEntry)->comment());
1057-
loop.color = colorFromID(static_cast<int>((*cueExtendedEntry)->color_id()));
1019+
loop.comment = toUnicode(cueExtendedEntry->comment());
1020+
loop.color = colorFromID(static_cast<int>(cueExtendedEntry->color_id()));
10581021
memoryCuesAndLoops << loop;
10591022
} break;
10601023
}
10611024
} break;
10621025
case rekordbox_anlz_t::CUE_LIST_TYPE_HOT_CUES: {
1063-
int hotCueIndex = static_cast<int>((*cueExtendedEntry)->hot_cue() - 1);
1026+
int hotCueIndex = static_cast<int>(cueExtendedEntry->hot_cue() - 1);
10641027
if (hotCueIndex > lastHotCueIndex) {
10651028
lastHotCueIndex = hotCueIndex;
10661029
}
10671030
setHotCue(track,
10681031
position,
10691032
mixxx::audio::kInvalidFramePos,
10701033
hotCueIndex,
1071-
toUnicode((*cueExtendedEntry)->comment()),
1034+
toUnicode(cueExtendedEntry->comment()),
10721035
mixxx::RgbColor(qRgb(
10731036
static_cast<int>(
1074-
(*cueExtendedEntry)->color_red()),
1037+
cueExtendedEntry->color_red()),
10751038
static_cast<int>(
1076-
(*cueExtendedEntry)->color_green()),
1077-
static_cast<int>((*cueExtendedEntry)
1039+
cueExtendedEntry->color_green()),
1040+
static_cast<int>(cueExtendedEntry
10781041
->color_blue()))));
10791042
} break;
10801043
}

0 commit comments

Comments
 (0)