2020-02-02 Fred Gleason <fredg@paravelsystems.com>

* Added support for saving Label data from MusicBrainz releases.
This commit is contained in:
Fred Gleason
2020-02-01 19:42:39 -05:00
parent 8dfd341cdf
commit e5b72e0cd4
17 changed files with 156 additions and 28 deletions

View File

@@ -59,7 +59,7 @@ RDDiscLookup::RDDiscLookup(const QString &caption,FILE *profile_msgs,
QSize RDDiscLookup::sizeHint() const
{
return QSize(400,120);
return QSize(400,140);
}
@@ -164,7 +164,7 @@ void RDDiscLookup::resizeEvent(QResizeEvent *e)
lookup_titles_label->setGeometry(15,2,w-30,20);
lookup_titles_box->setGeometry(10,24,w-20,20);
lookup_titles_box->setGeometry(10,24,w-20,40);
lookup_ok_button->setGeometry(w-180,h-60,80,50);
lookup_cancel_button->setGeometry(w-90,h-60,80,50);
@@ -289,3 +289,65 @@ QString RDDiscLookup::normalizedIsrc(const QString &isrc,bool *ok)
}
return QString();
}
bool RDDiscLookup::upcAIsValid(const QString &barcode)
{
//
// For formatting rules for UPC-A barcodes, see
// https://en.wikipedia.org/wiki/Universal_Product_Code
//
QString str=barcode;
str.replace("-","");
str.replace(" ","");
if(str.length()!=12) {
return false;
}
for(int i=0;i<12;i++) {
if(str.at(i).category()!=QChar::Number_DecimalDigit) {
return false;
}
}
return true;
}
QString RDDiscLookup::formattedUpcA(const QString &barcode,bool *ok)
{
if(RDDiscLookup::upcAIsValid(barcode)) {
if(ok!=NULL) {
*ok=true;
}
QString str=barcode;
str.insert(1," ");
str.insert(6,"-");
str.insert(12,"-");
str.insert(14," ");
return str;
}
if(ok!=NULL) {
*ok=false;
}
return QString();
}
QString RDDiscLookup::normalizedUpcA(const QString &barcode,bool *ok)
{
if(RDDiscLookup::upcAIsValid(barcode)) {
if(ok!=NULL) {
*ok=true;
}
QString str=barcode;
str.replace("-","");
str.replace(" ","");
return str;
}
if(ok!=NULL) {
*ok=false;
}
return QString();
}

View File

@@ -49,6 +49,9 @@ class RDDiscLookup : public RDDialog
static bool isrcIsValid(const QString &isrc);
static QString formattedIsrc(const QString &isrc,bool *ok=NULL);
static QString normalizedIsrc(const QString &isrc,bool *ok=NULL);
static bool upcAIsValid(const QString &barcode);
static QString formattedUpcA(const QString &barcode,bool *ok=NULL);
static QString normalizedUpcA(const QString &barcode,bool *ok=NULL);
signals:
void lookupDone(RDDiscLookup::Result,const QString &err_msg);

View File

@@ -95,9 +95,23 @@ void RDMbLookup::lookupRecord()
titlesBox()->clear();
for(int i=0;i<releases->NumItems();i++) {
MusicBrainz5::CRelease *release=releases->Item(i);
QString barcode=RDDiscLookup::
formattedUpcA(QString::fromUtf8(release->Barcode().c_str()));
MusicBrainz5::CMediumList *media=release->MediumList();
QString format="";
for(int j=0;j<media->NumItems();j++) {
format=QString::fromUtf8(media->Item(j)->Format().c_str())+" | ";
}
format=format.left(format.length()-3);
QString title=QString::fromUtf8(release->Title().c_str())+"\n";
if(!format.isEmpty()) {
title+=" ["+format+"]";
}
if(!barcode.isEmpty()) {
title+=" [UPC "+barcode+"]";
}
titlesKey()->push_back(QString::fromUtf8(release->Title().c_str()));
titlesBox()->insertItem(titlesBox()->count(),
QString::fromUtf8(release->Title().c_str()));
titlesBox()->insertItem(titlesBox()->count(),title);
}
if((index=exec())>=0) {
result_code=ProcessRelease(releases->Item(index));